- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
51单片机汇编语言教程:4课第一个单片机小程序.pdf
51单片机汇编语言教程-由慧净助学会员收集整理 (全部28课)
51单片机汇编语言教程:第4课-第一个单片机小程序
(基于HL-1、HJ-C52、HJ-3G实验板)
(图片 HL-1 开发板)
上一次我们的程序实在是没什么用,要灯亮还要重写一下片子,
下面我们要让灯持续地闪烁,这就有一定的实用价值了,比如能把它
当成汽车上的一个信号灯用了。怎样才能让灯持续地闪烁呢?实际上
就是要灯亮一段时间,再灭一段时间,也就是说要P10持续地输出高
和低电平。怎样实现这个要求呢?请考虑用下面的指令是否可行:
SETB P10
CLR P10 ……
这是不行的,有两个问题,第一,计算机执行指令的时间很快,执行
完SETB P10后,灯是灭了,但在极短时间(微秒级)后,计算机又
51 51 WWW.HJMCU.COM /
推荐使用慧净 实验板。推荐 学习网 淘宝网:
51单片机汇编语言教程-由慧净助学会员收集整理 (全部28课)
执行了CLRP10指令,灯又亮了,所以根本分辨不出灯曾灭过。第二,
在执行完CLR P10后,不会再去执行SETB P10指令,所以以后再也
没有机会让灭了。
为了解决这两个问题,我们能做如下设想,第一,在执行完SETB
P10后,延时一段时间(几秒或零点几秒)再执行第二条指令,就能
分辨出灯曾灭过了。第二在执行完第二条指令后,让计算机再去执行
第一条指令,持续地在原地兜圈,我们称之为循环,这样就能完成任
务了。
以下先给出程序(后面括号中的数字是为了便于讲解而写的,实际不
用输入):
;主程序:
LOOP: SETB P10 ;(1)
LCALL DELAY ;(2)
CLR P10 ;(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)
51 51 WWW.HJMCU.COM /
推荐使用慧净 实验板。推荐 学习网 淘宝网:
51单片机汇编语言教程-由慧净助学会员收集整理 (全部28课)
END ;(11)
按上面的设想分析一下前面的五条指令。
第一条是让灯灭,第二条应当是延时,第三条是让灯亮,第四条
和第二条一模一样,也是延时,第五条应当是转去执行第一条指令。
第二和第四条实现的原理稍后谈,先看第五条,LJMP是一条指令,
意思是转移,往什么地方转移呢?后面跟的是 LOOP,看一下,什么
地方还有LOOP,对了,在第一条指令的前面有一个LOOP,所以很直
观地,我们能认识到,它要转到第一条指令处。这个第一条指令前面
的LOOP被称之为标号,它的用途就是给这一行起一个名字,便于使
用。是否一定要给它起名叫LOOP呢?当然不是,起什么名字,完全
由编程序的人决定,能称它为A,X等等,当然,这个时候,第五条
指令LJMP后面的名字也得跟着改了。
第二条和第四条指令的用途是延时,它是怎样实现的呢?指令的
形式是LCALL,这条指令称为调用子程序指令,看一下指令后面跟的
是什么,DELAY,找一下DELAY,在第六条指令的前面,显然,这也
是一个标号。这条指令的作用是这样的:当执行LCALL指令时,程序
就转到LCALL后面的标号所标定的程序处执行,如果在执行指令的过
程中遇到RET指令,则程序就返回到LCALL指令的下面的一条指令继
续执行,从第六行开始的指令中,能看到确实有RET指令。在执行第
二条指令后,将转去执行第6条指令,而在执行完6,7,8,9
文档评论(0)