单片机程序的用途是让单片机“听话”,按人们所预定的设计完成一系列动作,最终实现一个特定的功能。
例如使用单片机控制流水灯,接通电源后,第一次灯亮,然后延时一段时间,第二次灯亮,然后延时一段时间,第三次灯亮……,延时一段时间后又回到第一次灯亮,如此循环不已。这里就有这样的一些问题:第一次亮几盏灯、延时多少时间、一个循环中设置多少次不同的灯亮的情况……,这些决定了流水灯的花样,流动的速度,而这些,单片机显然没有自我判断能力,必须依靠人们给它“布置”任务,而它则是按人们的设计依次执行。
要让单片机“听话”,就要用单片机能够听懂的语言发布命令,单片机能够听懂的语言称之为“指令”。任何一种型号单片机能够接受的指令都是有限的,51单片机的指令条数为111条,而PIC单片机的指令仅有35条。每一条指令完成一个最基本的动作,人们为了要完成一个特定的功能,就要将这些指令排列组合,成为一个指令序列,这就是程序。
指令的表示形式有两种:机器语言和汇编语言。以51为例,如果要让P1.0引脚变为低电平,用机器语言来表示就是 C2H 90H,将这两个数放进单片机的程序存储器中,单片机执行后,就可以让P1.0引脚变为低电平了;而要让P1.0引脚变为高电平,用机器语言来表示就是D2H,90H。至于为什么是这两个数字,大家没必要追究,这是设计这块芯片的设计工程师规定的,我们不能更改,只能学习。
C2H,90H就是一条指令,显然这样的指令形式是很难记忆的,编程也非常困难,于是人们使用了“助记符”来代替这些数字。例如C2H,90H的助记符是CLR P1.0,而D2H,90H的助记符是SETB P1.0,由于助记符采用了英语字母的缩写,有一定含义,因此比数字形式的指令易记、易用。使用助记符形式的指令来编写程序就称之为“汇编语言源程序”。但是汇编语言源程序是没有办法直接送到单片机内部去的,使用助记符形式的指令编写的程序最终还是要变成为诸如:C2H,90H,D2H,90H,这种形式的指令才能被送入单片机的程序存储器。将助记符形式的指令变为数字形式的指令的过程称之“汇编”。汇编有两种方法,一种是“手工汇编”,即人们通过查表的形式找到所写汇编指令的数字形式然后写下来;另一种是“机器汇编”,即编写好汇编语言源程序以后,使用一个计算机软件对这些源程序进行处理,从而得到数字形式的指令序列,这个指令序列通常被称为“机器码”,即可以直接被机器所执行的代码。
机器汇编后得到的数字形式的指令序列以一个文件的形式保存在磁盘上,这个文件的扩展名一般是HEX,即人们常说的HEX文件。得到了HEX文件后,就可以将其写入程序存储器中了。要将程序写入芯片,通常需要一个称之为“编程器”的专用设备,在计算机上运行与之配套的编程软件,然后在这个软件中打开HEX文件,即可将其写入芯片中。随着技术的发展,编程方式越来越多,但总的概念是这样的,具体的细节,将在另一个问题“单片机编程器是什么”中回答。