; --- Piano2.asm ---- ; When you press button RB0..RB3, you play a note ; on RC0: ; RB0: 291 Hz (C4) ; RB1: 293 Hz (D4) ; RB2: 329 Hz (E4) ; RB3: 349 Hz (F4) #include ; Variables CNT0 EQU 1 CNT1 EQU 2 ; Program org 0x800 call Init Loop: movlw 0 cpfseq PORTB ; if any button is pressed btg PORTC,0 btfsc PORTB,0 call C4 btfsc PORTB,1 call D4 btfsc PORTB,2 call E4 btfsc PORTB,3 call F4 goto Loop ; --- Subroutines --- Init: clrf TRISA ;PORTA is output movlw 0xFF movwf TRISB ;PORTB is input clrf TRISC ;PORTC is output clrf TRISD ;PORTD is output clrf TRISE ;PORTE is output movlw 15 movwf ADCON1 ;everyone is binary return C4: ; 261Hz = 19,157 clocks movlw 19 movwf CNT1 C4a: movlw 100 movwf CNT0 C4b: nop nop nop nop nop nop nop decfsz CNT0, F goto C4b decfsz CNT1, F goto C4a return D4: ; 293.66Hz = 17,026 clocks movlw 17 movwf CNT1 D4a: movlw 100 movwf CNT0 D4b: nop nop nop nop nop nop nop decfsz CNT0, F goto D4b decfsz CNT1, F goto D4a return E4: ; 329.63Hz = 15,167 clocks movlw 15 movwf CNT1 E4a: movlw 100 movwf CNT0 E4b: nop nop nop nop nop nop nop decfsz CNT0, F goto E4b decfsz CNT1, F goto E4a return F4: ; 349.23Hz = 14,317 clocks movlw 14 movwf CNT1 F4a: movlw 100 movwf CNT0 F4b: nop nop nop nop nop nop nop decfsz CNT0, F goto F4b decfsz CNT1, F goto F4a return end