×
单片机 > 单片机程序设计 > 详情

PIC警笛声音的程序

发布时间:2020-08-31 发布时间:
|

简介:在这里给大家提供一个PIC警笛声音的程序。

;*****************************************************


LIST P=16F84A,R=DEC ;定义器件,默认为十进制


;-----------------------------------------------------


__CONFIG B\'11111111110001\';_CP_OFF&_WDT_OFF&_PWRITE_ON&_XT_OSC


;没有代码保护


;看门狗关闭


;上电廷时器开启


;振荡器模式为XT


;-----------------------------------------------------


RTCC EQU 01H ;定义各寄存器


PC EQU 02H


STATUS EQU 03H


C EQU 0


RP0 EQU 5


;----------------------


PORTA EQU 05H


TRISA EQU 05H


;-----------------------


SOUNDDELAY1 EQU 10H ;声音频率变化计数器,从1.8~3.55KHZ


FRE_COUNT EQU 11H ;同一频率的重复次数保存地址


FRE_REPEAT EQU 12H


SOUND_TEMP EQU 13H


TEMP EQU 14H ;暂存寄存器


S_LOOP EQU 46 ;93-47=46


S_MAX EQU 93 ;最低频率1.8K 93*3=280US*2


S_MIN EQU 47 ;最高频率3.55K 47*3=140*2


S_REPEAT EQU 4 ;同一频率重复次数


;--------------------


ORG 0000H


MAIN


CLRF PORTA ;初始化IO口


BSF STATUS,RP0 ;设置数据寄存器体1


MOVLW 0000000B


MOVWF TRISA ;设置RA端口全部为输出


BCF STATUS,RP0 ;恢复数据寄存器体0


LOOP


CALL SOUND200MS ;调用报警200MS子程序


GOTO LOOP ;反复循环报警


;-------------------------------


SOUND200MS


MOVLW S_LOOP


MOVWF FRE_COUNT ;46=93-47 最低频率的计数减去最高频率的计数等于频率变化的次数


SOUND_LH_LP


MOVLW S_REPEAT ;同一频率重复次数送FRE_REPEAT


MOVWF FRE_REPEAT


MOVFW FRE_COUNT


ADDLW S_MIN ;计数值加最小值


MOVWF TEMP


REPEAT0_LP


MOVFW TEMP


BSF PORTA,0


CALL SOUNDDELAY0 ;廷时W*3US


BCF PORTA,0


MOVFW TEMP


CALL SOUNDDELAY0


DECFSZ FRE_REPEAT,1 ;每四次减频率计数一次


GOTO REPEAT0_LP


DECFSZ FRE_COUNT,1


GOTO SOUND_LH_LP


SOUND_HL


MOVLW S_LOOP


MOVWF FRE_COUNT ;46=93-47


SOUND_HL_LP


MOVLW S_REPEAT ;同一频率重复次数送FRE_REPEAT


MOVWF FRE_REPEAT


MOVFW FRE_COUNT


SUBLW S_MAX ;最大值减计数值


MOVWF TEMP


REPEAT1_LP


MOVFW TEMP


BSF PORTA,0


CALL SOUNDDELAY0 ;廷时W*3US


BCF PORTA,0


MOVFW TEMP


CALL SOUNDDELAY0


DECFSZ FRE_REPEAT,1;四次减频率计数一次


GOTO REPEAT1_LP


DECFSZ FRE_COUNT,1


GOTO SOUND_HL_LP


SOUND_END


RETLW 0


;------------------------------


SOUNDDELAY0


MOVWF SOUNDDELAY1 ;廷时W*3US+1US


SOUNDDELAYUS_1


DECFSZ SOUNDDELAY1,1


GOTO SOUNDDELAYUS_1


RETLW 0


;------------------------


END


-----------------------------------------------------------------------------


;ST套件产生450hz低音


;本实例的目的是让大家学会用单片机产生声音的方法,学会计算程序所用时间


;本实例的功能是能PIC16F84产生低音,


;450HZ,相当于450HZ的方波信号发生器。


;程序复位后,蜂鸣器开始发音


;烧写时应注意:配置位已经在程序中写明,加载HEX文件时会自动加载,烧写时不用再手动设置配置位。


;实验时请注意套件跳线选择;


;*****************************************************


LIST P=16F84A,R=DEC ;定义器件,默认为十进制


;-----------------------------------------------------


__CONFIG B\'11111111110001\';_CP_OFF&_WDT_OFF&_PWRITE_ON&_XT_OSC


;没有代码保护


;看门狗关闭


;上电廷时器开启


;振荡器模式为XT


;-----------------------------------------------------


RTCC EQU 01H ;定义各寄存器


PC EQU 02H


STATUS EQU 03H


C EQU 0


RP0 EQU 5


;----------------------


PORTA EQU 05H


