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

简介:

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

2.10 变频报警实例

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

2.10.1 程序设计

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

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

2494248ccbf00831e3fed04d61961af1b567d9ee

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所示。

<div style="text-align: center"><img src="https://yqfile.alicdn.com/ce27296492ca7582c2fb62f72ecce46284dc217b.png" width="" height="">
</div>

第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 经验总结
相关文章
|
19天前
|
物联网
MQTT常见问题之用单片机接入阿里MQTT实例失败如何解决
MQTT(Message Queuing Telemetry Transport)是一个轻量级的、基于发布/订阅模式的消息协议,广泛用于物联网(IoT)中设备间的通信。以下是MQTT使用过程中可能遇到的一些常见问题及其答案的汇总: