历史上的今天
返回首页

历史上的今天

今天是:2025年05月06日(星期二)

正在发生

2021年05月06日 | 8051单片机教程第四课:第一个小程序

2021-05-06 来源:eefocus

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


SETBP10


CLRP10……


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


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


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


LOOP:SETBP10;(1)


LCALLDELAY;(2)


CLRP10;(3)


LCALLDELAY;(4)


AJMPLOOP;(5)


;以下子程序


DELAY:MOVR7,#250;(6)


D1:MOVR6,#250;(7)


D2:DJNZR6,D2;(8)


DJNZR7,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中分出一块区域,称为工作寄存器区。


推荐阅读

史海拾趣

Anpec(茂达)公司的发展小趣事

凭借卓越的产品质量和良好的市场口碑,茂达电子在国内电源模拟IC设计领域的地位逐渐提升。公司不仅在国内市场取得了显著的成绩,还积极拓展海外市场,与众多国际知名企业建立了稳定的合作关系。茂达电子的产品广泛应用于计算机、通信和消费者等领域,为全球客户提供了高质量的电源解决方案。

Alpha Industries公司的发展小趣事

随着互联网技术的普及,电子商务成为了越来越多消费者的首选购物方式。Alpha Industries抓住这一机遇,积极拓展电子商务平台。公司在各大电商平台上开设官方旗舰店,并通过社交媒体进行品牌推广。此外,Alpha Industries还开发了自己的官方网站和移动应用,为消费者提供更加便捷的购物体验。电子商务平台的拓展使得Alpha Industries的产品能够更好地触达消费者,进一步提升了品牌知名度和市场占有率。

Arcolectric公司的发展小趣事

Arcolectric公司成立于1932年,作为Elektron PLC Group的一个著名品牌,它从一开始就专注于开关、指示灯及保险丝座的生产。在创立初期,Arcolectric就展现出了对技术的深厚积累和独特见解,成功研发出了一系列高质量、高性能的产品,为公司的长远发展奠定了坚实的基础。

HCC Industries公司的发展小趣事

2015年,HCC Industries迎来了其发展历程中的一个重要转折点。在这一年,公司成功收购了另一家具有强大研发实力和市场份额的微电子企业。此次并购不仅使HCC在技术上得到了进一步的补充和提升,还大大增强了其生产能力和市场覆盖范围。通过整合双方资源,HCC在短时间内实现了规模的快速扩张和效益的显著提升,进一步巩固了其在行业内的领先地位。

BILIN公司的发展小趣事

面对日益激烈的市场竞争和快速变化的市场需求,HCC Industries在2020年启动了数字化转型计划。公司投入大量资金引入先进的自动化生产线和智能化管理系统,实现了从原材料采购到成品出厂的全链条数字化管理。这一举措不仅大幅提高了生产效率和产品质量,还降低了运营成本和库存风险。同时,HCC还利用大数据和人工智能技术优化产品设计和市场策略,进一步提升了其市场竞争力。

Galaxy Semi-Conductor Co Ltd公司的发展小趣事

山西飞虹激光科技有限公司于2010年在中国山西成立,并迅速在北京设立分公司,将北京作为战略重心,拓展全国市场。仅两个月后,飞虹激光的研发&生产中心便设立并投入生产,展现了公司的强大执行力和决心。2012年,飞虹激光积极参与国际展会,如慕尼黑上海光博会,展示了其F3015激光切割机、激光熔覆系统等高端产品,不仅提升了公司知名度,也彰显了其在激光技术领域的专业水平和创新能力。

问答坊 | AI 解惑

DIY心型LED的活动,,七夕的最好礼物!

点击图标查看详细?嘿嘿 [ 本帖最后由 aldd 于 2008-8-2 00:34 编辑 ]…

查看全部问答>

不懂HELP!!!郁闷死!!!

今天问一个牛人(应该是斑竹)一个问题,他直接告诉我去看HELP,果然是牛人,直接去看HELP. 算了自己慢慢学吧 :@   话说回来谁让咱是菜鸟呢,早知道用JLINK开发了,搞的连软件用起来都困难。 LPCXPRESSO太郁闷了!!! [ 本帖最后由 lil ...…

查看全部问答>

烧写NK的时候出现的错误,附串口消息

我直接从韩国下载的 MP2530F的BSP,编译能通过,在烧写完NK.NB0的时候进入不了系统,串口消息如下,请各位大侠帮我看一下怎么回事,谢谢 NK.nb0 will be downloaded 31457280 bytes at 0x400000 Now, Downloading [ADDRESS:400000h, TOTAL:0x01E0 ...…

查看全部问答>

pocket pc 与 webservice 连接方式?

初识智能设备,要做一个pda点菜系统,我现在用的是vs2005,建的是pocket pc项目,问我应该怎么让pda与webservice连接? 1、在pda端是new一个成员webservice引用还是每进行一个操作new一个局部ws的引用(这样会不会影响效率)? 2、如果是nwe一个成 ...…

查看全部问答>

关于PWM的问题!!!

我今天看了周立功的213X的书,PWM(脉宽调制器),里面说到PWMX有单边缘控制模式和双边缘控制模式,请问大侠们这里的单边缘和双边缘是是什么意思?????…

查看全部问答>

从SIM卡上获取语音信箱号码

大家好!    请问大家有人知道,如何获得存放在SIM卡上的语音信箱号码吗?因为有些SIM卡将语音信箱号码预先设置到了SIM卡的某个地方,我现在想把这个号码取出来.那如何做到呢?    在GSM11.11规范中有EF-SDN(6F49)着个文件, 但是 ...…

查看全部问答>

你会优先选择TI还是ADI的DSP

大家来说说在自己的应用中会选用ADI的还是TI的DSP。   两家各有什么优势啊?  …

查看全部问答>

ST7F2324的手册

                                 hi,除了网上下载的ST72324J4.PDF外,还有没有它的编程手册,类似于manual之类的文档?…

查看全部问答>

PIC单片机的应用设计技巧(转)

PIC单片机的应用设计技巧(转)   document.write(overlap1); 美国微芯公司(Microch{p Technology Inc.)开发的CM0S工艺PIC系列8位单片机(RISC微控制器),特别是 ...…

查看全部问答>

TMS320F28335的头文件和库文件有哪些?

TMS320F28335的原始头文件有哪些,多少个? 原始库文件有哪些?多少个?…

查看全部问答>