;************************************************************************ ;* Declarations * ;************************************************************************
FCNTL EQU 0D5h FDATA EQU 0D6h TA EQU 0C7h FBUSY EQU 10000000b
RD_MODE EQU 0000b ; read mode (default) WR_BYTE EQU 1011b ; write upper program memory bank command ERASE_UP EQU 1110b ; erase upper program memory bank command SYS_RES EQU 1111b ; system reset command
;************************************************************************
IAP_WRITE: MOV TA, #0AAh MOV TA, #055h MOV FCNTL, #WR_BYTE MOV FDATA, DPH MOV FDATA, DPL MOV FDATA, A
MOV R1, #10H DJNZ R1, $ F_WAIT: MOV ACC, FCNTL ;wait for FBUSY=1 JNB ACC.7, F_WAIT MOV TA, #0AAh MOV TA, #055h MOV FCNTL, #RD_MODE ;set read mode AJMP HALT ;************************************************************************
IAP_ERASE: MOV TA,#0AAh MOV TA,#055h MOV FCNTL,#ERASE_UP MOV R1, #10H DJNZ R1, $
F_WAITE: MOV ACC, FCNTL JNB ACC.7, F_WAITE
MOV TA,#0AAh MOV TA,#055h MOV FCNTL,#RD_MODE AJMP HALT
It works...
|