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

📄 main.asm

📁 该压缩包里包含了51单片机syncoms的ISP源程序代码。
💻 ASM
📖 第 1 页 / 共 2 页
字号:
          MOV       ISPC,     #0X81
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_Success)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_Success)
          LCALL     Debug_Str
Protect_Ret:
          RET
;================================================================================
ShowRom:
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_ShowRom)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_ShowRom)
          LCALL     Debug_Str

          LCALL     AreYouSure
          JNC       ShowRom_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
          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       ?Debug_Rom?BYTE+0,  R0
          MOV       ?Debug_Rom?BYTE+1,  #0X00
          MOV       ?Debug_Rom?BYTE+2,  #0x00
          LCALL     Debug_Rom
ShowRom_Ret:
          RET
;================================================================================
Recv2Hex:
          LCALL     Debug_In
          LCALL     Ascii1ToHex
          SWAP      A
          MOV       R0,       A
          LCALL     Debug_In
          LCALL     Ascii1ToHex
          ADD       A,        R0
          MOV       R0,       A
          
          MOV       A,        R1
          ADD       A,        R0
          MOV       R1,       A
          RET  
;================================================================================
InputPageAddr:
InputPageAddr_L1:
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_InputPageAddr)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_InputPageAddr)
          LCALL     Debug_Str

          LCALL     Debug_In      
          LCALL     Debug_Byte
          LCALL     Ascii1ToHex
$IF 0
          LCALL     Debug_Byte_Hex
$ENDIF
          SWAP      A
          MOV       R0,       A 
$IF 0
          LCALL     Debug_Byte_Hex
$ENDIF
          LCALL     Debug_In
          LCALL     Debug_Byte
          LCALL     Ascii1ToHex
          ADD       A,        R0
          MOV       R0,       A
$IF 0
          LCALL     Debug_Byte_Hex
$ENDIF          
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_LF)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_LF)
          LCALL     Debug_Str
          LCALL     AreYouSure
          JC        InputPageAddr_Ret
          LJMP      InputPageAddr_L1
InputPageAddr_Ret:
          RET
;================================================================================
AreYouSure:
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_AreYouSure)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_AreYouSure)
          LCALL     Debug_Str

          LCALL     Debug_In
          LCALL     UpperChar
          MOV       B,        A
          LCALL     Debug_Byte
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_LF)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_LF)
          LCALL     Debug_Str
          CLR       C
          MOV       A,        B
          XRL       A,        #'Y'
          JNZ       AreYouSure_RET
          SETB      C
AreYouSure_RET:
          RET
;================================================================================
IsInRange:
          CLR       C
          MOV       A,        R0
          SUBB      A,        R1
          JC        IsInRange_RetF
          CLR       C
          MOV       A,        R2
          SUBB      A,        R0
          JC        IsInRange_RetF
          SETB      C
          RET
IsInRange_RetF:
          CLR       C
          RET
;================================================================================
UpperChar:
          PUSH      B
          MOV       B,        R0
          PUSH      B
          MOV       B,        R1
          PUSH      B
          MOV       B,        R2
          PUSH      B
          
          MOV       B,        A
          MOV       R0,       A  
          MOV       R1,       #'a'
          MOV       R2,       #'z'
          LCALL     IsInRange
          JNC       UpperChar_RetF
          MOV       A,        B
          CLR       C
          SUBB      A,        #'a'
          ADD       A,        #'A'
          MOV       B,        A
UpperChar_RetF:
          MOV       A,        B

          POP       B
          MOV       R2,       B
          POP       B
          MOV       R1,       B
          POP       B
          MOV       R0,       B
          POP       B
          RET
;================================================================================
HexToAscii:
          CLR       C
          SUBB      A,        #0x0A
          JC        HexToAscii_L1
          ADD       A,        #0x07
HexToAscii_L1:
          ADD       A,        #0x30
          ADD       A,        #0x0A
          RET 
