求助,怎样用单片机做计算器?

来源:百度知道 编辑:UC知道 时间:2024/05/10 06:39:27
我学单片机最后老师留了一个题,用单片机做一个计算器。
我是用MCS-51系列单片机。
软件部份除法我是用连减,即用被除数减除数,减的次数就是商。
运行的时候发现被除数远远大于除数时,运算时间太长,有时可能算不出结果,请问哪位高手有更好的思路?
另外我的乘法思路感觉也不太好,请高手告诉一下,谢谢。
(不用做小数运算。因我所学的单片机为实验用机箱,已经装有8个LED。)
我的乘法是用被乘数个位乘以乘数所有位,(乘数和被乘数存入时用BCD码。一字节存放一个10进制数。)结果依次放到积的低字节到高字节单元;然后用被乘数十位乘,结果依次加到存放积的单元的次低位到高字节。就和手算一样,只是结果暂时不进位,只做溢出时的处理。最后运算完成后转换为10进制BCD码。

一、除法:
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,tem