格雷码转二进制原理

合集下载

格雷码与二进制码的互转

格雷码与二进制码的互转

格雷码与二进制码的互转
格雷码(Gray Code)与二进制码(Binary Code)是一种二进制变换编码形式,被用于错误纠正、机器人控制以及防止计算机硬件而设计出来的。

1. 格雷码的定义:
格雷码的定义是每多加一位二进制,所生成的一串编码依次改变一组
比特后得到,而它只有两个状态:1和0。

也就是说,在每一位的变化
范围中,都只有一次变化,当变化完成后又重新回到原有状态,即前
一步的状态,这样就形成了一种叫做“码”的序列,也就是格雷码。

2. 格雷码与二进制码的区别:
a)二进制码是一种线性变换,格雷码是一种非线性变换,因此具有明显的非线性特性。

b)二进制码的前一位改变时会使所有位都发生改变,而格雷码的前一
位变化时只会造成下一位的改变,说明上一位的改变有限制体现。

c)由于格雷码包含非线性特性,所以它在采用某些特殊信号中会比二
进制码拥有更好的可靠性和抗干扰性,这也是它被用于错误纠正、机
器人控制以及防止计算机硬件而设计出来的原因之一。

3. 格雷码与二进制码的互转:
(1)格雷码转换成二进制码:在格雷码中,G3到G7是
011→001→101→100,那么转换成二进制码的就是
011→111→101→110,即G3到G7的二进制码就是0111101110。

(2)二进制码转换成格雷码:比如说01101000,第一位没有变化,从第二位开始,那么他就是0110→0100→1100→1000,因此,01101000就转换成了01100100。

格雷码与二进制代码的转换规则

格雷码与二进制代码的转换规则

格雷码与二进制代码的转换规则格雷码(Gray code)是一种二进制编码方式,相邻两个码字的汉明距离恒为1、格雷码主要用于数字通信、电子工程以及数值计算等领域。

一、二进制代码转换为格雷码:格雷码的转换过程是通过递归算法实现的。

具体步骤如下:1.将二进制数按位划分为两部分,分别为最高位和其余位。

2.最高位保持不变,其余位与前一位的值进行异或运算。

3.递归上述过程,直到最后一位,即可得到相应的格雷码。

例如,将二进制数1101转换为格雷码的过程如下:1.最高位保持不变,即第一位为12.第二位为1与前一位0异或得到13.第三位为0与前一位1异或得到14.第四位为1与前一位0异或得到1所以,二进制数1101的格雷码为1111二、格雷码转换为二进制代码:格雷码转换为二进制代码的过程也是通过递归算法实现的。

具体步骤如下:1.格雷码的第一位与二进制代码的第一位保持一致。

2.格雷码剩余位与每一位的前一位进行异或运算得到相应的二进制位。

3.递归上述过程,直到最后一位,即可得到相应的二进制代码。

例如,将格雷码1010转换为二进制代码的过程如下:1.第一位保持一致,即为12.第二位为1与前一位的1异或得到0。

3.第三位为0与前一位的0异或得到0。

4.第四位为1与前一位的0异或得到1所以,格雷码1010转换为二进制代码为1001以上是格雷码与二进制代码的互相转换过程及规则。

格雷码与二进制代码之间的转换在数字通信与电子工程中有着广泛的应用。

例如,在传输数据时,通过将数据用格雷码表示,可以减小传输过程中的错误率;在电子工程中,通过使用格雷码可以减少数字电路的转换延迟和消除输出震荡等问题。

总之,格雷码与二进制代码之间的转换规则是通过递归算法实现的,可以根据具体的位数和要转换的码值进行转换。

这种转换方式在数字通信和电子工程等领域具有很大的实用价值,能够提高数据传输效率和数字电路的性能。

二进制和格雷码转换

二进制和格雷码转换

⼆进制和格雷码转换⼗进制 586 =⼆进制 1001001010 =格雷码 1101101111。

