HT46R064B/065B/066B
查表
程序存储器中的任何地址都可以定义为一个表格,以便存储固定的数据。使用查表指令时,查
表指针需要先行设定,其方式是将表格的低位地址放在表格指针寄存器 TBLP 中。这个寄存器定义
的是表格较低的 8 位地址。
在设定完表格指针后,表格数据可以使用“TABRDC [m]”或“TABRDL [m]”指令从程序所在
的存储器的当前页或者存储器的最后一页中查表来读取。当这些指令执行时,程序存储器的表格的
低字节,将会传输到用户所指定的数据存储器中。程序存储器表格的高字节,将会传输到特殊寄存
器 TBLH 中。传输数据中任何未定义的字节将会读取为“0”。
下图为查表寻址/数据流程图:
表格地址
b6 b5
TABRDC[m] PC11 PC10 PC9 PC8 @7 @6 @5 @4 @3 @2 @1 @0
TABRDL[m] @7 @6 @5 @4 @3 @2 @1 @0
指令
b11 b10
b9
b8
b7
b4
b3
b2
b1
b0
1
1
1
1
注:
1. PC11 ~ PC8:当前程序计数器位
2. @7~@0:表格指针 TBLP 位
3. 对 HT46R064B 来说,表格地址是 10 位,从 b9~b0。
4. 对 HT46R065B 来说,表格地址是 11 位,从 b10~b0。
5. 对 HT46R066B 来说,表格地址是 12 位,从 b11~b0。
查表范例
以下范例说明在 HT46R064B 芯片中表格指针和表格数据如何被定义和执行。这个例子使用的
表格数据用 ORG 伪指令储存在存储器的最后一页,在此 ORG 伪指令中的值为 300H,即 1K 程序存
储器最后一页存储器的起始地址,而表格指针的初始值则为 06H,这可保证从数据表格读取的第一
笔数据位于程序存储器地址 306H,即最后一页起始地址后的第六个地址。注意,假如―TABRDC [m]‖
指令被使用,则表格指针指向当前页。在这个例子中,表格数据的高字节等于零,而当―TABRDL [m]‖
指令被执行时,此值将会自动的被传送到 TBLH 寄存器。
因为 TBLH 寄存器是只读寄存器,不能重新储存,若主程序和中断服务程序都使用表格读取指
令,应该注意它的保护。使用表格读取指令,中断服务程序可能会改变 TBLH 的值,若随后在主程
序中再次使用这个值,则会发生错误。因此建议避免同时使用表格读取指令。然而在某些情况下,
如果同时使用表格读取指令是不可避免的,则在执行任何主程序的表格读取指令前,中断应该先除
能,另外要注意,所有与表格相关的指令,都需要两个指令周期去完成操作。
Rev 1.00
2011-04-13
15