⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.asmbak

📁 该压缩包里包含了51单片机syncoms的ISP源程序代码。
💻 ASMBAK
📖 第 1 页 / 共 3 页
字号:
;********************************************************************************
;                               main.asm 	                                      *
;********************************************************************************
$include	 (Sm5964.h)
;================================================================================
STACKSIZE     EQU       40H
;W_TH1=2^8-Frequency*10^6*2^mod/(32*12*Baud)  Baud=9600 b/s */
W_TH1         EQU       0XFA                ;频率为11.0592 MHz
;W_TH1         EQU       0XFF                ;频率为22.1184 MHz
;================================================================================
WatchDog      EQU       P3.4
;================================================================================
ISPVECTOR     EQU       0XF000
;================================================================================
MainIDseg	SEGMENT	  IDATA
          RSEG	     MainIDseg
Stack:    DS	       STACKSIZE
;================================================================================
MainDSeg  SEGMENT   DATA
          RSEG      MainDSeg
DLCNT:    DS        1
?Debug_Str?BYTE:
BYTE1:    DS        1
BYTE2:    DS        1
?Debug_Mem?BYTE:
?Debug_Rom?BYTE:
BYTE3:    DS        1
BYTE4:    DS        1
BYTE5:    DS        1
StrPtr              EQU      BYTE1      ;Debug_Str
MemPtr              EQU      BYTE3      ;Debug_Mem
MemLen              EQU      BYTE4      ;Debug_Mem
RomPtr              EQU      BYTE3      ;Debug_Rom
RomLen              EQU      BYTE5      ;Debug_Rom
;================================================================================
CSEG	     AT	       0XF000
USING	    0
;================================================================================
DownLoad:
          MOV	      SP,       #Stack-1
          MOV       PSW,      #00000000B ;C,AC,F0,RS1,RS2,OV,-,P:定义程序状态字.
          MOV       IE,       #00000000B ;EA,-,ET2,ES,ET1,TX1,ET0,TX0:中断允许寄存器赋值,关闭所有中断.

          MOV       SCONF,    #00000100B ;WDR,*,*,*,*,ISPE,OME,ALE1
          MOV       WDTC,     #00000000B ;WDTE,-,CLEAR,-,-,-,PS2,PS1,PS0
          LCALL     InitDownLoadUart
DownLoad_L1:
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_Star)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_Star)
          LCALL     Debug_Str
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_Title1)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_Title1)
          LCALL     Debug_Str
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_Title2)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_Title2)
          LCALL     Debug_Str
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_Select1)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_Select1)
          LCALL     Debug_Str
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_Select2)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_Select2)
          LCALL     Debug_Str
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_Select3)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_Select3)
          LCALL     Debug_Str
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_Select4)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_Select4)
          LCALL     Debug_Str
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_Select5)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_Select5)
          LCALL     Debug_Str
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_Select6)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_Select6)
          LCALL     Debug_Str
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_Star)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_Star)
          LCALL     Debug_Str
          LCALL     StartISP

          LCALL     Debug_In
          MOV       B,        A       
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_Choice)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_Choice)
          LCALL     Debug_Str
          LCALL     Debug_Byte
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_LF)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_LF)
          LCALL     Debug_Str

          MOV       A,        B
          XRL       A,        #'1'
          JNZ       DownLoad_L2
          LCALL     ChipErease
          LJMP      DownLoad_L1
DownLoad_L2:          
          MOV       A,        B
          XRL       A,        #'2'
          JNZ       DownLoad_L3
          LCALL     PageErease
          LJMP      DownLoad_L1
DownLoad_L3:
          MOV       A,        B
          XRL       A,        #'3'
          JNZ       DownLoad_L4
          LCALL     Program
          LJMP      DownLoad_L1
DownLoad_L4:
          MOV       A,        B
          XRL       A,        #'4'
          JNZ       DownLoad_L5
          LCALL     Protect
          LJMP      DownLoad_L1
DownLoad_L5:
          MOV       A,        B
          XRL       A,        #'5'
          JNZ       DownLoad_L6
          LJMP      0X0000
DownLoad_L6:
          LCALL     ShowRom
          LJMP      DownLoad_L1
          RET