⼆进制码 ----> 格雷码(编码):从最右边⼀位起,依次将每⼀位与左边⼀位异或(XOR),作为对应格雷码该位的值,最左边⼀位不变(相当于左边是0)。

格雷码的是特点是:相邻两数的格雷码,仅仅有⼀位⼆进制发⽣变化。

⽽且在其范围内的最⼩值和最⼤值,也仅仅有⼀位⼆进制发⽣变化。

例如下⾯两数:最⼩:⼆进制0000=格雷码0000最⼤:⼆进制1111=格雷码1000看到了吧,0000 和 1000,仅仅有⼀位数发⽣变化。

-------如果在变换的过程中,先把⼗进制转换成BCD码,这就失去了格雷码的特点。

因为在BCD码中:最⼩:⼆进制0000=格雷码0000最⼤:⼆进制1001=格雷码1101可以看出,它们之间有三位发⽣变化。

通过BCD码来变换格雷码,思路不对。

变换出来的,并不是原数的格雷码。

后记:⾃然⼆进制数与格雷码的互换公式与电路⾃然⼆进制数转换到格雷码------------设有 N 位⼆进制数 B(i),其中 0 <= i <= N - 1;它可以变换成为同样位数的格雷码 G(i)。

⼆进制数与格雷码的转换公式如下: G(i) = B(i+1) XOR B(i) ; 0 <= i < N - 1 G(i) = B(i) ; i = N - 1如果是通过编程计算进⾏变换,就需要使⽤这个公式逐位的计算;如果是使⽤硬件电路进⾏变换,就可以使⽤做⽽论道前⾯在回答问题时给出的电路。

格雷码转换到⾃然⼆进制数------------设有 N 位格雷码 G(i),把它转换成⾃然⼆进制数的算法如下。

⾃然⼆进制码的最⾼位等于雷码的最⾼位;⾃然⼆进制码的次⾼位为最⾼位⾃然⼆进制码与次⾼位格雷码相异或;⾃然⼆进制码的其余各位与次⾼位⾃然⼆进制码的求法相类似。

转换公式如下: B(i) = G(i) ; i = N - 1 B(i) = B(i+1) XOR G(i) ; 0 <= i < N - 1。

格雷码转化二进制编程方法

格雷码转化二进制编程方法

2. 格雷码转换为自然二进制码根据格雷码转换为自然二进制码的转换规则,实际上就是不断的将格雷码与二进制数做异或操作,也就是说,不断的和本身的不同位数做异或操作,如原数据为32位的A,那么先将A向右移动一位,与本身进行异或,然后保留值为B,那么继续将A向右移动一位,与B进行异或,保留为C,依次类推,直到A=1为止。

程序流程图如下:保存输入数 TEMP,INPUT1如果输入数为0,那么直接返回数据0后退出如果TEMP不等于1,那么循环,否则返回数据TEMP右移1位,与输入值作不断异或功能块中的程序如下:INPUT 输入变量类型为DWORDTEMP 局部变量类型为DWORDINPUT1 局部变量类型为DWORDGRAY_TO_BIN 功能块返回变量返回类型为DWORDGRAY_TO_BIN:TEMP:=INPUT;INPUT1:=INPUT;IF TEMP=DWORD#0 THENINPUT1:=DWORD#0;GRAY_TO_BIN:=INPUT1;RETURN;END_IF;WHILE TEMP<>DWORD#1 DOTEMP:=SHR_DWORD(TEMP,UINT#1);INPUT1:=TEMP XOR INPUT1;END_WHILE;GRAY_TO_BIN:=INPUT1;上述代码在富士的SX系列PLC中试验没有问题,由于富士的SX系列PLC完全支持ST代码方式的编程,因此基本上可以不做修改的应用在西门子的S7系列的PLC中。

