ISP Code (assembly code)
; Operating frequency for test is 11.0592MHz
UARTBAUD EQU 0FFE8H ;Define the serial port baud rate (65536-11059200/4/115200)
AUXR DATA 08EH ;Additional Function Control Register
WDT_CONTR DATA 0C1H ;Watchdog Control Register
IAP_DATA DATA 0C2H ;IAP data register
IAP_ADDRH DATA 0C3H ;IAP High Address Register
IAP_ADDRL DATA 0C4H ;IAP Low Address Register
IAP_CMD DATA 0C5H ;IAP Command Register
IAP_TRIG DATA 0C6H ;IAP Command Trigger Register
IAP_CONTR DATA 0C7H ;IAP Control Register
IAP_TPS DATA 0F5H ;IAP latency control register
ISPCODE EQU 0FA00H ;ISP module entry address (1 page), also external interface address
APENTRY EQU 0FC00H ; Application entry address data (1 page)
ORG 0000H
LJMP ISP_ENTRY ;System reset entry
RESET:
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
NEXT1:
MOV R0,#16
NEXT2:
JNB RI,$ ;Waiting for serial data
CLR RI
MOV A,SBUF
CJNE A,#7FH,NEXT1 ;Determine whether it is 7F
DJNZ R0,NEXT2
LJMP ISP_DOWNLOAD ;Jump to download interface
ORG ISPCODE
ISP_DOWNLOAD:
CLR A
MOV PSW,A ;ISP module uses group 0 registers
MOV IE,A ;Disable all interrupts
CLR RI ;Clear serial port receive flag
SETB TI ; Set serial port send flag
CLR TR0
MOV SP,#5FH ;set stack pointer
MOV A,#5AH ;Return 5A 55 to PC, indicating ISP erase module is ready
LCALL ISP_SENDUART
MOV A,#055H
LCALL ISP_SENDUART
LCALL ISP_RECVACK ;Receive response data