#include "c:\miniide\hcs12.inc" hi_freq equ 1250 ; delay count for 1200 Hz (with 1:8 prescaler) lo_freq equ 7500 ; delay count for 300 Hz (with 1:8 prescaler) toggle equ $04 ; value to toggle the TC5 pin org $1000 delay ds.w 1 ; store the delay for output compare operation org $2000 lds #$2000 movb #$90,tscr1 ; enable TCNT, fast timer flag clear movb #$03,tscr2 ; set main timer prescaler to 8 bset tios,$20 ; enable OC5 movb #toggle,tctl1 ; select toggle for OC5 pin action ldd #lo_freq std delay ; use low frequency delay count first ldd tcnt ; start the low frequency sound addd delay ; " std tc5 ; " bset tie,BIT5 ; enable OC5 interrupt cli ; " forever ldy #50 ; wait for half a second jsr delayby10ms ; " movw #hi_freq,delay ; switch to high frequency delay count ldy #50 jsr delayby10ms movw #lo_freq,delay ; switch to low frequency delay count bra forever oc5_isr ldd tc5 addd delay std tc5 rti ; ************************************************************************************ ; The following subroutine creates a time delay which is equal to [Y] times ; 10 ms. The timer prescaler is 1:8. ; ************************************************************************************ delayby10ms bset tios,$01 ; enable OC0 ldd tcnt again1 addd #30000 ; start an output compare operation std tc0 ; with 10 ms time delay wait_lp1 brclr tflg1,$01,wait_lp1 ldd tc0 dbne y,again1 bclr tios,$01 ; disable OC0 rts org UserTimerCh5 ; establish OC5’s SRAM vector address fdb oc5_isr ; “ end