HT56R22/HT56R23/HT56R24/HT56R25/HT56R26
Special Purpose Data Memory
This area of Data Memory is where registers, necessary
for the correct operation of the microcontroller, are
stored. Most of the registers are both readable and
writeable but some are protected and are readable only,
the details of which are located under the relevant Spe-
cial Function Register section. Note that for locations
that are unused, any read instruction to these addresses
will return the value ²00H².
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. The
location of these registers within the Data Memory be-
gins at the address ²00H² and are mapped into both
Bank 0 and Bank 1. Any unused Data Memory locations
between these special function registers and the point
where the General Purpose Memory begins is reserved
and attempting to read data from these locations will re-
turn a value of ²00H².
Indirect Addressing Registers - IAR0, IAR1
The Indirect Addressing Registers, IAR0 and IAR1, al-
though having their locations in normal RAM register
space, do not actually physically exist as normal regis-
ters. The method of indirect addressing for RAM data
manipulation uses these Indirect Addressing Registers
and Memory Pointers, in contrast to direct memory ad-
dressing, where the actual memory address is speci-
fied. 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 corre-
sponding Memory Pointer, MP0 or MP1. Acting as a
pair, IAR0 with MP0 and IAR1 with MP1 can together
access data from the Data Memory. 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 indirectly address and track
data. MP0 can only be used to indirectly address data in
Bank 0 while MP1 can be used to address data in Bank
0 and Bank1. When any operation to the relevant Indi-
rect Addressing Registers is carried out, the actual ad-
dress that the microcontroller is directed to, is the
address specified by the related Memory Pointer. Note
that for the HT56R22 device, bit 7 of the Memory
Pointers is not required to address the full memory
space. When bit 7 of the Memory Pointers for this device
is read, a value of ²1² will be returned. Note that indirect
addressing using MP1 and IAR1 must be used to access
any data in Bank 1. The following example shows how to
clear a section of four Data Memory locations already de-
fined as locations adres1 to adres4.
· Indirect Addressing Program Example
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
; setup size of block
; 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 Data Memory
addresses.
Rev. 1.30
23
December 26, 2014