;================================================================================
Ascii1ToHex:
          PUSH      B
          MOV       B,        R0
          PUSH      B
          MOV       B,        R1
          PUSH      B
          MOV       B,        R2
          PUSH      B
          
          LCALL     UpperChar  
          MOV       B,        A
          MOV       R0,       A  
          MOV       R1,       #'A'
          MOV       R2,       #'Z'
          LCALL     IsInRange
          JNC       Ascii1ToHex_L1
          MOV       A,        B
          CLR       C
          SUBB      A,        #'A'
          ADD       A,        #10
          SJMP      Ascii1ToHex_RET
Ascii1ToHex_L1:                    
          MOV       A,        B
          MOV       R0,       A  
          MOV       R1,       #'0'
          MOV       R2,       #'9'
          LCALL     IsInRange
          JNC       Ascii1ToHex_L2
          MOV       A,        B
          CLR       C
          SUBB      A,        #30H
          SJMP      Ascii1ToHex_RET
Ascii1ToHex_L2:
          MOV       A,        #10H
Ascii1ToHex_RET:
          POP       B
          MOV       R2,       B
          POP       B
          MOV       R1,       B
          POP       B
          MOV       R0,       B
          POP       B
          RET
;================================================================================
Debug_In:
          CPL       WatchDog
          JNB       RI,       Debug_In
          CLR       RI          
          MOV       A,        SBUF
          RET
;================================================================================
Debug_Byte:
          CLR       ES
		        MOV       SBUF,     A
Debug_Byte_L1:   
          CPL       WatchDog
		        JNB       TI,       Debug_Byte_L1
		        CLR       TI
          SETB      ES
		        RET        
;================================================================================
Debug_Byte_Hex:
          PUSH      B
          
          MOV       B,        A
          ANL       A,        #11110000B
          RL	       A
          RL        A
          RL        A
          RL        A
          LCALL     HexToAscii
          LCALL     Debug_Byte
          
          MOV       A,        B
          ANL       A,        #00001111B
          LCALL     HexToAscii
          LCALL     Debug_Byte
          
          MOV       A,   #20H
          LCALL     Debug_Byte
          
          MOV       A,        B
          
          POP       B
		        RET
;================================================================================
Debug_Str:
          PUSH      DPH
          PUSH      DPL
          PUSH      B
          PUSH      ACC
          
          MOV       DPH,      StrPtr
          MOV       DPL,      StrPtr+1
          CLR	      A
		        MOVC	     A,        @A+DPTR
		        JZ        Debug_Str_L2
		        INC       DPTR                          ;DPTR为字符串地址
          MOV       B,        A                   ;B为长度
Debug_Str_L1:
          CLR	      A
		        MOVC	     A,        @A+DPTR
          LCALL     Debug_Byte
		        INC	      DPTR
		        DJNZ      B,        Debug_Str_L1
Debug_Str_L2:		        
		        POP       ACC
		        POP       B
		        POP       DPL
		        POP       DPH
		        RET
;================================================================================
Debug_Mem:
          PUSH      DPH
          PUSH      DPL
          PUSH      B
          PUSH      ACC
          MOV       A,        R0
          PUSH      ACC
          MOV       A,        R1
          PUSH      ACC
          
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_Addr)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_Addr)
          LCALL     Debug_Str
                 
          MOV       A,        MemPtr
          LCALL     Debug_Byte_Hex
          
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_LF)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_LF)
          LCALL     Debug_Str          

          MOV       A,        MemLen
          JZ        Debug_Mem_L3
          
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_Data)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_Data)
          LCALL     Debug_Str 
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_LF)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_LF)
          LCALL     Debug_Str 
          
          MOV       R0,       MemPtr
          MOV       R1,       MemLen
          MOV       B,        #10H
Debug_Mem_L1:
          CLR	      A
          MOV	      A,        @R0
		        LCALL     Debug_Byte_Hex
		        INC       R0
		        DJNZ      B,        Debug_Mem_l2
          MOV       B,        #10H
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_LF)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_LF)
          LCALL     Debug_Str 
