您的位置 首页 被动

根据EM78系列单片机的数值转化子程序

EM78系列单片机的数值转换的子程序 一 二进制数转换为ASCⅡ码将一个字节的二进制数转换为两位16进制数的ASCⅡ码main: mov a,@0x9f ;二进制数为0x9fmov 0x30,a ;二

EM78系列单片机数值转化子程序

一 二进制数转化为ASCⅡ码
将一个字节的二进制数转化为两位16进制数的ASCⅡ码
main: mov a,@0x9f ;二进制数为0x9f
mov 0x30,a ;二进制数存入0x30
mov a,@0x02
mov 0x10,a ;0x10中寄存转化次数
mov a,@0x31
mov 0x04,a ;0x04中为转化后数据寄存地址
mov a,0x30
B1: and a,@0x0f ;取a低4位
mov 0x00,a
sub a,@0x09 ;低4位大于9跳往B2
jbs 0x03,0
jmp B2
mov a,0x00 ;低4位不大于9则加0x30
add a,@0x30
mov 0x00,a ;将ASCⅡ码存入0X04所指单元
jmp B3
B2: mov a,0x00 ;大于9则加0X37
add a,@0x37
mov 0x00,a
B3: swapa 0x30 ;将0X30高4位换入A低4位
inc 0x04 ;存储地址加1
djz 0x10 ;循环次数减1,为0则回来
jmp B1 ;不为0持续转化
self: jmp self
eop

二 多字节二进制加法
0X20,0X21中的二进制无符号数与0X22,0X23中的二进制无符号数相加,成果放在0X24,0X25,0X26中,低地址中放低字节数据。
Main: mov a,@0x78 ;赋值
mov 0x20,a
mov a,@0xc6
mov 0x21,a
mov a,@0x86
mov 0x22,a
mov a,@0x9e
mov 0x23,a
mov a,@0x0 ;0x26单元清0
mov 0x26,a
mov a,0x21
add a,0x23
mov 0x25,a ;高字节相加,成果送0x25
jbc 0x03,0
inc 0x26 ; 有进位则0x26加1
mov a,0x20
add a,0x22
mov 0x24,a ;低字节相加,成果送0x24
jbs 0x03,0
jmp self ;无进位跳self
inc 0x25 ;有进位0x25加1
jbc 0x03,0
inc 0x26 ; 有进位0x26加1
self: jmp self
eop
三 多字节二进制减法
0x20,0x21中的二进制无符号数减0x22,0x23中的二进制无符号数,
低地址中放低字节数据。假定被减数大于减数。
留意:(1)sub指令减出成果为正时,c标志置1。
(2)sub指令减出成果为0时,c标志也置1。
即,sub指令履行后,c标志清0表明成果为负。
main: mov a,@0x67 ;赋值
mov 0x20,a
mov a,@0xff
mov 0x21,a
mov a,@0xe8
mov 0x22,a
mov a,@0x44
mov 0x23,a ; 高字节相减
sub a,0x21
mov 0x25,a ;成果存0x25
mov a,0x22 ;低字节相减
sub a,0x20
mov 0x24,a
jbs 0x03,0
dec 0x25 ;有借位则0x25减1
self: jmp self
eop
四 二进制乘法运算
EM78单片机没有乘法指令,所以乘法运算需求转化为加法运算。0X20单元数据乘以0X21单元数据,成果放在0X22,0X23中。
main: mov a,@0x0 ;0x22,0x23单元清0
mov 0x22,a
mov 0x23,a
mov a,@0x3f ;赋值
mov 0x20,a
mov a,@0x22
mov 0x21,a
mul1: mov a,0x20 ;0x20与0x22内容相加
add 0x22,a
jbc 0x03,0
inc 0x23 ;有进位0x23加1
djz 0x21 ;0x21中次数减到0则完毕
jmp mul1 ;没减到0则持续
self: jmp self
eop
五 二进制除法运算
多字节二进制除法
被除数为3个字节,在0x20、0x21、0x22单元中,0x22.7为最高位,0x20.0为最低位。
除数为2个字节,在0x30、0x31中。
算法:EM78单片机没有除法指令,并且本例中除法为多字节除法,可采用如下算法。
将被除数扩大一个字节0X23,0X23清0。被除数左移1位,0X23、0X22中数据减去0X31、0X30中数据,够减则减且0X20.0置1,减出成果存入0X23、0X22;不行减则0X23、0X22坚持不变,0X20.0清0。然后被除数再左移1位,重复上述进程。共循环16次,最终0X23、0X22中得相减余数,0X21、0X20中得商。留意,若被除数左移后C标志为1,则不比较0X23、0X22与0X31、0X30数据巨细联系而直接相减。
main: mov a,@0x55 ;被除数赋值
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 ;低字节相减

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们