首页 理论教育单片机基础:多分支结构

单片机基础:多分支结构

【摘要】:多分支结构中具有两个以上条件可供选择,可使用无条件间接转移指令“JMP@A+DPTR”来实现。使用散转指令设计多分支程序结构时可采用下面的两种方法:1)数据指针DPTR固定,根据累加器A的内容,程序转入相应的分支程序中去。采用转向地址表实现多分支结构,转移的目标程序序号存放于R7中。

多分支结构中具有两个以上条件可供选择,可使用无条件间接转移指令(或称散转指令)“JMP@A+DPTR”来实现。但使用该指令实现多分支转移时,需要有数据表格配合。其流程如图4-4(b)所示。使用散转指令设计多分支程序结构时可采用下面的两种方法:

1)数据指针DPTR固定,根据累加器A的内容,程序转入相应的分支程序中去。

2)累加器A清0,根据数据指针DPTR的值,决定程序转向的目的地址。DPTR的值可用查表或其他方法获得。

下面介绍几种不同的分支程序。

1.采用转移指令表实现多分支结构

在许多应用中,需要根据某标志单元的内容(输入或运算结果)转至相应的操作程序。针对这一情况,可以先用无条件直接转移指令按序组成一个转移表,再将转移表的首地址转入数据指针DPTR中,然后将标志单元的内容装入累加器A,经运算后作为变址值,最后执行JMP@A+DPTR指令实现散转。

【例4-5】设计128路分支的转移程序。设128个出口地址分别为SUB00,SUB01,…,SUB7F;要转移的出口信息放在工作寄存器R3中。注意出口信息是0~127的整数。

【编程说明】对于典型的多分支转移,最有效的办法是执行MOVC与散转指令,用ROM中短表格的位移量指明多分支转移的相对出口地址。

【程序】

程序详解

2.采用地址偏移量表实现多分支结构

在上面介绍的散转程序中,必须先建立转移表,然后程序根据散转点执行JMP@A+DPTR指令进入转移表,再由双字节AJMP指令转入2K字节空间范围内的操作入口或由3个字节LJMP转移指令转入64K字节空间范围内的操作入口。

实际应用中,如果散转点较少,所有操作程序处在同一页(256字节)内时,可以使用地址偏移量转移表来实现多分支结构。(www.chuimin.cn)

【例4-6】设计一个三路分支转移程序,转移的目标程序序号存放于R7中。

【程序】

从本例中可以看出,地址偏移量表每项对应一个操作程序入口,占一个字节,分别表示对应入口地址与表首的偏移量。如当R7=1时,执行MOVC A,@A+DPTR指令后,A中值为OPR1-TAB3,而DPTR为TAB3,执行JMP@A+DPTR时:

所以程序转向了OPR1。

使用这种方法,地址偏移量的长度加上各操作程序长度必须在同一页内,需要注意的是最后一个操作程序的长度不受限制。

3.采用转向地址表实现多分支结构

采用地址偏移量表的方法实现多分支结构要求其转向范围在一页以内,在使用时受到较大的限制。若需要转向较大的范围,可以建立一个转向地址表,即将所要转向的双字节地址组成一个表,先用查表方法获得表中的转向地址,然后将该地址转入数据指针DPTR中,再清累加器A,最后执行JMP@A+DPTR指令,程序转入所要达到的目的地址中去。

【例4-7】采用转向地址表实现多分支结构,转移的目标程序序号存放于R7中。

【程序】

这种方法可以达到64K字节地址空间范围内的转移,但分支数n≤256。若要n>256,可仿照前面的双字节加法运算的方法来修改DPH。