********** * Program TWO_TONE (6811) * * Generates 1000 Hz square wave on output PA6 (OC2) and 440 Hz on PA5 (OC3). * Illustrates the use of two simultaneous output captures. * * * Peter H. Anderson, MSU, 5 Nov 90; 18 Jan 93 ********** PSCT EQU $C000 DSCT EQU $D000 IDSCT EQU $D300 STACKTP EQU $0045 OC2_VECTOR EQU $00DC OC3_VECTOR EQU $00D9 REG_BASE EQU $1000 * indexed addressing of page $10 TCNT EQU $0E * free running 16-bit counter TOC2 EQU $18 * 16-bit compare pattern TOC3 EQU $1A TMSK1 EQU $22 * int mask, OC2, OC3 corresponds to bit 6 and 5 TFLG1 EQU $23 * logic 1 on bit 6 when OC2, bit 5 when OC3 TCTL1 EQU $20 * config of connection to Port A ORG PSCT SEI LDS #STACKTP LDY #REG_BASE BSET TMSK1,Y %01100000 * set mask for OC_2 and OC_3 BCLR TCTL1,Y %10100000 * on interrupt, toggle PA6 and PA5 BSET TCTL1,Y %01010000 * the following 6 statements are not really required LDD TCNT,Y * get the time counter ADDD #500*2 * 500 usecs STD TOC2,Y * save in TOC LDD TCNT,Y ADDD #1136*2 * 1136 usecs STD TOC3,Y L1 CLI WAI BRA L1 OC2_INTSERV BCLR TFLG1,Y %10111111 * clear the interrupt flag LDD TOC2,Y * get the current TOC2 * there is an advantage to doing this rather than fetching TCNT ADDD #500*2 * add 500 usecs STD TOC2,Y * save in TOC2 RTI OC3_INTSERV BCLR TFLG1,Y %11011111 * clear the interrupt flag LDD TOC3,Y * get the current TOC3 ADDD #1136*2 * add 1136 usecs STD TOC3,Y * save in TOC3 RTI ORG OC2_VECTOR JMP OC2_INTSERV ORG OC3_VECTOR JMP OC3_INTSERV