由于三菱的PLC中已经包含了自然二进制码转换为格雷码指令GRY以及格雷码转换为自然二进制码指令GBIN,因此上述代码应用于三菱系列的PLC已经没有意义,请使用三菱PLC本身附带的指令,因为西门子以及富士的SX系列PLC并没有附带转换指令,因此本人书写了上述代码用于补充SX系列的指令不足。

因為歐姆龍的ST不能支持數據移位指令,因此如果使用歐姆龍的話,那么FB中需要使用梯形圖來做哦。

格雷码简介及格雷码与二进制的转换程序解读

格雷码简介及格雷码与二进制的转换程序解读

格雷码简介及格雷码与二进制的转换程序格雷码简介及格雷码与二进制的转换程序格雷码简介格雷码(英文:GrayCode,GreyCode,又称作葛莱码,二进制循环码)是1880年由法国工程师Jean-Maurice-EmlleBaudot发明的一种编码[1],因FrankGray于1953年申请专利“PulseCodeCommunication”得名。

当初是为了机械应用,后来在电报上取得了巨大发展[2],现在则常用于模拟-数字转换[3]和转角-数字转换中[4]。

典型格雷码是一种具有反射特性和循环特性的单步自补码,它的循环、单步特格雷码简介及格雷码与二进制的转换程序格雷码简介格雷码(英文:Gray Code, Grey Code,又称作葛莱码,二进制循环码)是1880年由法国工程师Jean-Maurice-EmlleBaudot发明的一种编码[1] ,因Frank Gray于1953年申请专利“Pulse Code Communication”得名。

当初是为了机械应用,后来在电报上取得了巨大发展[2],现在则常用于模拟-数字转换[3]和转角-数字转换中[4] 。

典型格雷码是一种具有反射特性和循环特性的单步自补码,它的循环、单步特性消除了随机取数时出现重大误差的可能,它的反射、自补特性使得求反非常方便[5] 。

格雷码属于可靠性编码,是一种错误最小化的编码,因为它大大地减少了由一个状态到下一个状态时电路中的混淆。

由于这种编码相邻的两个码组之间只有一位不同,因而在用于模-数转换中,当模拟量发生微小变化而可能引起数字量发生变化时,格雷码仅改变一位,这样与其它码同时改变两位或多位的情况相比更为可靠,即可减少出错的可能性.这就允许代码电路能以较少的错误在较高的速度下工作。

格雷码在现代科学上获得了广泛的应用,人们还发现智力玩具九连环的状态变化符合格雷码的编码规律,汉诺塔的解法也与格雷码有关。

除了已知的特点,格雷码还有一些鲜为人知的性质。

格雷码、二进制转换电路,vhdl南京理工大学紫金学院实验报告,eda

格雷码、二进制转换电路,vhdl南京理工大学紫金学院实验报告,eda

对于 n 位二进制码转换为格雷码的码转换电路,转换表达式如下:
g n an gi ai1 ai
2、GENERIC、GENERATE 语句 a、GENERIC GENERIC 被称为参数传递映射语句,它描述响应的元件类属参数间的衔接和传送方式。 参数传递语句用于设计从外部端口改变原件内部参数或结构规模的元件, 也可称其为类书元 件。该语句在改变电路结构或元件硬件升级方面显得尤为便捷。
1)学习用 VHDL 代码描述组合逻辑电路的方法。 2) 掌握 when…else…和 generate 并行语句的使用。
二、 实验原理
1、格雷码、二进制码转换理论分析 4 位格雷码二进制转换的真值表如图 1。
图 1 4 位格雷码二进制转换的真值表 由真值表得到的表达式如下:
B3 G 3 B 2 B3 G 2 B1 B 2 G1 B0 B1 G 0
将未配置的管脚设置为高阻态。 注意:总线“b”和总线“g”不需要配置管脚。 注意:配置好管脚后一定要记得编译。 4、下载 将文件下载到实验箱,对实验箱进行操作,将键 1~键 8 按钮设置为不同的电平,观察 D1~D8 发光二极管的情况。
四、 小结与体会
通过这次实验,我对理论课上老师所讲的 generate 并行语句有了更深一步的了解。 本次实验是我们的第二次实验,但是是第一次在 Quartus II 软件上编写代码。我掌握 when…else…和 generate 并行语句的使用, 并利用 generate 并行语句做了了 8 位二进制码 /格雷码转换电路,且利用实验箱验证了所设计电路的正确性。
注意: “Count every”值一定要比“End time”值小,且“Count every”值最好不要 设置太小 (如 10ns) , 避免在时序仿真是由于延时造成结果不正确。 “Count every” 值和 “End time”值共同决定了输入信号值的数目。 注意:每次仿真时最好从“Simulator Tool”中导入要仿真的文件,而不是直接点击工 具栏上的按钮,尤其是当工程中存在多个仿真文件时。 3、管脚配置 利用实验箱的模式 5 来验证设计电路的正确性。 用键 1~键 8 表示输入管脚 g0~g7,发光二极管 D1~D8 表示输出管脚 b0~b7。 选择“Assignment→Assignment Editor”弹出管脚配置图,在“Location”一栏中填 入相应器件的管脚。如下图。

