![](http://datasheet.mmic.net.cn/Analog-Devices-Inc/ADUC847BCPZ62-5_datasheet_96325/ADUC847BCPZ62-5_52.png)
ADuC845/ADuC847/ADuC848
Data Sheet
Rev. C | Page 52 of 108
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
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
;ERASE Page
MOV ECON, #2
;WRITE Page
MOV ECON, #4
;VERIFY Page
MOV A, ECON
;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
25 machine cycles
WRITEPAGE
4 bytes
380 s
VERIFYPAGE
4 bytes
25 machine cycles
ERASEPAGE
4 bytes
2 ms
ERASEALL
4 kbytes
2 ms
READBYTE
1 byte
10 machine cycles
WRITEBYTE
1 byte
200 s
ULOAD Mode (Operating on Flash/EE Program Memory)
WRITEPAGE
256 bytes
15 ms
ERASEPAGE
64 bytes
2 ms
ERASEALL
56 kbytes
2 ms
WRITEBYTE
1 byte
200 s
A given mode of operation is initiated as soon as the command
word is written to the ECON SFR. The core microcontroller
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.