位置:51电子网 » 技术资料 » 传感与控制

智能仪表多字节二进制数转换BCD码

发布时间:2008/5/27 0:00:00 访问次数:1239

  作者:湖南大学电气与信息工程系 邓 勇 刘 琪来源:《电子产品世界》

摘要:多字节无符号二进制数转bcd码在以单片机为核心的智能仪表中应用很普遍。本文介绍一种新的转换方法,并给出三字节二进制数转bcd码的源程序,该程序执行时间仅为原来的1.3%,效率提高显著。 关键词:多字节二进制整数 bcd码 转换 一、引言 在以mcs-51单片机为核心的智能仪表系统中,常遇到二进制整数转换为bcd码的情况。国内许多单片机书籍都对此进行了介绍并给出了子程序,但效率不高。本文参考文献作者剖析了二进制整数转bcd码的子程序,分析了程序效率低的原因,给出了改进后的源程序,效率有所提高。以3字节的二进制整数为例,程序执行时间由2.856ms减小到2.410ms。还有没有其它的办法进一步大幅度减少转换设计时间?本文介绍一种新的程序设计思路,给出的源程序将3字节二进制整数转bcd码执行时间仅为0.374ms。

二、改进思路 由进制数转bcd码的原理可知,这一转换的实现的过程是(以3字节为例):首先把结果单元(这里是4个字节)清零,然后将待转换的二进制数的最高位移入进位位c,把结果单元的值进行乘2加c运算的值又作为结果单元的值,循环24次后得出转换的bcd码。如果能完全避开效率运行的时间。这可用下例来说明: 设结果单元某时的值为3456h,分别存放在r1、r2中,用如下的程序来完成结果单元乘2加(设c的当前值为1): mov a,r1 addc a,acc da a mov r1,a mov a,r2 addc a,acc da a mov r2,a 程序中使用addc a,acc指令完成乘2加c的工作,经过执行上面的程序,进位位c的值为0,r1、r2单元中的内容分别为69h、13h,该值即为结果单元的值。这样就使程序避免了循环而又实现了结果单元乘2加c的功能。这个例子的结果单元为2字节,随着进一步的运算,结果单元会变为3字节并最终变为4字节(以二进制数是3字节为例)。只要在程序中加以适当的控制,则可避免过多的运算,从而使转换的速度加快。

三、源程序 程序名:fbcd 程序功能:将三字节二进制数转换为bcd码。 程序入口:20h,21h,22h, 存放被转换的三字节二进制数。 程序出口为r1,r2,r3,r4,存放转换的bcd码的结果(见程序清单)。

四、结语 为了尽可能地减少转换时间,使用了一些小技巧。例如:在程序开始转换二进制数前3位时,考虑到这3位在进行乘2加c的操作时不会有进位位,则使用3条rl a,完成了前3位的转换。该程序完成3字节二进制无符号整数转bcd码所需时间仅为374微秒,转换时间缩短为原来的13%,效率提高是显著的。另外,该程序比较灵活,程序中标注(****)处,已完成了2字节二进制整数转三字节的bcd码,程序执二字节二进制数转bcd码所需时间仅为194微秒,使用一条mov r1,a指令,则转换结果按由高到低的次序依次存放在r1,r2,r3中。当然,很容易在此程序基础之上,实现4字节或更高字节无符号二进制整数向bcd码的转换。

 
作者:湖南大学电气与信息工程系 邓 勇 刘 琪来源:《电子产品世界》

摘要:多字节无符号二进制数转bcd码在以单片机为核心的智能仪表中应用很普遍。本文介绍一种新的转换方法,并给出三字节二进制数转bcd码的源程序,该程序执行时间仅为原来的1.3%,效率提高显著。 关键词:多字节二进制整数 bcd码 转换 一、引言 在以mcs-51单片机为核心的智能仪表系统中,常遇到二进制整数转换为bcd码的情况。国内许多单片机书籍都对此进行了介绍并给出了子程序,但效率不高。本文参考文献作者剖析了二进制整数转bcd码的子程序,分析了程序效率低的原因,给出了改进后的源程序,效率有所提高。以3字节的二进制整数为例,程序执行时间由2.856ms减小到2.410ms。还有没有其它的办法进一步大幅度减少转换设计时间?本文介绍一种新的程序设计思路,给出的源程序将3字节二进制整数转bcd码执行时间仅为0.374ms。

二、改进思路 由进制数转bcd码的原理可知,这一转换的实现的过程是(以3字节为例):首先把结果单元(这里是4个字节)清零,然后将待转换的二进制数的最高位移入进位位c,把结果单元的值进行乘2加c运算的值又作为结果单元的值,循环24次后得出转换的bcd码。如果能完全避开效率运行的时间。这可用下例来说明: 设结果单元某时的值为3456h,分别存放在r1、r2中,用如下的程序来完成结果单元乘2加(设c的当前值为1): mov a,r1 addc a,acc da a mov r1,a mov a,r2 addc a,acc da a mov r2,a 程序中使用addc a,acc指令完成乘2加c的工作,经过执行上面的程序,进位位c的值为0,r1、r2单元中的内容分别为69h、13h,该值即为结果单元的值。这样就使程序避免了循环而又实现了结果单元乘2加c的功能。这个例子的结果单元为2字节,随着进一步的运算,结果单元会变为3字节并最终变为4字节(以二进制数是3字节为例)。只要在程序中加以适当的控制,则可避免过多的运算,从而使转换的速度加快。

三、源程序 程序名:fbcd 程序功能:将三字节二进制数转换为bcd码。 程序入口:20h,21h,22h, 存放被转换的三字节二进制数。 程序出口为r1,r2,r3,r4,存放转换的bcd码的结果(见程序清单)。

四、结语 为了尽可能地减少转换时间,使用了一些小技巧。例如:在程序开始转换二进制数前3位时,考虑到这3位在进行乘2加c的操作时不会有进位位,则使用3条rl a,完成了前3位的转换。该程序完成3字节二进制无符号整数转bcd码所需时间仅为374微秒,转换时间缩短为原来的13%,效率提高是显著的。另外,该程序比较灵活,程序中标注(****)处,已完成了2字节二进制整数转三字节的bcd码,程序执二字节二进制数转bcd码所需时间仅为194微秒,使用一条mov r1,a指令,则转换结果按由高到低的次序依次存放在r1,r2,r3中。当然,很容易在此程序基础之上,实现4字节或更高字节无符号二进制整数向bcd码的转换。

相关IC型号
版权所有:51dzw.COM
深圳服务热线:13751165337  13692101218
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!