散转程序是一种并行分支程序(多分支程序),它是根据某种输入或运算结果,分别转向各个处理程序。在mcs-51指令系统中用“jmp@a+dptr”指令来实现程序的散转,转移的地址最多为256个。散转程序的结构如图319所示。
图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位。
程序简化流程如图320所示。
图3-20 例3-13程序简化流程
程序如下:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。