格雷码(GrayCode)转二进制码(BinaryCode)

格雷码(GrayCode)转二进制码(BinaryCode)

格雷码(GrayCode)转⼆进制码(BinaryCode)学习verilog generate语句时,偶然看到⽤generate语句来进⾏格雷码到⼆进制码转换的代码,就从⽹上找了⼀些案例来学习。

下表为⼏种⾃然⼆进制码与格雷码的对照表:⼗进制数⾃然⼆进制数格雷码⼗进制数⾃然⼆进制数格雷码0000000008100011001000100019100111012001000111010101111300110010111011111040100011012110010105010101111311011011601100*************7011101001511111000格雷码转换为⼆进制码算法有以下⼏种表述形式:表述⼀:⼆进制格雷码为G n-1G n-2...G2G1G0对应的⾃然⼆进制码为B n-1B n-2...B2B1B0其中:最⾼位保留—B n-1=G n-1其他各位—B i-1=G i-1xor B i,i=1,2,...,n-1表述⼆:B i = ˆG[n-1:i]=G[n-1]ˆG[n-2]ˆ..ˆG[i],i=0,1,...,n-1表述三:B i = ˆ(G>>i),i=0,1,...,n-1表述⼀的仿真实例:源代码:1///adamite/archive/2008/10/20/1314949.html2//example23module GrayToBinary2 (binarycode, graycode);4parameter n = 4; // this module is parameterizable5output reg [n-1:0] binarycode;6input [n-1:0] graycode;7integer i;8always @ (graycode)9begin10 binarycode[n-1]=graycode[n-1];11for(i=1;i<=n-1;i=i+1)12 binarycode[i-1]=graycode[i-1] ^ binarycode[i];//⽐较节省空间13end14endmodule测试代码:1 `timescale 1ns/1ns2module tb_GrayToBinary2;34reg [3:0] gray;5wire [3:0] bin;67 GrayToBinary2 dut (bin,gray);813 #10;14 gray = 4'h2;15 #10;16 gray = 4'h3;17 #10;18 gray = 4'he;19 #10;20 gray = 4'h7;21 #10;22 gray = 4'hf;23end24endmodule仿真结果:modelsim⽣成的原理图(注意要在vsim后⾯加上-debugDB选项)从仿真结果来看,格雷码转⼆进制码过程中出现错误。

二进制与格雷码之间的转换

二进制与格雷码之间的转换

二进制与格雷码之间的转换在公司的PLC 改造项目中,我们经常要用到格雷码输出的绝对型旋转编码器。

由于格雷码是一种非加权码,不能直接反应出当前的角度值,所以必须在PLC 程序中将它转换成能反应当前实际位置的二进制码。

为了让我们的工程技术人员均能很好的掌握格雷码与二进制码之间的转换方法,我根据自己的一些经验和参考资料,将格雷码的相关知识作了些整理,在公司的刊物上发表出来,希望能和大家一起对这个问题来加以讨论和学习,共同提高我们的技术水平。

