打印

中颖ic如何查表?

[复制链接]
1658|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cheky|  楼主 | 2008-5-5 20:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用中颖的ic如何查表?建表,都要写明绝对地址(如:ORG  500H)吗?怎么方便地建表与查表取数啊?请指点。谢谢。
沙发
warm_ice| | 2008-5-6 08:49 | 只看该作者

这样

中颖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个系统寄存器赋值时要注意赋值的顺序。

使用特权

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

本版积分规则

10

主题

33

帖子

0

粉丝