新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于EM78系列单片机的数值转换子程序

基于EM78系列单片机的数值转换子程序

作者:时间:2012-07-18来源:网络收藏

sub 0x22,a
jbc 0x03,2
ret ;低字节相等,无借位,返回
jbc 0x03,0
ret ;无借位,返回
dec 0x23 ;低字节相减有借位,高字节结果减1
ret
eop
六 BCD数为二进制数
两字节压缩BCD码为两字节二进制数。算法如下:
BCD码abcd=1000a+100b+10c+d=10{10[10a+b]+c}+d,将各位BCD码分离出之后,即可根据此式为二进制数。涉及到乘法运算和多字节加法运算。
0X20,0X21中为BCD码,0X21高4位为最高位。转换结果放在0X30,0X31中。
main: mov a,@0x79
mov 0x20,a
mov a,@0x54
mov 0x21,a ;赋值
mov a,0x20
and a,@0x0f
mov 0x22,a
swapa 0x20
and a,@0x0f
mov 0x23,a
mov a,0x21
and a,@0x0f
mov 0x24,a
swapa 0x21
and a,@0x0f
mov 0x25,a ;BCD码展开后存于0X22,0X23,0X24,0X25
mov a,0x25, ;0X25为最高位
mov 0x30,a
mov a,@0x0 ;多字节加法高位为0
mov 0x31,a
mov a,0x24
mov 0x32,a
call a_b ;调子程
mov a,0x23
mov 0x32,a
call a_b
mov a,0x22
mov 0x32,a
call a_b
self: jmp self
a_b:
mov a,@0x0 ;0X34,0X35存储中间结果
mov 0x34,a
mov 0x35,a
mov a,@0x0a ;实现乘10
mov 0x33,a
a1: mov a,0x35 ;两字节二进制加法,在本例中高字节肯定无进位
add a,0x31
mov 0x35,a
mov a,0x34
add a,0x30
mov 0x34,a
jbc 0x03,0
inc 0x35
djz 0x33
jmp a1
mov a,0x32
add 0x34,a
jbc 0x03,0
inc 0x35
mov a,0x34
mov 0x30,a
mov a,0x35
mov 0x31,a
ret
eop
七 二进制数转换为BCD码
本例为单字节二进制数(0X20)转换为非压缩BCD码,存在0X25,0X24,0X23中,0X25为百位,0X23为个位。
main: mov a,@0xa4 ;赋值
mov 0x20,a
mov 0x21,a
mov 0x22,a
mov a,@0x0 ;0x23,0x24,0x25单元清0
mov 0x23,a
mov 0x24,a
mov 0x25,a
mov a,@0x64 ;对100的个数计数
mov 0x26,a
mov a,@0x25 ;百位存在0x25中
mov 0x04,a
call a0 ;调计数子程
mov a,@0x0a ;对10的个数计数
mov 0x26,a
dec 0x04 ;个位存在0x24中
call a0
mov a,0x22 ;除去百位,十位,余下的即个位,存入0x23
mov 0x23,a
self: jmp self
a0: ;计数子程
mov a,0x26
sub 0x22,a
jbs 0x03,2
jmp a1
inc 0x00 ;无余数则对应位加1
mov a,@0x0 ;0x21与0x22在返回时应保持相同
mov 0x21,a
ret
a1: jbs 0x03,0 ;小于则跳a2
jmp a2
inc 0x00 ;大于则计加1
mov a,0x22
mov 0x21,a ;将0x22保存到0x21中
jmp a0 ;跳回a0继续计数
a2: mov a,0x21 ;0x21中保存的减之前的数据,此时恢复到0x22
mov 0x22,a
ret
eop

本文引用地址:http://www.eepw.com.cn/article/171138.htm

上一页 1 2 下一页

评论


相关推荐

技术专区

关闭