那么怎样才能让 LED1不断的闪烁呢 实际上就是让它亮几秒 再灭几秒 也就是让 P1.0交替地输出高
电平和低电平 怎样来实现这个功能 按照前面所学的知识 我们写出下面的程序 CLR P1.0 SETB
P1.0 编译后下载到单片机
结果不行 为什么 这里有两个问题 首先计算机执行指令的速度很快 执行完第 1条指令后 LED1
是灭了 但在极短的时间内又去执行了第 2 条指令 LED1 又亮了 我们根本无法看到灯曾经灭过 第
二个问题是当执行完第 2条指令后 不会再去执行第 1条指令了 因为单片机执行指令的过程是一条一
条地顺序执行的
如何解决这两个问题呢 我们可以作如下的设想 第一 执行完第 1条指令后让单片机延时一段
时间 几秒或零点几秒 然后再去执行第 2条指令 这样就可以看到 LED1曾经灭过了 第二 让单片
机执行完全部指令后再返回去执行第 1条指令 如此不断的循环就可以达到我们的要求了
实验程序如下
主程序
MAIN:SETB P1.0 ;
LCALL DELAY ;
CLR P1.0 ;
LCALL DELAY ;
LJMP MAIN ;
子程序
DELAY:MOV R7,#250 ;
D1:MOV R6,#250 ;
D2:DJNZ R6,D2 ;
DJNZ R7,D1 ;
RET ;
END .
发现许多朋友很聪明 喜欢把这里的内容复制了直接粘贴到实验系统中 这对你的学习很不利
所以现在的 PDF文档我把它加密了 看你再偷懒 呵呵 别怪我 我也是为了你好*^*
还记得软件的使用方法吗 调试 写入源代码 编译 下载到单片机 看看是不是我们想要的
结果
在分析这段程序之前 先来说明几个标点符号的意义 1.分号在这里起一个分隔符的作用 表示
这条指令到此为止 2.括号内的数字在这里是为了解释程序用的 实际的编译过程中是没有意义的 也
就是说没有也是一样的 只是为了程序的可读性更强 我们一般会在分号的后面加上程序的注释文字 后
面我们会用到 3.特别☺ 程序中的标点符号只能在英文状态下输入 当使用中文输入时 必须切换
到半角状态 不然编译软件会出错
接下来我们分析一下这段程序 按照我们的要求 第 1条 让灯灭 第 2条应该是延时 第 3条
是让灯亮 第 4条和第 2条一样也应该是延时 第 5条应当返回去执行第 1条指令 看一下上面的程序
第 1条我们已经懂了 是让 LED1灭 第 2条和第 4条我们等一下讨论 第 5条是 LJMP MAIN LJMP是
2021-12-09 19:56:46
2.46MB
51单片机
1