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

📄 main.asm

📁 自已编的程序.能通过RS485总线更新单片机中的应用程序,带一程序流程图和一些说明希望能对大家有所帮助!
💻 ASM
📖 第 1 页 / 共 3 页
字号:
;            MOV   #20,BUS_SPD
;            MOV   #32,DATASIZE
;            LDHX  #FILE_PTR
;            JSR   ERARNGE
;            LDHX  START_ADDR
;            MOV   #64,BLOCK_SIZE
;ERASERALL2:            
;            LDA   ,X
;            CMP   #$FF
;            BNE   ERASERALL3
;            AIX   #$01
;            DBNZ  BLOCK_SIZE,ERASERALL2
;            MOV   #3,ERR_NUM
;            STHX  START_ADDR 
;            DBNZ  BLOCK_NUM,ERASERALL1
;            CLR   ERASE
;            MOV   #$01,CANUPDATA
;            ;开通讯中断
;            ; SCC2: SCTIE=0,TCIE=1,SCRIE=1,ILIE=1,TE=1,RE=1,RWU=0,SBK=0 
 ;           BSET  5,SCC2
;            RTS
;ERASERALL3: 
;            DBNZ  ERR_NUM,ERASERALL1
;            CLR   ERASE
;            ; SCC2: SCTIE=0,TCIE=1,SCRIE=1,ILIE=1,TE=1,RE=1,RWU=0,SBK=0 
;            BSET  5,SCC2
;            RTS
            
            
;************************************************************************
;************* 写编程标记子程序 ***********
;'入口条件:(无)
;'出口条件:ERR_NUM  FF:写编程标记错
;************************************************************************


CHANGFLAG:  
            SEI
            CLR   UPOVER
            MOV   #$03,ERR_NUM
CHANGFLAG1: 
            feed_watchdog  
            MOV   #20,BUS_SPD
            MOV   #1,DATASIZE
            MOV   #$EB,START_ADDR
            MOV   #$80,START_ADDR+1
            LDHX  #FILE_PTR
            JSR   ERARNGE
            feed_watchdog  
            MOV   #20,BUS_SPD
            MOV   #1,DATASIZE
            MOV   #$EB,START_ADDR
            MOV   #$80,START_ADDR+1
            MOV   #$AA,DATAARRAY
            LDHX  #FILE_PTR
            JSR   PRGRNGE
            LDHX  START_ADDR
            LDA   ,X
            CMP   #NOTUPDA
            BEQ   CHANGFLAG2
            DBNZ  ERR_NUM,CHANGFLAG1
            CLR   UPOVER
            CLI
            RTS           
CHANGFLAG2:           
            NOP
            NOP
            NOP
            JMP      CHANGFLAG2  ;如果看门狗开的话程序运行到此会复位
                    
            
;** ===================================================================
;**     Interrupt handler : isrINT_SCITransmit
;**
;**     Description :
;**         User interrupt service routine. 
;**     Parameters  : None
;**     Returns     : Nothing
;** ===================================================================


isrINT_SCITransmit:
  ; Write your interrupt code here ... 
        SEI
        ;BCLR  SCC3_T8,SCC3
        PSHH
        LDHX  #$EB80
        LDA   ,X
        CMP   #NOTUPDA
        BNE   T0_00    
        PULH
        JMP   $EB46 
T0_00:
        LDA   LENTH
        BEQ   T0_03
        LDHX  RSTOHX
        LDA   ,X      
        BRCLR   SCS1_SCTE,SCS1,T0_02  
        STA   SCDR
        DEC   LENTH
        AIX   #$01
        STHX  RSTOHX
T0_02:              
        PULH
        CLI
        RTI
T0_03:  
        BCLR  SCC2_SCTIE,SCC2
        DIR_Receive
        BRA   T0_02        
; end of isrINT_SCITransmit 


;** ===================================================================
;**     Interrupt handler : isrINT_SCIReceive
;**
;**     Description :
;**         User interrupt service routine. 
;**     Parameters  : None
;**     Returns     : Nothing
;** ===================================================================
        ;XDEF    isrINT_SCIReceive


isrINT_SCIReceive:
  ; Write your interrupt code here ...
        ;RTI 
        SEI
        PSHH
        LDHX  #$EB80
        LDA   ,X
        CMP   #NOTUPDA
        BNE   R0_01
        PULH
        JMP   $EB49
R0_01:         
        BRCLR SCC3_R8,SCC3,R0_02
        BRCLR 5,SCS1,IS_ME2        
        LDA   SCDR
        STA   ADDR
        AND   #MYTYPE
        CMP   #MYTYPE
        BNE   IS_ME1
        LDHX  #TR_BUFF
        MOV   ADDR,X+
        STHX  RSTOHX
        CLR   LENTH
        MOV   #$05,COUNT
        JMP   SRET
IS_ME1:
        BSET  SCC2_RWU,SCC2          
IS_ME2:        
        JMP   SRET
R0_02:  ;'SM2=0,为数据
        ;'是不是长度字节
        LDA   LENTH
        CMP   #$00
        BNE   R0_04
        BRCLR 5,SCS1,IS_ME2        
        LDA   SCDR
        STA   LENTH
        CMP   #$07
        BCS   IS_ME1
        LDA   LENTH
        CMP   #$3C
        BHI   IS_ME1
        LDHX  RSTOHX
        MOV   LENTH,X+
        STHX  RSTOHX
        DEC   COUNT
        DEC   LENTH
        JMP   SRET
