📄 sum.asm
字号:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;实例九:数据求和并显示 summation (《51单片机应用从零开始》 8.11小节实例)
;
;现象:将78,12,44,81,99这五个数求和,并在七段数码管上显示结果
;
;作者:杨欣,刘长焕,张延强 电路飞翔网 eedesign@163.com
;
; http://www.circuitfly.com
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG 00H
START:
MOV R0, #40H ;R0=40H,作为数据的存放起始地址
MOV @R0, #78H ;78放到40H中
INC R0 ;R0=41H
MOV @R0, #12H ;12放到41H中
INC R0
MOV @R0, #44H
INC R0
MOV @R0, #81H
INC R0
MOV @R0, #99H
CAL:
MOV R0, #40H ;R0=40H
MOV R2, #5 ;R2=5,作为求和计数器
CLR A ;ACC=0,ACC作为和的低位数据存储器
MOV R7, A ;R7=0,R7作为和的高位数据存储器
LOOP:
ADD A, @R0 ;将R0所指地址中的内容与ACC相加
DA A ;十进制调整
MOV R3, A ;保存到R3中
JNC NEXT ;如果CY=0,说明没有进位,跳到NEXT
INC R7 ;如果CY=1,说明有进位,和的高位数据加1
NEXT:
INC R0 ;地址指针增加1
DJNZ R2, LOOP ;循环,直到5个数据相加完成为止
DIS:
PUSH ACC ; ACC压栈
ANL A, #0FH ; 去掉ACC的高位数据,保留低位数据
MOV P0, #01H ; 选通七段数码管D1
MOV P2, A ; 从P2口输出
CALL DELAY ; 延时1ms
ANL P2, #00H ; 熄灭一下
POP ACC ; ACC弹栈
SWAP A ; ACC高、低字节对换
ANL A, #0FH ; 去掉ACC的高位数据,保留低位数据
MOV P0, #02H ; 选通七段数码管D2
MOV P2, A ; 从P2口输出
CALL DELAY ; 延时1ms
ANL P2, #00H ; 熄灭一下
MOV P0, #04H ; 选通七段数码管D3
MOV P2, R7 ; 高位数据从P2输出
CALL DELAY ; 延时1ms
ANL P2, #00H ; 熄灭一下
MOV A, R3 ; 重新装载
JMP DIS
DELAY: ; 延时子程序,1ms
MOV R1, #2
D1: MOV R2, #248
DJNZ R2, $
DJNZ R1, D1
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -