; WAVE GENERATOR BY TOSHIE MISU ; Copyright (c) 2011 Toshie Misu ; All rights reserved. list p=16f84a #include p16f84a.inc __config _HS_OSC & _PWRTE_OFF & _WDT_OFF & _CP_OFF ; Constants of "Period/2"s ; Lower Set {C, C#, D, D#, E, F} ;PER0 equ D'137' ; C ;PER1 equ D'129' ; C# ;PER2 equ D'121' ; D ;PER3 equ D'115' ; D# ;PER4 equ D'108' ; E ;PER5 equ D'102' ; F ; Higher Set {F#, G, G#, A, B, H} ;PER0 equ D'97' ; F# ;PER1 equ D'91' ; G ;PER2 equ D'86' ; G# ;PER3 equ D'81' ; A ;PER4 equ D'77' ; B ;PER5 equ D'72' ; H ; Test Set {C, D, E, F, G, A} PER0 equ D'137' ; C PER1 equ D'121' ; D PER2 equ D'108' ; E PER3 equ D'102' ; F PER4 equ D'91' ; G PER5 equ D'81' ; A ; Files CNT0 equ H'0C' CNT1 equ H'0D' CNT2 equ H'0E' CNT3 equ H'0F' CNT4 equ H'10' CNT5 equ H'11' OCT0 equ H'12' OCT1 equ H'13' OCT2 equ H'14' OCT3 equ H'15' OCT4 equ H'16' OCT5 equ H'17' OUT equ H'18' ; Initialization of I/O ports bcf STATUS, RP0 clrf PORTA clrf PORTB bsf STATUS, RP0 clrf TRISA movlw 0xff movwf TRISB bcf STATUS, RP0 ; Initialization of counters clrf OCT0 clrf OCT1 clrf OCT2 clrf OCT3 clrf OCT4 clrf OCT5 movlw D'1' movwf CNT0 movwf CNT1 movwf CNT2 movwf CNT3 movwf CNT4 movwf CNT5 ; Main loop ; Generate "C" Lz0 decfsz CNT0, F goto Dly0 movlw PER0 movwf CNT0 incf OCT0, F goto Lz1 Dly0 nop nop nop nop ; Generate "C#" Lz1 decfsz CNT1, F goto Dly1 movlw PER1 movwf CNT1 incf OCT1, F goto Lz2 Dly1 nop nop nop nop ; Generate "D" Lz2 decfsz CNT2, F goto Dly2 movlw PER2 movwf CNT2 incf OCT2, F goto Lz3 Dly2 nop nop nop nop ; Generate "D#" Lz3 decfsz CNT3, F goto Dly3 movlw PER3 movwf CNT3 incf OCT3, F goto Lz4 Dly3 nop nop nop nop ; Generate "E" Lz4 decfsz CNT4, F goto Dly4 movlw PER4 movwf CNT4 incf OCT4, F goto Lz5 Dly4 nop nop nop nop ; Generate "F" Lz5 decfsz CNT5, F goto Dly5 movlw PER5 movwf CNT5 incf OCT5, F goto Synthesize Dly5 nop nop nop nop ; Synthesize waveform Synthesize clrf OUT ; Add waveform 'C' Out0 btfsc PORTB, 0 goto Skp0 btfsc OCT0, 0 incf OUT, F goto Out1 Skp0 nop nop nop ; Add waveform 'C#' Out1 btfsc PORTB, 1 goto Skp1 btfsc OCT1, 0 incf OUT, F goto Out2 Skp1 nop nop nop ; Add waveform 'D' Out2 btfsc PORTB, 2 goto Skp2 btfsc OCT2, 0 incf OUT, F goto Out3 Skp2 nop nop nop ; Add waveform 'D#' Out3 btfsc PORTB, 3 goto Skp3 btfsc OCT3, 0 incf OUT, F goto Out4 Skp3 nop nop nop ; Add waveform 'E' Out4 btfsc PORTB, 4 goto Skp4 btfsc OCT4, 0 incf OUT, F goto Out5 Skp4 nop nop nop ; Add waveform 'F' Out5 btfsc PORTB, 5 goto Skp5 btfsc OCT5, 0 incf OUT, F goto Output Skp5 nop nop nop Output movf OUT, W andlw H'0F' movwf PORTA goto Lz0 end