
1.4 单片机中使用的数制及常用的语言
1.单片机中使用的数制
计算机数据信息通常是以数字、字符、符号、表达式等方式出现的。1940年,现代著名数学家、控制学者罗伯特·维纳(Norbert Wiener,美国,1894年~1964年)首先倡导使用二进制编码形式,解决了数据在计算机中的表示,保证了计算机的可靠性、稳定性和高速性。单片机中常用的数制还有八进制和十六进制等。
二进制(Binary)是用“0”和“1”两个数字及其组合来表示任何数,其进位规则是“逢2进1”。它简单方便,易于电子方式实现,例如,用高电平表示“1”,用低电平表示“0”。计算机中全部采用的是二进制数。
2.单片机中使用的BCD码和ASCII码
除了数值外,英文字母、符号、汉字、声音、图像等数据在计算机内部也采用二进制数的形式来编码。常见的编码有BCD码、ASCII码等。
(1)BCD码
因为二进制数不符合人们的使用习惯,所以在计算机输入/输出时通常使用十进制数表示,这就需要实现十进制数和二进制数之间的转换。通常采用二进制编码十进制数,简称为 BCD 码(Binary Coded Decimal)。
BCD码是用4位二进制数表示1位十进制数,只要将每位十进制数用适当的4位二进制码代替即可。BCD码的表示方法有很多种,最常用的是标准的8421码,其码位的权值自左向右依次为8、4、2、1,故而得名;另外还有代码变换连续的格雷码,以及用8421码加上0011H得到的余三码等。表1-2给出了10个十进制数字的3种编码。
表1-2 10个十进制数字的3种编码

(2)ASCII码
计算机有时需要处理字符或字符串,因此计算机必须能用二进制数来表示字符。
计算机普遍采用的字符编码是美国标准信息编码(American Standard Coded for Information Interchange,ASCII)。ASCII码是一种8位代码,其最高位一般用于奇偶校验,其余7位用于对128个字符进行编码。附录B中列出了ASCII码表。
汉字在计算机内部也是以二进制数代码形式表示的。1981年,我国制定了国家标准GB2312—80(信息交换用汉字编码字符集——基本集),为6763个常用汉字规定了代码,规定每个汉字占两个字节,每个字节用8位二进制数来表示。1995年又颁布了《汉字编码扩展规范》(GBK)。GBK与GB2312—80所对应的内容标准兼容,同时,在字汇一级支持ISO/IEC10646—1和GB13000—1的全部中、日、韩(CJK)统一汉字字符,共计20902字,把文字、图形、图像、声音、动画等信息变成按一定规则编码的二进制数。
3.单片机中常用的语言
单片机中常用的语言包括机器语言、汇编语言和高级语言。
(1)机器语言
机器语言是用二进制代码表示的计算机能够直接识别和执行的一种机器指令的集合。通常由操作码和操作数两部分组成。其格式如下:

其中,操作码指出计算机所执行的是何种操作,是该指令的功能;操作数则指出在指令操作过程中所需的操作数据,即操作对象。例如,下面是一条MCS-51的机器指令:
01110100 00000101(74H、05H)
指令的前8位是操作码部分,要求计算机将指令后面的8位数05H送入累加器A。
对于某种特定的计算机而言,其所有机器指令的集合称为该计算机的机器指令系统。机器指令系统及其使用规则构成这种计算机的机器语言。完成特定功能的一系列机器指令的有序集合称为机器语言程序。综上所述,机器语言具有以下特征:
① 它是唯一能被计算机直接识别并执行的计算机语言;
② 它是由“0”“1”代码构成的语言,和自然语言相差甚远,不便于阅读和理解;
③ 它是面向机器的语言(低级语言)。
单片机的机器指令见附录A。
(2)汇编语言
为了克服机器语言难以掌握和编程的缺点,一般采用容易记忆的助记符来表示指令、数据及地址,例如,用ADD、SUB、JMP等英文或其缩写取代原来的二进制操作码,来表示加、减、转移等操作。这种用助记符来表示的机器指令,称为汇编指令,又称为符号指令,是机器指令符号化的表示。前面所列举的传送指令,若用汇编指令书写应为
MOV A, #05H
其中,MOV为传送指令操作码的助记符,A是目的操作数,#05H是源操作数,指令的功能是将数05H传送到累加器A中。
按照严格的语法规则用汇编语言编写的程序又称汇编语言源程序。由于计算机不能直接识别和执行汇编语言源程序,必须把源程序翻译成机器语言程序才能执行。这种将汇编语言源程序翻译成目标程序的语言加工程序称为汇编程序。使用汇编程序进行翻译的过程称作汇编。汇编程序将源程序翻译成机器语言后,计算机系统才能执行。其过程如图1-1所示。

图1-1 源程序转换成目标
综上所述,汇编语言具有以下特征:
① 在机器指令中使用助记符,较为接近自然语言,容易编程、阅读和记忆;
② 汇编程序是一对一的转换,生成的目标代码效率高(时空性能好);
③ 适合于在硬件层次上开发程序。
(3)高级语言
汇编语言仍然烦琐、难懂。高级程序设计语言则更接近人类自然语言的语法习惯,与计算机硬件无关,用户易于掌握和使用。目前应用的高级语言主要有 C、C++等。使用高级语言书写的源程序也必须翻译成机器指令目标程序。完成此翻译任务的程序称为编译程序。编译程序和汇编程序的区别为,汇编程序是一对一的转换,而编译程序则是一对多的转换。综上所述,高级语言具有如下特征:
① 更接近自然语言,编程、阅读更容易;
② 与计算机硬件无关,机器是否支持该高级语言,取决于有无相应的编译软件;
③ 生成的目标代码效率低。