1.7 格雷码

当我们采用二进制编码进行向上或向下计数时,每次计数会导致二进制值向下一个值变化,而每次变化时,二进制编码中需要翻转的位的个数是不一样的。如表1-7所示,表左边列出的是二进制编码的八进制数字,当我们从000到111计数再回到000,每次计数值变化时,二进制编码中需要翻转的位数为1~3。

对于很多应用,多个二进制位同时发生变化并不是问题。但在某些应用中,计数时如果有多个位同时发生变化会导致很严重的问题,图1-6a所示的光学轴角编码器就可以用来说明这种情况。这种编码器用一个加装在一根轴上的圆盘来测量轴的转动角度,圆盘表面被分成很多区域,透明的表示二进制1,不透明的则表示二进制0。在圆盘的一侧有一个光源,另一侧有多个光学传感器,每个传感器用来感知对应位置的光,并转换为对应的二进制值0(黑暗)或1(有光)。当圆盘的透明区域处于光源和传感器之间时,传感器输出二进制1,当不透明区域处于光源和传感器之间时,传感器输出二进制0。
但是,轴本身可以旋转到任何角度。例如,轴和圆盘可能会转到某一角度,传感器正好处于011和100区域间的边界上。这时,在B2、B1和B0的传感器所接收的光被部分遮挡,在这种情况下,很难判定这3个传感器是否接收到光,每个传感器既可以产生二进制0也可以产生二进制1信号。这样,在3与4之间,可能会出现的编码就会有000、001、010、011、100、101、110或111,其中只有011和100是符合要求的,其他的都是错误的编码。
看看有什么其他方法可以解决这一问题。我们注意到当二进制值向下一个或上一个值进行变化时,如果只有一个二进制位发生翻转,这个问题就不会出现。例如,当传感器位于2与3的区域边界时,传感器能产生的二进制信号只可能是010或011,它们都符合要求。因此,如果我们改变从0到7的编码方式,使得在进行加计数或减计数(从7回到0)时只有一个二进制位需要翻转,则轴处于任何角度传感器都能产生正确的信号。计数过程中相邻编码之间只有一位不同的编码称为格雷码(Gray code),以Frank Gray的名字命名,他在1953年申请了这种编码用于转轴编码的专利。对于n(n为偶数)个连续整数的集合,可以有多种格雷编码。
表1-7右侧列出的是一种八进制数字的格雷码,称为二进制反射格雷码(binary reflected Gray code)。注意,二进制编码的计数顺序现在是:000、001、011、010、110、111、101、100和000。如果我们需要对编码表示的数字信息进行进一步处理,可以采用专用的硬件电路或软件将格雷码转换为它所对应的二进制值。
图1-6b给出的就是采用表1-7中的格雷码做的光学轴角编码器。可以看到盘中任意相邻的两个编码分块区域只有一个部分是不同的(透明或不透明)。

光学轴角编码器充分展现了格雷码的作用。其实在其他类似的应用领域,需要将某些连续变化的物理量,比如位置或电压转换成数字信号,格雷码也同样有用,格雷码在低功耗CMOS(Complementary Metal Oxide Semiconductor)逻辑电路中的应用则更为特别。在CMOS电路中,仅仅当二进制位发生变化时才消耗功率。如果按表1-7中的两种编码进行顺序计数(向上或向下),完成一个8次计数的循环,二进制编码总共有14个位发生了翻转,而格雷码则只需要翻转8位。由此可见,采用格雷码的计数电路的动态功耗只有二进制编码计数电路的57%。
n(n必须为偶数)位二进制计数序列数值的格雷码可以通过以下方法编制:首先对于序列的前n/2个二进制编码,我们设目的格雷码的左边最高位为0,然后往右的各位由原二进制编码的每一位与它左边相邻位的偶校验构成,如二进制编码0100的格雷码的构成是这样的:0,偶校验(0, 1),偶校验(1, 0),偶校验(0, 0)=0110;接着,将已构成的格雷码序列按逆序排列,并将左边最高位设为1,这样就构成原序列中的后n/2个二进制编码所对应的格雷码序列。例如,对于BCD码而言,对应的前5个格雷码为0000、0001、0011、0010和0110,将这个编码序列逆序排列,并将左边最高位置1,就可得到最后5个格雷码:1110、1010、1011、1001和1000。对于数值在0~2n―1范围内顺序变化的特殊二进制编码,其格雷码编制方法是:保留原二进制码的左边最高位,剩下的位由原二进制码的各位与其左边相邻位的偶校验构成。

