W78E516B
INC SFRAL
; NEXT ADDRESS
MOV A,SFRAL
JNZ BLANK_CHECK_LOOP
INC SFRAH
MOV A,SFRAH
CJNE A,#0H,BLANK_CHECK_LOOP ; END ADDRESS = FFFFH
JMP PROGRAM_64KROM
BLANK_CHECK_ERROR:
MOV P1,#F0H
MOV P3,#F0H
JMP $
;*******************************************************************************
;* RE-PROGRAMMING 64KB APROM BANK
;*******************************************************************************
PROGRAM_64KROM:
MOV DPTR,#0H
MOV R2,#00H
MOV R1,#00H
MOV DPTR,#0H
MOV SFRAH,R1
; THE ADDRESS OF NEW ROM CODE
; TARGET LOW BYTE ADDRESS
; TARGET HIGH BYTE ADDRESS
; EXTERNAL SRAM BUFFER ADDRESS
; SFRAH, TARGET HIGH ADDRESS
MOV SFRCN,#21H ; SFRCN(C7H) = 21 (PROGRAM 64K)
MOV R6,#5AH
MOV R7,#FFH
MOV TL0,R6
MOV TH0,R7
; SET TIMER FOR PROGRAMMING, ABOUT 50 mS.
PROG_D_64K:
MOV SFRAL,R2
MOVX A,@DPTR
MOV SFRFD,A
MOV TCON,#10H
MOV PCON,#01H
INC DPTR
; SFRAL(C4H) = LOW BYTE ADDRESS
; READ DATA FROM EXTERNAL SRAM BUFFER
; SFRFD(C6H) = DATA IN
; TCON = 10H, TR0 = 1,GO
; ENTER IDLE MODE (PRORGAMMING)
INC R2
CJNE R2,#0H,PROG_D_64K
INC R1
MOV SFRAH,R1
CJNE R1,#0H,PROG_D_64K
;*****************************************************************************
; * VERIFY 64KB APROM BANK
;*****************************************************************************
MOV R4,#03H
MOV R6,#FBH
MOV R7,#FFH
MOV TL0,R6
; ERROR COUNTER
; SET TIMER FOR READ VERIFY, ABOUT 1.5 mS.
MOV TH0,R7
MOV DPTR,#0H
MOV R2,#0H
MOV R1,#0H
MOV SFRAH,R1
; The start address of sample code
; Target low byte address
; Target high byte address
; SFRAH, Target high address
MOV SFRCN,#00H ; SFRCN = 00 (Read ROM CODE)
Publication Release Date: February 2000
Revision A3
- 25 -