购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.1 实例4:用单片机控制一个灯闪烁

本节通过用单片机控制一个灯(发光二极管)闪烁的实例来介绍单片机的工作频率。本例采用的电路原理图如图2-23所示。

3.1.1 实现方法

P1.0输出低电平时,使D1正向偏置,就会点亮发光二极管LED;P1.0输出高电平时,LED熄灭。如果P1.0输出电平在高低电平之间不停转换,则LED灯会产生闪烁。也就是说,先点亮LED灯一段时间之后,再熄灭LED灯,再延时一段时间后点亮LED灯,如此反复(可用循环语句实现)。

3.1.2 程序设计

先建立文件夹“ex4”,然后建立“ex4”工程项目,最后建立源程序文件“ex4.c”。输入以下源程序:

3.1.3 用Proteus软件仿真

为了验证程序的运行效果,经Keil软件编译通过后,可利用Proteus软件进行仿真。这里我们仍使用第2章实例3的仿真原理图来进行仿真。为了验证LED的闪烁频率,在Proteus仿真原理图中单击图3-1所示的虚拟仪表按钮,从弹出的列表框中选OSCILLOSCOPE(示波器),并将输入端A连接在P1.0引脚上以观察其输出电平的变化,结果如图3-2所示。

图3-1 示波器的添加

用鼠标右键单击单片机AT89C51,从弹出的快捷菜单中选择“Edit properties”命令,弹出“EditComponent”对话框,在“Programe File”文本框中载入编译好的“ex4.hex”,并在“Clock Frequency”文本框中输入“24MHz”,单击“OK”按钮。然后单击运行按钮启动仿真,可以看到LED以较快的频率闪烁,同时示波器输出一系列矩形波。为便于观察,在图3-3所示的示波器控制面板上进行参数设置:

电压幅值:2V/格

分辨率:0.1s/格

图3-2 在仿真原理图中添加示波器

图3-3 对示波器参数进行设置

结果如图3-4(a)所示。为了研究单片机工作频率对灯闪烁速度的影响,在仿真原理图中用鼠标右键单击单片机AT89C51,从弹出的快捷菜单中选择“Edit Properties”命令,弹出“Edit Component”对话框,在“Clock Frequency”文本框中将已输入的“24MHz”改为“2MHz”,单击“OK”按钮。然后单击运行按钮再次启动仿真,可以看到LED的闪烁频率明显变慢,同时还可以看到P1.0引脚的输出电平脉宽明显增大,结果如图3-4(b)所示。

图3-4 P1.0引脚的输出电平信号波形

3.1.4 延时程序分析

为什么单片机时钟频率(工作频率)的改变会引起灯闪烁速度的明显变化?弄清楚这个问题非常重要。

单片机需要一个时钟信号送给内部各电路,才能使它们有节拍地工作。时钟信号的频率由外部振荡电路的晶振频率决定。如果外接晶振的频率是12MHz,则外部振荡电路送给单片机时钟信号的频率也是12MHz。此时,我们说单片机的工作频率就是12MHz。以下是与工作频率相关的几个重要概念。

振荡周期:为单片机提供时钟脉冲信号的振荡源的周期。例如,单片机外接晶振频率是12MHz时,则振荡周期就是(1/12MHz)=(1/12)μs。

机器周期:51系列单片机的一个机器周期由12个振荡周期组成。如果一个单片机的工作频率是12MHz,那么它的工作周期就是(1/12)μs,其机器周期就是12×(1/12)μs=1μs;如果单片机的外接晶振频率为11.0592MHz,其机器周期就是12×(1/11.0592)μs=1.085μs。

指令周期:单片机执行一条指令所用的时间。一般来说,单片机执行1个简单指令需要一个机器周期,执行复杂指令需要两个机器周期。因为一个机器周期非常短,一般只有1~2μs,所以单片机工作速度非常快。

本例灯的闪烁时间是通过延时程序来实现的,即让单片机等待(空操作)若干个机器周期。通过以下比较可以看出时钟频率对灯的闪烁速度的影响:

当时钟频率为24MHz时,一个机器周期为12×(1/24)μs=0.5μs

当时钟频率为2MHz时,一个机器周期为12×(1/2)μs=6μs

显然时钟频率越低,延时的时间就越长,灯的闪烁速度就越慢。 Cub5D+inyYjdICY/AmFgMlL3Fjvs20hN5zNOQdLD1YdqmXIKEoSFWi++HbXPA+xO

点击中间区域
呼出菜单
上一章
目录
下一章
×