从表 1-1 种可以得出,十进制数N 与n 位二进制码满足以下关系:
可见,二进制码由于是有权码,满足(1-4)的关系,而格雷码是无权码,不满足(1-4)的关系。它与所对应的角度不存在类似(1-3)的关系,因此必须找出循环码和二进制码之间的对应关系和相互转换规则。 (2)二进制码转换成制格雷码
二进制码转换成制格雷码,其法则是保留二进制码的最高位作为格雷码的最高位,而次高位格雷码为二进制码的高位与次高位相异或,而格雷码其余各位与次高位的求法相类似。 图1-11 所示为二进制码转换成格雷码。
图 1-11 自然二进制码转换成二进制格雷码
图 1-12 为将二进制码转换为格雷码的电路图,其中图(a)为并行转换电路,图(b)
为串行转换电路。当采用串行电路时,工作之前先将D 触发器D1 置0,Q=0,在Ci 端送入C1,异或门D2 输出R1=C1○+ 0=C1,随后加CP 脉冲,使Q=C1;在Ci 端加入C2,D 输出R2=C2○+C1,以后重复上述过程,可以依次获得R1,R2,??,Rn。
(3)格雷码转换为二进制码
格雷码转换成二进制码,则是保留格雷码的最高位作为二进制码的最高位,而次高位二进制码为高位二进制码与次高位格雷码相异或,而二进制码的其余各位与次高位二进制码的求法相类似。图1-13 为将格雷码转换为二进制码的电路,其中图(a)为并行转换电路,图(b)为串行转换电路。当采用串行电路时,工作之前先将JK 触发器D 置0,Q=0,将R1同时加到J、K 端,再加入CP 脉冲后,Q=C1= R1。以后若Q 端为Ci-1 在J、K 端加入Ri。根据JK触发器的特性,若J、K为“1”则加入CP脉冲后, i 1 Q C ? = ;若J、K 为“0”则加入CP 脉冲后保持Q=Ci-1。这一逻辑关系可以写成:
图 1-13 格雷码转换为二进制码的电路
格雷码是无权码,采用格雷码盘获得的格雷码R1,R2,??,Rn 必须按图1-11 转换为对应的二进制码C1,C2,??,Cn 后,才能代入(1-3)式确定与之对应的角度。
(4)格雷码与二进制码互换的软件实现方法 (a)二进制码转换成格雷码的软件实现法
根据自然二进制转换成格雷码的法则,可以得到以下的代码: static unsigned int DecimaltoGray(unsigned int x) {
return x^(x>>1); }
//以上代码实现了unsigned int 型数据到格雷码的转换,最高可转换32 位自然二进
制码,超出32 位将溢出。
static int DecimaltoGray( int x) {
return x^(x>>1); }
//以上代码实现了 int 型数据到格雷码的转换,最高可转换31 位自然二进制码,超出 31 位将溢出。上述代码即可用于 VC 控制程序中,也可以用于单片机控制程序中。在单片机程序设计时,若采用汇编语言编程,可以按相同的原理设计程序;若采用C 语言编程,则可以直接 利用上述代码,但建议用unsigned int 函数。 (b)软件实现法(参见示例工程中的 Gray to Binary )
根据二进制格雷码转换成自然二进制码的法则,可以得到以下的三种代码方式:
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;
x^=x^1; return x; }
static unsigned int GraytoDecimal(unsigned int x) { int i;
for(i=0;(1<
x^=x>>(1<
//以上代码实现了unsigned int 型数据到自然二进制码的转换,最高可转换32 位格雷码,超出32 位将溢出。将数据类型改为int 型即可实现31 位格雷码转换。上述代码即可用于 VC 控制程序中,也可以用于单片机控制程序中。在单片机程序设计时,若采用汇编语言编程,可以按相同的原理设计程序;若采用C 语言编程,则可以直接利用上述代码,但建议用unsigned int 函数。
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库绝对式光电编码器基本构造及特点(2)在线全文阅读。
相关推荐: