第二个试验:用单片机点亮一个闪烁的发光管

一次我们的程序实在是没什么用,要灯亮还要重写一下片子,下面我们要让灯不断地闪烁,这就有一定的实用价值了,比如可以把它当成汽车上的一个信号灯用了。怎样才能让灯不断地闪烁呢?实际上就是要灯亮一段时间,再灭一段时间,也就是说要P10不断地输出高和低电平。怎样实现这个要求呢?请考虑用下面的指令是否可行:

SETB P1.0

CLR P1.0

……

这是不行的,有两个问题,第一,计算机执行指令的时间很快,执行完SETB P10后,灯是灭了,但在极短时间(微秒级)后,计算机又执行了CLR P10指令,灯又亮了,所以根本分辨不出灯曾灭过。第二,在执行完CLR P10后,不会再去执行SETB P10指令,所以以后再也没有机会让灭了。

为了解决这两个问题,我们可以做如下设想,第一,在执行完SETB P10后,延时一段时间(几秒或零点几秒)再执行第二条指令,就可以分辨出灯曾灭过了。第二在执行完第二条指令后,让计算机再去执行第一条指令,不断地在原地兜圈,我们称之为'循环',这样就可以完成任务了。

以下先给出程序(后面括号中的数字是为了便于讲解而写的,实际不用输入):

;主程序:

LOOP: SETB P1.0     ;(1)

LCALL DELAY   ;(2)

CLR P1.0     ;(3)

LCALL DELAY   ;(4)

AJMP LOOP    ;(5)

;以下子程序

DELAY: MOV R7,#250  ;(6)

D1: MOV R6,#250    ;(7)

D2: DJNZ R6,D2    ;(8)

DJNZ R7,D1     ;(9)

RET         ;(10)

END         ;(11)

按上面的设想分析一下前面的五条指令。

第一条是让灯灭,第二条应当是延时,第三条是让灯亮,第四条和第二条一模一样,也是延时,第五条应当是转去执行第一条指令。第二和第四条实现的原理稍后谈,先看第五条,LJMP是一条指令,意思是转移,往什么地方转移呢?后面跟的是LOOP,看一下,什么地方还有LOOP,对了,在第一条指令的前面有一个LOOP,所以很直观地,我们可以认识到,它要转到第一条指令处。这个第一条指令前面的LOOP被称之为标号,它的用途就是给这一行起一个名字,便于使用。是否一定要给它起名叫LOOP呢?当然不是,起什么名字,完全由编程序的人决定,可以称它为A,X等等,当然,这时,第五条指令LJMP后面的名字也得跟着改了。

第二条和第四条指令的用途是延时,它是怎样实现的呢?指令的形式是LCALL,这条指令称为调用子程序指令,看一下指令后面跟的是什么,DELAY,找一下DELAY,在第六条指令的前面,显然,这也是一个标号。这条指令的作用是这样的:当执行LCALL指令时,程序就转到LCALL后面的标号所标定的程序处执行,如果在执行指令的过程中遇到RET指令,则程序就返回到LCALL指令的下面的一条指令继续执行,从第六行开始的指令中,可以看到确实有RET指令。在执行第二条指令后,将转去执行第6条指令,而在执行完6,7,8,9条指令后将遇到第10条令:RET,执行该条指令后,程序将回来执行第三条指令,即将P10清零,使灯亮,然后又是第四条指令,执行第四条指令就是转去执行第6,7,8,9,10条指令,然后回来执行第5条指令,第5条指令就是让程序回到第1条开始执行,如此周而复始,灯就在不断地亮、灭了。

在标号DELAY标志的这一行到RET这一行中的所有程序,这是一段延时程序,大概延时零点几秒,至于具体的时间,以后我们再学习如何计算。 程序的最后一行是END,这不是一条指令,它只是告诉我们程序到此结束,它被称为'伪指令'。

二、单片机内部结构分析:

为了知道延时程序是如何工作的,我们必需首先了解延时程序中出现的一些符号, 就从R1开始,R1被称之为工作寄存器。什么是工作寄存器呢?让我们从现实生活中来找找答案。如果出一道数学题:123+567,让你回答结果是多少,你会马上答出是690,再看下面一道题:123+567+562,要让你要上回答,就不这么容易了吧?我们会怎样做呢?如果有张纸,就容易了,我们先算出123+567=690,把690写在纸上,然后再算690+562得到结果是1552。这其中1552是我们想要的结果,而690并非我们所要的结果,但是为了得到最终结果,我们又不得不先算出690,并记下来,这其实是一个中间结果,计算机中做运算和这个类似,为了要得到最终结果,往往要做很多步的中间结果,这些中间结果要有个地方放才行,把它们放哪呢?放在前面提到过的ROM中可以吗?显然不行,因为计算机要将结果写进去,而ROM是不可以写的,所以在单片机中另有一个区域称为RAM区(RAM是随机存取存储器的英文缩写),它可以将数据写进去。

特别地,在MCS-51单片机中,将RAM中分出一块区域,称为工作寄存器区。

以下是它的a51文件:我们把它的名字叫作002.A51

LOOP: SETB P1.0

LCALL DELAY

CLR P1.0

LCALL DELAY

AJMP LOOP

DELAY: MOV R7,#250

D1:MOV R6,#250

D2:DJNZ R6,D2

