⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 buz.asm

📁 熟悉用单片机产生声音的方法 硬件要求:拨码开关S10的第3位置ON
💻 ASM
字号:
;实验目的:熟悉用单片机产生声音的方法
;硬件要求:拨码开关S10的第3位置ON,其他位置OFF
 LIST P=16F877A,R=DEC        ;定义器件,默认为十进制
#include<p16f877a.inc>
__CONFIG _DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_HS_OSC
;************************定义各寄存器和位***********************

SOUNDDELAY1 EQU 20H    ;声音频率变化计数器,从1.8~3.55KHZ
FRE_COUNT   EQU 21H    ;同一频率的重复次数保存地址
FRE_REPEAT  EQU 22H     
SOUND_TEMP  EQU 23H
TEMP        EQU 24H    ;暂存寄存器
S_LOOP      EQU 46H    ;93-47=46
S_MAX       EQU 93H    ;最低频率1.8K  93*3=280US*2S_
S_MIN       EQU 47H    ;最高频率3.55K  47*3=140*2S_
S_REPEAT    EQU 4H     ;同一频率重复次数

   ORG 0000H              ;复位地址
   nop                 ;ICD所需的空指令
MAIN    
   CLRF PORTC          ;初始化IO口
   BSF STATUS,RP0      ;设置数据寄存器体1
   MOVLW 0000000B
   MOVWF TRISC         ;设置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 PORTC,2       
   CALL SOUNDDELAY0   ;廷时W*3US    
   BCF PORTC,2
   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-47SOUND_HL_LP
   MOVLW S_REPEAT    ;同一频率重复次数送FRE_REPEAT
   MOVWF FRE_REPEAT
   MOVFW FRE_COUNT
   SUBLW S_MAX       ;最大值减计数值
   MOVWF TEMP
REPEAT1_LP
   MOVFW TEMP
   BCF PORTC,2
   CALL SOUNDDELAY0  ;廷时W*3US
   BSF PORTC,2
   MOVFW TEMP
   CALL SOUNDDELAY0
   DECFSZ FRE_REPEAT,1;四次减频率计数一次
   GOTO REPEAT1_LP
   DECFSZ FRE_COUNT,1
   GOTO SOUND_LH_LP
   RETLW 0
;------------------------------
SOUNDDELAY0
   MOVWF SOUNDDELAY1     ;廷时W*3US+1US
SOUNDDELAYUS_1
   DECFSZ SOUNDDELAY1,1
   GOTO SOUNDDELAYUS_1
   RETLW 0
;------------------------
   END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -