首页 理论教育 单片机散转程序实例及实现方法

单片机散转程序实例及实现方法

时间:2023-10-22 理论教育 版权反馈
【摘要】:在mcs-51指令系统中用“jmp@a+dptr”指令来实现程序的散转,转移的地址最多为256个。其表中各项即为各转向程序的入口。散转时,使用查表指令,按某单元的内容查找到对应的转向地址,将它装入dptr,然后清累加器a,再用“jmp@a+dptr”指令直接转向各个分支程序。应用ret指令实现散转程序 用子程序返回指令ret实现散转。

单片机散转程序实例及实现方法

散转程序是一种并行分支程序(多分支程序),它是根据某种输入或运算结果,分别转向各个处理程序。在mcs-51指令系统中用“jmp@a+dptr”指令来实现程序的散转,转移的地址最多为256个。散转程序的结构如图319所示。

978-7-111-46285-9-Chapter03-99.jpg

图3-19 散转程序的结构

散转程序的设计方法:

(1)应用转移指令表实现的散转程序 直接利用转移指令(ajmp或ljmp)将欲散转的程序组形成一个转移表,然后将标志单元内容读入累加器a,转移表首址送入dptr中,再利用散转指令“jmp@a+dptr”实现散转。

(2)应用地址偏移量表实现的散转程序 直接利用地址偏移量形成转移表,特点是程序简单、转移表短,转移表和处理程序可位于程序存储器的任何地方。

(3)应用转向地址表的散转程序 直接使用转向地址表。其表中各项即为各转向程序的入口。散转时,使用查表指令,按某单元的内容查找到对应的转向地址,将它装入dptr,然后清累加器a,再用“jmp@a+dptr”指令直接转向各个分支程序。

(4)应用ret指令实现散转程序 用子程序返回指令ret实现散转。其方法是:在查找到转移地址后,不是将其装入dptr中,而是将它压入堆栈中(先低位字节,后高位字节,即模仿调用指令)。然后通过执行ret指令,将堆栈中的地址弹回到pc中实现程序的转移。

例3-13】 编制程序用单片机实现四则运算。(www.xing528.com)

:在单片机的键盘上设置“+”、“-”、“×”、“÷”4个运算按键。其键值存放在寄存器r2中,当(r2)=00h时做加法运算,当(r2)=01h时做减法运算,当(r2)=02h时做乘法运算,当(r2)=03h时做除法运算。

p1口输入被加数、被减数、被乘数、被除数,输出商或运算结果的低8位;p3口输入加数、减数、乘数、除数,输出余数或运算结果的高8位。

程序简化流程如图320所示。

978-7-111-46285-9-Chapter03-100.jpg

图3-20 例3-13程序简化流程

程序如下:

978-7-111-46285-9-Chapter03-101.jpg

978-7-111-46285-9-Chapter03-102.jpg

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

我要反馈