您当前的位置:五五电子网电子知识单片机-工控设备PIC单片机PIC单片机音乐播放程序 正文
PIC单片机音乐播放程序

PIC单片机音乐播放程序

点击数:7754 次   录入时间:03-04 11:37:22   整理:http://www.55dianzi.com   PIC单片机
以下程序要用二个定时器资源,凡是有二个定时器的PIC 单片机 均可实现,该范例需要的MCU是MICROChip PIC16C62 
INCLUDE "D:\PIC\P16XX.EQU" ;该文件在MICROCHIP光盘中可找到 
;************************************************** 
#define BeepOut RC,4 
;************************************************** 
W_TEMP EQU 0X20 ;(0XA0) 
STATUS_TEMP EQU 0X21 
BeepCnt equ 30h 
TmrBak equ 31h 
BeepMode equ 32h 
Sflag equ 33h 
;************************************************** 
CSTIME100MS equ .8; 
;************************************************** 
;Sflag 
Fg_100ms equ 0 
FgBeep equ 1 
;************************************************** 
ORG 000H; 
GOTO MAIN ; Skip over interrupt vecter 
ORG 04H ; Interrupt Vector 
GOTO INTZ 

;************************************************** 
OkTab: 
MOV f BeepCnt,w 
addwf PCL,f 
retlw .255-.130;0xf6 ;1 ; 
retlw .255-.126;0xfa ;2 ; 
retlw .255-.119; 0xfd ;3 ; 
retlw 0 
;************************************************** 
WhisleTab: 
MOV f BeepCnt,w 
addwf PCL,f 
retlw .255-.239;523Hz ;0 ; 
retlw .255-.179;698Hz ;1 ; 
retlw .255-.159;784Hz ;2 ; 
retlw .255-.119;1046Hz ;3 ; 
retlw .0 
;************************************************** 
HangTab: 
MOV f BeepCnt,w 
addwf PCL,f 
retlw .255-.159; 784Hz ;0 ; 
retlw .255-.119; 1046Hz ;1 ; 
retlw .255-.150; 830Hz ;2 ; 
retlw .255-.112 ;1109Hz ;3 ; 
retlw .255-.142 ;880Hz ;4 ; 
retlw .255-.106;1174Hz ;5 ; 
retlw .255-.134;932Hz ;6 ; 
retlw .255-.100;1244Hz ;7 
retlw .255-.126;988Hz ;8; 
retlw .255-.94;1318Hz ;9; 
retlw .255-.119;1046Hz ;10 ; 
retlw .255-.89;1397Hz ;11 ; 
retlw .0 

;************************************************** 
WelcomTab: 
MOV f BeepCnt,w 
addwf PCL,f 
retlw .255-.89;1397Hz ;11 ; 
retlw .255-.119;1046Hz ;10 ; 
retlw .255-.94;1318Hz ;9; 
retlw .255-.126;988Hz ;8; 
retlw .255-.100;1244Hz ;7 
retlw .255-.134;932Hz ;6 ; 
retlw .255-.106;1174Hz ;5 ; 
retlw .255-.142 ;880Hz ;4 ; 
retlw .255-.112 ;1109Hz ;3 ; 
retlw .255-.150; 830Hz ;2 ; 
retlw .255-.119; 1046Hz ;1 ; 
retlw .255-.159; 784Hz ;0 ; 
retlw .0 
;************************************************** 
BeepModeJmp: 
addwf PCL,f 
b psWhisle ;0 
b psOk ;1 
b psHang ;2 
b psWelcom ;3 
;************************************************** 
IO_SET: 
BANK1_ 
MOV LW B’11001011’ 
MOV WF TRISA 
MOV LW B’00001100’ 
MOV wf TRISB 
MOV LW B’00000011’ 
MOV wf TRISC ; Set Port_C to all outputs 
BANK0_ 
RETURN 
;************************************************** 
SYS_SET: 
BANK1_ 
MOV LW B’00000111’ ; 1:256 TMR0分频 
MOV WF OPTION_R 
BSF PIE1,TMR2IE ;TMR2中断允许 
BANK0_ 
MOV LW B’00000001’ ;开TMR1 
MOV WF T1CON 
bsf INTCON,TOIE ;TMR0中断允许 
BSF INTCON,PEIE ;允许所有未被屏蔽之外围接口中断 
RETURN 
;************************************************** 
MAIN: ; Main rotation 
CALL IO_SET 
MOV LW B’00000000’ ;关所有中断 
MOV WF INTCON 
;**************************** 
CALL SYS_SET 
;**************************** 
call PlayPsWelcom ;上电提示音 
MAINLOOP: 
bsf INTCON,GIE ;开所有中断 
CLRWDT ; Clear WDT 
call BeepFor 
B MAINLOOP 
;************************************************** 
INTZ: 
PUSH ; Push ;中断服务程序 
BTFSC PIR1,TMR2IF ;测试TMR2中断标志位 
b INT_TMR2 ; 
BTFSC INTCON,TOIF ;测试TMR0中断标志位 
GOTO INT_TMR0 
IntRet: 
POP ; Pop 
RETFIE 
;************************************************** 
INT_TMR2: 
BCF PIR1,TMR2IF ;清TMR2中断标志位 
MOV f TmrBak,w 
MOV wf TMR2 
CPL BeepOut 
BeeperEnd: 
b IntRet 
;************************************************** 
INT_TMR0: ;定时0中断 
BCF INTCON,TOIF ; clear INTF 
MOV LW .255-.38 ;10ms 
MOV WF TMR0 
;==================== 
decfsz T100ms,f 
b int_tmr0_ret 
MOV lw CSTIME100MS 
MOV wf T100ms 
bsf Sflag,Fg_100ms 
;===================== 
int_tmr0_ret: 
b IntRet 
;************************************************** 
PlayPsWhisle: 
bsf Fg,FgBeep 
clrf BeepCnt 
MOV lw .0 
MOV wf BeepMode 
MOV lw CSTIME100MS 
MOV wf T100ms 
retlw 0 
;************************************************** 
PlayPsOk: 
bsf Fg,FgBeep 
clrf BeepCnt 
MOV lw .1 
MOV wf BeepMode 
MOV lw CSTIME100MS 
MOV wf T100ms 
retlw 0 
;************************************************** 
PlayPsHang: 
bsf Fg,FgBeep 
clrf BeepCnt 
MOV lw .2 
MOV wf BeepMode 
MOV lw CSTIME100MS 
MOV wf T100ms 
retlw 0 
;************************************************** 
PlayPsWelcom: 
bsf Fg,FgBeep 
clrf BeepCnt 
MOV lw .3 
MOV wf BeepMode 
MOV lw CSTIME100MS 
MOV wf T100ms 
retlw 0 
;************************************************** 
;音乐播放程序 
;BeepMode=0 : psWhisle 
;BeepMode=1 : psOk 
;BeepMode=2 : psHang 
;BeepMode=3 : psWelcom 
;************************************************** 
BeepFor: 
btfss Sflag,Fg_100ms 
b BeepForEnd 
bcf Sflag,Fg_100ms 
btfss Sflag,FgBeep 

[1] [2]  下一页


本文关键字:单片机  程序  音乐播放  PIC单片机单片机-工控设备 - PIC单片机