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

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

2.10 变频报警实例

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

2.10.1 程序设计

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

1.流程图

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


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

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


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

第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 经验总结

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

上一篇:阿里云不同账号内网穿透


下一篇:阿里云域名注册至云服务器租赁/环境搭建流程(最全建站教程)