TRISA EQU 05H


;-----------------------


SOUNDDELAY1 EQU 10H ;声音频率变化计数器,从1.1K~0.5KHZ


;--------------------


ORG 0000H


MAIN


CLRF PORTA ;初始化IO口


BSF STATUS,RP0 ;设置数据寄存器体1


MOVLW 0000000B


MOVWF TRISA ;设置RA端口全部为输出


BCF STATUS,RP0 ;恢复数据寄存器体0


SOUND


MOVLW 222 ;450HZ反复循环


BSF PORTA,0


CALL SOUNDDELAY0 ;廷时W*5US


BCF PORTA,0


MOVLW 222


CALL SOUNDDELAY0


GOTO SOUND


;------------------------------


SOUNDDELAY0


MOVWF SOUNDDELAY1 ;廷时W*5US+1US


SOUNDDELAYUS_1


NOP


NOP


DECFSZ SOUNDDELAY1,1


GOTO SOUNDDELAYUS_1


RETLW 0


;------------------------


END


-----------------------------------------------------------------------------


;ST套件产生救护音


;本实例的目的是让大家学会用单片机产生声音的方法,学会计算程序所用时间


;本实例的功能是能PIC16F84产生救护音,频率分两个1S第一个


;1S频率是440HZ,第二个1S频率是180HZ,反复循环


;程序复位后,蜂鸣器开始报警


;烧写时应注意:配置位已经在程序中写明,加载HEX文件时会自动加载,烧写时不用再手动设置配置位。


;实验时请注意套件跳线选择;


;*****************************************************


LIST P=16F84A,R=DEC ;定义器件,默认为十进制


;-----------------------------------------------------


__CONFIG B\'11111111110001\';_CP_OFF&_WDT_OFF&_PWRITE_ON&_XT_OSC


;没有代码保护


;看门狗关闭


;上电廷时器开启


;振荡器模式为XT


;-----------------------------------------------------


RTCC EQU 01H ;定义各寄存器


PC EQU 02H


STATUS EQU 03H


C EQU 0


RP0 EQU 5


;----------------------


PORTA EQU 05H


TRISA EQU 05H


;-----------------------


SOUNDDELAY1 EQU 10H ;声音频率高低电平廷时计数器


FRE_REPEATH EQU 11H ;同一频率的重复次数外部循环


FRE_REPEATL EQU 12H ;同一频率的重复次数内部循环


TEMP EQU 14H ;暂存寄存器


;--------------------


ORG 0000H


MAIN


CLRF PORTA ;初始化IO口


BSF STATUS,RP0 ;设置数据寄存器体1


MOVLW 0000000B


MOVWF TRISA ;设置RA端口全部为输出


BCF STATUS,RP0 ;恢复数据寄存器体0


LOOP


CALL SOUND2S ;调用报警200MS子程序


GOTO LOOP ;反复循环报警


;-------------------------------


SOUND2S ;先440HZ 1S


MOVLW 189


MOVWF TEMP ;440HZ频率高低电平廷时值送TEMP 1S/[(189*6)US*2]=440HZ


MOVLW 2 ;同一频率重复次数外部循环送初值


MOVWF FRE_REPEATH


SOUND2S_1


MOVLW 220


MOVFW FRE_REPEATL ;同一频率重复次数内部循环送初值220*2=440次,440HZ频率重复440次即1S


REPEAT0_LP


MOVFW TEMP


BSF PORTA,0


CALL SOUNDDELAY0 ;廷时W*6US 440hz正半周


BCF PORTA,0


MOVFW TEMP


CALL SOUNDDELAY0 ;廷时W*6US 440hz负半周


DECFSZ FRE_REPEATL,1


GOTO REPEAT0_LP


DECFSZ FRE_REPEATH,1 ;同一频率持续1S


GOTO SOUND2S_1


SOUND2S_B ;再180HZ 1S


MOVLW 231


MOVWF TEMP ;180HZ频率高低电平廷时值送TEMP 1S/[(231*2*6)US*2]=180HZ


MOVLW 180


MOVFW FRE_REPEATL ;同一频率重复次数送初值180HZ频率重复180次即1S


REPEAT0_LP_B


MOVFW TEMP


BSF PORTA,0


CALL SOUNDDELAY0 ;廷时W*6US*2 180HZ正半周


MOVFW TEMP


CALL SOUNDDELAY0


BCF PORTA,0


MOVFW TEMP


CALL SOUNDDELAY0 ;廷时W*6US*2 180HZ负半周


MOVFW TEMP


CALL SOUNDDELAY0


DECFSZ FRE_REPEATL,1 ;同一频率持续1S


GOTO REPEAT0_LP_B


SOUND_END


RETLW 0


;------------------------------


SOUNDDELAY0


MOVWF SOUNDDELAY1 ;廷时W*6US+1US


