******** * Program FULLWAVE (6811) * * Synthesizes a full wave sinusoid at output of D/A connected * to output port PORTB using 16 digital samples stored in memory. * * Timing of is implemented using OC2 interrupt timing. * * P. H. Anderson, 15 Nov 90; Verified 16 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 SEI LDS #STACKTP LDY #REG_BASE LDAA #$04 * set time constant STAA TIME_CONSTANT LDX #FULL_WAVE OUT LDAA 00,X * get the sample STAA PORTB,Y * out to D/A BSR TIME * 256 usec delay INX CPX #FULL_WAVE+$10 * past last sample? BNE OUT LDX #FULL_WAVE * otherwise set back to initial BRA OUT TIME * subroutine provides 256 usec delay BSET TMSK1,Y %01000000 * mask for OC2 BCLR TCTL1,Y %11000000 * no change on PA6 on interrupt LDAA TIME_CONSTANT STAA TEMP TOP LDD TOC2,Y ADDD #128 * 64 usecs * 2 STD TOC2,Y CLI WAI DEC TEMP BNE TOP BCLR TMSK1,Y %01000000 * clear mask RTS OC2_INTSERV BSET TFLG1,Y %01000000 * reset the OC2 int flag RTI ORG OC2_VECTOR JMP OC2_INTSERV ORG DSCT TIME_CONSTANT RMB 1 TEMP RMB 1 ORG IDSCT FULL_WAVE FCB $19, $4A, $79, $A2 FCB $C6, $E2, $F5, $FF FCB $FF, $F5, $E2, $C6 FCB $A2, $79, $4A, $19