网站公告列表     本站全新改版正在建设中!  [admin  2007年10月22日]        
加入收藏
设为首页
联系站长
您现在的位置: 东方电子科技有限公司 >> 技术文章 >> HT单片机更多 >> 文章正文
  [图文]HT MCU查表指令的使用           ★★★ 【字体:
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],可以为ACCUMULATORREGISTORDATA 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 AX 指令来实现查表的功能。

本文将介绍如何使用上述提及的三个查表指令。

使 用:

1TABRDC [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 1277H3567H ; TABLE

...

3RET AX 指令的使用(程序从子程序返回,并将立即数送到累加器中)


HT MCU 查表指令的使用

例如:

...

MOV A,1 ; ACC IS A POINTER TO THE DATA IN TABLE

CALL TABLE ; SIMULATE READING TABLE

NOP ; ACC=77H

...

TABLE:

ADDM A,PCL ; JUMP TO THE DATA

RET A,61H ; RETACC=61H

RET A,77H ; RETACC=77H

RET A,98H ; RETACC=98H

RET A,18H ; RETACC=18H

注意:由于PCL不能做跨页跳跃,所以要保证TABLE子程序在同一PAGE中,即在执行指令ADDM APCL ,不能出现进位现象,否则程序会出错。另外,用这种方法查表,每次只能返回一个字节。

<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 ; TABLETHE LONGTH OF WORD IN HT48C10 IS 14.

END

注:下表为各个型号单片机对应字长以及数据大小范围

单片机型号

字长

数据大小

HT48R10A-1

14

0000~3FFF

HT48R30A-1

14

0000~3FFF

HT48R50A-1

15

0000~7FFF

HT48R70A-1

16

0000~FFFF

 

<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 1277H3567H ; TABLE

END

注意: 本例用的是HT48R10A-1单片机。由于各款单片机ROM大小不同,最后页的位置也不同,把表格定义到最后页一定要知道最后一页的起始地址。

下表为各个型号单片机(48系列)最后页的地址范围:

单片机型号

最后页地址范围

HT48R10A-1

300H~3FFH

HT48R30A-1

700H~7FFH

HT48R50A-1

F00H~FFFH

HT48R70A-1

1F00H~1FFFH

 

<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 READING TABLE

NOP ; ACC=77H

JMP $

TABLE:

ADDM A,PCL ; JUMP TO THE DATA

RET A,61H ; RETACC=61H

RET A,77H ; RETACC=77H

RET A,98H ; RETACC=98H

RET A,18H ; RETACC=18H

END


 

 

文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    HT48 & HT46 交通信号灯的实
    HT48 & HT46 MCU I / O 口的
    HT48 & HT46 MCU 用软件执行
    HT48 & HT46 MCU 与HT93LC46
    HT MCU 软件堆栈的应用
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    Copyright © 2005-2008 东方电子科技. All Rights Reserved. 本网站由东方电子科技制作与维护 地址:东莞市塘厦镇林村环村路190号二三楼整层(林村小学对面) 电话:076987282024 手机:13712641904 Email: sanplug@126.com 粤ICP备06051393号 站长:admin