Rev. 1.10
30
October 23, 2020
Rev. 1.10
31
October 23, 2020
BC66F5652
2.4GHz RF Transceiver A/D Flash MCU
BC66F5652
2.4GHz RF Transceiver A/D Flash MCU
Last Page or
TBHP Register
Address
TBLP Register
Data
16 bits
Program Memory
Register TBLH
User Selected
Register
High Byte
Low Byte
Table Program Example
The following example shows how the table pointer and table data is defined and retrieved from the
microcontroller. This example uses raw table data located in the Program Memory which is stored
there using the ORG statement. The value at this ORG statement is “1F00H” which refers to the
start address of the last page within the 8K words Program Memory of the device. The table pointer
low byte register is set here to have an initial value of “06H”. This will ensure that the first data read
from the data table will be at the Program Memory address “1F06H” or 6 locations after the start of
the last page. Note that the value for the table pointer is referenced to the specific address pointed by
the TBLP and TBHP registers if the “TABRD [m]” or “LTABRD [m]” instruction is being used. The
high byte of the table data which in this case is equal to zero will be transferred to the TBLH register
automatically when the “TABRD [m]” instruction is executed.
Because the TBLH register is a read/write register and can be restored, care should be taken
to ensure its protection if both the main routine and Interrupt Service Routine use table read
instructions. If using the table read instructions, the Interrupt Service Routines may change the
value of the TBLH and subsequently cause errors if used again by the main routine. As a rule it is
recommended that simultaneous use of the table read instructions should be avoided. However, in
situations where simultaneous use cannot be avoided, the interrupts should be disabled prior to the
execution of any main routine table-read instructions. Note that all table related instructions require
two instruction cycles to complete their operation.
Table Read Program Example
tempreg1 db ? ; temporary register #1
tempreg2 db ? ; temporary register #2
:
:
mov a,06h ; initialise low table pointer - note that this
;
address
is
referenced
mov tblp,a ; to the last page or the page that tbhp pointed
mov a,1Fh ; initialise high table pointer
mov tbhp,a
:
:
tabrd tempreg1 ; transfers value in table referenced by table
;
pointer,
data
at
program
memory
address
“1F06H”
;
transferred
to
tempreg1
and
TBLH
dec tblp ; reduce value of table pointer by one
tabrd tempreg2 ; transfers value in table referenced by table
;
pointer,
data
at
program
memory
address
“1F05H”
;
transferred
to
tempreg2
and
TBLH
; in this example the data “1AH” is transferred to
;
tempreg1
and
data
“0FH”
to
register
tempreg2
; the value “00H” will be transferred to the high byte
;
register
TBLH
:
: