单片机综合实验 - 01 | 汇编程序设计二

一、实验目的和任务

1、掌握分支、循环结构程序以及子程序的设计方法。

2、进一步熟悉Keil C51集成开发环境。

二、实验原理简介

在汇编语言程序设计中,普遍采用结构化程序设计方法。因为任何复杂的程序都可由顺序结构、分支结构及循环结构等构成。每种结构只有一个入口和出口,整个程序也只有一个入口和出口。结构化程序设计的特点是程序的结构清晰、易于读写和验证、可靠性高。结构化程序设计的基本方法有顺序结构、分支结构、循环结构、子程序。

本实验在实验一基础上,要求掌握分支、循环结构程序以及子程序的设计方法。

三、实验内容和步骤

1、分支程序:是根据要求无条件或有条件地改变程序执行流向。编写分支程序主要在于正确使用转移指令。

设变量x以补码形式存放在片内RAM的30H单元中,变量y与x的关系如下:

      

程序代码如下所示:

		ORG	 0000H
		JMP	 MAIN
		ORG	 0100H
MAIN:	MOV	 30H,#0H
		MOV	 A,30H
		JZ	 NEXT
		ANL	 A,#80H
		JZ	 ED
		MOV	 A,#05H
		ADD	 A,30H
		MOV	 30H,A	;(30H)=20H 
		SJMP ED
NEXT:	MOV	 30H,#20H
ED:		SJMP $
		END

2、循环程序:循环程序一般包含四部分:初始化部分、循环处理部分、循环控制部分和循环修改部分。

设有一带符号的数组存放在内部RAM以20H为首址的连续单元中,数组长度为30,要求找出其中的最大值,并将其存放到内部RAM的1FH单元中。

程序代码如下所示:

		ORG	 0000H
		JMP	 MAIN
		ORG	 0100H
			
MAIN:	MOV  R0,#20H
		MOV  A,#0
		MOV  R1,#30
		MOV  DPTR,#TAB
		
LOOP1: PUSH ACC
		MOVC A,@A+DPTR
		MOV  @R0,A
		POP  ACC
		INC  R0
		INC  A
		DJNZ R1,LOOP1	
		
		MOV	 R0,#20H
		MOV	 B,#29
		MOV	 A,@R0
		
LOOP:	INC  R0
		MOV  R1,A
		XRL	 A,@R0
		JB	 ACC.7,LAT
		MOV	 A,R1
		CLR  C
		SUBB A,@R0
		JNB  ACC.7,AA
		NOP
		
CXA:	MOV  A,@R0
		SJMP BB
LAT:	XRL  A,@R0
		JNB  ACC.7,BB
		SJMP CXA
AA:		MOV  A,R1
BB:		DJNZ B,LOOP
		MOV  1FH,A
		
TAB: 	DB	-7,9,34,11,-43
		DB	-27,29,4,21,-13
		DB	-17,19,24,41,-23
		DB	-37,49,14,31,-53
		DB	-47,59,54,51,-54
		DB	-57,69,44,61,-45
		END

3、子程序:同一个程序中,往往有许多地方都需要执行同一任务,这时可对这项任务独立编写。

实验内容:设0、1、...、9存放在内部RAM的20H开始的存储区域内,对其进行平方运算,计算所得结果存放在R3、R2中。要求:平方运算编写成子程序SORT,主程序通过调用SORT并求和完成运算。参数的传递用累加器。

		ORG	 0000H
		JMP	 MAIN
		ORG	 0100H
			
MAIN:	MOV  R1,#20H
		MOV	 R2,#10
		MOV  A,#0
		
LOOP1:	MOV  @R1,A
		INC  R1
		INC  A
		DJNZ R2,LOOP1
		
		MOV  R0,#20H
		MOV  R7,#10
		MOV  R3,#0
		MOV  R2,#0
		CLR  C
		
LOOP:	MOV  A,@R0
		ACALL SORT
		ADD  A,R2
		MOV	 R2,A
		MOV  A,R3
		ADDC A,#0
		MOV  R3,A
		INC  R0
		DJNZ R7,LOOP
		SJMP EN
		
SORT:	MOV  DPTR,#TAB
		MOVC A,@A+DPTR
		RET
TAB: 	DB   0,1,4,9,16
		DB	 25,36,49,64,81
EN:		NOP
		END

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式逍遥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值