DJNZ R7,D1

RET

END

点亮两个发光管用c语言编辑,第二个试验:用单片机点亮一个闪烁的发光管-----51单片机汇编语言试验教程 - CSDN博客...相关推荐

  1. 入住两年的CSDN,在今天2020年8月27日,成为CSDN博客专家

    @Author:Runsen CSDN 博客从 2019一开始到现在就开始写,至今已经有2年,2年抗战都成功了,写博客2年也该是个专家了(自夸别见笑)!其实我还不是一个专家.当然我清楚的明白,我距离专 ...

  2. ubuntu 安装Pangolin 过程_余辉亮的学习笔记的博客-CSDN博客_pangolin安装

    ubuntu 安装Pangolin 过程_余辉亮的学习笔记的博客-CSDN博客_pangolin安装

  3. 单片机c 语言0-99,单片机“0~99”加法计数器程序的设计51单片机原理及应用.doc...

    单片机"0~99"加法计数器程序的设计51单片机原理及应用 课 程 设 计 课程名称51单片机原理及应用题目名称单片机"0~99"加法计数器程序设计专业班级学生 ...

  4. CSDN博客首行空两格

    中文的阅读习惯,段落首行通常缩进两字符,在Word中我习惯按一下table,CSDN博客首行缩进两字符不能这样子,可以使用全角符号的空格键,按两下. 切换全角符号的快捷键: shift+space. ...

  5. c语言52单片机液晶屏显示,[手把手教你学51单片机C语言教程]22 LCD12864液晶屏显示.pdf...

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspC/C++资料 [手把手教你学51单片机C语言教程]22 LCD ...

  6. 判断一棵树是否为完全二叉树的算法c语言_别再翻了,面试二叉树看这 11 个就够了!||CSDN博客精选...

    作者:一只不甘平凡的小鹿 数据结构与算法: 不知道你有没有这种困惑,虽然刷了很多算法题,当去面试的时候,面试官让你手写一个算法,可能你对此算法很熟悉,知道实现思路,但是总是不知道该在什么地方写,而且很 ...

  7. CSDN博客和OJ,两种积累编程代码量的方法对比

    带着菜鸟学生在CSDN上发博文积累代码量已经有近两年的时间(见 2011级学生和 2012级学生),模式逐渐成熟,学生们每周能够认真地完成该做的学习任务,积分见涨,排名提升,相互评论,互褒互贬,好不热 ...

  8. 7-51单片机ESP8266学习-AT指令(测试TCP服务器--51单片机程序配置8266,用手机TCP调试助手发信息给单片机控制小灯的亮灭)

    http://www.cnblogs.com/yangfengwu/p/8759294.html  如不做任何说明默认最头上的链接为上一篇链接,末尾的链接为下一篇链接 先把源码和资料链接放到这里 链接 ...

  9. csdn博客文章首行缩进两个字符的方法

    虽然咱不是什么完美主义这,可是文章的排版漂酿.看着心里也舒服不是.(哈哈) 其实是今天在转载别人博客的时候 ,发现别人的博客排版有段落首行缩进.可是我怎么搞也搞不出来.官方帮助上也找不到.所以就度娘了 ...

最新文章

  1. hook情况下,解决内联没有:hover的方案
  2. BZOJ4245 [ONTAK2015]OR-XOR 【贪心】
  3. JVM之本地方法栈Naitve Method Stack
  4. 温故而知新,UI学习中的大部分控件及常用的基础都整理了一下,很长~~~~~~~~~很长!!!!!!!...
  5. JVM上的高并发HTTP客户端
  6. 如何升级PowerShell
  7. SGU 134.Centroid( 树形dp )
  8. 数据结构与算法(七) 栈以及栈的应用
  9. java8 stream index_Java8 Stream基本使用
  10. linux keepalived 脚本,Linux下安装Keepalived及原理分析
  11. autoreleasepool底层探索
  12. python身份证验证系统_用python制作全国身份证号验证及查询系统
  13. asp.net铁路安全预警与决策支持系统
  14. js日期减一个月_正正正国庆!折上再减!三亚/香格里拉/稻城/拈花湾,最低499元…...
  15. oracle web创建表空间,oracle 创造表空间常用
  16. 微信群聊小机器人的服务器,微信群里自动聊天的机器人是怎么弄的?有没有操作教程?...
  17. Android获取电子签名内容,Android Studio 获取app签名
  18. 木瓜移动每日资讯0618:Facebook宣布将在全球范围内推出“Instagram Reels”广告服务
  19. Android提示“很抱歉,xxx已停止运行“,adb命令连接模拟器并查看安卓日志
  20. JQuery入门常用的一些方法、表单操作、正则验证

热门文章

  1. 6-SqlMapConfig.xml配置文件
  2. mysql pdo 插入没效果_MySQL分库分表后用PHP如何来完美操作
  3. java 线程 主进程_java 多线程通用方法
  4. 优秀案例|如何让网页首屏更具视觉吸引力?
  5. Merry Christmas!看甜点海报如何庆祝圣诞
  6. UI使用素材模板|login登录界面
  7. C4d模型--电商广告海报三维模型
  8. html质感阴影_CSS3 阴影(text-shadow)
  9. 西南交通大学计算机组成原理,西南交通大学计算机组成原理课程设计报告
  10. Windows核心编程学习笔记