一、 格雷码(Gray Code )的概念格雷码是我们在工程中常会遇到的一种编码方式,例如,大多数绝对型旋转编码的输出就是采用格雷码的编码格式。

它是一种非加权码,由二进制码派生而来。

常用的二进制数与格雷码间的转换关系如下表:从上表我们可以看出,与普通二进制编码相比,格雷码的特点是相邻两个数之间只有1个二进制位发生了变化。

正是这个特点,使它更适合于用在数据传输的场合。

二、 二进制与格雷码之间的转换(一)、二进制码转为格雷码二进制码转为格雷码的算法较简单,将所需转换的数的二进制码右移一位后与原数相异或即可。

例:十进制数9的格雷码为:9的二进制数形式 9的格雷码形式 9的二进制数右移1位后的结果 两者相异或(二)、格雷码转为二进制码格雷码转为二进制码的算法则较为繁琐,计算公式如下: Rn 为n 位的格雷码,Cn 为转换后的二进制码C n = R n ,C n-1 = R n ⊕R n-1,C n-2 = R n ⊕R n-1⊕R n-2,…C 1 = R n ⊕R n-1⊕R n-2⊕…⊕R 2⊕R 1,C 0 = R n ⊕R n-1⊕R n-2⊕…⊕R 2⊕R 1⊕R 0例:格雷码(1001)转位二进制数C 4= R 4=1C 3= R 4⊕R 3=1⊕0=1C 2= R 4⊕R 3⊕R 2= C 3⊕R 2=1⊕0=1C1= R 4⊕R 3⊕R 2⊕R1= C 2⊕R 1=1⊕1=0三、 编程举例根据工业控制的特点,现分别给出在PLC 梯形图中和在VB 中实现格雷码转二进制码的程序。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

