硬件搭建完毕后,就可以进入程序的设计阶段。根据图1-5所示,发光二极管VL1连接在P1.0口上,并知道当单片机P1.0口为低电平时发光二极管VL1才被点亮,P1.0口为高电平时则熄灭。本系统功能为单片机控制一个发光二极管的点亮时间为500ms,熄灭时间为500ms,再点亮时间为500ms,再熄灭时间为500ms……如此反复,用中文描述的程序设计思路为
翻译成单片机的语言为
以上这段程序代码是用汇编语言写成的,汇编语言(assembly language)是一种低级的、与硬件打交道的语言。这段程序代码由5行组成。每一行就是一条指令,每执行一条指令只能完成单片机的一个功能,如第1行指令“MOV P1,#00H”只能让单片机从P1口输出低电平,发光二极管被点亮,如果没有下一条指令,单片机就会停在该指令上,则发光二极管就会一直发光。所以,指令是我们控制单片机的最小单位。
完整的指令由标号(可选)、操作码助记符、目的操作数、源操作数及注释(可选)组成:
【标号:】操作码助记符【目的操作数】【源操作数】【;注释】
START:MOV P1,#00H;向P1口输出低电平
1)标号——可以是以英文字母开头的字母、数字或某些特殊符号的序列,例如,“D1:”、“START:”等。汇编语言对字母的大小写不敏感,但习惯上程序中都使用大写字母。另外,标号可以和其他指令在同一行,也可以单独为一行。以下的两个写法是等价的:
START:MOV P1,#00H START:
MOV P1,#00H
2)操作码助记符——用来表达指令的操作功能。操作码助记符“MOV”是单词“Move”的简写,其功能是把源操作数“移入”或者“载入”目的操作数中。(www.xing528.com)
3)目的操作数——指令最终作用的对象。指令执行某一操作,最后影响到目的操作数。
4)源操作数——参与指令的操作。指令的执行将使用到源操作数。如指令“MOV P1,#00H”的意思是把源操作数00载入到目的操作数P1口。源操作数中,“#”号代表其后的“00H”是一个立即数,也就是说该指令的源操作数由一个立即数充当,指令执行完毕后,立即数被载入P1口上。立即数可以暂时理解为一个常数。
在语句中的立即数“00H”是一个十六进制数,十六进制数00H转换成二进制数为00000000。所以,执行指令“MOV P1,#00H”时,这8个0将从单片机的P1口输出,以使P1.0~P1.7口(1~8脚)都呈现低电平,结合图1-5所示的发光二极管的连接方式,于是P1.0口上的发光二极管VL1被点亮。
同理,指令“MOV P1,#0FFH”将十六进制数FF,即二进制数“11111111”从P1口输出,P1.0~P1.7呈现高电平,从而使发光二极管熄灭。
5)注释——指令“MOV P1,#00H;向P1口输出低电平”中有一个分号,分号后面的中文描述“向P1口输出低电平”是指令的注释。注释是程序编写人员为了他人或自己阅读程序时方便而标记的,可以用来提高程序的可读性和调试的方便性。在汇编语言中,每个分号后面的部分是不会影响指令的,只是程序中解释说明的部分。也就是说,分号后的部分只是摆着看的,装装门面,并不是可执行程序的一部分。
以上完成了汇编语言和指令的初步分析后,先简单分析一下程序的内容,以便对指令控制单片机的操作过程有个初步的认识。
;单片机控制P1.0口上的发光二极管闪烁(对应图1-5)
程序第一行“ORG 00H;设置起始地址”是一条伪指令(pseudo opcode)。所谓伪指令是汇编程序所提供的帮助汇编器进行汇编的指令,并非单片机指令的一部分,因此伪指令不占存储器空间,它只是协助程序的汇编工作。ORG指令的功能是设定经汇编后的执行代码存储在单片机ROM(程序存储器)中的起始地址(后面还有详细的介绍),“ORG 00H”表明执行代码将从00H开始存储。程序最后一行的“END”也是一条伪指令,提示汇编器程序结束于此,当汇编遇到END后,就不会再继续进行。
程序中从标号“START:”开始到“DELAY:”前,是本程序的主程序段,与前面分析的程序设计思路是吻合的。从“DELAY:”到返回主程序指令“RET”共8行指令是子程序段,这是一个延时500ms的子程序段,放置在主程序之后。每当主程序执行到“LCALL DE-LAY”指令时,就会跳到“DELAY”子程序段来执行延时500ms,然后再跳回主程序中从“LCALL DELAY”的下一行继续执行主程序。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。