;================================================================================
InitDownLoadUart:
          CLR	      ES 
          CLR       TR1                 ;停止定时器1计数.
          MOV	      PCON,     #80H      ;波特率加倍.
          MOV       SCON,     #01110000B;10位异步收发,由定时器控制.
          MOV       A,        TMOD
          ANL       A,        #00001111B
          ORL       A,        #00100000B
          MOV       TMOD,     A         ;定时器1的工作方式为方式2,8位重载.
          MOV	      TL1,      #W_TH1
          MOV	      TH1,      #W_TH1
          CLR       ET1                 ;定时器1中断标志位复位.
          CLR       PS                  ;串口的中断优先级为低优先级.
          SETB	     TR1		               ;TR1:timer 1 run
          CLR	      TI		                ;TI:set TI to send first char of UART
          CLR	      RI
          SETB	     ES
                      
          RET
;================================================================================
StartISP:
          MOV	      ISPFD,    #0X55
          MOV	      ISPFD,    #0XAA
          MOV	      ISPFD,    #0X55
          RET
;================================================================================
ChipErease:
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_ChipErease)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_ChipErease)
          LCALL     Debug_Str
          LCALL     AreYouSure
          JNC       ChipErease_Ret

          MOV       ISPC,     #0X83
          MOV       ISPC,     #0X83

          MOV       ISPFAH,   #HIGH(ISPVECTOR-1)
          MOV       ISPFAL,   #LOW(ISPVECTOR-1)

ChipErease_L1:
          CPL       WatchDog
          MOV       DPH,      ISPFAH
          MOV       DPL,      ISPFAL
          CLR       A
          MOVC      A,        @A+DPTR
          XRL       A,        #0XFF
          JZ        ChipErease_L2
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_Failure)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_Failure)
          LCALL     Debug_Str
          RET          
ChipErease_L2:
          MOV       A,        ISPFAH
          JNZ       ChipErease_L3
          MOV       A,        ISPFAL
          JNZ       ChipErease_L3
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_Success)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_Success)
          LCALL     Debug_Str
          RET
ChipErease_L3:
          DEC       ISPFAL
          MOV       A,        ISPFAL
          INC       A
          JNZ       ChipErease_L4
          DEC       ISPFAH
ChipErease_L4:
          JMP       ChipErease_L1          
ChipErease_Ret:
          RET
;================================================================================
PageErease:
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_PageErease)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_PageErease)
          LCALL     Debug_Str
          LCALL     AreYouSure
          JNC       PageErease_Ret
          LCALL     InputPageAddr

          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_PageAddr)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_PageAddr)
          LCALL     Debug_Str
          MOV       A,        R0
          ANL       A,        #11111110B
          MOV       R0,       A
          LCALL     Debug_Byte_Hex
          MOV       A,        #0X00
          LCALL     Debug_Byte_Hex
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_LF)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_LF)
          LCALL     Debug_Str
                    
          MOV       ISPFAH,   R0
          MOV       ISPFAL,   #0X00
          MOV       ISPC,     #0X82

          MOV       ISPFAL,   0XFF
          MOV       A,        R0
          ADD       A,        #0X01
          MOV       ISPFAH,   A

          MOV       A,        ISPFAH
          LCALL     Debug_Byte_Hex
          MOV       A,        ISPFAL
          LCALL     Debug_Byte_Hex
PageErease_L1:
          MOV       DPH,      ISPFAH
          MOV       DPL,      ISPFAL
          CLR       A
          MOVC      A,        @A+DPTR
          XRL       A,        #0XFF
          JZ        PageErease_L2
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_Failure)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_Failure)
          LCALL     Debug_Str
          RET
PageErease_L2:
          MOV       A,        R0
          XRL       A,        ISPFAH
          JNZ       PageErease_L3
          MOV       A,        #0X00
          XRL       A,        ISPFAL
          JNZ       PageErease_L3
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_Success)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_Success)
          LCALL     Debug_Str
          RET
PageErease_L3:
          DEC       ISPFAL
          MOV       A,        ISPFAL
          INC       A
          JNZ       PageErease_L4
          DEC       ISPFAH
PageErease_L4:
          JMP       PageErease_L1          
PageErease_Ret:
          RET
;================================================================================
Program:
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_Program)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_Program)
          LCALL     Debug_Str
          LCALL     AreYouSure
          JC        Program_L0
          RET
Program_L0:
          LCALL     ChipErease
          MOV       DLCNT,    #0X00
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_DownLoadHex)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_DownLoadHex)
          LCALL     Debug_Str
          MOV       R3,       #0X00
Program_L1:
          ;R1:ChkSum,R2:Len
          ;Recieve Start Byte ':'
          LCALL     Debug_In
          XRL       A,        #':'
          JNZ       Program_L1
          INC       DLCNT
          MOV       A,        DLCNT
          XRL       A,        #0X10
          JNZ       Program_L1_1
          MOV       A,        #'>'      
          LCALL     Debug_Byte
          MOV       DLCNT,    #0X00

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -