登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

中颖4位单片机查表方法及注意事项

作者:warm_ice 栏目:MCU技术
中颖4位单片机查表方法及注意事项
    中颖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个系统寄存器赋值时要注意赋值的顺序。


* - 本贴最后修改时间:2006-10-9 9:30:44 修改者:warm_ice

参与讨论
昵称:
讨论内容:
 
 
相关帖子
中颖MCU,怎么连个自我介绍都没有呀
什么时候多了这个“隐形”的版面?版面列表里怎么没看到?
求1S延时间的子程序
我的眼花了吗?
哈哈,中颖也要21CN开栏了。
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号