📄 loadprogram.asm
字号:
MUL AB ; 比较下一个命令
MOV R4, A ;
LJMP GETCOMMCOMP ;
;
GETCOMMCOMPEND: CLR A ; 初始化
MOV RXBUFFLEN, A ;
MOV RXBUFFTAIL, #RXBUFFSTART;
CLR RXCOMMOKFLAG ;
MOV A, R4 ;
MOV B, #COMMANDLEN ;
DIV AB ; 调整地址
MOV B, A ;
RL A ;
ADD A, B ;
MOV DPTR, #COMMFUNTBL ;
JMP @A+DPTR ;
GETCOMMOUT: RET ;
;
;
GETCOMMERROR: MOV DPTR, #COMMERRORTBL ; 显示 Bad command
LCALL DISPINFO ;
CLR A ; 初始化
MOV RXBUFFLEN, A ;
MOV RXBUFFTAIL, #RXBUFFSTART;
CLR RXCOMMOKFLAG ;
LJMP DISPROM ;
RET ;
;
;
COMMFUNTBL: LJMP HELPFUN
LJMP DISPROM
LJMP RAMFUN
LJMP SECFUN
LJMP SETBFUN
LJMP INFOFUN
LJMP ERASEFUN
LJMP BLANKFUN
LJMP RESETFUN
LJMP UPDATFUN
RET
;
;
;****************************************************
;* *
;* 定时器 0 中断服务程序 *
;* *
;****************************************************
INT_T0: CLR TR0
MOV TL0, TIMELO
MOV TH0, TIMEHI
RETI
;
;
;****************************************************
;* *
;* 定时器 1 中断服务程序 *
;* *
;****************************************************
INT_T1: PUSH PSW
PUSH ACC
MOV TH1, #0DBH ; 重置计数值
MOV TL1, #0FFH ;
INTKEY: CPL TIME10MS ; 10ms 标志
INC TIMECOUNT ;
MOV A, TIMECOUNT ;
CJNE A, #10H, INTT0OUT ;
MOV TIMECOUNT, #00H ;
CPL TIME500MS ; 500ms 标志
;
INTT0OUT: POP ACC
POP PSW
RETI
;
;
;============================================================================
;////////////////////////////////////////////////////////////////////////////
;////////////////////////////////////////////////////////////////////////////
;============================================================================
; 命令解释器功能处理子程序
;
;****************************************************
;* *
;* 显示帮助信息 *
;* *
;****************************************************
HELPFUN: MOV DPTR, #HELPTBL ; 显示帮助信息
LCALL DISPINFO ;
LCALL INITCOMMAND ;
LJMP DISPROM ;
;
;
;****************************************************
;* *
;* RAM 功能处理 *
;* *
;****************************************************
RAMFUN: CLR A ; 初始化
MOV R0, A ;
MOV R1, A ;
MOV R2, A ;
MOV B, #01H ;
LCALL DISPROMRAM ;
LCALL INITCOMMAND ;
LJMP DISPROM ;
;
;
;****************************************************
;* *
;* SEC 功能处理 *
;* *
;****************************************************
SECFUN: MOV DPTR, #SECTBL ;
LCALL DISPINFO ;
MOV DPTR, #INPUTTBL ;
LCALL DISPINFO ;
SECLOOP: MOV RXBUFFTAIL, #RXBUFFSTART;
LCALL READWAIT ;
MOV R0, #RXBUFFSTART ;
MOV R4, #59H ; 是否 Y
LCALL COMPASC ;
JZ SECCAPS ;
MOV R4, #4EH ; 是否 N
LCALL COMPASC ;
JNZ SECERROR ;
LJMP SECOUT ;
;
SECCAPS: MOV DPTR, #SECOKTBL ;
LCALL DISPINFO ;
SECOUT: LCALL INITCOMMAND ;
LJMP DISPROM ;
;
SECERROR: MOV DPTR, #SETERRORTBL ;
LCALL DISPINFO ;
LJMP SECLOOP ;
;
;
;****************************************************
;* *
;* SETB 功能处理 *
;* *
;****************************************************
SETBFUN: MOV DPTR, #SETBFUNTBL ;
LCALL DISPINFO ;
MOV DPTR, #INPUTTBL ;
LCALL DISPINFO ;
SETBLOOP: LCALL READWAIT ;
MOV R0, #RXBUFFSTART ;
MOV A, @R0 ;
MOV R7, A ;
DEC R7 ;
SETBLOOP1: INC R7 ;
MOV RXBUFFTAIL, #RXBUFFSTART;
LCALL WATDOG ;
XRL A, R7 ;
JNZ SETBLOOP1 ; 是否有输入
MOV A, @R0 ;
SUBB A, #30H ;
MOV B, A ;
MOV A, B ;
XRL A, #04H ; 是否 Exit
JZ SETBERROR ;
MOV A, B ;
CLR C ;
SUBB A, #05H ; 大于 5 重输
JNC SETBRELOAD ;
MOV A, B ;
LCALL INITBAUD ; 设置 Baud rate
SETBERROR: LCALL INITCOMMAND ;
LJMP DISPROM ;
;
SETBRELOAD: MOV RXBUFFTAIL, #RXBUFFSTART;
MOV DPTR, #SETERRORTBL ;
LCALL DISPINFO ;
LJMP SETBLOOP ;
;
;
;****************************************************
;* *
;* 显示MCU信息 *
;* *
;****************************************************
INFOFUN: MOV DPTR, #SYSINFOTBL ; 显示 MCU 信息
LCALL DISPINFO ;
CLR TR2 ;
MOV A, RCAP2L ; 读 RCAP2L
SETB TR2 ;
MOV R2, A ;
CLR A ;
MOV R3, A ;
MOV DPTR, #BAUDTBL ; 查询 Baud rate
GETBAUD: MOV A, R3 ;
MOVC A, @A+DPTR ;
INC A ;
JZ INFOFUNOUT ; 是否结束
DEC A ;
INC R3 ;
XRL A, R2 ;
JNZ GETBAUD ;
DEC R3 ; 得到 Baud rate
MOV A, R3 ;
MOV B, #18H ;
MOV DPTR, #BAUDINFOTBL ;
LCALL DISPMUL ;
INFOFUNOUT: LJMP DISPROM ;
;
;
;****************************************************
;* *
;* RESET功能处理 *
;* *
;****************************************************
RESETFUN: MOV DPTR, #WARNINGTBL ;
LCALL DISPINFO ;
MOV DPTR, #INPUTTBL ;
LCALL DISPINFO ;
RESETLOOP: MOV RXBUFFTAIL, #RXBUFFSTART;
LCALL READWAIT ;
MOV R0, #RXBUFFSTART ;
MOV R4, #59H ; 是否 Y
LCALL COMPASC ;
JZ RESETCAPS ;
MOV R4, #4EH ; 是否 N
LCALL COMPASC ;
JNZ RESETERROR ;
LCALL INITCOMMAND ;
LJMP DISPROM ;
;
RESETCAPS: LCALL PUTENTER ; 显示回车
LCALL PUTENTER ;
MOV CHPENR,#87H ; 软件复位
MOV CHPENR,#59H
MOV CHPCON,#03H
MOV CHPENR,#87H ; 软件复位
MOV CHPENR,#59H
MOV CHPCON,#83H
RET
;
RESETERROR: MOV DPTR, #SETERRORTBL ;
LCALL DISPINFO ;
LJMP RESETLOOP ;
;
;
;****************************************************
;* *
;* ERASE 功能处理 *
;* *
;****************************************************
ERASEFUN: MOV CHPENR, #87H ;
MOV CHPENR, #59H ;
MOV CHPCON, #03H ;
MOV CHPENR, #00H ;
LCALL ERASECHIP ;
LCALL INITCOMMAND ;
LJMP DISPROM ;
;
;
;****************************************************
;* *
;* BLANK 功能处理 *
;* *
;****************************************************
BLANKFUN: MOV CHPENR, #87H ;
MOV CHPENR, #59H ;
MOV CHPCON, #03H ;
MOV CHPENR, #00H ;
LCALL BLANKCHIP ;
LCALL INITCOMMAND ;
LJMP DISPROM ;
;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -