文档库 最新最全的文档下载
当前位置:文档库 › 格雷码转化二进制编程方法

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

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

2. 格雷码转换为自然二进制码

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

保存输入数 TEMP,INPUT1

如果输入数为0,那么直接返回数据0后退出

如果TEMP不等于1,那么循环,否则返回数据

TEMP右移1位,与输入值作不断异或

功能块中的程序如下:

INPUT 输入变量类型为DWORD

TEMP 局部变量类型为DWORD

INPUT1 局部变量类型为DWORD

GRAY_TO_BIN 功能块返回变量返回类型为DWORD

GRAY_TO_BIN:

TEMP:=INPUT;

INPUT1:=INPUT;

IF TEMP=DWORD#0 THEN

INPUT1:=DWORD#0;

GRAY_TO_BIN:=INPUT1;

RETURN;

END_IF;

WHILE TEMP<>DWORD#1 DO

TEMP:=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中需要使用梯形圖來做哦。

格雷码转二进制原理

在精确定位控制系统中,为了提高控制精度,准确测量控制对象的位置是十分重要的。目前,检测位置的办法有两种:其一是使用位置传感器,测量到的位移量由变送器经a/d转换成数字量送至系统进行进一步处理。此方法精度高,但在多路、长距离位置监控系统中,由于其成本昂贵,安装困难,因此并不实用;其二是采用光电轴角编码器进行精确位置控制。光电轴角编码器根据其刻度方法及信号输出形式,可分为增量式、绝对式以及混合式三种。而绝对式编码器是直接输出数字量的传感器,它是利用自然二进制或循环二进制(格雷码)方式进行光电转换的,编码的设计一般是采用自然二进制码、循环二进制码、二进制补码等。特点是不要计数器,在转轴的任意位置都可读出一个固定的与位置相对应的数字码;抗干扰能力强,没用累积误差;电源切断后位置信息不会丢失,但分辨率是由二进制的位数决定的,根据不同的精度要求,可以选择不同的分辨率即位数。目前有10位、11位、12位、13位、14位或更高位等多种。 其中采用循环二进制编码的绝对式编码器,其输出信号是一种数字排序,不是权重码,每一位没有确定的大小,不能直接进行比较大小和算术运算,也不能直接转换成其他信号,要经过一次码变换,变成自然二进制码,在由上位机读取以实现相应的控制。而在码制变换中有不同的处理方式,本文着重介绍二进制格雷码与自然二进制码的互换。 一、格雷码(又叫循环二进制码或反射二进制码)介绍 在数字系统中只能识别0和1,各种数据要转换为二进制代码才能进行处理,格雷码是一种无权码,采用绝对编码方式,典型格雷码是一种具有反射特性和循环特性的单步自补码,它的循环、单步特性消除了随机取数时出现重大误差的可能,它的反射、自补特性使得求反非常方便。格雷码属于可靠性编码,是一种错误最小化的编码方式,因为,自然二进制码可以直接由数/模转换器转换成模拟信号,但某些情况,例如从十进制的3转换成4时二进制码的每一位都要变,使数字电路产生很大的尖峰电流脉冲。而格雷码则没有这一缺点,它是一种数字排序系统,其中的所有相邻整数在它们的数字表示中只有一个数字不同。它在任意两个相邻的数之间转换时,只有一个数位发生变化。它大大地减少了由一个状态到下一个状态时逻辑的混淆。另外由于最大数与最小数之间也仅一个数不同,故通常又叫格雷反射码或循环码。下表为几种自然二进制码与格雷码的对照表: 十进制数自然二进制数格雷码十进制数自然二进制数格雷码 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、自然二进制码转换成二进制格雷码 自然二进制码转换成二进制格雷码,其法则是保留自然二进制码的最高位作为格雷码的最高位,而次高位格雷码为二进制码的高位与次高位相异或,而格雷码其余各位与次高位的求法相类似。 2、二进制格雷码转换成自然二进制码 二进制格雷码转换成自然二进制码,其法则是保留格雷码的最高位作为自然二进制码的最高位,而次高位自然二进制码为高位自然二进制码与次高位格雷码相异或,而自然二进制

格雷码、二进制转换及译码电路

EDA技术与应用 实验报告 实验名称:格雷码、二进制转换及译码电路 姓名:陈丹 学号:100401202 班级:电信(2)班 时间:2012.11.27 南京理工大学紫金学院电光系

一、实验目的 1)学习用VHDL代码描述组合逻辑电路的方法。 2) 掌握when….else….,generate和case并行语句的使用。 二、实验原理 1)学习VHDL的when….else….,generate和case并行语句。 2)利用when….else….并行语句描述4位二进制码/格雷码转换电路。 3)利用generate并行语句描述n位格雷码/二进制码转换电路。 4)利用case并行语句实现译码电路。 5)利用实验箱验证所设计的电路的正确性,要求将输入输出的数据用数码管显示。 三、实验内容 1、二进制转换为格雷码 4位二进制格雷码转换的真值表如图所示:

1.1建立工程,输入代码 先建立工程,工程命名为“btog”,顶层文件名为“btog”。 选择“file→new”,在弹出的窗口中选择“VHDL File”建立“VHDL”文件。 在新建的VHDL文件中输入二进制格雷码转换的VHDL代码,将文件保存。 二进制转换为格雷码的代码: 1.2 编译仿真 对当前文件进行编译,编译通过以后建立仿真波形,保存为“b_to_g.vwf”.为波形文件添加节点,将“end time”设置为100μs ,将输入输出编组,并为输入信号赋值,其中“start value”为“0000”,“count every”设置为5μs.其波形如下:

仿真结果 2、generate语句实现格雷码转换为二进制 对于n位二进制转换为格雷码的码转换电路,转换表达式如下: Bn=Gn Bi=Gi⊕B(i+1) 2.1建立工程,输入代码 先建立工程,工程命名为“gtob”,顶层文件名为“g_to_b2”。 选择“file→new”,在弹出的窗口中选择“VHDL File”建立“VHDL”文件。 在新建的VHDL文件中输入格雷码二进制转换的VHDL代码,将文件保存。 转换代码:

格雷码和二进制码的转换

二进制格雷码与自然二进制码的互换 中国科学院光电技术研究所游志宇 示例工程下载 在精确定位控制系统中,为了提高控制精度,准确测量控制对象的位置是十分重要的。目前,检测位置的办法有两种:其一是使用位置传感器,测量到的位移量由变送器经A/D转换成数字量送至系统进行进一步处理。此方法精度高,但在多路、长距离位置监控系统中,由于其成本昂贵,安装困难,因此并不实用;其二是采用光电轴角编码器进行精确位置控制。光电轴角编码器根据其刻度方法及信号输出形式,可分为增量式、绝对式以及混合式三种。而绝对式编码器是直接输出数字量的传感器,它是利用自然二进制或循环二进制(格雷码)方式进行光电转换的,编码的设计一般是采用自然二进制码、循环二进制码、二进制补码等。特点是不要计数器,在转轴的任意位置都可读出一个固定的与位置相对应的数字码;抗干扰能力强,没用累积误差;电源切断后位置信息不会丢失,但分辨率是由二进制的位数决定的,根据不同的精度要求,可以选择不同的分辨率即位数。目前有10位、11位、12位、13位、14位或更高位等多种。 其中采用循环二进制编码的绝对式编码器,其输出信号是一种数字排序,不是权重码,每一位没有确定的大小,不能直接进行比较大小和算术运算,也不能直接转换成其他信号,要经过一次码变换,变成自然二进制码,在由上位机读取以实现相应的控制。而在码制变换中有不同的处理方式,本文着重介绍二进制格雷码与自然二进制码的互换。 一、格雷码(又叫循环二进制码或反射二进制码)介绍 在数字系统中只能识别0和1,各种数据要转换为二进制代码才能进行处理,格雷码是一种无权码,采用绝对编码方式,典型格雷码是一种具有反射特性和循环特性的单步自补码,它的循环、单步特性消除了随机取数时出现重大误差的可能,它的反射、自补特性使得求反非常方便。格雷码属于可靠性编码,是一种错误最小化的编码方式,因为,自然二进制码可以直接由数/模转换器转换成模拟信号,但某些情况,例如从十进制的3转换成4时二进制码的每一位都要变,使数字电路产生很大的尖峰电流脉冲。而格雷码则没有这一缺点,它是一种数字排序系统,其中的所有相邻整数在它们的数字表示中只有一个数字不同。它在任意两个相邻的数之间转换时,只有一个数位发生变化。它大大地减少了由一个状态到下一个状态时逻辑的混淆。另外由于最大数与最小数之间也仅一个数不同,故通常又叫格雷反射码或循环码。下表为几种自然二进制码与格雷码的对照表: 十进制数自然二进制数格雷码十进制数自然二进制数格雷码 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

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

格雷码简介及格雷码与二进制的转换程序 格雷码简介 格雷码(英文:Gray Code, Grey Code,又称作葛莱码,二进制循环码)是1880年由法国工程师Jean-Maurice-Emlle Baudot发明的一种编码[1] ,因Frank Gray于1953年申请专利“Pulse Code Communication”得名。当初是为了机械应用,后来在电报上取得了巨大发展[2],现在则常用于模拟-数字转换[3]和转角-数字转换中[4] 。 典型格雷码是一种具有反射特性和循环特性的单步自补码,它的循环、单步特性消除了随机取数时出现重大误差的可能,它的反射、自补特性使得求反非常方便[5] 。 格雷码属于可靠性编码,是一种错误最小化的编码,由于它大大地减少了由一个状态到下一个状态时电路中的混淆。因为这种编码相邻的两个码组之间只有一位不同,因而在用于模-数转换中,当模拟量发生微小变化而可能引起数字量发生变化时,格雷码仅改变一位,这样与其它码同时改变两位或多位的情况相比更为可靠,即可减少出错的可能性.这就允许代码电路能以较少的错误在较高的速度下工作。 格雷码在现代科学上获得了广泛的应用,人们还发现智力玩具九连环的状态变化符合格雷码的编码规律,汉诺塔的解法也与格雷码有关。 除了已知的特点,格雷码还有一些鲜为人知的性质。多数数字电子技术和计算机技术的文献认为格雷码是无权码,只有J.F.A. Thompson认为可以从格雷码直接转换成十进制数[6]。如果将格雷码的“权”及格雷码的奇偶性等性质在数学上给予证明,将有助于格雷码研究与应用的发展,有助于自动化技术的发展,还可有助于计算机科学的发展。 /* 格雷码与二进制的转换程序 * 本程序采用递推的方法进行推导,可以转换0~2147483647之间的数 (1~31位) * 推导方式如下(以三位格雷码为例): * 序号格雷码格雷码实值二进制码二进制实值 * 0 000 0 000 0 * 1 001 1 001 1 * 2 011 3 010 2 * 3 010 2 011 3 * 4 110 6 100 4 * 5 111 7 101 5 * 6 101 5 110 6 * 7 100 4 111 7 * 由上面的数据可看出.如果,按照序号01327645的方式遍历格雷码.其编 * 码实值是按自然数顺序排列.反之,如果按此顺序遍历其二进制实值.则会发 * 现遍历过的数据的个数减一即为二进制码所对应格雷码的实值.再观察序号 * 顺序,我们会发现: 如果把二进制码分半,前半部分从前向后遍历,后半部分 * 从后向前遍历.如果分半部分可再分,则再将其分半.并按照前半部分从前向

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

格雷码与二进制代码的转换规则 一、什么是格雷码? 首先我们来了解一下格雷码。前面我们介绍了一些常见的BCD码,8421BCD、2421BCD、5421BCD,还有余三码,那么这个格雷码我们接触较少,什么是格雷码呢?这种码是一个叫弗兰克*格雷的人在1953年发明的,最初用于通信。 格雷码,又叫循环二进制码或反射二进制码,它的基本的特点就是任意两个相邻的代码只有一位二进制数不同,这点在下面会详细讲解到。在数字系统中,常要求代码按一定顺序变化。例如,按自然数递增计数,若采用8421码,则数0111变到1000时四位均要变化,而在实际电路中,4位的变化不可能绝对同时发生,则计数中可能出现短暂的其它代码(1100、1111等)。在特定情况下可能导致电路状态错误或输入错误。使用格雷码可以避免这种错误。格雷码属于可靠性编码,是一种错误最小化的编码方式。 举个例子来说吧,如果用一个8位的二进制数表示热水壶的温度,温度是不断连续变化的,36°C、37°C、38°C......,那么温度每升高一度,二进制数就加1。这时候,二进制数有可能是多个位同时变化的:当温度由119°C变成120°C时,二进制数由01110111变化成01111000,有四个位发生变化;当二进制数由177°C变化成178°C时,二进制数由01111111变化成10000000,有8个位发生了变化。也就是说,自然二进制数在表示一个连续变化的数值时,可能会有多个位同时发生变化,每个位翻转(变化)的频率是比较高的,这在某些应用场合,是十分不利的。而格雷码,由于具有循环特性和单步特性,当用它表示

一个连续变化的数值时,仅有一个位会翻转,大大的降低了位翻转的频率,因而可以保证传输的稳定性,较少传输误码率。格雷码的单步特性呢就是是指,当格雷码表示的一个数值,连续变化时,格雷码只有一个位会变化。就是我刚才说的它最基本的特点了。还有格雷码的单步特性是指,当格雷码表示的一个数值,连续变化时,格雷码只有一个位会变化。看表,1000变到0000,格雷码只有一位翻转。 二、格雷码与二进制码转换规则 大家看一下这个表,有没有发现二进制转为格雷码的规律?看上去,格雷码似乎很乱,不像8421码那样连续的。我们记8421码的时候很轻松,因为它每位的值都是固定的数,有位权。那么我们怎么记格雷码呢?死背真值表?当然了,这是一种方法,有能力又勤奋的同学可以用这种方法。不过呢,很多东西都是有它独特的规律的,格雷码也不例外。现在我们先来看二进制转换为格雷码的过程,也就是编码。 最初就说了,格雷码的基本特点就是任意两个相邻的代码只有一位二进制 十进制数 自然二进制数 格雷码 十进制数 自然二进制数 格雷码 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

格雷码与二进制转换

在数字系统中只能识别0和1,各种数据要转换为二进制代码才能进行处理,格雷码是一种无权码,采用绝对编码方式,典型格雷码是一种具有反射特性和循环特性的单步自补码,它的循环、单步特性消除了随机取数时出现重大误差的可能,它的反射、自补特性使得求反非常方便。格雷码属于可靠性编码,是一种错误最小化的编码方式,因为,自然二进制码可以直接由数/模转换器转换成模拟信号,但某些情况,例如从十进制的3转换成4时二进制码的每一位都要变,使数字电路产生很大的尖峰电流脉冲。而格雷码则没有这一缺点,它是一种数字排序系统,其中的所有相邻整数在它们的数字表示中只有一个数字不同。它在任意两个相邻的数之间转换时,只有一个数位发生变化。它大大地减少了由一个状态到下一个状态时逻辑的混淆。另外由于最大数与最小数之间也仅一个数不同,故通常又叫格雷反射码或循环码。 二、二进制格雷码与自然二进制码的互换 1、自然二进制码转换成二进制格雷码 自然二进制码转换成二进制格雷码,其法则是保留自然二进制码的最高位作为格雷码的最高位,而次高位格雷码为二进制码的高位与次高位相异或,而格雷码其余各位与次高位的求法相类似。 例如:自然二进制编码如下: 1001 那么转换为格雷码的方法是:保留最高位1,然后将第二位0与第一位1做异或操作,第三位的0与第二位的0做异或操作,第四位的1与第三位的0做异或操作,得到结果如下: 1 1 0 1 Gray

2、二进制格雷码转换成自然二进制码 二进制格雷码转换成自然二进制码,其法则是保留格雷码的最高位作为自然二进制码的最高位,而次高位自然二进制码为高位自然二进制码与次高位格雷码相异或,而自然二进制码的其余各位与次高位自然二进制码的求法相类似。例如:将格雷码1000转换为自然二进制码: 1000 1111 上排为格雷码,下排为自然二进制,从左到右分别为1~4位 将上排的第一位高位作为自然二进制的最高位,因此在下排的第一位填入1,然后以上排第二位与下排第一位做异或操作,得到下排第二位结果为1,将上排第三位与下排第二位做异或操作,得到下排第三位的结果为1,同理,下排第四位的结果为1,因此,我们得到了转换结果如下: 1 1 1 1 Bin 二进制码->格雷码(编码):从最右边一位起,依次将每一位与左边一位异或(XOR),作为对应格雷码该位的值,最左边一位不变(相当于左边是0); 格雷码-〉二进制码(解码):从左边第二位起,将每位与左边一位解码后的值异或,作为该位解码后的值(最左边一位依然不变).

格雷码与二进制码的互转

格雷码与二进制码的互转 在数字系统中只能识别0和1,各种数据要转换为二进制代码才能进行处理,格雷码是一种无权码,采用绝对编码方式,典型格雷码是一种具有反射特性和循环特性的单步自补码,它的循环、单步特性消除了随机取数时出现重大误差的可能,它的反射、自补特性使得求反非常方便。格雷码属于可靠性编码,是一种错误最小化的编码方式,因为,自然二进制码可以直接由数/模转换器转换成模拟信号,但某些情况,例如从十进制的3转换成4时二进制码的每一位都要变,使数字电路产生很大的尖峰电流脉冲。而格雷码则没有这一缺点,它是一种数字排序系统,其中的所有相邻整数在它们的数字表示中只有一个数字不同。它在任意两个相邻的数之间转换时,只有一个数位发生变化。它大大地减少了由一个状态到下一个状态时逻辑的混淆。另外由于最大数与最小数之间也仅一个数不同,故通常又叫格雷反射码或循环码。 Gray Code是由贝尔实验室的Frank Gray在20世纪40年代提出的(是1880年由法国工程师Jean-Maurice-Emlle Baudot发明的),用来在使用PCM(Pusle Code Modulation)方法传送讯号时避免出错,并于1953年3月17日取得美国专利。由定义可知,Gray Code的编码方式不是唯一的,这里讨论的是最常用的一种。 二进制格雷码与自然二进制码的互换 1、自然二进制码转换成二进制格雷码 自然二进制码转换成二进制格雷码,其法则是保留自然二进制码的最高位作为格雷码的最高位,而次高位格雷码为二进制码的高位与次高位相异或,而格雷码其余各位与次高位的求法相类似。 例如: 自然二进制编码如下:

二进制格雷码与自然二进制码的互换

二进制格雷码与自然二进制码的互换 作者:狼图腾出处:豆豆网-c 2007年03月16日 00:00 进入论坛 相关主题:格雷码转二进制格雷码转二进制公式格雷码格雷码计数器格雷码编码什么是格雷码二进制码二进制偏置码二进制自然码 本文示例源代码或素材下载 在精确定位控制系统中,为了提高控制精度,准确测量控制对象的位置是十分重要的。目前,检测位置的办法有两种:其一是使用位置传感器,测量到的位移量由变送器经A/D转换成数字量送至系统进行进一步处理。此方法精度高,但在多路、长距离位置监控系统中,由于其成本昂贵,安装困难,因此并不实用;其二是采用光电轴角编码器进行精确位置控制。光电轴角编码器根据其刻度方法及信号输出形式,可分为增量式、绝对式以及混合式三种。而绝对式编码器是直接输出数字量的传感器,它是利用自然二进制或循环二进制(格雷码)方式进行光电转换的,编码的设计一般是采用自然二进制码、循环二进制码、二进制补码等。特点是不要计数器,在转轴的任意位置都可读出一个固定的与位置相对应的数字码;抗干扰能力强,没用累积误差;电源切断后位置信息不会丢失,但分辨率是由二进制的位数决定的,根据不同的精度要求,可以选择不同的分辨率即位数。目前有10位、11位、12位、13位、14位或更高位等多种。 其中采用循环二进制编码的绝对式编码器,其输出信号是一种数字排序,不是权重码,每一位没有确定的大小,不能直接进行比较大小和算术运算,也不能直接转换成其他信号,要经过一次码变换,变成自然二进制码,在由上位机读取以实现相应的控制。而在码制变换中有不同的处理方式,本文着重介绍二进制格雷码与自然二进制码的互换。 一、格雷码(又叫循环二进制码或反射二进制码)介绍 在数字系统中只能识别0和1,各种数据要转换为二进制代码才能进行处理,格雷码是一种无权码,采用绝对编码方式,典型格雷码是一种具有反射特性和循环特性的单步自补码,它的循环、单步特性消除了随机取数时出现重大误差的可能,它的反射、自补特性使得求反非常方便。格雷码属于可靠性编码,是一种错误最小化的编码方式,因为,自然二进制码可以直接由数/模转换器转换成模拟信号,但某些情况,例如从十进制的3转换成4时二进制码的每一位都要变,使数字电路产生很大的尖峰电流脉冲。而格雷码则没有这一缺点,它是一种数字排序系统,其中的所有相邻整数在它们的数字表示中只有一个数字不同。它在任意两个相邻的数之间转换时,只有一个数位发生变化。它大大地减少了由一个状态到下一个状态时逻辑的混淆。另外由于最大数与最小数之间也仅一个数不同,故通常又叫格雷反射码或循环码。下表为几种自然二进制码与格雷码的对照表: 十进制数自然二进制数格雷码十进制数自然二进制数格雷码 0 0000 0000 8 1000 1100

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

格雷码简介及格雷码与二进制的转换程 序 格雷码简介及格雷码与二进制的转换程序格雷码简介格雷码(英文:GrayCode,GreyCode,又称作葛莱码,二进制循环码)是1880年由法国工程师Jean-Maurice-EmlleBaudot发明的一种编码[1],因FrankGray于1953年申请专利“PulseCodeCommunication”得名。当初是为了机械应用,后来在电报上取得了巨大发展[2],现在则常用于模拟-数字转换[3]和转角-数字转换中[4]。典型格雷码是一种具有反射特性和循环特性的单步自补码,它的循环、单步特 格雷码简介及格雷码与二进制的转换程序 格雷码简介 格雷码(英文:Gray Code, Grey Code,又称作葛莱码,二进制循环码)是1880年由法国工程师Jean-Maurice-Emlle Baudot发明的一种编码[1] ,因Frank Gray于1953年申请专利“Pulse Code Communication”得名。当初是为了机械应用,后来在电报上取得了巨大发展[2],现在则常用于模拟-数字转换[3]和转角-数字转换中[4] 。 典型格雷码是一种具有反射特性和循环特性的单步自补码,它的循环、单步特性消除了随机取数时出现重大误差的可能,它的反射、自补特性使得求反非常方便[5] 。 格雷码属于可靠性编码,是一种错误最小化的编码,因为它大大地减少了由一个状态到下一个状态时电路中的混淆。由于这种编码相邻的两个码组之间只有一位不同,因而在用于模-数转换中,当模拟量发生微小变化而可能引起数字量发生变化时,格雷码仅改变一位,这样与其它码同时改变两位或多位的情况相比更为可靠,即可减少出错的可能性.这就允许代码电路能以较少的错误在较高的速度下工作。 格雷码在现代科学上获得了广泛的应用,人们还发现智力玩具九连环的状态变化符合格雷码的编码规律,汉诺塔的解法也与格雷码有关。 除了已知的特点,格雷码还有一些鲜为人知的性质。多数数字电子技术和计算机技术的文献认为格雷码是无权码,只有J.F.A. Thompson认为可以从格雷码直接转换成十进制数[6]。如果将格雷码的“权”及格雷码的奇偶性等性质在数学上给予证明,将有助于格雷码研究与应用的发展,有助于自动化技术的发展,还可有助于计算机科学的发展。 /* 格雷码与二进制的转换程序 * 本程序采用递推的方法进行推导,可以转换0~2147483647之间的数(1~31位) * 推导方式如下(以三位格雷码为例):

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

格雷码简介及格雷码与二进制的转换程序 一、格雷码简介 格雷码(英文:Gray Code, Grey Code,又称作葛莱码,二进制循环码)是1880年由法国工程师Jean-Maurice-Emlle Baudot发明的一种编码[1] ,因Frank Gray于1953年申请专利“Pulse Code Communication”得名。当初是为了机械应用,后来在电报上取得了巨大发展[2],现在则常用于模拟-数字转换[3]和转角-数字转换中[4] 。 典型格雷码是一种具有反射特性和循环特性的单步自补码,它的循环、单步特性消除了随机取数时出现重大误差的可能,它的反射、自补特性使得求反非常方便[5] 。 格雷码属于可靠性编码,是一种错误最小化的编码,因为它大大地减少了由一个状态到下一个状态时电路中的混淆。由于这种编码相邻的两个码组之间只有一位不同,因而在用于模-数转换中,当模拟量发生微小变化而可能引起数字量发生变化时,格雷码仅改变一位,这样与其它码同时改变两位或多位的情况相比更为可靠,即可减少出错的可能性.这就允许代码电路能以较少的错误在较高的速度下工作。 格雷码在现代科学上获得了广泛的应用,人们还发现智力玩具九连环的状态变化符合格雷码的编码规律,汉诺塔的解法也与格雷码有关。 除了已知的特点,格雷码还有一些鲜为人知的性质。多数数字电子技术和计算机技术的文献认为格雷码是无权码,只有J.F.A. Thompson认为可以从格雷码直接转换成十进制数[6]。如果将格雷码的“权”及格雷码的奇偶性等性质在数学上给予证明,将有助于格雷码研究与应用的发展,有助于自动化技术的发展,还可有助于计算机科学的发展。 二、格雷码与二进制的转换程序 * 本程序采用递推的方法进行推导,可以转换0~2147483647之间的数(1~31位) * 推导方式如下(以三位格雷码为例): * 序号格雷码格雷码实值二进制码二进制实值 * 0 000 0 000 0 * 1 001 1 001 1 * 2 011 3 010 2 * 3 010 2 011 3 * 4 110 6 100 4 * 5 111 7 101 5 * 6 101 5 110 6 * 7 100 4 111 7 * 由上面的数据可看出.如果,按照序号01327645的方式遍历格雷码.其编 * 码实值是按自然数顺序排列.反之,如果按此顺序遍历其二进制实值.则会发 * 现遍历过的数据的个数减一即为二进制码所对应格雷码的实值.再观察序号 * 顺序,我们会发现: 如果把二进制码分半,前半部分从前向后遍历,后半部分 * 从后向前遍历.如果分半部分可再分,则再将其分半.并按照前半部分从前向 * 后遍历(分解),后半部分从后向前遍历的方式遍历(分解).直到不可分.即可 * 实现按序号所描述顺序遍历二进制码.如果,按此顺序遍历二进制码,我们可 * 以很方便地在序列中找到所要的二进制码与其对应的格雷码.本思想可以很 * 方便地用递归实现.这样就实现了二进制到格雷码的转换.同样,格雷码到二

二进制格雷码解读

进口:位数:R7,此例R7=23 二进制数:R3R4R5 临时LB LB1 LB2 出口:格雷码:R3R4R5 二进位码第n位 = 二进位码第(n+1)位+格雷码第n位主城:EZG: MOV A,R5 ;取最低位进LB1 RRC A MOV LB1,C EZG1: LCALL YYWZC ;整体带C向右移动 MOV A,R5 ;取最低+1 位进LB2 RRC A MOV LB2,C LCALL YHZC ;LB1 LB2异或运算,结果存在LB MOV A,R5 ;把异或结果LB存最低位RRC,A MOV C,LB RLC,A MOV R5,A MOV C,LB2 ;LB2值存进LB1 MOV LB1,C LCALL YYWZC ;整体带C向右移动,把最低位的格雷码移到最高位 DJNZ R7,EZG1 ;位数,此例23位 MOV A,R5 ;最低位清0 RRC A CLR C RLC A MOV R5,A LCALL YYWZC ;整体带C向右移动,得到最终格雷码 RET 右移位子程:YYWZC: MOV A,R5 RRC A MOV A,R3 RRC A MOV R3,A MOV A,R4 RRC A MOV R4,A MOV A,R5 RRC A MOV R5,A RET 二进位码第n位和二进位码第(n+1)位作比较子程,相等为0,不等为1:即异或 YHZC: RET 2、格雷码转23位二进制二进位码第n位 = 二进位码第(n+1)位+格雷码第n位 GZE: CLR C ;取最高位进LB1 MOV LB1,C GZE1: LCALL ZYWZC MOV A,R3 ;取最高-1 位进LB2 RLC A MOV LB2,C LCALL YHZC ;LB1 LB2异或运算,结果存在LB MOV A,R3 ;把异或结果LB存最高位 RLC,A MOV C,LB RRC,A MOV R3,A MOV C,LB2 ;LB2值存进LB1 MOV LB1,C LCALL ZYWZC DJNZ R7,EZG1 ;位数,此例 23位 RET 左移位子程: ZYWZC: MOV A,R3 RLC A MOV A,R5 RLC A MOV R3,A MOV A,R4 RLC A MOV R4,A MOV A,R3 RLC A MOV R5,A RET

二进制与格雷码转换

在精确定位控制系统中,为了提高控制精度,准确测量控制对象得位置就是十分重要得。目前,检测位置得办法有两种:其一就是使用位置传感器,测量到得位移量由变送器经A/D转换成数字量送至系统进行进一步处理。此方法精度高,但在多路、长距离位置监控系统中,由于其成本昂贵,安装困难,因此并不实用;其二就是采用光电轴角编码器进行精确位置控制。光电轴角编码器根据其刻度方法及信号输出形式,可分为增量式、绝对式以及混合式三种。而绝对式编码器就是直接输出数字量得传感器,它就是利用自然二进制或循环二进制(格雷码)方式进行光电转换得,编码得设计一般就是采用自然二进制码、循环二进制码、二进制补码等。特点就是不要计数器,在转轴得任意位置都可读出一个固定得与位置相对应得数字码;抗干扰能力强,没用累积误差;电源切断后位置信息不会丢失,但分辨率就是由二进制得位数决定得,根据不同得精度要求,可以选择不同得分辨率即位数。目前有10位、11位、12位、13位、14位或更高位等多种。 其中采用循环二进制编码得绝对式编码器,其输出信号就是一种数字排序,不就是权重码,每一位没有确定得大小,不能直接进行比较大小与算术运算,也不能直接转换成其她信号,要经过一次码变换,变成自然二进制码,在由上位机读取以实现相应得控制。而在码制变换中有不同得处理方式,本文着重介绍二进制格雷码与自然二进制码得互换。 一、格雷码(又叫循环二进制码或反射二进制码)介绍 在数字系统中只能识别0与1,各种数据要转换为二进制代码才能进行处理,格雷码就是一种无权码,采用绝对编码方式,典型格雷码就是一种具有反射特性与循环特性得单步自补码,它得循环、单步特性消除了随机取数时出现重大误差得可能,它得反射、自补特性使得求反非常方便。格雷码属于可靠性编码,就是一种错误最小化得编码方式,因为,自然二进制码可以直接由数/模转换器转换成模拟信号,但某些情况,例如从十进制得3转换成4时二进制码得每一位都要变,使数字电路产生很大得尖峰电流脉冲。而格雷码则没有这一缺点,它就是一种数字排序系统,其中得所有相邻整数在它们得数字表示中只有一个数字不同。它在任意两个相邻得数之间转换时,只有一个数位发生变化。它大大地减少了由一个状态到下一个状态时逻辑得混淆。另外由于最大数与最小数之间也仅一个数不同,故通常又叫格雷反射码或循环码。下表为几种自然二进制码与格雷码得对照表:

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

二进制与格雷码之间的转换 在公司的PLC 改造项目中,我们经常要用到格雷码输出的绝对型旋转编码器。由于格雷码是一种非加权码,不能直接反应出当前的角度值,所以必须在PLC 程序中将它转换成能反应当前实际位置的二进制码。为了让我们的工程技术人员均能很好的掌握格雷码与二进制码之间的转换方法,我根据自己的一些经验和参考资料,将格雷码的相关知识作了些整理,在公司的刊物上发表出来,希望能和大家一起对这个问题来加以讨论和学习,共同提高我们的技术水平。 一、 格雷码格雷码((Gray Code )的概念 格雷码是我们在工程中常会遇到的一种编码方式,例如,大多数绝对型旋转编码的输出就是采用格雷码的编码格式。它是一种非加权码,由二进制码派生而来。常用的二进制数与格雷码间的转换关系如下表: 从上表我们可以看出,与普通二进制编码相比,格雷码的特点是相邻两个数之间只有1个二进制位发生了变化。正是这个特点,使它更适合于用在数据传输的场合。 二、 二进制与格雷码之间的转换 (一)、二进制码转为格雷码 二进制码转为格雷码的算法较简单,将所需转换的数的二进制码右移一位后与原数相异或即可。 例:十进制数9的格雷码为: 数值 二进制码 格雷码 数值 二进制码 格雷码 0 0000 0000 9 1001 1101 1 0001 0001 10 1010 1111 2 0010 0011 11 1011 1110 3 0011 0010 12 1100 1010 4 0100 0110 13 1101 1011 5 0101 0111 14 1110 1001 6 0110 0101 15 1111 1000 7 0111 0100 8 1000 1100 9的二进制数形式 9的格雷码形式 9的二进制数右移1位后的结果 两者相异或

二进制和格雷码转换关系

二进制和格雷码转换 (2012-08-01 11:45:40) 转载▼ 分类:基础算法 标签: 杂谈 ================================================== 最佳答案: 十进制586 =二进制1001001010 =格雷码1101101111。 二进制码----> 格雷码(编码): 从最右边一位起,依次将每一位与左边一位异或(XOR),作为对应格雷码该位的值,最左边一位不变(相当于左边是0)。格雷码的是特点是: 相邻两数的格雷码,仅仅有一位二进制发生变化。 而且在其范围内的最小值和最大值,也仅仅有一位二进制发生变化。 例如下面两数: 最小:二进制0000=格雷码0000 最大:二进制1111=格雷码1000 看到了吧,0000 和1000,仅仅有一位数发生变化。 ------- 如果在变换的过程中,先把十进制转换成BCD码,这就失去了格雷码的特点。 因为在BCD码中: 最小:二进制0000=格雷码0000 最大:二进制1001=格雷码1101 可以看出,它们之间有三位发生变化。 通过BCD码来变换格雷码,思路不对。变换出来的,并不是原数的格雷码。 ================================================== 回答者:做而论道| 十五级采纳率:43% 名人 回答时间:2011-12-13 09:38 原题网址:https://www.wendangku.net/doc/8f7671338.html,/question/353979304.html ================================================== 后记:自然二进制数与格雷码的互换公式与电路 自然二进制数转换到格雷码 ------------ 设有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 如果是通过编程计算进行变换,就需要使用这个公式逐位的计算;

格雷码和二进制的相互转换-vhdl程序

1.B2G_converter 1)Screenshot of iSim simulation results: note: from the beginning point at 1,000ns, input(i5binary) changes every other 50ns a)i5binary input from 0 to 6

b)i5binary input from 7 to 13 c)i5binary input from 14 to 20

d)i5binary input from 21 to 27 e)i5binary input from 28 to 31

2)VHDL for Binary-to-Gray-Code converter: ---------------------------------------------------------------------------------- -- Company: -- Engineer: -- -- Create Date: 13:02:37 09/15/2015 -- Design Name: -- Module Name: b2g_converter - Behavioral -- Project Name: -- Target Devices: -- Tool versions: -- Description: -- -- Dependencies: -- -- Revision: -- Revision 0.01 - File Created -- Additional Comments: -- ---------------------------------------------------------------------------------- library IEEE; use IEEE.STD_LOGIC_1164.ALL; -- Uncomment the following library declaration if using -- arithmetic functions with Signed or Unsigned values --use IEEE.NUMERIC_STD.ALL; -- Uncomment the following library declaration if instantiating -- any Xilinx primitives in this code. --library UNISIM; --use UNISIM.VComponents.all; entity b2g_converter is Port ( i5Binary : in STD_LOGIC_VECTOR (4 downto 0); o5GrayCode : out STD_LOGIC_VECTOR (4 downto 0)); end b2g_converter;

相关文档
相关文档 最新文档