SOUNDDELAYUS_1


nop


nop


nop


DECFSZ SOUNDDELAY1,1


GOTO SOUNDDELAYUS_1


RETLW 0


;------------------------


END


-----------------------------------------------------------------------------


;ST套件产生开道音


;本实例的目的是让大家学会用单片机产生声音的方法,学会计算程序所用时间


;本实例的功能是能PIC16F84产生开道音,每一个3S内频率


;从1.1K-0.5K匀速减少,反复循环。


;程序复位后,蜂鸣器开始报警


;烧写时应注意:配置位已经在程序中写明,加载HEX文件时会自动加载,烧写时不用再手动设置配置位。


;实验时请注意套件跳线选择;


;*****************************************************


LIST P=16F84A,R=DEC ;定义器件,默认为十进制


;-----------------------------------------------------


__CONFIG B\'11111111110001\';_CP_OFF&_WDT_OFF&_PWRITE_ON&_XT_OSC


;没有代码保护


;看门狗关闭


;上电廷时器开启


;振荡器模式为XT


;-----------------------------------------------------


RTCC EQU 01H ;定义各寄存器


PC EQU 02H


STATUS EQU 03H


C EQU 0


RP0 EQU 5


;----------------------


PORTA EQU 05H


TRISA EQU 05H


;-----------------------


SOUNDDELAY1 EQU 10H ;声音频率变化计数器,从1.1K~0.5KHZ


FRE_COUNT EQU 11H ;同一频率的重复次数保存地址


FRE_REPEAT EQU 12H


SOUND_TEMP EQU 13H


TEMP EQU 14H ;暂存寄存器


S_LOOP EQU 136 ;250-114=136


S_MAX EQU 250 ;最低频率0.5K 250*4=1000 *2


S_MIN EQU 114 ;最高频率1.1K 114*4=456 *2


S_REPEAT EQU 17 ;同一频率重复次数


;--------------------


ORG 0000H


MAIN


CLRF PORTA ;初始化IO口


BSF STATUS,RP0 ;设置数据寄存器体1


MOVLW 0000000B


MOVWF TRISA ;设置RA端口全部为输出


BCF STATUS,RP0 ;恢复数据寄存器体0


LOOP


CALL SOUND3S ;调用报警3S子程序


GOTO LOOP ;反复循环报警


;-------------------------------


SOUND3S


MOVLW S_LOOP


MOVWF FRE_COUNT ;136=250-114


SOUND_HL_LP


MOVLW S_REPEAT ;同一频率重复次数送FRE_REPEAT


MOVWF FRE_REPEAT


MOVFW FRE_COUNT


SUBLW S_MAX ;最大值减计数值


MOVWF TEMP


REPEAT1_LP


MOVFW TEMP


BSF PORTA,0


CALL SOUNDDELAY0 ;廷时W*4US


BCF PORTA,0


MOVFW TEMP


CALL SOUNDDELAY0


DECFSZ FRE_REPEAT,1;17次减频率计数一次


GOTO REPEAT1_LP


DECFSZ FRE_COUNT,1


GOTO SOUND_HL_LP


SOUND_END


RETLW 0


;------------------------------


SOUNDDELAY0


MOVWF SOUNDDELAY1 ;廷时W*4US+1US


SOUNDDELAYUS_1


NOP


DECFSZ SOUNDDELAY1,1


GOTO SOUNDDELAYUS_1


RETLW 0


;------------------------


END


-----------------------------------------------------------------------------


;ST套件产生汽笛音800HZ


;本实例的目的是让大家学会用单片机产生声音的方法,学会计算程序所用时间


;本实例的功能是能PIC16F84产生汽笛音800HZ


;相当于800HZ的方波信号发生器。


;程序复位后,蜂鸣器开始发音


;烧写时应注意:配置位已经在程序中写明,加载HEX文件时会自动加载,烧写时不用再手动设置配置位。


;实验时请注意套件跳线选择;


;*****************************************************


LIST P=16F84A,R=DEC ;定义器件,默认为十进制


;-----------------------------------------------------


__CONFIG B\'11111111110001\';_CP_OFF&_WDT_OFF&_PWRITE_ON&_XT_OSC


;没有代码保护


;看门狗关闭


;上电廷时器开启


;振荡器模式为XT


;-----------------------------------------------------


RTCC EQU 01H ;定义各寄存器


PC EQU 02H


STATUS EQU 03H


C EQU 0


RP0 EQU 5


;----------------------


PORTA EQU 05H


TRISA EQU 05H


;-----------------------


SOUNDDELAY1 EQU 10H ;声音频率变化计数器,从1.1K~0.5KHZ


;--------------------


ORG 0000H


MAIN


CLRF PORTA


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
TQ210天嵌开发板S5PV210 LED闪烁程序C语言代码记录