找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1068|回复: 0
打印 上一主题 下一主题
收起左侧

海神+Keil的经典趣味案例

[复制链接]
跳转到指定楼层
楼主
ID:283392 发表于 2018-4-13 12:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1 闪烁灯
1.        实验任务
如图 4.1.1 所示:在 P1.0 端口上接一个发光二极管 L1,使 L1 在不停地一亮一灭,一亮一灭的时间间隔为 0.2 秒。
2.        电路原理图
file:///C:\Users\john\AppData\Local\Temp\ksohtml\wps40A9.tmp.png
4.1.1
3.        系统板上硬件连线
“单片机系统”区域中的 P1.0 端口用导线连接到“八路发光二极管指示模块”区域中的 L1 端口上。
4.        程序设计内容
1). 延时程序的设计方法
作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁时间间隔为 0.2 秒,相对于微秒来说,相差太大,所以我们在


执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢?下面具体介绍其原理:
如图 4.1.1 所示的石英晶体为 12MHz,因此,1 个机器周期为 1 微秒
机器周期 微秒
MOV R6,#20 2
个机器周期
2
D1: MOV R7,#248 2 个机器周期
2
2+2×248=498  20×
DJNZ R7,$ 2 个机器周期
2×248
498
DJNZ R6,D1
2 个机器周期
2×20=40
10002
因此,上面的延时程序时间为 10.002ms。
由以上可知,当 R6=10、R7=248 时,延时 5ms,R6=20、R7=248 时 ,延时 10ms,以此为基本的计时单位。如本实验要求 0.2 秒=200ms,10ms×R5=200ms,则 R5=20,延时子程序如下:
DELAY: MOV R5,#20
D1: MOV R6,#20
D2: MOV R7,#248
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
RET
2). 输出控制
如图 1 所示,当 P1.0 端口输出高电平,即 P1.0=1 时,根据发光二极管的单向导电性可知,这时发光二极管 L1 熄灭;当 P1.0 端口输出低电平,即 P1.0=0 时,发光二极管 L1 亮;我们可以使用 SETB P1.0 指令使 P1.0 端口输出高电平,使用 CLR P1.0 指令使 P1.0 端口输出低电平。
5. 程序框图
如图 4.1.2 所示


file:///C:\Users\john\AppData\Local\Temp\ksohtml\wps40C9.tmp.png
4.1.2
6. 汇编源程序
ORG 0
START: CLR P1.0
LCALL DELAY SETB P1.0
LCALL DELAY
LJMP START
DELAY: MOV R5,#20 ;延时子程序,延时 0.2 秒
D1: MOV R6,#20
D2: MOV R7,#248 DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
RET
END
7. C 语言源程序
#include <AT89X51.H> sbit L1=P1^0;
void delay02s(void) //延时 0.2 秒子程序
{
unsigned char i,j,k; for(i=20;i>0;i--) for(j=20;j>0;j--) for(k=248;k>0;k--);
}


void main(void)
{
while(1)
{
L1=0;
delay02s();
L1=1;
delay02s();
}
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表