Philips Semiconductors
Preliminary data
P89C51RA2/RB2/RC2/RD2xx
80C51 8-bit Flash microcontroller family
8KB/16KB/32KB/64KB ISP/IAP Flash with 512B/512B/512B/1KB RAM
2002 Jul 18
51
In Application Programming Method
Several In Application Programming (IAP) calls are available for use by
an application program to permit selective erasing and programming of
Flash sectors. All calls are made through a common interface,
PGM_MTP. The programming functions are selected by setting up
the microcontroller’s registers before making a call to PGM_MTP at
FFF0H. The oscillator frequency is an integer number rounded down
to the nearest megahertz. For example, set R0 to 11 for 11.0592 MHz.
Results are returned in the registers. The IAP calls are shown in
Table 10.
Using the Watchdog Timer (WDT)
The P89C51Rx2 devices support the use of the WDT in IAP. The
user specifies that the WDT is to be fed by setting the most
significant bit of the function parameter passed in R1 prior to calling
PGM_MTP. The WDT function is only supported for Block Erase
when using Quick Block Erase. The Quick Block Erase is specified
by performing a Block Erase with register R0 = 0. Requesting a
WDT feed during IAP should only be performed in applications that
use the WDT since the process of feeding the WDT will start the
WDT if the WDT was not running.
Table 10.
IAP calls
IAP CALL
PARAMETER
ááááááááááááááááááááááááááááááááá
á
á
á
á
ááááááááááááááááááááááááááááááááá
á
á
á
á
á
á
á
á
á
á
á
á
á
ááááááááááááááááááááááááááááááááá
á
á
á
á
á
á
á
ááááááááááááááááááááááááááááááááá
á
á
á
ááááááááááááááááááááááááááááááááá
ááááááá
ááááááá
ááááááá
ááááááá
ááááááá
ááááááá
ááááááá
ááááááá
ááááááá
ááááááá
ááááááá
ááááááá
ááááááá
ááááááá
ááááááá
ááááááá
ááááááá
ááááááá
ááááááá
ááááááá
ááááááá
ááááááá
ááááááá
á
á
á
á
á
á
á
á
á
á
á
á
á
á
á
á
á
á
á
á
PROGRAM BYTE
á
á
á
á
ACC = 00 if pass, !=00 if fail
áááááááááááááááááááááááá
áááááááááááááááááááááááá
áááááááááááááááááááááááá
áááááááááááááááááááááááá
áááááááááááááááááááááááá
áááááááááááááááááááááááá
áááááááááááááááááááááááá
áááááááááááááááááááááááá
áááááááááááááááááááááááá
áááááááááááááááááááááááá
áááááááááááááááááááááááá
áááááááááááááááááááááááá
áááááááááááááááááááááááá
áááááááááááááááááááááááá
áááááááááááááááááááááááá
áááááááááááááááááááááááá
áááááááááááááááááááááááá
á
á
á
á
R1 = 02h or R1= 82h (WDT feed)
ACC = byte to program
á
áááááááááááááááááááááááá
áááááááááááááááááááááááá
áááááááááááááááááááááááá
áááááááááááááááááááááááá
áááááááááááááááááááááááá
áááááááááááááááááááááááá
áááááááááááááááááááááááá
ACC = 00 if pass , !=0 if fail
áááááááááááááááááááááááá
áááááááááááááááááááááááá
áááááááááááááááááááááááá
(New function)
á
á
á
á
á
á
á
á
á
á
á
á
á
R0 = osc freq (integer)
DPH = address of 4k code block
DPH = 00H , 4k block 0, 0k~4k
DPH = 20H , 4k block 2, 8k~12k
DPH = 40H , 4k block 4, 16k~20k
DPH = 50H , 4k block 5, 20k~24k
DPH = 70H , 4k block 7, 28k~32k
DPH = 90H , 4k block 9, 36k~40k
DPH = A0H , 4k block 10, 40k~44k
DPH = C0H , 4k block 12, 48k~52k
DPH = E0H , 4k block 14, 56k~60k
DPH = F0H , 4k block 15, 60k~64k
á
Input Parameter:
DPH = 00h
BLOCK
á
á
á
á
á
á
á
R0 = osc freq (integer)
DPH = 00H , block 0 , 0k~8k
DPH = 40H , block 2 , 16~32k
DPL = 00h
á
ERASE STATUS BYTE &
BOOT VECTOR
á
á
á