HT45R37
Special Function Registers
To ensure successful operation of the microcontroller,
certain internal registers are implemented in the Data
Memory area. These registers ensure correct operation
of internal functions such as timers, interrupts, etc., as
well as external functions such as I/O data control and
A/D converter operation. The location of these registers
within the Data Memory begins at the address 00H. Any
unused Data Memory locations between these special
function registers and the point where the General Pur-
pose Memory begins is reserved for future expansion
purposes, attempting to read data from these locations
will return a value of 00H.
Memory Pointer, MP0 or MP1. As the Indirect Ad-
dressing Registers are not physically implemented,
reading the Indirect Addressing Registers indirectly will
return a result of ²00H² and writing to the registers indi-
rectly will result in no operation.
Memory Pointers - MP0, MP1
Two Memory Pointers, known as MP0 and MP1 are pro-
vided. These Memory Pointers are physically imple-
mented in the Data Memory and can be manipulated in
the same way as normal registers providing a conve-
nient way with which to address and track data. When
any operation to the relevant Indirect Addressing Regis-
ters is carried out, the actual address that the
microcontroller is directed to, is the address specified by
the related Memory Pointer.
Indirect Addressing Registers - IAR0, IAR1
The Indirect Addressing Registers, IAR0 and IAR1, al-
though having their locations in normal register space,
do not actually physically exist as normal registers. The
method of indirect addressing for data manipulation
uses these Indirect Addressing Registers and Memory
Pointers, in contrast to direct memory addressing,
where the actual memory address is specified. Actions
on the IAR0 and IAR1 registers will result in no actual
read or write operation to these registers but rather to
the memory location specified by their corresponding
The following example shows how to clear a section of
four RAM locations already defined as locations adres1
to adres4.
data .section ¢data¢
adres1
adres2
Adres3
adres4
block
db ?
db ?
db ?
db ?
db ?
code .section at 0 ¢code¢
org 00h
start:
mov a,04h
; setup size of block
mov block,a
mov a,offset adres1
mov mp0,a
; Accumulator loaded with first RAM address
; setup memory pointer with first RAM address
loop:
clr IAR0
inc mp0
sdz block
jmp loop
; clear the data at address defined by MP0
; increment memory pointer
; check if last memory location has been cleared
continue:
The important point to note here is that in the example shown above, no reference is made to specific RAM addresses.
Rev. 1.20
15
February 25, 2011