码的其余各位与次高位自然二进制码的求法相类似。
三、二进制格雷码与自然二进制码互换的实现方法 1、自然二进制码转换成二进制格雷码
a)、软件实现法(参见示例工程中的 binary to gray) 根据自然二进制转换成格雷码的法则,可以得到以下的代码:
static unsigned int decimaltogray(unsigned int x) {
根据二进制格雷码转换成自然二进制码的法则,可以得到以下的三种代码方式: static unsigned int graytodecimal(unsigned int x) {
unsigned int y = x; while(x> > =1) y ^= x; return y; } static unsigned int graytodecimal(unsigned int x) { x^=x> > 16; x^=x> > 8; x^=x> > 4; x^=x> > 2;
自然二进制码转换成二进制格雷码,其法则是保留自然二进制码的最高位作为格雷码的 最高位,而次高位格雷码为二进制码的高位与次高位相异或,而格雷码其余各位与次高位的 求法相类似。
2、二进制格雷码转换成自然二进制码 二进制格雷码转换成自然二进制码,其法则是保留格雷码的最高位作为自然二进制码的
最高位,而次高位自然二进制码为高位自然二进制码与次高位格雷码相异或,而自然二进制
在数字系统中只能识别 0 和 1,各种数据要转换为二进制代码才能进行处理,格雷码是 一种无权码,采用绝对编码方式,典型格雷码是一种具有反射特性和循环特性的单步自补码, 它的循环、单步特性消除了随机取数时出现重大误差的可能,它的反射、自补特性使得求反 非常方便。格雷码属于可靠性编码,是一种错误最小化的编码方式,因为,自然二进制码可 以直接由数/模转换器转换成模拟信号,但某些情况,例如从十进制的 3 转换成 4 时二进制 码的每一位都要变,使数字电路产生很大的尖峰电流脉冲。而格雷码则没有这一缺点,它是 一种数字排序系统,其中的所有相邻整数在它们的数字表示中只有一个数字不同。它在任意 两个相邻的数之间转换时,只有一个数位发生变化。它大大地减少了由一个状态到下一个状 态时逻辑的混淆。另外由于最大数与最小数之间也仅一个数不同,故通常又叫格雷反射码或 循环码。下表为几种自然二进制码与格雷码的对照表: 十进制数 自然二进制数 格雷码 十进制数 自然二进制数 格雷码
在精确定位控制系统中,为了提高控制精度,准确测量控制对象的位置是十分重要的。目前, 检测位置的办法有两种:其一是使用位置传感器,测量到的位移量由变送器经 a/d 转换成数 字量送至系统进行进一步处理。此方法精度高,但在多路、长距离位置监控系统中,由于其 成本昂贵,安装困难,因此并不实用;其二是采用光电轴角编码器进行精确位置控制。光电 轴角编码器根据其刻度方法及信号输出形式,可分为增量式、绝对式以及混合式三种。而绝 对式编码器是直接输出数字量的传感器,它是利用自然二进制或循环二进制(格雷码)方式 进行光电转换的,编码的设计一般是采用自然二进制码、循环二进制码、二进制补码等。特 点是不要计数器,在转轴的任意位置都可读出一个固定的与位置相对应的数字码;抗干扰能 力强,没用累积误差;电源切断后位置信息不会丢失,但分辨率是由二进制的位数决定的, 根据不同的精度要求,可以选择不同的分辨率即位数。目前有 10 位、11 位、12 位、13 位、 14 位或更高位等多种。
其中采用循环二进制编码的绝对式编码器,其输出信号是一种数字排序,不是权重码, 每一位没有确定的大小,不能直接进行比较大小和算术运算,也不能直接转换成其他信号, 要经过一次码变换,变成自然二进制码,在由上位机读取以实现相应的控制。而在码制变换 中有不同的处理方式,本文着重介绍二进制格雷码与自然二进制码的互换。 一、格雷码(又叫循环二进制码或反射二进制码)介绍
returgned int 型数据到格雷码的转换,最高可转换 32 位自然二进制码, 超出 32 位将溢出。
static int decimaltogray( int x) {
return x^(x> > 1); }
//以上代码实现了 int 型数据到格雷码的转换,最高可转换 31 位自然二进制码,超出 31 位将溢出。
上述代码即可用于 vc 控制程序中,也可以用于单片机控制程序中。在单片机程序设计 时,若采用汇编语言编程,可以按相同的原理设计程序;若采用 c 语言编程,则可以直接利 用上述代码,但建议用 unsigned int 函数。 b)、硬件实现法
根据自然二进制转换成格雷码的法则,可以得到以下电路图:
上图所示电路图即可用异或集成电路 74ls136 实现,也可以利用可编程器件 pld 等编程 实现。 2、二进制格雷码转换成自然二进制码 a)、软件实现法(参见示例工程中的 gray to binary )
0 0000 0000 8 1000 1100 1 0001 0001 9 1001 1101 2 0010 0011 10 1010 1111 3 0011 0010 11 1011 1110 4 0100 0110 12 1100 1010 5 0101 0111 13 1101 1011 6 0110 0101 14 1110 1001 7 0111 0100 15 1111 1000 二、二进制格雷码与自然二进制码的互换 1、自然二进制码转换成二进制格雷码
x^=x^1; return x; } static unsigned int graytodecimal(unsigned int x) { int i; for(i=0;(1 < <i) <sizeof(x)*8;i++) {
x^=x> > (1 < <i); } return x; } //以上代码实现了 unsigned int 型数据到自然二进制码的转换,最高可转换 32 位格雷码, 超出 32 位将溢出。将数据类型改为 int 型即可实现 31 位格雷码转换。 上述代码即可用于 vc 控制程序中,也可以用于单片机控制程序中。在单片机程序设计 时,若采用汇编语言编程,可以按相同的原理设计程序;若采用 c 语言编程,则可以直接利 用上述代码,但建议用 unsigned int 函数
相关文档
最新文档