« 51单片机指令表单片机延时程序分析 »

第一个单片机汇编小程序

分类: 单片机指令和编程 发布: admin 浏览: 日期: 2017年12月25日

第一个单片机汇编小程序,功能:让灯持续地闪烁,本程序有一定的实用价值,比如能把它当成汽车上的一个信号灯用。

;主程序:

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             

第一条是让灯亮,第二条是延时,第三条是让灯灭,第四条和第二条一模一样,也是延时,第五条应当是转去执行第一条指令。

第二和第四条实现的原理稍后谈,先看第五条,LJMP是一条指令,意思是转移,往什么地方转移呢?

后面跟的是LOOP,看一下,什么地方还有LOOP,对了,在第一条指令的前面有一个LOOP,所以很直观地,我们能认识到,它要转到第一条指令处。

这个第一条指令前面的LOOP被称之为标号,它的用途就是给这一行起一个名字,便于使用。

是否一定要给它起名叫LOOP呢?当然不是,起什么名字,完全由编程序的人决定,能称它为A,X等等,当然,这个时候,第五条指令LJMP后面的名字也得跟着改了。

第二条和第四条指令的用途是延时,它是怎样实现的呢?

指令的形式是LCALL,这条指令称为调用子程序指令,看一下指令后面跟的是什么,DELAY,找一下DELAY,在第六条指令的前面,显然,这也是一个标号。

这条指令的作用是这样的:

当执行LCALL指令时,程序就转到LCALL后面的标号所标定的程序处执行,如果在执行指令的过程中遇到RET指令,则程序就返回到LCALL指令的下面的一条指令继续执行,从第六行开始的指令中,能看到确实有RET指令。

在执行第二条指令后,将转去执行第6条指令,而在执行完6,7,8,9条指令后将遇到第10条令:RET。

执行该条指令后,程序将回来执行第三条指令,即将P1.0清零,使灯灭,然后又是第四条指令,执行第四条指令就是转去执行第6,7,8,9,10条指令。

然后回来执行第5条指令,第5条指令就是让程序回到第1条开始执行,如此周而复始,灯就在持续地亮、灭了。

在标号DELAY标志的这一行到RET这一行中的所有程序,这是一段延时程序,大概延时零点几秒,至于具体的时间,以后我们再学习如何计算。

单片机汇编小程序的最后一行是END,这不是一条指令,它只是告诉我们程序到此结束,它被称为"伪指令"。

 

相关文章:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-Blog 1.8 Walle Build 100427

Copyright 文雅单片机. Some Rights Reserved.