在数字系统中,只有两种状态:1 和 0。但是用这两种状态组成的二进制数不仅仅可以用来表示数量的大小,也可以表示不同的事物和不同的状态。这种用一组 n 位二进制数码来表示数据、各种字母符号、文本信息和控制信息的二进制数码的集合称作编码。表示的方式不同,就形成了不同的编码。
常用编码有两类,一类是表示数量多少的编码,这些编码常常用来代替十进制的 0~9,统称为二-十进制编码,又称BCD码。一类是用来表示各种字母、符号和控制信息的编码,又叫字符代码。
如何既不改变数字系统处理二进制数的特征,又能在外部显示十进制数字?这就产生了用二进制数表示十进制数的编码——BCD码。数字 0~9 一共有十种状态。三位二进制数只能表示 8 种不同的状态,显然不行。用四位二进制数来表示十种状态是有余了,因为四位二进制数有 16 种状态组合,还有 6 种状态没有用上。从四位二进制数中取出十种组合表示十进制数的 0~9,可以有很多种方法,因此BCD码也有多种,如 8421BCD码、2421BCD码、余 3 码等。其中最常用的是 8421BCD码。
纯二进制码是指用二进制数直接表示数量,0 表示 0,1 表示 1,10 表示 2,11 表示3……这种表示方法最大的优点是数字系统可以直接应用,但是在输入和显示的时候很不符合人们使用十进制的习惯。数字较大时更不易进行人机对话。
8421BCD码是最基本、最常用的一种十进制数的编码方案,习惯上称作BCD码。在这种编码方式中,代码中从左到右的每一位中的 1 表示位权 8,4,2,1,所以把这种的编码称为8421 码。
用四位二进制数来表示一位十进制数的 8421BCD码码表见表 1.1-8。从表中可以看出,8421BCD码实际上就是纯二进制数的 0 到 9 来表示十进制数的 0 到 9。四位二进制数的组合中,还有六种组合没有使用,称为未用码,又叫伪码。它们是从 1010 到 1111。在实际应用中,伪码绝对不允许出现在 8421BCD码的表示中。
为与纯二进制码相区别,在 8421BCD码的后面加上后缀表示前面的二进制数是8421BCD码。
表示一个十进制数,用纯二进制码和 8421BCD码表示有什么不同呢?下面我们通过一个实例加以说明。
【 例 1.1-15 】 试写出十进制数K58 的纯二进制数表示和 8421BCD码表示。
解: (1)二进制数表示:
K58=B 111010
(2)8421BCD码表示:
【 例 1.1-16 】 1001010100000010BCD表示多少?
除了 8421BCD码外,十进制数编码常用的还有 2421BCD码和余 3 码。
2421BCD码也是一种有权码,也是用四位二进制数表示 1 位十进制数。不过它从左到右的位权是 2,4,2,1。2421BCD码具有对称性,即 0 与 9,1 与 8,2 与 7,3 与 6,4 与 5 的代码均互为反码。
2421BCD码码表见表 1.1-8。
余 3 码是一种特殊BCD码,它是由 8421BCD码加上 3(B11)后形成的,所以叫余3 码。
余 3 码码表见表 1.1-8。
表1.1-8 BCD码表示
定位控制是自动控制的一个重要内容。精确的位置控制在许多领域有着广泛的应用,例如机器人运动、数控机床的加工、医疗机械和伺服传动控制系统等。
编码器是一种把角位移或直线位移转换成电信号(脉冲信号)的装置。按照其工作原理,可分为增量式和绝对式两种。增量式编码器是将位移产生周期性的电信号转换成计数脉冲,用计数脉冲的个数来表示位移的多少;而绝对式编码器则是用一个确定的二进制码来表示其位置,其位置和二进制码的关系是用一个码盘来传送的。
图 1.1-1(b)为一个仅作说明的三位纯二进制码的码盘示意图。
图 1.1-1 码盘示意图
一组固定的光电二极管用于检测码盘径向一列单元的反射光,每个单元根据其明暗的不同输出相对于二进制数 1 或者 0 的信号电压,当码盘旋转时,输出一系列三位二进制数,每转一圈有 8 个二进制数 000~111。每一个二进制数表示转动的确定位置(角位移量)。图中是以纯二进制编码来设计码盘的。但是这种编码方式在码盘转至某些边界时,编码器输出便出现了问题。例如,当转盘转至 001 到 010 边界时(如图所示),这里有两个编码改变,如果码盘刚好转到理论上的边界位置,编码器输出多少?由于是在边界,001 和 010 都是可以接受的编码。然后由于机械装配的不完美,左边的光电二极管在边界两边都是 0,不会产生异议,而中间和左边的光电二极管则可能会是 1 或者 0;假定中间是 1,左边也是 1,则编码器就会输出 011,这是与编码盘所转到的位置 010 不相同的编码。同理,输出也可能是000,这也是一个错码。通常在任何边界,只要是一个以上的数位发生变化,都可能产生此类问题,最坏的情况是三位数位都发生变化,如 000~111 边界和 011~100 边界,错码的概率极高。因此,纯二进制编码是不能作为编码器的编码的。
格雷码解决了这个问题。图 1.1-1(a)为一格雷码编制的码盘。与上面纯二进制码相比,格雷码的特点是任何相邻的码组之间只有一位数位变化。这就大大减少了由一个码组转换到相邻码组时在边界上产生错码的可能。因此,格雷码是一种错误少的编码方式,属于可靠性编码。而且格雷码与其所对应的角位移量是绝对唯一的,所以采样格雷格码的编码器又称为绝对式旋转编码器。这种光电编码器已经越来越广泛地应用于各种工业系统中的角度、长度测量和定位控制中。
格雷码是无权码,每一位码没有确定的大小,因此不能直接进行比较大小和算术运算,要利用格雷码进行定位,还必须经过码制转换,变成纯二进制码,再由上位机读取和运算。
但是格雷码的编制还是有规律的,它的规律是:最后一位的顺序为 01、10、01…,倒数第二位为 0011,1100,0011…倒数第三位为 00001111,11110000,00001111…倒数第四位为 0000000011111111,1111111100000000…以此类推。
表 1.1-9 是四位编制的纯二进制码与格雷码对照表。
表 1.1-9 纯二进制码与格雷码对照表
格雷码与二进制之间的转换,具体规则如下。
(1)最高位不变。
(2)从左到右,逐一将二进制码相邻两位相加(舍去进位)作为格雷码的下一位。
【 例 1.1-17 】 把二进制码 1011 转换成格雷码。
解: 将二进制码用b 3 b 2 b 1 b 0 表示,格雷码用B 3 B 2 B 1 B 0 表示,根据转换规则有:
B 3 =b 3 =1
B 2 =b 3 +b 2 =1+0=1
B 1 =b 2 +b 1 =0+1=1
B 0 =b 1 +b 0 =1+1=0(舍去进位 1)
则转换后格雷码为 1110。
(1)最高位不变。
(2)高位二进制码加上下一位格雷码作为下一位二进制码(舍去进位)。
【 例 1.1-18 】 将格雷码 1001 转换成二进制码。
解: 仍用B 3 B 2 B 1 B 0 表示格雷码,b 3b2b1b0 表示二进制码。根据转换规则有:
b 3 = B 3 =1
b 2 = b 3+ B 2 =1+0=1
b 1 = b 2 +B 1 =1+0=1
b 0 = b 1+ B 0= 1+1=0(舍去进位)
则转换后的二进制码为 1110。
上面所讨论的纯二进制码、8421BCD码、格雷码都是用二进制码来表示数值的,事实上,数字系统处理的绝大部分信息是非数值信息,如字母、符号、控制信息等。如何用二进制码来表示这些字母、符号等,就形成了字符编码,其中ASCII码是使用最广泛的字符编码。
ASCII码是美国国家标准学会制定的信息交换标准代码,它包括 10 个数字、26 个大写字母、26 个小写字母以及大约 25 个特殊符号和一些控制码。ASCII码规定用 7 位或者 8 位二进制数组合来表示 128 种或 256 种的字符及控制码。标准ASCII码是用 7 位二进制组合来表示数字、字母、符号和控制码。标准的ASCII码码表见表 1.1-10。
表 1.1-10 标准ASCII码码表
在ASCII码表中,有一部分是表示非打印字符的控制字符的缩写词,例如开始“STX”、回车“CR”、换行“LF”等,也叫控制码。控制码含义如下:
ACK 应答 BEL 振铃 BS 退格 CAN 取消
CR回车 DC1~DC4 直接控制 DEL 删除
DLE 链路数据换码 EM媒质终止 ENQ 询问
EOT 传输终止 ESC 转义 ETB 传输块终止 ETX 文件结束
FF换页 FS 文件分隔符 GS 组分隔符 HT横向制表符
LF 换行 NAK 否认应答 NUL 零 RS 记录分隔符
SI移入 SO移出 SOH 报头开始 SP空格
STX 文件开始 SUB替代 SYN同步空闲 US单位分隔符
VT纵向制表符
ASCII码表有两种表示方法,一种是二进制表示,这是在数字系统如计算机、PLC中真正的表示;一种是十六进制表示,这是为了阅读和书写方便的表示。
如何通过ASCII码表查找字符的ASCII码?下面举例加以说明。
例如查找数字E的ASCII码,首先在表中找到“E”,然后向上、向左找到相应的二进制或十六进制数如图 1.1-2 所示。
图 1.1-2 查找数字E的ASCII码
“E”的ASCII码由上面的和左面的二进制数或十六进制数相拼而成,“E”=B1000100,或“E”=H45。为了和二进制、十六进制数相区别,常常把数制符放在数的后面,即“E”=1000100B或“E”=45 H。以此类推,可查到“W”=1010111 B或“W”=57 H等。
【 例 1.1-19 】 一组信息的ASCII码如下,请问这些信息的内容是什么?
1000011 1001000 1001001 1001110 1000001
解: 通过查ASCII码表为CHINA。
标准ASCII码表使用七位二进制码,但在数字设备中,常常是按字节(8 位二进制数)进行操作的。因此,实际使用中,常在前面增加“0”或留作为奇偶校验位用。增加“0”时,则用 2 位十六进制数来表示ASCII码比较多见。
【 例 1.1-20 】 下面作为一组ASCII码,请问内容是什么?
1000011 1001000 1001001 1001110 1000001
解: 经查ASCII码码表为 “STX” 0 1 0 6 2 0 0 0 0 0 1 2 C 7“CR” “LF”。
其中“STX”为开始,“CR”为回车,“LF”为换行。具体含义由协议规定。
【试试,你行的】
(1)试用 8421BCD码、2421BCD码和余 3 码表示十进制数K3096。
(2)格雷码与纯二进制码相比其特点在哪里?格雷码用在哪里比较多?为什么?
(3)请指出下面一组ASCII码信息的内容是什么?
49H 4CH 6FH 76H 65H 59H 6FH 75H。