基于51单片机的计算器 汇编语言
时间: 2023-11-27 16:05:54 浏览: 339
根据提供的引用内容,我可以为您介绍基于51单片机的计算器汇编语言的实现方法。
1. 首先,我们需要编写一个程序来输入第一个数。下面是一个示例程序:
```assembly
ORG 00H
MOV P1, #0FFH ; 设置P1口为输入模式
MOV P2, #00H ; 设置P2口为输出模式
MOV A, #00H ; 初始化A寄存器为0
MOV R0, #0AH ; 初始化R0寄存器为10,用于后面的十进制转换
MOV R1, #00H ; 初始化R1寄存器为0,用于存储输入的数
CLR C ; 清除进位标志位
LOOP: ; 循环读取输入的数
MOV P2, #01H ; 将P2口设置为高电平,表示等待输入
ACALL DELAY ; 延时一段时间,等待按键稳定
MOV A, P1 ; 读取P1口的值
CJNE A, #0FFH, READ ; 判断是否有按键按下,如果有则跳转到READ
SJMP LOOP ; 如果没有按键按下,则继续等待输入
READ: ; 读取输入的数
MOV B, A ; 将输入的数保存到B寄存器
ANL B, #0FH ; 取出B寄存器的低4位,即输入的数值
MOV A, R1 ; 将R1寄存器的值保存到A寄存器
MOV C, #0 ; 清除进位标志位
ADD A, B ; 将输入的数加到A寄存器中
JC CARRY ; 如果有进位,则跳转到CARRY
MOV R1, A ; 将A寄存器的值保存到R1寄存器中
MOV A, R1 ; 将R1寄存器的值保存到A寄存器
MUL AB ; 将A寄存器和B寄存器的值相乘
MOV B, R0 ; 将R0寄存器的值保存到B寄存器中
MOV A, R1 ; 将R1寄存器的值保存到A寄存器中
DIV AB ; 将A寄存器和B寄存器的值相除
MOV R1, A ; 将商保存到R1寄存器中
MOV A, R1 ; 将R1寄存器的值保存到A寄存器中
MOV P2, #00H ; 将P2口设置为低电平,表示输入结束
SJMP LOOP ; 继续等待输入
CARRY: ; 处理进位
MOV A, R1 ; 将R1寄存器的值保存到A寄存器中
ADD A, #06H ; 加上6,得到正确的数值
MOV R1, A ; 将A寄存器的值保存到R1寄存器中
MOV A, R1 ; 将R1寄存器的值保存到A寄存器中
MOV P2, #00H ; 将P2口设置为低电平,表示输入结束
SJMP LOOP ; 继续等待输入
DELAY: ; 延时函数
MOV R2, #0FFH
DELAY1: DJNZ R2, DELAY1
MOV R2, #0FFH
DELAY2: DJNZ R2, DELAY2
RET
```
2. 接下来,我们需要编写一个程序来输入第二个数。下面是一个示例程序:
```assembly
ORG 00H
MOV P1, #0FFH ; 设置P1口为输入模式
MOV P2, #00H ; 设置P2口为输出模式
MOV A, #00H ; 初始化A寄存器为0
MOV R0, #0AH ; 初始化R0寄存器为10,用于后面的十进制转换
MOV R1, #00H ; 初始化R1寄存器为0,用于存储输入的数
CLR C ; 清除进位标志位
LOOP: ; 循环读取输入的数
MOV P2, #02H ; 将P2口设置为高电平,表示等待输入
ACALL DELAY ; 延时一段时间,等待按键稳定
MOV A, P1 ; 读取P1口的值
CJNE A, #0FFH, READ ; 判断是否有按键按下,如果有则跳转到READ
SJMP LOOP ; 如果没有按键按下,则继续等待输入
READ: ; 读取输入的数
MOV B, A ; 将输入的数保存到B寄存器
ANL B, #0FH ; 取出B寄存器的低4位,即输入的数值
MOV A, R1 ; 将R1寄存器的值保存到A寄存器
MOV C, #0 ; 清除进位标志位
ADD A, B ; 将输入的数加到A寄存器中
JC CARRY ; 如果有进位,则跳转到CARRY
MOV R1, A ; 将A寄存器的值保存到R1寄存器中
MOV A, R1 ; 将R1寄存器的值保存到A寄存器中
MUL AB ; 将A寄存器和B寄存器的值相乘
MOV B, R0 ; 将R0寄存器的值保存到B寄存器中
MOV A, R1 ; 将R1寄存器的值保存到A寄存器中
DIV AB ; 将A寄存器和B寄存器的值相除
MOV R1, A ; 将商保存到R1寄存器中
MOV A, R1 ; 将R1寄存器的值保存到A寄存器中
MOV P2, #00H ; 将P2口设置为低电平,表示输入结束
SJMP LOOP ; 继续等待输入
CARRY: ; 处理进位
MOV A, R1 ; 将R1寄存器的值保存到A寄存器中
ADD A, #06H ; 加上6,得到正确的数值
MOV R1, A ; 将A寄存器的值保存到R1寄存器中
MOV A, R1 ; 将R1寄存器的值保存到A寄存器中
MOV P2, #00H ; 将P2口设置为低电平,表示输入结束
SJMP LOOP ; 继续等待输入
DELAY: ; 延时函数
MOV R2, #0FFH
DELAY1:
阅读全文
相关推荐
















