************* * Program INT_TIME * * * Program alternately winks $F0 and $0F every 50 msecs. Uses Interrupts. * * P. H. Anderson, MSU, 15 Nov 90; 15 Jan 93 ************** PSCT EQU $C000 DSCT EQU $D000 IDSCT EQU $D300 STACKTP EQU $0045 OC2_VECTOR EQU $00DC REG_BASE EQU $1000 PORTB EQU $04 TCNT EQU $0E TOC2 EQU $18 TMSK1 EQU $22 TFLG1 EQU $23 TCTL1 EQU $20 ORG PSCT OPT c * turn on cycle counter SEI LDS #STACKTP LDY #REG_BASE LDD #500 * 500 * 100 usecs = 50 msecs STD TIME_CONSTANT TOP LDAA #$F0 STAA PORTB,Y BSR TIME LDAA #$0F STAA PORTB,Y BSR TIME BRA TOP TIME * subroutine provides TIME_CONSTANT * 100 usec delay PSHX LDD TCNT,Y ADDD #500*2 STD TOC2,Y BSET TMSK1,Y %01000000 * mask for OC2 BCLR TCTL1,Y %11000000 * no change on PA6 on interrupt LDX TIME_CONSTANT STX TEMP L1 LDX TEMP DEX BEQ DONE STX TEMP CLI WAI LDD TOC2,Y ADDD #100*2 * 100 usecs * 2 STD TOC2,Y BRA L1 DONE BCLR TMSK1,Y %01000000 * clear mask PULX RTS OC2_INTSERV BCLR TFLG1,Y %10111111 * reset the OC2 int flag RTI ORG OC2_VECTOR JMP OC2_INTSERV ORG DSCT TIME_CONSTANT RMB 2 TEMP RMB 2