首页 理论教育 先分支后赋值程序设计单片机实例

先分支后赋值程序设计单片机实例

时间:2023-10-22 理论教育 版权反馈
【摘要】:2)先分支,图4-6 先分支后赋值程序流程图3)分支后,送入A最后将累加器A中内容送入FUNC单元。先分支指令作用过程如图4-7所示。

先分支后赋值程序设计单片机实例

1.设计方案

由题意可知,自变量X是一个有符号的8位二进制数,可采用累加器A判零条件转移和位控制条件转移指令来设计。程序流程图如图4-6所示。

由图4-6可见,本设计方案主要可分为3个步骤:

1)将X送入A中,以A的内容为判据978-7-111-46831-8-Chapter04-9.jpg这是利用条件转移指令的一个前提。

2)先分支,978-7-111-46831-8-Chapter04-10.jpg

978-7-111-46831-8-Chapter04-11.jpg

图4-6 先分支后赋值程序流程图

3)分支后,978-7-111-46831-8-Chapter04-12.jpg送入A

最后将累加器A中内容送入FUNC单元

2.关键指令选用

978-7-111-46831-8-Chapter04-13.jpg

图4-7 先分支指令作用过程

显然,在这3个步骤中的关键一步是“先分支”,按公式可采用“JZ DONE”和“JNB ACC.7,POSI”两条语句来实现按A值分成三支。先分支指令作用过程如图4-7所示。

首先,判断累加器A是否为零,如果为零,即JZ条件成立,CPU执行分支2,否则CPU继续执行下一条指令“JNB ACC.7,POSI”来判断累加器A中的数是正数还是负数,如果条件成立,即ACC.7=0,CPU执行分支1,否则,继续执行下一条指令“MOV A,#0FFH”,即分支3。

3.参考程序与说明

上述先分支程序设计方案的参考程序如下:

ORG 0100H

VAR DATA 30H

FUNC DATA 31H

978-7-111-46831-8-Chapter04-14.jpg

978-7-111-46831-8-Chapter04-15.jpg

此程序的作用是将一个有符号数X放入RAM的30H单元后,从程序存储区的0100H单元启动执行该程序,就可在RAM的31H单元得到相应的Y值。

下面进一步着重说明几条指令的功能和使用要点。

(1)“ORG 0100H”语句说明

1)定义与功能。ORG是汇编程序的伪指令,放在程序段的开始,用于确定程序段所在起始地址。伪指令ORG功能示意如图4-8所示。(www.xing528.com)

978-7-111-46831-8-Chapter04-16.jpg

图4-8 伪指令ORG功能示意图

2)使用要点。“ORG 0100H”在自动汇编时,汇编程序将此后的程序写在0100H开始的ROM单元;而在人工汇编时,则必须人为将此后的程序指令写在0100H开始的ROM单元内。

3)讨论:

问题①:MCS-51系列单片机开机后,如何才能执行此程序段?

答:在ROM的0000H单元写入“LJMP 0100H”转移指令。这是因为:MCS-51系列单片机开机后,上电复位使程序指针PC复位,PC值=0000H,即MCS-51系列单片机开机后一定从ROM单元0000H开始执行程序,这样必须采用转移指令将PC值变为0100H,才能使单片机立即进入此程序段。

问题②:伪指令与一般单片机指令有什么区别?

答:所谓伪指令是仅供汇编程序使用的指令,而不是MCS-51系列单片机可执行的指令。伪指令ORG的功能如图4-8所示。

(2)“VAR DATA 30H”语句说明

1)定义与功能。DATA是伪指令,用以对字符名称VAR分配一个片内RAM单元字节的地址,字符名称VAR在本程序中是代表自变量X单元,执行此伪指令后,RAM的30H单元被分配用作X单元,即30H单元的内容就是X值。伪指令DATA作用说明如图4-9所示。

2)使用要点。自动汇编时,用汇编程序完成VAR=30H;人工汇编时,必须人为将直接地址30H写入VAR。

3)特点。便于记忆,书写程序灵活,可赋任一内存地址,便于修改程序。

(3)“MOV A,VAR”语句说明

1)定义:内部数据传送指令,直接寻址。

978-7-111-46831-8-Chapter04-17.jpg

图4-9 伪指令DATA作用说明

2)要点:VAR为直接地址单元的标号,在自动汇编时用汇编程序完成VAR=30H;人工汇编时,必须人为将直接地址30H写入VAR。

3)讨论:

问题①:为什么在程序的一开始要将VAR(VAR=X)送入A?

答:A的状态是JZ及JNB指令跳转与否的判据。

问题②:为什么要用字符名称VAR来代表X,能不能用字符名称FUNC来代表Y?

答:这是用汇编语言写程序的常用方法,既便于记忆书写,又便于修改程序。

问题③:为什么在程序中,当X=0时,程序就直接跳转到DONE标号语句?

答:因为此时A的内容等于0,则可直接写入FUNC单元。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