
ADuC845/ADuC847/ADuC848
Example: Programming the Flash/EE Data Memory
A user wants to program F3H into the second byte on Page 03H
of the Flash/EE data memory space while preserving the other
3 bytes already in this page. A typical program of the Flash/EE
data array involves
Rev. A | Page 52 of 108
1.
Setting EADRH/L with the page address.
2.
Writing the data to be programmed to the EDATA1–4.
3.
Writing the ECON SFR with the appropriate command.
Step 1: Set Up the Page Address
Address registers EADRH and EADRL hold the high byte
address and the low byte address of the page to be addressed.
The assembly language to set up the address may appear as
MOV EADRH, #0 ;Set Page Address Pointer
MOV EADRL, #03H
Step 2: Set Up the EDATA Registers
Write the four values to be written into the page into the four
SFRs EDATA1–4. Unfortunately, the user does not know three
of them. Thus, the user must read the current page and overwrite
the second byte.
MOV ECON, #1
;Read Page into EDATA1-4
MOV EDATA2, #0F3H ;Overwrite Byte 2
Step 3: Program Page
A byte in the Flash/EE array can be programmed only if it has
previously been erased. Specifically, a byte can be programmed
only if it already holds the value FFH. Because of the Flash/EE
architecture, this erasure must happen at a page level; therefore,
a minimum of 4 bytes (1 page) are erased when an erase
command is initiated. Once the page is erased, the user can
program the 4 bytes in-page and then perform a verification of
the data.
MOV ECON, #5
MOV ECON, #2
MOV ECON, #4
MOV A, ECON
;ERASE Page
;WRITE Page
;VERIFY Page
;Check if ECON = 0 (OK!)
Although the 4 kbytes of Flash/EE data memory are factory pre-
erased, that is, byte locations set to FFH, it is good programming
practice to include an ERASEALL routine as part of any
configuration/set-up code running on the parts. An ERASEALL
command consists of writing 06H to the ECON SFR, which
initiates an erase of the 4-kbyte Flash/EE array. This command
coded in 8051 assembly language would appear as
MOV ECON, #06H
;ERASE all Command
;2ms duration
FLASH/EE MEMORY TIMING
Typical program and erase times for the parts are as follows:
Normal Mode (Operating on Flash/EE Data Memory)
Command
Bytes Affected
READPAGE
4 bytes
WRITEPAGE
4 bytes
VERIFYPAGE
4 bytes
ERASEPAGE
4 bytes
ERASEALL
4 kbytes
READBYTE
1 byte
WRITEBYTE
1 byte
ULOAD Mode (Operating on Flash/EE Program Memory)
WRITEPAGE
256 bytes
ERASEPAGE
64 bytes
ERASEALL
56 kbytes
WRITEBYTE
1 byte
25 machine cycles
380 μs
25 machine cycles
2 ms
2 ms
10 machine cycles
200 μs
15 ms
2 ms
2 ms
200 μs
Note that a given mode of operation is initiated as soon as the
command word is written to the ECON SFR. The core micro-
controller operation is idled until the requested program/read
or erase mode is completed. In practice, this means that even
though the Flash/EE memory mode of operation is typically
initiated with a two-machine-cycle MOV instruction (to write
to the ECON SFR), the next instruction is not executed until the
Flash/EE operation is complete. This means that the core cannot
respond to interrupt requests until the Flash/EE operation is
complete, although the core peripheral functions such as counter/
timers continue to count as configured throughout this period.