您的位置 首页 报告

单片机开发中BCD码调整技巧

我是SUNNY!本人经过一年多的学习,掌握了很多单片机编程技巧,例如C语言嵌入汇编等。俗话说得好,熟能生巧!的确如此,本人很喜欢钻研,达

我是SUNNY!自己通过一年多的学习,把握了许多单片机编程技巧,例如C言语嵌入汇编等。俗话说得好,游刃有余!确实如此,自己很喜欢研究,到达很好的作用。在进行程序编程时,在某些场合,咱们要进行BCD码调整。例如0x09+0x01,其成果是0x0a,由于这个是16进制运算,而这个不是咱们想要的成果,咱们是要0x10这个成果。那怎么办呢?其实这些运算在某些当地运用仍是比较常见的,比如在时钟芯片DS1302中就要用到。假如选用转化10进制的方法来处理,不光程序长,功率低,占用资源也严峻。假如选用汇编言语就简略了,汇编言语中现已考虑到这个当地,能够选用DA A这个指令来完结,如下面这个比如:

假定内存中30H的值为0x09,求加上1后的BCD码,下面是程序和解说:
MOV A,30H 把30H的值先送人累加器A,这时累加器的值为0x09
ADD A,#01H 累加器的值加上1,这时累加器的值为0x0a
DA A 累加器BCD码调整,这时累加器A的值为0x10
MOV 30H,A 把累加器A的值送回30H,完成BCD调整
RET

上面是加法的BCD码调整,比较简略,由于汇编言语现已供给了这个功用,可是减法呢?很惋惜,汇编言语并没有供给减法的BCD码调整,那是不是就没辙了呢?答案是否定的!咱们知道,一个数假如低位不行减时,要向高位借1,在51单片机中,其借位标志便是AC,咱们能够运用AC是否为1来进行判别,假如呈现借位,就要进行BCD码调整。可是减法并没有调整指令,怎么办?咱们知道,16进制与10进制其实仅仅相差6,只要在产生借位时将值减去6就OK了!哈哈…我是不是很聪明?哈哈…自诩一下!好了,光说没有用,做出来才是真的!下面看比如:
假定内存中30H的值为0x10,求减去1的BCD码。下面是程序和解说:

MOV A,30H 将30H的值送人累加器A
SUBB A,#01H 累加器A的值减去1 ,这时累加器的值为0x0f
JB AC,NEXT 判别借位标志,假如为1阐明产生借位,进行下一步处理
MOV 30H,A 借位为0,直接送回30H
RET
NEXT:
SUBB A,#06H 产生借位,减去6,调整为BCD码,这时累加器A的值为0x09
MOV 30H,A 把值送回30H,OK!搞定
CLR AC 铲除标志位,以便下次运用
RET

上面的两个比如通过自己实践运用,非常有用,我们能够参阅一下!

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ceping/baogao/317476.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部