编制程序用单片机实现四则运算。
解:在单片机的键盘上设置“+、-、×、÷”四个运算按键。其键值存放在寄存器R2中,当(R2)=00H时做加法运算,当(R2)=01H时做减法运算,当(R2)=02H时做乘法运算,当(R2)=03H时做除法运算。
P1口输入被加数、被减数、被乘数、被除数,输出商或运算结果的低8位;
P3口输入加数、减数、乘数、除数,输出余数或运算结果的高8位。
程序如下:
ORG1000H
START: MOVP1, #DATA1H; 给 P1口、P3口送入数据
DATA1, DATA2, 用于计算
MOVP3, #DATA2H
MOVDPTR, #TABLE ; 将基址TABLE送DPTR
CLRC
; Cy清0
MOVA, R2
; 将运算键键值送A
SUBBA, #04H
; 将键值和04H相减,用于产生Cy标志
JNCERROR
; 若输入按键不合理,程序转ERROR处;
否则,按键合理,程序继续执行
ADDA, #04H
; 还原键值
CLRC
; Cy清0
RLA
; 将A左移,即键值×2,
形成正确的散转偏移量
JMP@A+DPTR
; 程序跳到(A)+(DPTR)形成的新地址
TABLE: AJMPPRG0
; 程序跳到PRG0处,将要做加法运算
AJMPPRG1
; 程序跳到PRG1处,将要做减法运算
AJMPPRG2
; 程序跳到PRG2处,将要做乘法运算
AJMPPRG3
; 程序跳到PRG3处,将要做除法运算
ERROR:(按键错误的处理程序)(略)
有点看不懂,高手给分析下这下面的程序是怎么运行的.重点SUBBA, #04H和RLA
和
JMP@A+DPTR
谢谢
SUBBA, #04H
; 将键值和04H相减,用于产生Cy标志
JNCERROR
; 若输入按键不合理,程序转ERROR处;
否则,按键合理,程序继续执行
ADDA, #04H
; 还原键值
CLRC
; Cy清0
RLA
; 将A左移,即键值×2,
形成正确的散转偏移量
JMP@A+DPTR
; 程序跳到(A)+(DPTR)形成的新地址
|