89C52RC 收到用户命令后自动启动 ISP 下载(不停电)
本帖最后由 DebugLab 于 2024-9-21 12:47 编辑$INCLUDE(STC89.INC)
ORG 0000H
LJMP F_MAIN
ORG 0023H
LJMP I_UART1
R_DownloadCmd_Cnt DATA 30H ;下载命令计数
T_ISP_DOWNLOADCMD:DB "@STCISP#",0 ;下载命令
F_MAIN:
MOV SP,#7FH
LCALL F_UART1_Init
SETB EA
L_LOOP:
SJMP L_LOOP
F_UART1_Init: ;9600bps@11.0592MHz
MOV R_DownloadCmd_Cnt,#0 ;下载命令计数初始化
ANL PCON,#7FH ;波特率不倍速
MOV SCON,#50H ;8位数据,可变波特率
ANL AUXR,#0BFH ;定时器时钟12T模式
ANL AUXR,#0FEH ;串口1选择定时器1为波特率发生器
ANL TMOD,#0FH ;设置定时器模式
ORL TMOD,#20H ;设置定时器模式
MOV TL1,#0FDH ;设置定时初始值
MOV TH1,#0FDH ;设置定时重载值
CLR ET1 ;禁止定时器中断
SETB TR1 ;定时器1开始计时
SETB REN ;串口接收禁止/使能位
SETB ES ;使能串口1中断
RET
I_UART1:
PUSHACC
PUSHPSW
PUSHDPH
PUSHDPL
JNB RI,L_UART1_Exit ;检测串口1接收中断
CLR RI ;清除串口1接收中断请求位
;串口1接收下载命令
MOV A,R_DownloadCmd_Cnt
MOV DPTR,#T_ISP_DOWNLOADCMD
MOVC A,@A+DPTR
CJNE A,SBUF,L_UART1_DownloadCmdCntClr ;不相等跳转
INC R_DownloadCmd_Cnt ;计数+1
MOV A,R_DownloadCmd_Cnt
MOVC A,@A+DPTR
CJNE A,#0,L_UART1_Exit ;不相等跳转
MOV ISP_CONTR,#60H
SJMP $
L_UART1_DownloadCmdCntClr:
MOV R_DownloadCmd_Cnt,#0 ;清零下载命令计数
L_UART1_Exit:
POP DPL
POP DPH
POP PSW
POP ACC
RETI
用汇编语言写的,也是收到@STCISP#使能复位到ISP_CONTR寄存器的0x60h位啊。这个c语言写也很简单。 soma 发表于 2024-9-21 08:53
用汇编语言写的,也是收到@STCISP#使能复位到ISP_CONTR寄存器的0x60h位啊。这个c语言写也很简单。 ...
主要是芯愿+2 能用汇编语言写的,肯定是位代码老前辈。
页:
[1]