Debug_Mem_l2:               
		        DJNZ	     R1,       Debug_Mem_L1
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_LF)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_LF)
          LCALL     Debug_Str 

Debug_Mem_L3:         
          POP       ACC
          MOV       R1,       A  
          POP       ACC
          MOV       R0,       A  
          POP       ACC
          POP       B
          POP       DPL
          POP       DPH          
		        RET
;================================================================================
Debug_Rom:
          PUSH      DPH
          PUSH      DPL
          PUSH      B
          PUSH      ACC
          MOV       A,        R0
          PUSH      ACC
                    
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_Addr)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_Addr)
          LCALL     Debug_Str
                 
          MOV       A,        RomPtr
          LCALL     Debug_Byte_Hex
          MOV       A,        RomPtr+1
          LCALL     Debug_Byte_Hex
        
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_LF)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_LF)
          LCALL     Debug_Str          
          
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_Data)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_Data)
          LCALL     Debug_Str 
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_LF)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_LF)
          LCALL     Debug_Str 
          
          MOV       DPH,      RomPtr
          MOV       DPL,      RomPtr+1
          MOV       R0,       RomLen
          MOV       B,        #10H
Debug_Rom_L1:
          CLR       A
          MOVC      A,        @A+DPTR
          LCALL     Debug_Byte_Hex
          INC       DPTR
          DJNZ      B,        Debug_Rom_L2
          MOV       B,        #10H
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_LF)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_LF)
          LCALL     Debug_Str 
Debug_Rom_L2:               
		        DJNZ	     R0,       Debug_Rom_L1
          MOV       ?Debug_Str?BYTE+0,  #HIGH(Str_LF)
          MOV       ?Debug_Str?BYTE+1,  #LOW(Str_LF)
          LCALL     Debug_Str 

Debug_Rom_L3:         
          POP       ACC
          MOV       R0,       A  
          POP       ACC
          POP       B
          POP       DPL
          POP       DPH          
		        RET
;================================================================================
Str_Addr:           DB 5,0B5H,0D8H,0D6H,0B7H,3AH
Str_Data:           DB 5,0CAH,0FDH,0BEH,0DDH,3AH
Str_LF:             DB 2,0DH,0AH
Str_Star:           DB 37,"***********************************",0DH,0AH
Str_Title1:         DB 37,"*         ISP(SYCMOS5964)         *",0DH,0AH
Str_Title2:         DB 37,"*        ZhengTL  05.07.12        *",0DH,0AH
Str_Select1:        DB 37,"*        1: Chip Erease           *",0DH,0AH
Str_Select2:        DB 37,"*        2: Page Erease           *",0DH,0AH
Str_Select3:        DB 37,"*        3: Program               *",0DH,0AH
Str_Select4:        DB 37,"*        4: Protect               *",0DH,0AH
Str_Select5:        DB 37,"*        5: Reset System          *",0DH,0AH
Str_Select6:        DB 37,"*        Other: Show Rom          *",0DH,0AH
Str_Choice:         DB 15,"Your Choice Is:"
Str_ChipErease:     DB 12,"ChipErease",0DH,0AH
Str_PageErease:     DB 12,"PageErease",0DH,0AH
Str_Program:        DB 09,"Program",0DH,0AH
Str_Protect:        DB 09,"Protect",0DH,0AH
Str_ShowRom:        DB 10,"Show Rom",0DH,0AH
Str_AreYouSure:     DB 19,"Are You Sure?(Y/N):"
Str_Success:        DB 10,"Success!",0DH,0AH
Str_Failure:        DB 10,"Failure!",0DH,0AH
Str_InputPageAddr:  DB 19,"Input Page Address:"
Str_PageAddr:       DB 16,"Page Address Is:"
Str_DownLoadHex:    DB 27,"Please Download Your Hex!",0DH,0AH
;================================================================================          
END

⌨️ 快捷键说明

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