LCALL ISP_RECVUART
LCALL ISP_PROGRAMIAP ;0002
MOV IAP_ADDRL,#03H ;User code start address
MOV IAP_ADDRH,#00H
ISP_PROGRAMNEXT:
LCALL ISP_RECVUART ;receive code data
LCALL ISP_PROGRAMIAP ;Program the data into the user code area
INC DPTR
MOV A,DPL
ORL A,DPH
JNZ ISP_PROGRAMNEXT ;length detection
ISP_SOFTRESET:
MOV IAP_CONTR,#20H ;Software reset system
SJMP $
ISP_ENTRY:
MOV WDT_CONTR,#17H ;clear watchdog
MOV IAP_CONTR,#80H ;Enable IAP function
MOV IAP_TPS,#11 ;Set the IAP wait time parameter
MOV IAP_ADDRL,#LOW ISP_DOWNLOAD
MOV IAP_ADDRH,#HIGH ISP_DOWNLOAD
MOV IAP_DATA,#00H ;Test data 1
MOV IAP_CMD,#1 ;Read command
MOV IAP_TRIG,#5AH ;Triger ISP command
MOV IAP_TRIG,#0A5H
MOV A,IAP_DATA
CJNE A,#0E4H,ISP_ENTRY ; If the data cannot be read, wait for the voltage to stabilize
INC IAP_ADDRL ;Test address FC01H
MOV IAP_DATA,#45H ;Test data 2
MOV IAP_CMD,#1 ;Read command
MOV IAP_TRIG,#5AH ;Triger ISP command
MOV IAP_TRIG,#0A5H
MOV A,IAP_DATA
CJNE A,#0F5H,ISP_ENTRY ; If the data cannot be read, wait for the voltage to stabilize
MOV SCON,#50H ;Set serial port mode (8 data bits, no parity bit)
MOV AUXR,#40H ;Timer 1 is in 1T mode
MOV TMOD,#00H ;Timer 1 works in mode 0 (16-bit reload)
MOV TH1,#HIGH UARTBAUD ;set reload value
MOV TL1,#LOW UARTBAUD
SETB TR1 ;start timer 1
SETB TR0
LCALL ISP_RECVUART ; Check if there is serial data
JC GOTOAP
MOV R0,#16
ISP_CHECKNEXT:
LCALL ISP_RECVUART ; receive sync data
JC GOTOAP
CJNE A,#7FH,GOTOAP ;Determine whether it is 7F
DJNZ R0,ISP_CHECKNEXT
MOV A,#5AH ; Return 5A 69 to PC, indicating ISP module is ready
LCALL ISP_SENDUART
MOV A,#69H
LCALL ISP_SENDUART