由于单片机内部所有的数据均采用二进制代码表示,但通过输入设备(如键盘)输入的信息和通过输出设备(如显示器、打印机)输出的信息却是多种多样的,其中既有字母、数字,又有各种控制字符,甚至是汉字,为了方便,人们就对计算机中常用的符号进行编码。当通过输入设备向计算机输入某个字符时,计算机自动将该字符转化为对应的二进制数,再进行处理;相反,计算机也会将处理结果还原为对应的字符。因此,字符所对应的二进制数就称为该字符的编码。
1.ASCII码
由于单片机只能处理二进制数,因此除了数值本身需要用二进制数形式表示外,字符,包括数码(如0,1,2,3,4,5,6,7,8,9)、字母(如A,B,C,D,…,X,Y,Z及a,b,c,d,…,x,y,z)、特殊符号(如%,!,+,-,=等)也必须用二进制数表示,即在计算机中需将数码、字母、特殊符号等代码化,以便于计算机识别、存储和处理。
英文属于典型的拼音文字,由字母、数字和特殊符号等组合而成,但这些字母、数字和特殊符号的数目毕竟有限,不过百余个。7位二进制数可以表示128种状态,如果每种状态代表特定的字母或数字,则7位二进制数可以表示128个字符。例如:可用0110001B表示数字1;1000001B表示大写字母A等。在计算机系统中普遍采用的编码是美国标准信息交换代码(American Standard Code for Information Interchange,ASCII码)。
在单片机系统中,存储单元的长度通常为8位二进制数(即一个字节)。为了存取方便,规定一个存储单元存放一个ASCII码,其中低7位表示字母本身的编码,第8位(bit7)用作奇偶校验位或规定为零(通常如此)。因此,也可以认为ASCII码的长度为8位(但bit7为0)。128个字符对于某些特殊应用来说,可能不够,因此可采用8位的ASCII,即扩展ASCII码(共有256个代码)。其中前128个(高位为0)编码用于表示基本的ASCII码,基本ASCII码主要用于表示数字、英文字母(大、小写)、标点符号、控制字符等;后128(高位为1)个编码用于表示扩展的ASCII码,扩展ASCII用于表示一些特殊的符号,如希腊字母等。
2.BCD码
十进制毕竟是人们最习惯的计数方式,在向单片机输入数据时,常用十进制数输入;但计算机只处理二进制数,因此每一位十进制数必须用二进制数表示。一位十进制数包含0~9十个数码,必须用4位二进制数表示,这样就需要确定0~9与4位二进制数0000B~1111B之间的对应关系,其中较常用的8421 BCD码规定了十进制数0~9与4位二进制数编码之间的对应关系。尽管BCD码比较直观,但BCD码与二进制数之间的转换并不方便,需要转成十进制数后才能转换为二进制数。
3.带符号数的表示方法
在单片机中,对于带符号数来说,一般用最高位表示数的正、负。对于正数,最高位定义为“0”,对于负数,最高位定义为“1”。(www.xing528.com)
常用的带符号数码有原码、反码和补码。原码:这个数本身的二进制形式。例如十进制的8的原码就是01000,就是用二进制表示。反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。补码:负数的补码是将其原码除符号位之外的各位求反之后在末位再加1。
在嵌入式系统中,带符号数并不用原码或反码表示,而是用补码表示的,引入“原码”“反码”的目的是为了方便理解补码的概念。不用原码表示的原因是因为用原码表示时,“0”并不唯一,0的原码可以表示为00000000(即+0),也可以表示为10000000(即-0),这会造成混乱;再者就是用原码表示时,减法并不能转化为加法运算,反码也存在类似问题。所以我们通常将数值都是以补码表示的。正数的补码和原码相同;负数的补码:将该数的绝对值的二进制形式按位取反后再加1。
例如:
求-10的补码。
10的原码:
取反:
再加1,得-10的补码:
由此可知,左面的第一位是表示符号的。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。