NXP Semiconductors P89LPC9321 UM10310 User Manual

Page 116

Advertising
background image

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 <REG9351.H>

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)

Advertising