打印

可有好的方法取得数据表和转跳表的地址

[复制链接]
1397|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mojunrui|  楼主 | 2008-5-11 11:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的方法是这样
ORG 300H
TJMP
RTNW     ;1 行
.
.
.
RTNW     ;10 行

表格起始地址 301H
如果下面再有几组数据表,要在后面都要标注很麻烦,
有没有好的方法,请指教;
51系列就很方便
沙发
warm_ice| | 2008-5-12 10:16 | 只看该作者

现在这样麻烦么?

像您这样的查表方式还复杂么?您说的在后面标注是指什么??
中颖的查表方法有2种:
中颖4位单片机有2种查表方法:普通查表(TJMP)方法和RDT(ROM DATA TABLE)查表方法。 

一.普通查表方法(TJMP)
在中颖4位单片机中都可采用此方法来进行查表。

1.    普通查表原理
查表时,执行CALL指令后,下一条指令的地址被自动压入堆栈中,然后跳转到数据表处,执行TJMP指令,PC指针跳转到PC11~PC8,TBR(TABLE BRANCH REGISTER),AC(累加器)所指向的地址,该地址的数据通过RTNW指令返回,其中,高4位数据保存到TBR寄存器中,低4位数据保存到累加器AC中。返回时PC指针会自动被堆栈中保存的PC数据覆盖。

2.    实例
;*******************************
;            调用部分
;*******************************
LDI      TBR ,00H    ;设置TBR的值为0
LDI      TEMP,02H    ;设置累加器AC的值为2
CALL     DATA_TABLE  ;查数据表
STA      TEMP1,00H   ;把低4位数据(1101B)保存到临时寄存器中
LDA      TBR,00H     ;读入高4位数据
STA      TEMP2,00H   ;把高4位数据(0010B)保存到临时寄存器中

;*******************************
;          数据表部分
;*******************************
        ORG     300H        ;设置PC地址
DATA_TABLE:              
        TJMP                ;跳转到由PC11~PC8,TBR,AC所指向的12位PC地址,此处
;为跳转到302H
        RTNW    0001B,1000B ;301H
        RTNW    0010B,1101B ;302H
        RTNW    0011B,1100B ;303H
    说明:TEMP,TEMP1,TEMP2为自定义的临时寄存器

3.    注意事项
通过观察可以发现,在查表时,TJMP指令跳转地址的最高4位是读取表格所在位置的PC指针的高4位,而用户在程序中只需要赋值低8位,这样,当数据表较大时(如大于等于256行)时,需要对TJMP指令跳转地址的高4位进行进位时,因程序中无法直接对PC值进行赋值,就会出现错误。所以在数据表较大时,如大于等于256行,应该把此表格分为几个小的表格,防止在查表时出现以上所说的错误。

二.RDT查表
为了提高对ROM空间的利用效率,在中颖一些新近推出的4位单片机中,推出了一种叫做RDT的查表方式,可以利用16位的ROM空间。

1.    RDT查表原理
在具有RDT查表方式功能的单片机中,会有4个系统寄存器,共16位(RDT.15~RDT.0),在查表时,把表格数据所在的地址赋值给这4个系统寄存器,然后延时一条指令的时间,相应位置中的数据就被自动放到RDT的这4个系统寄存器中,读取这4个系统寄存器就可以得到相应位置上的数据了。

2.    实例
;*******************************
;            调用部分
;*******************************
LDI      TEMP,00H    ;
STA      RDT_H       ;赋值RDT最高4位数据
LDI      TEMP,03H    ;
STA      RDT_MH      ;赋值RDT中高4位数据
LDI      TEMP,00H    ;
STA      RDT_ML      ;赋值RDT中低4位数据
LDI      TEMP,01H    ;
STA      RDT_L       ;赋值RDT低4位数据
NOP                  ;延时一条指令的时间
LDA      RDT_L       ;读入低4位数据
STA      TEMP1,00H   ;把低4位数据(00H)保存到临时寄存器中
LDA      RDT_ML      ;读入中低4位数据
STA      TEMP2,00H   ;把中低4位数据(03H)保存到临时寄存器中
LDA      RDT_MH      ;读入中高4位数据
STA      TEMP3,00H   ;把中高4位数据(02H)保存到临时寄存器中
LDA      RDT_H       ;读入高4位数据
STA      TEMP4,00H   ;把高4位数据(01H)保存到临时寄存器中
;*******************************
;          数据表部分
;*******************************
        ORG     300H        ;设置PC地址
DATA_TABLE:                  
        DW      0123H       ;300H
        DW      1230H       ;301H
        DW      2301H       ;302H

   说明:RDT_H,RDT_MH,RDT_ML,RDT_L为RDT的四个系统寄存器,TEMP,TEMP1~TEMP4为自定义的临时寄存器。
3.    注意事项
    在RDT查表时,IC内部要进行一些复杂的操作,所以不要进行单步访真,以免造成错误。
    在对RDT的4个系统寄存器赋值时要注意赋值的顺序。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

5

帖子

0

粉丝