邮箱 发表于 2024-9-21 00:07:40

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

soma 发表于 2024-9-21 08:53:48

用汇编语言写的,也是收到@STCISP#使能复位到ISP_CONTR寄存器的0x60h位啊。这个c语言写也很简单。

邮箱 发表于 2024-9-21 10:39:00

soma 发表于 2024-9-21 08:53
用汇编语言写的,也是收到@STCISP#使能复位到ISP_CONTR寄存器的0x60h位啊。这个c语言写也很简单。 ...

主要是芯愿+2

xxkj2010 发表于 2024-9-21 10:57:36

能用汇编语言写的,肯定是位代码老前辈。
页: [1]
查看完整版本: 89C52RC 收到用户命令后自动启动 ISP 下载(不停电)