新闻中心

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

EM78系列单片机的数值转换子程序简介

作者:时间:2012-08-12来源:网络收藏


mov 0x20,a
mov 0x21,a
mov 0x22,a
mov a,@0x0 ;被除数扩充1字节并清0
mov 0x23,a
mov a,@0x12 ;除数赋值
mov 0x30,a
mov 0x31,a
mov a,@0x10 ;循环次数为16
mov 0x32,a
again: call rt_sub ;调移位除法子程
djz 0x32 ;16次循环完成则结束
jmp again ;未完成则继续
self: jmp self
rt_sub:
bc 0x03,0 ;c标志清0
rlc 0x20 ;被除数左移1位
rlc 0x21
rlc 0x22
rlc 0x23
jbc 0x03,0
jmp rt3 ;c标志为1则直接相减
mov a,0x23 ;c标志为0则先比较大小
mov 0x25,a
mov a,0x22
mov 0x24,a
mov a,0x31 ;先比较高位
sub 0x25,a
jbc 0x03,2
jmp rt1 ;高位相等跳rt1比较低位
jmp rt2 ;高位不等跳rt2
rt1: mov a,0x30 ;比较低位
sub 0x24,a
jbc 0x03,2
jmp rt3 ;低位也相等则跳rt3,相减,上1
rt2: jbs 0x03,0
ret ;减数大则返回,减数小则相减,上1
rt3: bs 0x20,0 ;上1
call sub_2b ;调2字节减法子程
ret
sub_2b:
mov a,0x31 ;高字节相减
sub 0x23,a
mov a,0x30 ;低字节相减
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


评论


相关推荐

技术专区

关闭