Specifications
mikroElektronika | Free Online Book | PIC Microcontrollers | Appendix B: Examples
clrf ANSELH
banksel TRISD
movlw b'11111011' ; PORTA D initialization
movwf TRISD
banksel PORTD
BEEPinit ; Macro "Beep"
Loop
button PORTD,0,0,Play1 ; Push-button 1
button PORTD,1,0,Play2 ; Push-button 2
goto Loop
Play1 ; First tone
BEEP 0xFF, 0x02
BEEP 0x90, 0x05
BEEP 0xC0, 0x03
BEEP 0xFF, 0x03
goto Loop
Play2 ; Second tone
BEEP 0xBB, 0x02
BEEP 0x87, 0x05
BEEP 0xA2, 0x03
BEEP 0x98, 0x03
goto Loop
;**********************************************************************
END ; End of program
Macro "beep":
BEEPinit MACRO
bcf STATUS, RP0
bcf STATUS, RP1
bcf BEEPport
bsf STATUS, RP0
bcf STATUS, RP1
bcf BEEPtris
movlw b'00000111' ; TMR0 prescaler rate 1:256
movwf OPTION_REG ; OPTION <- W
bcf STATUS, RP0
bcf STATUS, RP1
ENDM
BEEP MACRO freq, duration
bcf STATUS, RP0
bcf STATUS, RP1
movlw freq
movwf Beep_TEMP1
movlw duration
movwf Beep_TEMP2
call BEEPsub
ENDM
;**********************************************************************
; Subroutines
BEEPsub
clrf TMR0 ; Counter initialization
bcf INTCON, T0IF
bcf BEEPport
BEEPa
bcf INTCON, T0IF ; Clears TMR0 Overflow Flag
BEEPb
bsf BEEPport
call B_Wait ; Logic one "1" duration
bcf BEEPport
call B_Wait ; Logic zero "0" duration
btfss INTCON, T0IF ; Check TMR0 Overflow Flag,
goto BEEPb ; skip next if set
decfsz Beep_TEMP2, f ; Is Beep_TEMP2 = 0 ?
goto BEEPa ; Go to BEEPa again
return
http://www.mikroe.com/en/books/picmcubook/appb/ (46 of 54)5/3/2009 11:36:02 AM