⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sum.asm

📁 十五个关于AT89S51的源代码
💻 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 + -