******** * Program ONE_SEC (6811) * * Turns lsb of Port B on and off every second. * * Timing of is implemented using OC2 interrupt timing. * * P. H. Anderson, 27 Nov 90; 19 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 SEI LDS #STACKTP LDY #REG_BASE LDAA #250 * set time constant STAA TIME_CONSTANT CLR PORTB,Y * set lsb to zero TOP BSR TIME * one sec delay BSET PORTB,Y %00000001 * set lsb to one BSR TIME BCLR TIME BCLR PORTB,Y %00000001 * set lsb to zero BRA TOP TIME * subroutine provides 1 sec delay BSET TMSK1,Y %01000000 * mask for OC2 BCLR TCTL1,Y %11000000 * no change on PA6 on interrupt LDAA TIME_CONSTANT STAA TEMP T_TOP CLR WAS_OC2 LDD TOC2,Y ADDD #4000*2 * 4000 usecs * 2 STD TOC2,Y L1 CLI WAI TST WAS_OC2 BEQ L1 * interrupt wasn't OC2 DEC TEMP BNE T_TOP BCLR TMSK1,Y %01000000 * clear mask RTS OC2_INTSERV BCLR TFLG1,Y %10111111 * reset the OC2 int flag LDAA #$01 * set the flag to non zero STAA WAS_OC2 RTI ORG OC2_VECTOR JMP OC2_INTSERV ORG DSCT TIME_CONSTANT RMB 1 TEMP RMB 1 WAS_OC2 RMB 1