HT46R064B/065B/066B
特殊功能寄存器
为了确保单片机能正常工作,数据存储器中设置了一些内部寄存器。这些寄存器确保内部功能
(定时器,中断等)和外部功能(输入/输出口数据控制)的正确工作。这些寄存器中大部分是可读
写的,只有小部份仅可读。特殊功能寄存器和通用数据存储器起始地址之间,有一些未定义的数据
存储器,被保留用来做未来扩充,若从这些地址读取数据将会返回 00H 值。
间接寻址寄存器 – IAR0,IAR1
间接寻址寄存器 IAR0 和 IAR1,位于数据存储区,并没有实际的物理地址。间接寻址方式是使
用间接寻址寄存器或者存储器指针对数据操作,以取代定义在实际存储器地址的直接存储器寻址方
式。在间接寻址寄存器上的任何动作,将对间接寻址指针(MP0 或 MP1)所指定的存储器地址产生
对应的读/写操作。IAR0 和 MP0,IAR1 和 MP1 对数据存储器中数据的操作是成对出现的。间接寻
址寄存器不是实际存在的,直接读取 IAR 寄存器将会返回 00H 的结果,而直接写入此寄存器则不做
任何操作。
间接寻址指针 – MP0,MP1
该系列单片机提供两个间接寻址指针,即 MP0 和 MP1。由于这些指针在数据存储器中能像普
通的寄存器一样被写入和操作,因此提供了一个有效的间接寻址和数据追踪的方法。MP0 只能对
Bank0 的数据进行间接寻址,而 MP1 可以对所有 Bank 数据进行间接寻址。当对间接寻址寄存器进
行任何操作时,单片机所指向的实际地址是由间接寻址指针所指定的地址。注意,对 HT46R064B
而言,间接寻址指针的第 7 位是没有作用的,当对间接寻址指针的第 7 位进行读操作时,其值为“1”。
以下范例说明如何清除一个具有4个RAM地址的区块,它们已经事先被定义成地址adres1到adres4。
间接寻址程序范例
data . section ‘data’
adres1 db
adres2 db
adres3 db
adres4 db
?
?
?
?
?
block
db
code. section at 0 code
org 00h
start:
mov a,04h
mov block,a
mov a,offset adres1
mov mp0,a
loop:
;setup size of block
; Accumulator loaded with first RAM address
; setup memory pointer with first RAM address
clr IAR0
inc mp0
; clear the data at address defined by MP0
; increment memory pointer
sdz block
jmp loop
; check if last memory location has been cleared
continue:
在以上的例子中,没有提及具体的数据存储器地址。
累加器 – ACC
对于任何单片机来说,累加器是相当重要的,且与 ALU 所完成的运算有密切关系,所有的 ALU
得到的运算结果都将暂存在累加器中,如果没有累加器,ALU 必须在每次进行如加法、减法和移位
等运算时,将结果写入数据存储器中,这样会造成程序编写和时间的负担。另外,数据传输通常涉
Rev 1.00
2011-04-13
19