R0_04:     ;'为数据
        BRCLR 5,SCS1,IS_ME2        
        LDA   SCDR
        LDHX  RSTOHX
        STA   ,X
        AIX   #$01
        STHX  RSTOHX
        DBNZ  COUNT,R0_041
        LDA   MYADDRESS1
        CMP   #$FF
        BEQ   R0_041
        CMP   TR_BUFF+3
        BNE   IS_ME1
        LDA   MYADDRESS2
        CMP   TR_BUFF+4
        BNE   IS_ME1
        LDA   MYADDRESS3
        CMP   TR_BUFF+5
        BNE   IS_ME1  
        ;MOV   #$05,COUNT      
R0_041:        
        DBNZ  LENTH,R0_05
        JMP   R0_10
R0_05:  JMP   SRET
;R0_06:  JMP   DA_ER
R0_10:     ;'数据处理
        BSET  SCC2_RWU,SCC2
        LDHX  #TR_BUFF+1
        MOV   X+,CRCLENTH
        DEC   CRCLENTH
        LDHX  #TR_BUFF
        JSR   MAKECRC
        
        ;BRA   R0_18
        
        
        LDA   ,X
        CMP   CRCH
        BNE   R0_181
        AIX   #$01
        LDA   ,X
        CMP   CRCL
        BNE   R0_181
R0_18: 
  
        LDHX  #TR_BUFF+2
        LDA   ,X
        CMP   #$61
        BLO   S_UP_ERR;等同于BCC
        CMP   #$64
        BHI   S_UP_ERR
        SUB   #$61
        STA   TEMP
        ADD   TEMP
        ADD   TEMP
        CLRH
        TAX
        JMP   R0_22,X
R0_22:  JMP   S_UPOR
        JMP   S_UPDA
        JMP   S_OVER
        JMP   S_QUERY

R0_181:        
        MOV   #$01,DATA_ER       
        JMP   SRET          
S_UP_ERR:
        PULH
        CLI
        RTI
S_UPOR:
            LDA   CANUPDATA
            BNE   S_UPOR4
            LDHX  #TR_BUFF+6
            MOV   X+,NUMBER_DATA0
            MOV   X+,NUMBER_DATA1
            MOV   #$BC,START_ADDR
            MOV   #$00,START_ADDR+1
            MOV   #3,ERR_NUM
            MOV   #190,BLOCK_NUM
S_UPOR1: 
            feed_watchdog  
            MOV   #20,BUS_SPD
            MOV   #32,DATASIZE
            LDHX  #FILE_PTR
            JSR   ERARNGE
            LDHX  START_ADDR                    
            MOV   #64,BLOCK_SIZE
S_UPOR2:    
            feed_watchdog          
            LDA   ,X
            CMP   #$FF
            BNE   S_UPOR3
            AIX   #$01
            DBNZ  BLOCK_SIZE,S_UPOR2
            MOV   #3,ERR_NUM
            STHX  START_ADDR 
            DBNZ  BLOCK_NUM,S_UPOR1
            MOV   #$01,CANUPDATA
            JMP   DA_RI1
S_UPOR3: 
            DBNZ  ERR_NUM,S_UPOR1
            JMP   SRET

S_UPOR4:     
           JMP   DA_RI1
              
S_UPDA: CLR   CANUPDATA
        LDHX  #TR_BUFF+6
        LDA   ,X
        AIX   #$01
        CMP   DBJ0
        BNE   S_UPDA1_1
        LDA   ,X
        AIX   #$01
        CMP   DBJ1
        BEQ   S_UPOR4
S_UPDA1_1:        
        LDHX  #TR_BUFF+6
        LDA   ,X
        AIX   #$01
        EOR   NUMBER_DATA0
        BEQ   S_UPDA0
        JMP   SRET
S_UPDA0:
        LDA   ,X
        AIX   #$01
        EOR   NUMBER_DATA1
        BEQ   S_UPDA1
        JMP   SRET
S_UPDA1:   
        LDHX  #TR_BUFF+9
        LDA   ,X
        ADD   #$01
        STA   LENTH
        ;CLRA
        MOV   #$00,CHECKHE
R2_00:  ;'和校验
        LDA   ,X
        ADD   CHECKHE
        STA   CHECKHE
        AIX   #$01
        DBNZ  LENTH,R2_00
        ;'和校验不为0则为数据错误
        COM   CHECKHE
        BNE   R2_003
        LDHX  START_ADDR
        CPHX  #$EBBF
        BHI   R2_002
        LDA   DATASIZE
        SUB   #$03
        STA   LENTH
        MOV   #$20,BUS_SPD
        MOV   LENTH,DATASIZE
        LDHX  #FILE_PTR
        JSR   PRGRNGE
        LDHX  #TR_BUFF+12
R2_001:               
        MOV   X+,FLASHDB
        PSHH
        PSHX
        LDHX  START_ADDR
        LDA   ,X
        AIX   #$01
        STHX  START_ADDR
        PULX  
        PULH
        CMP   FLASHDB
        BNE   R2_003
        DBNZ  LENTH,R2_001
        MOV   NUMBER_DATA1,DBJ1
        MOV   NUMBER_DATA0,DBJ0
        LDA   NUMBER_DATA0
        SUB   #$01
        STA   NUMBER_DATA0
        LDA   NUMBER_DATA1
        SBC   #0
        STA   NUMBER_DATA1
R2_002
        JMP   DA_RI1 
R2_003:        
        JMP   SRET       
           
S_OVER:     
        MOV   #$01,UPOVER
        PULH
        ;CLI
        RTI
      
DA_RI1:
           LDHX     #TR_BUFF
           LDA      #MYTYPE
           STA      ,X
           AIX      #$01
           LDA      #LONGTH
           STA      ,X
           AIX      #$01
           LDA      #RIDATA
           STA      ,X
           AIX      #$01
           LDA      MYADDRESS1
           STA      ,X
           AIX      #$01
           LDA      MYADDRESS2

⌨️ 快捷键说明

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