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

📄 main.asm

📁 该压缩包里包含了51单片机syncoms的ISP源程序代码。
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;********************************************************************************
;                               main.asm 	                                      *
;********************************************************************************
$include	 (Sm5964.h)
;================================================================================
STACKSIZE     EQU       40H
W_TH1         EQU       0XFA
;================================================================================
WatchDog      EQU       P3.5
;================================================================================
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
MemPtr              EQU      BYTE3
MemLen              EQU      BYTE4
RomPtr              EQU      BYTE3
RomLen              EQU      BYTE5
;================================================================================
CSEG	     AT	       0XF000
USING	    0
;================================================================================
DownLoad:
          MOV	      SP,       #Stack-1
          MOV       PSW,      #00000000B
          MOV       IE,       #00000000B

          MOV       SCONF,    #00000100B
          MOV       WDTC,     #00000000B
          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
          MOV	      PCON,     #80H
          MOV       SCON,     #01110000B
          MOV       A,        TMOD
          ANL       A,        #00001111B
          ORL       A,        #00100000B
          MOV       TMOD,     A
          MOV	      TL1,      #W_TH1
          MOV	      TH1,      #W_TH1
          CLR       ET1
          CLR       PS 
          SETB	     TR1
          CLR	      TI	
          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
Program_L1_1:
          ;Init Chksum
          MOV       R1,       #0X00
          
          ;Recieve Len
          LCALL     Recv2Hex
          MOV       R2,       AR0

          ;Recieve ISPFAH,ISPFAL
          LCALL     Recv2Hex
          MOV       ISPFAH,   R0
          LCALL     Recv2Hex
          MOV       ISPFAL,   R0
          ;Recieve Type
          LCALL     Recv2Hex
          MOV       A,        R0
          JNZ       Program_L2
          ;Type=0
          SJMP      Program_L4
Program_L2:
          DEC       A
          JNZ       Program_L3
          ;Type=1
          LCALL     Recv2Hex
          MOV       A,        R1
          JNZ       Program_L2_6 
          LCALL     Debug_In
$IF 0
          MOV       A,        R3
          LCALL     Debug_Byte_Hex
$ENDIF
          MOV       R4,       #0X00

          MOV       ISPFAH,   #HIGH(ISPVECTOR-1)
          MOV       ISPFAL,   #LOW(ISPVECTOR-1)
Program_L2_1:
          MOV       DPH,      ISPFAH
          MOV       DPL,      ISPFAL

          CLR       A
          MOVC      A,        @A+DPTR
          MOV       R5,       A
          XRL       A,        #0XFF
          JZ        Program_L2_2
          MOV       A,        R5
          ADD       A,        R4
          MOV       R4,       A
Program_L2_2:
          MOV       A,        ISPFAH
          JNZ       Program_L2_3
          MOV       A,        ISPFAL
          JNZ       Program_L2_3
          SJMP      Program_L2_5
Program_L2_3:
          DEC       ISPFAL
          MOV       A,        ISPFAL
          INC       A
          JNZ       Program_L2_4
          DEC       ISPFAH
Program_L2_4:
          JMP       Program_L2_1 
Program_L2_5:
$IF 0
          MOV       A,        R4
          LCALL     Debug_Byte_Hex
$ENDIF          
          MOV       A,        R3
          XRL       A,        R4
          JNZ       Program_L2_6
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_Success)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_Success)
          LCALL     Debug_Str
          RET
Program_L2_6:
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_Failure)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_Failure)
          LCALL     Debug_Str
          RET
Program_L3:         
          ;Type Is Error
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_Failure)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_Failure)
          LCALL     Debug_Str
          RET          
Program_L4:
          MOV       A,        R2
          JZ        Program_L5
          
          LCALL     Recv2Hex
          MOV       ISPFD,    R0
          MOV       ISPC,     #0X80
          
          MOV       A,        R0
          XRL       A,        #0XFF
          JZ        Program_L4_0
          MOV       A,        R3
          ADD       A,        R0
          MOV       R3,       A
Program_L4_0:          
          NOP
          NOP
          NOP
          NOP
          NOP
          NOP
          NOP
          NOP
          DEC       R2
          INC       ISPFAL
          MOV       A,        ISPFAL
          JNZ       Program_L4_1
          INC       ISPFAH
Program_L4_1:
          LJMP      Program_L4   
Program_L5:
          LCALL     Recv2Hex
          MOV       A,        R1
          JNZ       Program_L6
          LJMP      Program_L1
Program_L6:
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_Failure)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_Failure)
          LCALL     Debug_Str 
          RET
;================================================================================
Protect:
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_Protect)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_Protect)
          LCALL     Debug_Str
          LCALL     AreYouSure
          JNC       Protect_Ret

⌨️ 快捷键说明

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