![]() |
|
||||||||||||||
| | 网站首页 | 关于我们 | 单片机培训 | 产品展示 | 产品开发 | 单片机解密 | 技术文章 | 下载中心 | 留言薄 | 技术论坛 | 联系我们 | | ||
|
||
|
|||||||||||||||||||||||||||
| HT MCU查表指令的使用 | |||||||||||||||||||||||||||
| HT MCU查表指令的使用 | |||||||||||||||||||||||||||
作者:佚名 文章来源:本站原创 点击数: 更新时间:2007-10-16 ![]() |
|||||||||||||||||||||||||||
|
HT MCU查表指令的使用 介 绍: 在讨论查表指令该如何使用之前,先介绍一下程序存储器(ROM)空间的划分。Holtek各系列单片机的ROM空间是按页(PAGE)来划分的,一页为256个字(WORD),即512个字节(BYTE)。这样,整个ROM空间正好划分为若干个连续的页。当前页是针对某一特定的程序指令而言的,指该指令在ROM中所处的页,最后页是指ROM的最后一页。另外,有些存储空间较大的单片机(如HTG21X0系列),还将每8K的字空间划分为一个BANK(即32个页),而且整个ROM空间正好为若干个BANK。 单片机ROM中的任何区域都可以用来当表查(不管该区域存放的是程序,还是真正的表格,都可以当表格来查)。Holtek单片机提供了两个用于查表的指令:TABRDC [m] 和TABRDL [m]。其中的[m],可以为ACCUMULATOR、REGISTOR或DATA MEMORY。 对于核内无供程序直接访问的TBHP寄存器的单片机(以下简称“无TBHP寄存器的单片机”,如HT48系列)而言,TABRDC[m] 指令用于查当前页的数据;对于核内有供程序直接访问的TBHP寄存器的单片机(以下简称“有TBHP寄存器的单片机”,如HTG21X0系列)而言,该指令无当前页的限制,可以查整个ROM的数据。无论对于哪种单片机,TABRDL [m] 指令只能用于查ROM中最后一个PAGE的数据。 在无TBHP寄存器的单片机中,使用这两条指令之前,只需给TBLP赋值;在有TBHP寄存器的单片机中,使用TABRDC [m] 之前,还需给TBHP赋值,使用TABRDL [m] 时,TBHP 默认为最后一个PAGE 的首址高位。 通过查表,表格的低位字节送入 [m] ,高位字节送入TBLH 。由于TBLH只读,故要妥善解决在主程序中和在中断服务子程序中同时查表的问题。为了避免这种情况,除避免在主程序和中断程序中同时查表、主程序中查表时关中断(查完再开)外,有时还可用RET A,X 指令来实现查表的功能。 本文将介绍如何使用上述提及的三个查表指令。 使 用: 1、 TABRDC [m]指令的使用 a. 在无TBHP寄存器的单片机中,用于查表格当前页的数据(哪怕该指令在当前页的最后)。 例如: #INCLUDE HT48R10A-1.INC CODE .SECTION AT 000H ‘CODE’ ... MOV A,60H MOV TBLP,A ; TBLP=60H (POINTOR) TABRDC ACC ; ACC=34H NOP ; NOP FOR WATCHING THE LOW BYTE HT MCU 查表指令的使用 MOV A,TBLH ; ACC=12H NOP ; NOP FOR WATCHING THE HIGH BYTE ... ORG 60H DC 1234H,3567H ; TABLE ... b. 在有TBHP寄存器的单片机中,用于查整个ROM的数据。 例如: #INCLUDE HTG2190.INC ROMBANK 0 CODE0 ROMBANK 1 CODE1 CODE0 .SECTION AT 0H ‘CODE’ ... MOV A,3CH MOV TBHP,A ; TBHP=3CH (HIGH POINTER) MOV A,01H MOV TBLP,A ; TBLP=01H (LOW POINTER) TABRDC ACC ; ACC=45H NOP ; NOP FOR WATCHING THE LOW BYTE MOV A,TBLH ; ACC=23H NOP ; NOP FOR WATCHING THE HIGH BYTE ... CODE1 .SECTION AT 0H ‘CODE’ ... ORG 1C00H DW 1234H,2345H ; TABLE ... c. TABRDL [m]指令的使用(查ROM中最后一页的数据)。 例如: ... MOV A,00H MOV TBLP,A ; TBLP=00H (POINTER OR LOW POINTER) TABRDL ACC ; ACC=77H NOP ; NOP FOR WATCHING THE LOW BYTE MOV A,TBLH ; ACC=12H NOP ; NOP FOR WATCHING THE HIGH BYTE ... ORG XXXXH ; THE FIRST ADDRESS OF LAST PAGE DC 1277H,3567H ; TABLE ... 3、RET A,X 指令的使用(程序从子程序返回,并将立即数送到累加器中) HT MCU 查表指令的使用 例如: ... MOV A,1 ; ACC IS A POINTER TO THE DATA IN TABLE CALL TABLE ; SIMULATE NOP ; ACC=77H ... TABLE: ADDM A,PCL ; JUMP TO THE DATA RET A,61H ; RET,ACC=61H RET A,77H ; RET,ACC=77H RET A,98H ; RET,ACC=98H RET A,18H ; RET,ACC=18H 注意:由于PCL不能做跨页跳跃,所以要保证TABLE子程序在同一PAGE中,即在执行指令ADDM A,PCL 时,不能出现进位现象,否则程序会出错。另外,用这种方法查表,每次只能返回一个字节。 <例1_1> 适用于无TBHP寄存器的单片机(此处为HT48R10A-1) #INCLUDE HT48R10A-1.INC CODE .SECTION AT 0 ‘CODE’ ORG 000H JMP START ORG 004H RETI START: MOV A, 60H MOV TBLP,A ; TBLP =60H (POINTER) TABRDC ACC ; ACC=34H, TBLH=12H JMP $ ORG 60H DC 1234H,3567H ; TABLE(THE LONGTH OF WORD IN HT48C10 IS 14.) END 注:下表为各个型号单片机对应字长以及数据大小范围
<例1_2> 适用于有TBHP寄存器的单片机(此处为HTG2190) HT MCU 查表指令的使用 #INCLUDE HTG2190.INC ROMBANK 0 CODE0 ROMBANK 1 CODE1 CODE0 .SECTION AT 0H ‘CODE’ ORG 0000H JMP START ORG 0020H START: MOV A,3CH MOV TBHP,A ; TBHP=3CH (HIGH POINTER) MOV A,01H MOV TBLP,A ; TBLP=01H (LOW POINTER) TABRDC ACC ; ACC=45H NOP ; NOP FOR WATCHING THE LOW BYTE MOV A,TBLH ; ACC=23H NOP ; NOP FOR WATCHING THE HIGH BYTE JMP $ CODE1 .SECTION AT 0H ‘CODE’ ORG 1C00H DW 1234H,2345H ; TABLE END <例2> 适用于所有的单片机(此处为HT48R10A-1) #INCLUDE HT48R10A-1.INC CODE .SECTION AT 0 ‘CODE’ ORG 000H JMP START ORG 004H RETI START: MOV A,00H MOV TBLP,A ; TBLP=00H (POINTER OR LOW POINTER) TABRDL ACC ; ACC=77H NOP ; NOP FOR WATCHING THE LOW BYTE MOV A,TBLH ; ACC=12H NOP ; NOP FOR WATCHING THE HIGH BYTE JMP $ ORG 300H ; THE FIRST ADDRESS OF LAST PAGE HT MCU 查表指令的使用 DC 1277H,3567H ; TABLE END 注意: 本例用的是HT48R10A-1单片机。由于各款单片机ROM大小不同,最后页的位置也不同,把表格定义到最后页一定要知道最后一页的起始地址。 下表为各个型号单片机(48系列)最后页的地址范围:
<例3> 这个例子同样适用于所有的单片机(此处为HT48R10A-1)。 CODE .SECTION AT 0 ‘CODE’ ORG 0 JMP START ORG 4 RETI START: MOV A,1 ; ACC IS A POINTER TO THE DATA IN TABLE CALL TABLE ; SIMULATE NOP ; ACC=77H JMP $ TABLE: ADDM A,PCL ; JUMP TO THE DATA RET A,61H ; RET,ACC=61H RET A,77H ; RET,ACC=77H RET A,98H ; RET,ACC=98H RET A,18H ; RET,ACC=18H END |
|||||||||||||||||||||||||||
| 文章录入:admin 责任编辑:admin | |||||||||||||||||||||||||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | |||||||||||||||||||||||||||
| 最新热点 | 最新推荐 | 相关文章 | ||
| HT48 & HT46 交通信号灯的实 HT48 & HT46 MCU I / O 口的 HT48 & HT46 MCU 用软件执行 HT48 & HT46 MCU 与HT93LC46 HT MCU 软件堆栈的应用 |
| 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告 | | |||
|