NXP Semiconductors P89LPC9321 UM10310 User Manual
Page 116

UM10310
All information provided in this document is subject to legal disclaimers.
© NXP B.V. 2010. All rights reserved.
User manual
Rev. 2 — 1 November 2010
116 of 139
NXP Semiconductors
UM10310
P89LPC9321 User manual
;* C = clear on no error, set on error
*
;**************************************************
LOAD
EQU
00H
EP
EQU
68H
PGM_USER:
MOV
FMCON,#LOAD
;load command, clears page register
MOV
FMADRH,R4
;get high address
MOV
FMADRL,R5
;get low address
MOV
A,R7
;
MOV
R0,A
;get pointer into R0
LOAD_PAGE:
MOV
FMDAT,@R0
;write data to page register
INC
R0
;point to next byte
DJNZ
R3,LOAD_PAGE
;do until count is zero
MOV
FMCON,#EP
;else erase & program the page
MOV
R7,FMCON
;copy status for return
MOV
A,R7
;read status
ANL
A,#0FH
;save only four lower bits
JNZ
BAD
;
CLR
C
;clear error flag if good
RET
;and return
BAD:
SETB
C
;set error flag
RET
;and return
A C-language routine to load the page register and perform an erase/program operation is
shown below.
#include
unsigned char idata dbytes[64]; // data buffer
unsigned char Fm_stat; // status result
bit PGM_USER (unsigned char, unsigned char);
bit prog_fail;
void main ()
{
prog_fail=PGM_USER(0x1F,0xC0);
}
bit PGM_USER (unsigned char page_hi, unsigned char page_lo)
{
#define LOAD 0x00 // clear page register, enable loading
#define EP 0x68 // erase & program page
unsigned char i; // loop count
FMCON = LOAD; //load command, clears page reg
FMADRH = page_hi; //
FMADRL = page_lo; //write my page address to addr regs
for (i=0;i<64;i=i+1)