9语言程序设计课题.pptVIP

  • 10
  • 0
  • 约 49页
  • 2017-01-01 发布于湖北
  • 举报
5、散转(多分支)程序设计 散转程序是一种并行分支程序。 它是根据某种 输入或运算结果, 分别转向各个处理程序。 在MCS— 51 单片机中, 散转指令为JMP@A+DPTR, 它按照程 序运行时决定的地址执行间接转移指令。 (1) 使用地址偏移量表的散转程序 如果所有的N个分支处理程序的总长度小于 256 个字节时, 可以使用地址偏移量来实现N分支散 转。 它的优点是程序简单, 转移表短。 【例1】按R2 的内容转向 4 个分支处理程序。 4 个分支处理程序总长度小于256个字节。 解: 入口: (R2)=入口条件(0, 1, 2, 3)。 出口: 各分支处理程序入口。 程序清单如下: N-JMP: MOV A, R2 MOV DPTR, #TABL ; 分支表首地址送DPTR MOVC A, @A+DPTR ; 查表取转移目标地址偏移量 JMP @A+DPTR ; 转移到相应处理程序 TABL: DB PRG0(rel) ; 存放转移目标地址偏移量 DB PRG1(rel) DB PRG2(rel) DB PRG3(rel) PRG0: …… ; 分支处理程序 0 …… PRG3: …… ; 分支处理程序 3 …… 2. 使用转移指令表的散转程序 使用地址偏移量表的散转程序分支N不能太多, 而且由于DB伪指令只能定义 8 位字节, 分支入口地 址的分布也要受到较大的限制。 若在TABL表中存 放的不是入口地址偏移量, 而存放的是一系列转移 指令AJMP, 则可实现 128 分支程序, 各分支入口地 址可在2 KB范围内分布。 【例2】设计可多达 128 路分支出口的转移 程序。 解: 入口: (R2)=转移目标地址的序号 00H~ 7FH。 出口: 转移到相应分支程序入口。 程序清单如下: JMP-128: MOV DPTR, #TABL ; 转移指令表首址 MOV A, R2 RL A ; (A) ← (R2)×2 JMP @A+DPTR TABL: AJMP PRG00 AJMP PRG01;  AJMP PRG7F PRG00:……  ……… PRG7F: …… 以上程序中由于AJMP是双字节指令, 因此采用 RL指令使(R2)乘以 2, 可保证移向正确的位置。 值 得注意的是: 每个分支的入口地址(PRG00~ PRG7F)必须与其相应的AJMP指令在同一个 2 K 存储区内。 也就是说, 分支入口地址的安排仍有一 定的限制。 如改用长转移LJMP指令, 则分支入口 可在 64 KB范围内任意安排, 但程序要作相应的修 改。 3. 使用位检测指令的散转程序 【例3】根据P1口上的位状态(“1”有效)散转 到不同的处理程序。 解: 若P1 口D0~D7 位为 1, 则转相应处理子程 序。 如P1 中第 0 位为 1, 则转PRG0。 程序清单如下: BIT-JMP: JB 90H, LP0 ; P1 口D0 为 1, 则转LP0 子程序 JB 91H, LP1 JB 92H, LP2 JB 93H, LP3 JB 94H, LP4 JB 95H, LP5 JB 96H, LP6

文档评论(0)

1亿VIP精品文档

相关文档