求助,怎样用单片机做计算器?
发布网友
发布时间:2022-04-29 09:47
我来回答
共2个回答
热心网友
时间:2022-06-25 17:29
一、除法:
divdll data 20h ;定义被除数单元
divdlh data 21h
divdhl data 22h
dlvdhh data 23h
divl data 24h ;定义除数单元
divh data 25h
templ data 26h ;定义余数单元
temph data 27h
divd: push acc
push b
mov a,divdh ;判除数是否为零 字串5
orl a,divl
jnz divd0
setb ov ;除数为零,置溢出标志
pop b
pop acc
ret
divd0: mov templ,#00h ;除数不为零,进行运算
mov temph,#00h
mov b,#20h ;置循环次数
divd1:clr c ;进位位、余数单元和
mov a,divdll ;被除数单元全体逐个
rlc a ;向左循环移位
字串8
mov divdll,a
mov a,divdlh
rlc a
mov divdlh,a
mov a,divdhl
rlc a
mov divdhl,a
mov a,divdhh
rlc a
mov divdhh,a
mov a,templ
rlc a
mov templ,a
xch a,temph
rlc a
xch a,temph
mov f0,c ;保存进位位
clr c
subb a,divl ;用余数减去除数
字串9
mov r7,a
mov a,temph
subb a,divh
anl c,/f0 ;判断是否够减
jc divd2 ;不够减,移下一位
mov templ,r7 ;够减,刷新余数单元
mov temph,a
inc divdll ;商上1
divd2: djnz b,divd1
clr ov
pop b
pop acc
ret
end
以上代码相关说明请访问下面网址:
http://www.jdzyjs.com/dianqi/dpj/13517.html
二、你的乘法是怎么做的?
BCD码的乘法只能这么做了,如果先换成十六进制,再做十六进制的乘法,最后调整成BCD码,效率会高一些.
热心网友
时间:2022-06-25 17:30
用C语言写就是了
何苦和汇编过不去呢?