《逻辑与计算机设计基础(原书第5版)》——1.7 格雷码相关推荐

  1. 图书推荐|计算机组成与设计(原书第5版) 硬件软件接口 RISC-V

    计算机组成与设计(原书第5版)  硬件软件接口 RISC-V 这本书是引进过来的,本系列图书广受盛誉,有两位"图灵奖"得主撰写,书的权威性及细致性不言而喻,两位作者的履历也是让我们 ...

  2. 逻辑与计算机设计基础实验报告,逻辑与计算机设计基础--课实验的报告.doc

    逻辑与计算机设计基础--课实验的报告 学生学号 0121410870432实验成绩 学 生 实 验 报 告 书 实验课程名称逻辑与计算机设计基础开 课 学 院计算机科学与技术学院指导教师姓名肖敏学 生 ...

  3. 逻辑与计算机设计基础实验报告,逻辑和计算机设计基础--课实验报告.doc

    逻辑和计算机设计基础--课实验报告 学生学号 0121410870432实验成绩 学 生 实 验 报 告 书 实验课程名称逻辑与计算机设计基础开 课 学 院计算机科学与技术学院肖敏学 生 姓 名付天纯 ...

  4. 逻辑与计算机设计基础实验报告,学位论文_逻辑与计算机设计基础课实验报告.doc...

    学位论文_逻辑与计算机设计基础课实验报告 学生学号 0121410870432实验成绩 学 生 实 验 报 告 书 实验课程名称逻辑与计算机设计基础开 课 学 院计算机科学与技术学院指导教师姓名肖敏学 ...

  5. 计算机python程序设计导论,程序设计导论:Python计算与应用开发实践(原书第2版)...

    程序设计导论:Python计算与应用开发实践(原书第2版) 语音 编辑 锁定 讨论 上传视频 <程序设计导论:Python计算与应用开发实践(原书第2版)>是2018年机械工业出版社出版的 ...

  6. 计算机流体力学软件基础及工程应用,流体力学及其工程应用(英文版·原书第10版)2013年版...

    流体力学及其工程应用(英文版·原书第10版) 出版时间:2013年版 内容简介 <流体力学及其工程应用(英文版·原书第10版)/时代教育·国外高校优秀教材精选>继承并发扬了前9版讲述流体力 ...

  7. 《 线性代数及其应用 (原书第4版)》—— 2.7 计算机图形学中的应用

    本节书摘来自华章出版社< 线性代数及其应用 (原书第4版)>一书中的第2章,第2.7节,作者:(美)戴维C. 雷(David C. Lay)马里兰大学帕克学院 著刘深泉 张万芹 陈玉珍 包 ...

  8. 计算机书籍-机器学习导论(原书第2版)

    书名:机器学习导论(原书第2版) Springer人工智能三大重点导论之一,全新修订,浅显易懂,速学入门 作者:[美]米罗斯拉夫.库巴特 出版社:机械工业出版社 出版时间:2018年10月 去当当网了 ...

  9. 《Linux嵌入式实时应用开发实战(原书第3版)》——3.5 Linux文件系统

    本节书摘来自华章计算机<Linux嵌入式实时应用开发实战(原书第3版)>一书中的第3章,第3.5节,作者:(美)Doug Abbott 更多章节内容可以访问云栖社区"华章计算机& ...

  10. 《数据结构与抽象:Java语言描述(原书第4版)》一2.1.4 让实现安全

    本节书摘来华章计算机<数据结构与抽象:Java语言描述(原书第4版)>一书中的第2章 ,第2.1节,[美]弗兰克M.卡拉诺(Frank M. Carrano) 蒂莫西M.亨利(Timoth ...

最新文章

  1. php 严格过滤,php 常用过滤类
  2. 编写nios-shell时想到的问题-回车vs换行
  3. python 封装_python接口自动化学习笔记(封装方法用于读取excel)
  4. 通过互信息思想来缓解类别不平衡问题
  5. ubuntu下 mysql安装以后无法登陆的的解决方法((ERROR 1698 (28000): Access denied for user 'root'@'localhost'))...
  6. 大剑无锋之研发笔试题(一)
  7. 文件服务器+好处,文件服务器 好处
  8. 转 php 观察者模式
  9. plsql无法连接64位oracle已解决
  10. 18年12月英语六级第二套听力单词
  11. android 电源管理 和 Doze 模式
  12. android自适应屏幕方向,Android 屏幕自适应方向尺寸与分辨率-Fun言
  13. 【转】FILE *fp fopen 参数
  14. 第三代战斗机的特点有哪些
  15. hp台式机计算机编号怎么查,惠普电脑如何通过SN码查询配置
  16. you-get使用方法
  17. matlab gmt,科学网—在Matlab中调用GMT画图 - 徐逸鹤的博文
  18. php 数字货币格式化,NPM酷库:accounting,格式化数字和货币
  19. 五 常见的计算机故障有哪些,笔记本电脑常见故障有哪些 笔记本电脑常见故障问题大全分析...
  20. linux下载/解压ImageNet-1k数据集

热门文章

  1. jquery获取和设置属性_jQuery获取属性,设置属性,删除属性
  2. 10.14-10.20学习总结
  3. Python3列表推导不会再有变量泄露的问题
  4. C++常用函数有哪些?
  5. Vue登录注册,并保持登录状态 1
  6. oracle--Tracing PL/SQL subprogram calls with parameters values--Mahmoud Hatem,
  7. 阿里云前端周刊 - 第 25 期
  8. Ambari HDP 完整安装手册
  9. indexOf() 使用方法(数组去重)
  10. OK335xS psplash Screen 移植