实验3 多分支程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验3 多分支程序

一、实验目的

1.了解程序的多分支结构。

2.了解多分支结构程序的编程方法。

3.学会程序的调试。

二、实验内容

在多分支结构的程序中,能够按调用号执行相应的功能。

三、实验说明

多分支结构是程序中常见的结构,若给出调用号来调用子程序,一般用查表方法,查到子程序的地址,转到相应子程序,完成指定操作。

基本实验要求:根据A里面的值给相应的片内RAM单元赋值,A的值范围为0~3,要给对应的30H~33H赋相应A的值。

四、硬件设计

利用以下元件:A T89C51、CAP、CAP-ELEC、CRYSTAL、RES。设计出如下的硬件电路。晶振频率为12MHz。

五、参考程序框图

多分支参考程序框图

六、程序调试

编写好程序后,进行调试。

1)keil中调试

选择‘debug’中‘start/stop debug session’,开始调试,按‘F1’,单步运行。在‘project workspace’中查看累加器、通用寄存器及特殊功能寄存器的变化;在‘memory’窗口中,可以看到每执行一条语句后存储空间的变化。在‘address’窗口中,输入‘D:地址’,查看A T89C51的片内直接寻址空间,并单步执行,看到随着程序的执行,相应的地址单元内容发生变化。

2)Proteus中调试

右击‘A T89C51’并左单击,打开‘Edit Component’窗口,在‘program file’中选择keil中生成的.hex文件。然后在左下角‘’按钮,进入程序调试状态,并在‘debug’中打开‘8051 CPU Registers’、‘8051 CPU (IDA TA)Memory’及‘8051 CPU SFR Memory’三个观察窗口,按‘F11’键,单步运行,并观察三个窗口相应值的变化。

3)按‘思考’中内容,重复以上内容,观察变化。

七、参考代码

ORG 00H

START:

MOV A,#0 ;设置地址偏移量

ACALL FUNCENTER

MOV A,#1 ;设置地址偏移量

ACALL FUNCENTER

MOV A,#2 ;设置地址偏移量

ACALL FUNCENTER

MOV A,#3 ;设置地址偏移量

ACALL FUNCENTER

LJMP $

FUNCENTER:

ADD A,ACC ;AJMP为二字节指令,地址偏移量*2

MOV DPTR,#FUNCTAB ;设置基址

JMP @A+DPTR ;跳转到目标地址

FUNCTAB:

AJMP FUNC0

AJMP FUNC1

AJMP FUNC2

AJMP FUNC3

FUNC0: MOV 30H,#0

RET

FUNC1: MOV 31H,#1

RET

FUNC2: MOV 32H,#2

RET

FUNC3: MOV 33H,#3

RET

END

八、思考

1)请分别采用不同的跳转指令(AJMP 、LJMP )及不同调用指令(ACALL 、LCALL )并调试,同时指出这些指令的区别。

2)设变量x 的值存放在内部RAM 的50H 单元中,求y 并存于40H ,尝试编程并调试正确。

101010100

10100x x y x x x x +<⎧⎪=≤≤⎨⎪+>⎩

相关文档
最新文档