《51单片机应用开发从入门到精通》——2.10 变频报警实例

    xiaoxiao2024-04-13  119

    本节书摘来自异步社区《51单片机应用开发从入门到精通》一书中的第2章,第2.10节,作者 张华杰,更多章节内容可以访问云栖社区“异步社区”公众号查看。

    2.10 变频报警实例

    本实例是用软件延时方法实现变频振荡报警,即用P3.4端口输出1kHz和2kHz的变频信号以示报警,每隔1s交替变换1次。本节硬件设计与上节相同。

    2.10.1 程序设计

    本程序利用软件延时方法,使P3.4端口输出1kHz和2kHz的变频信号,每隔1s交替变换1次。

    1.流程图

    程序设计流程如图2-16所示。

    2.程序

    汇编语言编写的变频报警源程序FS02.ASM代码如下:

    01: MAIN: MOV R1,#8 ;1kHz持续时间 02: LOOP1: MOV R2,#250 03: LOOP2: CPL P3.4 ;输出1kHz方波 04: ACALL DELAY2 ;调用延时500s子程序 05: DJNZ R2,LOOP2 ;持续1s 06: DJNZ R1,LOOP1 07: MOV R3,#16 ;2kHz持续时间 08: LOOP3: MOV R4,#250 09: LOOP4: CPL P3.4 ;输出2kHz方波 10: ACALL DELAY1 ;调用延时250s子程序 11: DJNZ R4,LOOP4 ;持续1s 12: DJNZ R3,LOOP3 13: JMP MAIN 14: DELAY1: MOV R5,#125 ;延时250s子程序 15: DJNZ R5,$ 16: RET ;子程序返回 17: DELAY2: MOV R6,#250 ;延时500s子程序 18: DJNZ R6,$ 19: RET ;子程序返回 20: END ;程序结束

    2.10.2 代码详解

    1.标号说明

    START:程序开始的进入点。

    LOOP1和LOOP2:输出1kHz方波,持续1s时间是采用双重循环来实现的。LOOP2是内循环的进入点,LOOP1是外循环的进入点。

    LOOP3和LOOP4:输出2kHz方波,持续1s时间也是采用双重循环来实现的。LOOP4是内循环的进入点,LOOP3是外循环的进入点。

    DELAY1:延时250s子程序的进入点。

    DELAY2:延时500s子程序的进入点。

    2.寄存器使用分配情况

    在程序中,P3与R1~R6都是寄存器。P3是特殊寄存器,对外是输出端口;R1~R6是普通寄存器,用作计数器。

    P3.4对内是寄存器P3的一个位,对外是P3端口的第5个引脚。

    R1和R2:输出1kHz方波时,采用双重循环来实现持续1s所使用的两个计数器。

    R3和R4:输出2kHz方波时,采用双重循环来实现持续1s所使用的两个计数器。

    R5:延时250s子程序中所用的计数器。

    R6:延时500s子程序中所用的计数器。

    3.程序分析解释

    本程序使P3.4端口输出1kHz和2kHz的变频信号,每隔1s交替变换1次。

    01~06:完成1kHz的输出,并持续1s。

    07~12:完成2kHz的输出,并持续1s。

    14~16:输出1kHz时的延时子程序;17~19行语句为输出2kHz时的延时子程序。

    第01~06行语句中,03行语句使P3.4端口作反相输出,每次反相输出后,都要调用延时子程序延时500s,该延时的时间决定着P3.4端口输出的频率为1kHz。

    02和05行语句组成内循环,01和06行语句组成外循环。双重循环使输出1kHz方波时间持续为1s,如图2-17所示。

    第07~12行语句的结构与第01~06行语句完全相同,只是调用的延时子程序的延时时间缩短了,输出2kHz方波,并持续1s。

    第14~16行语句与第17~19行语句组成两个延时子程序,延时的时间不一样,但是程序结构一样,都属于单重循环结构的延时程序。

    2.10.3 模拟仿真

    该程序语句行数不多,但循环较多。因此,在模拟仿真时,主要是观察程序的运行路线,弄清每次循环的意图,以便更好地理解程序。

    为了节省时间,在模拟仿真之前,可以先将寄存器R2、R4、R5和R6的数值减小。

    2.10.4 实例测试

    将写入变频报警程序的单片机插入实验板插座内,并检查实验板上的峰鸣器是否接在P3.4端口上,当检查无误后接通电源,会听到变频报警声。

    实例测试时注意听声音的频率变化及频率变化的时间。该程序开始时先发出1kHz的声音,持续1s,接着发出2kHz的声音,也持续1s。不断循环,便产生变频报警声。

    可以改变程序中延时子程序DELAY1或DELAY2的延时时间,观察声音的变化;再改变一下程序中的R1或R3的数值,观察发声长度的变化,从而加深对变频报警声产生原理的理解。

    2.10.5 经验总结

    本节程序利用两个频率声音交替变化,产生报警声,其中延时子程序中的延时时间决定输出声音的频率,双重循环延时的时间决定声音的长短。

    最新回复(0)