
Preliminary W78LE58
Publication Release Date: June 2000
- 27 -
Revision A1
Application Note: In-system Programming Software Examples
This application note illustrates the in-system programmability of the Winbond W78LE58 MTP-ROM
microcontroller. In this example, microcontroller will boot from 32KB APROM bank and waiting for a
key to enter in-system programming mode for re-programming the contents of 32KB APROM. While
entering in-system programming mode, microcontroller executes the loader program in 4KB LDROM
bank. The loader program erases the 32KB APROM then reads the new code data from external
SRAM buffer (or through other interfaces) to update the 32KB APROM.
EXAMPLE 1:
;*******************************************************************************************************************
;* Example of 32K APROM program: Program will scan the P1.0. if P1.0 = 0, enters in-system
;* programming mode for updating the content of APROM code else executes the current ROM code.
;* XTAL = 16
MHz
;*******************************************************************************************************************
.chip 8052
.RAMCHK OFF
.symbols
CHPCON EQU BFH
CHPENR EQU F6H
SFRAL EQU C4H
SFRAH EQU C5H
SFRFD EQU C6H
SFRCN EQU C7H
ORG 0H
LJMP 100H ; JUMP TO MAIN PROGRAM
;************************************************************************
;* TIMER0 SERVICE VECTOR ORG = 000BH
;************************************************************************
ORG 00BH
CLR TR0 ; TR0 = 0, STOP TIMER0
MOV TL0,R6
MOV TH0,R7
RETI
;************************************************************************
;* 32K APROM MAIN PROGRAM
;************************************************************************
ORG 100H
MAIN_32K:
MOV A,P1 ; SCAN P1.0
ANL A,#01H
CJNE A,#01H,PROGRAM_32K ; IF P1.0 = 0, ENTER IN-SYSTEM PROGRAMMING MODE
JMP NORMAL_MODE
PROGRAM_32K:
MOV CHPENR,#87H ; CHPENR = 87H, CHPCON REGISTER WRTE ENABLE
MOV CHPENR,#59H ; CHPENR = 59H, CHPCON REGISTER WRITE ENABLE
MOV CHPCON,#03H ; CHPCON = 03H, ENTER IN-SYSTEM PROGRAMMING MODE
MOV TCON,#00H ; TR = 0 TIMER0 STOP
MOV IP,#00H ; IP = 00H