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

📄 main.asmbak

📁 该压缩包里包含了51单片机syncoms的ISP源程序代码。
💻 ASMBAK
📖 第 1 页 / 共 3 页
字号:
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
          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 : if you sure,C=1 else C=0
;================================================================================
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(R0,R1,R2) IF R1<=R0<=R2 RETRN TRUE ELSE RETURN FALSE
;CHANGE:A
;================================================================================
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(A)
;CHANGE:A
;================================================================================
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
;================================================================================

⌨️ 快捷键说明

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