新闻  |   论坛  |   博客  |   在线研讨会
ST套件产生救护音
0750long | 2009-04-24 12:44:09    阅读:1254   发布文章

ST套件产生救护音

 

 
 
;烧写时应注意:配置位已经在程序中写明,加载HEX文件时会自动加载,烧写时不用再手动设置配置位。
;实验时请注意套件跳线选择;(   www.rjgc.net   )
;***********************************************
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
;------------------------------

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客