微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于单片机计算器的汇编程序

基于单片机计算器的汇编程序

时间:11-25 来源:互联网 点击:

DisOver:
JMP WORK

;DATA_IN 子程序段实现 Buff=Buff*10+Keydata并判断是否有溢出 送C中
DATA_IN :
CLR C
MOV A,Buff
MOV B,#10
MUL AB
MOV C,PSW.2
JNC DATA_IN1
JMP DOVER
DATA_IN1:
ADDC A,Keydata
MOV C,PSW.2
DOVER:
MOV Buff,A
RET
;计算子程序段
Comput:
MOV A,OP ;因运算符的末位数为0、1、2、3
MOV B,#10 ;将OP除以10所得的余数为所对应的末尾数 再将其赋予A进行分支程序选择
div AB
MOV R5,B
MOV A,R5
RL A
MOV DPTR,#ComTAB
JMP @A+DPTR
ComTAB:
AJMP ADDER ;为0时为加法运算
AJMP SUBBER ;为1时为减法运算
AJMP MULER ;为2时为乘法运算
AJMP divER ;为3时为除法运算
ADDER: ;加法运算
MOV A,OP1
ADDC A,OP2
JMP ComEND
SUBBER: ;减法运算
MOV A,OP1
SUBB A,OP2
JMP ComEND
MULER: ;乘法运算
MOV A,OP1
MOV B,OP2
MUL AB
JMP ComEND
divER: ;除法运算
MOV A,OP1
MOV B,OP2
div AB
JMP ComEND
ComEND: ;将结果送Resut
MOV Resut,A
MOV C,PSW.2 ;将溢出标志送C
RET

;中断程序处理中断任务

PROC_COUNT: ;将缓冲区的内容送数码管显示
PUSH ACC ; r0 显示位 计数 0~7
PUSH PSW
MOV PSW ,#08H ;select r group 1
CLR TR0
CLR EA
MOV TH0,#0D8H ; 2.1ms
MOV TL0,#0F0H
CLR TF0 ;清除中断溢出位

MOV A,R0 ;显示的位数超过4时R0赋值0
SUBB A,#3 ;R0的值与3相减有借位时转移到pro1
JC pro1
MOV R0,#0
pro1: MOV P2,#0FFH ;先熄灭数码管以免产生扫尾现象
MOV A,R0
MOV P1,A
MOV A,#DisBuffer
ADD A,R0 ;第R0位对应的缓冲区的地址
MOV R1,A
MOV A,@R1 ;将缓冲区的内容送A
MOV P2,A ;将A中的内容送P2口显示
INC R0
SETB EA
SETB TR0
POP PSW
POP ACC
RETI

KeyIN:
PUSH PSW
MOV PSW,#10H ;选择第二组寄存器组

MOV P0,#0FFH
CLR P0.0
MOV A,P0
CJNE A,#0XFE,CHECK ;Scane L1若有键按下时调用CHECK子程序

SETB P0.0
CLR P0.1
MOV A,P0
CJNE A,#0XFD,CHECK ;Scane L2 若有键按下时调用CHECK子程序

SETB P0.0
SETB P0.1
CLR P0.2
MOV A,P0
CJNE A,#0XFB,CHECK ;Scane L3 若有键按下时调用CHECK子程序

SETB P0.0
SETB P0.1
SETB P0.2
CLR P0.3
MOV A,P0
CJNE A,#0XF7,CHECK ;Scane L4 若有键按下时调用CHECK子程序
CLR C ;没有键按下清除C

retsub:
MOV flag,c
POP PSW
MOV C,flag
RET

CHECK:

MOV Keydata,A ;将P0口的状态给Keydata
MOV R2,#16 ;设定查找次数为15次而R2赋16
MOV A,#0
MOV R6,#0 ;初始计数寄存器
MOV DPTR,#key_TABLE ;开始查表键
D:
MOV A,R6 ;将寄存器6的值送a
MOVC A,@A+DPTR ;查表将得到是值送a
CJNE A,Keydata,D1 ;将a的值与p0口对比若不相等查询下一个
JMP OK ;相等调用OK子程序
D1:
INC R6 ;将R6的值加1
DJNZ R2, D ;r2不等于0转移
CLR C
MOV Keydata,#0FFH ;没有查到数时将0FF送 Keydata
RET

OK:
SETB C
MOV A,R6 ;查到第R6个数则这个数是R6
MOV Keydata,A ;将数值送Keydata
JMP retsub


SEG1_TABLE:
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,79H ;数字的0~9 + - */ 对应 ASCD "E"对应错误
key_TABLE:
DB 7EH,7DH,7BH,0BEH,0BDH,0BBH,0DEH,0DDH,0DBH,0EEH,77H,0B7H,0D7H,0E7H,0EBH,0EDH ;键盘的16个键


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top