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

📄 main.asm

📁 自已编的程序.能通过RS485总线更新单片机中的应用程序,带一程序流程图和一些说明希望能对大家有所帮助!
💻 ASM
📖 第 1 页 / 共 3 页
字号:
;*******************************************************************
;* This stationery serves as the framework for a user application. *
;* For a more comprehensive program that demonstrates the more     *
;* advanced functionality of this processor, please see the        *
;* demonstration applications, located in the examples             *
;* subdirectory of the "Freescale CodeWarrior for HC08" program    *
;* directory.                                                      *
;*******************************************************************

; Include derivative-specific definitions
                      INCLUDE 'bootload.inc'
; export symbols
                      XDEF _Startup, main 
                      XREF __SEG_END_SSTACK   ; symbol defined by the linker for the end of the stack

 
; variable/data section
MY_ZEROPAGE:          SECTION   SHORT         ; Insert here your data definition
;*******************************************************************************
;
TR_BUFF:              EQU       $0060   ;64字节
  FILE_PTR:             EQU       $0068
    BUS_SPD:              EQU       $0068   ;1字节
    DATASIZE:             EQU       $0069   ;1字节
    START_ADDR:           EQU       $006a   ;1字节
    DATAARRAY:            EQU       $006c   ;1-32字节
RSTOHX:               EQU       $00A0   ;2字节
LENTH:                EQU       $00A2   ;1字节
DATA_ER:              EQU       $00A3   ;1字节
TEMP:                 EQU       $00A4   ;1字节
COUNT:                EQU       $00A5   ;1字节
NUMBER_DATA0:	        EQU	      $00A6	  ;1字节
NUMBER_DATA1:	        EQU	      $00A7	  ;1字节
FLASHDB:              EQU       $00A8   ;1字节
;*******************************************************************************
;MYADDRESS            3字节+1字节和校验=#$FF
MYADDRESS1:           EQU       $00A9
MYADDRESS3:           EQU       $00AA
MYADDRESS2:           EQU       $00AB
MYADDRESSJY:          EQU       $00AC
;*******************************************************************************
;
CRCH:                 EQU       $00AE
CRCL:                 EQU       $00AF
CRCLENTH:             EQU       $00B0
CRCT:                 EQU       $00B1   
;*******************************************************************************
SENDSTRAT:            EQU       $00B2
ADDR:                 EQU       $00B3
CHECKHE:              EQU       $00B4
UP_REUP:              EQU       $00B5
BLOCK_NUM:            EQU       $00B6
UPOVER:               EQU       $00B7
ERR_NUM:              EQU       $00B8
BLOCK_SIZE:           EQU       $00B9
FLAG:                 EQU       $00BA             
TIMET:                EQU       $00BB               
RAM_ADR_H:            EQU       $00BC
RAM_ADR_L:            EQU       $00BD
RAM_DATA:             EQU       $00BE
CHK_SUM:              EQU       $00BF
END_ADR_H:            EQU       $00C0
END_ADR_L:            EQU       $00C1
temp:		              EQU       $00C2
ZER_CN:               EQU       $00C3         ;'发送错误次数
MYADDR:               EQU       $00C4
BAUD_SET:             EQU       $00C5
VERIFY_BACK0:	        EQU	      $00C6	        ;4字节5CH--5FH
VERIFY_BACK1:	        EQU	      $00C7	        ;
VERIFY_BACK2:	        EQU	      $00C8	        ;
VERIFY_BACK3:	        EQU	      $00C9	        ;
TMPUSE:		            EQU	      $00CA	        ;
VERIFY_DATA0:	        EQU	      $00CB	        ;4字节5CH--5FH
VERIFY_DATA1:	        EQU	      $00CC	        ;
VERIFY_DATA2:	        EQU	      $00CD	        ;
VERIFY_DATA3:	        EQU	      $00CE	        ;
NUM_ERROR:	          EQU	      $00CF	        ;
ERASE:                EQU       $00D0         ;'擦写FLASH标志位
CANUPDATA:             EQU       $00D1        ;'?????
DBJ0:                 EQU       $00D2
DBJ1:                 EQU       $00D3

;UP_REUP:             EQU       $10
;'.1主从帧
;MS_UPORD:             EQU       $1D         ;'升级命令帧
;MS_UPDATE:            EQU       $1E         ;'升级数据帧
;MS_WSTA:              EQU       $1F         ;'查询窗机状态帧
;'.2从主帧
SM_DARI:              EQU       $1B         ;'接收数据正确
SM_DAER:              EQU       $1C         ;'接收数据错误
SM_WSTA:              EQU       $1D         ;'反馈窗机状态
UP_OVER:              EQU       $10
;BSZ 
;定义标志位
;NODAT:                EQU       $48         ;'消费记录标志位
;UPING_STATUS:         EQU       $61         ;=1 --  处于升级状态  =0 -- 处于用户程序状态
;UPOVER:              EQU       $62         ;'升级结束标志
;ZHEN_NU:              EQU       $65         ;'帧翻转序号
;DATA_ER:             EQU       $66         ;'数据正确标志位
;NOW:                  EQU       $67        ;'等待发送位
;
;常数定义
LONGTH:               EQU       $07         ;'字节长度
CRCLONG:              EQU       $06         ;'CRC校验长度
NOTUPDA:              EQU       $AA         ;'非升级状态标志
UPDATE:               EQU       $FF         ;'升级状态标志
RIDATA:               EQU       $55         ;'数据正确标志
ERDATA:               EQU       $AA         ;'数据错误标志
MYSTAT:               EQU       $BA         ;'回应查询帧状态
MYTYPE:               EQU       $60         ;'本产品的类型
;*****************************************************
 ;TR_BUFF1:    EQU   $03
UP_UPDA:              EQU       $01         ;'处于升级状态
UP_USER:              EQU       $02         ;'处于用户程序区
;UP_OVER:             EQU       $03         ;'升级结束
UP_NOOV:              EQU       $04         ;'升级未结束
UP_ALLO:              EQU       $05         ;'可以升级
UP_NOT:               EQU       $06         ;'不可以升级
ERASEIN:              EQU       $07         ;'擦写程序存储器
ERASEOV:              EQU       $08         ;'擦除完毕
RSEND:                EQU       $09         ;'重发上一帧
NSEND:                EQU       $0A         ;'不重发上一帧
;UP_REUP:             EQU       $0B         ;'重新开始升级
SETBORD:              EQU       $0C         ;'设置波特率成功
NOTBORD:              EQU       $0D         ;'设置波特率失败
S_ERASE:              EQU       $0E         ;'擦写FLASH存储器
;N_ERASE:             EQU       $0F        ;'
L_REMOTE:             EQU       $0F         ;


; code section
MyCode:               SECTION
PRGRNGE:              EQU       $FC06
ERARNGE:              EQU       $FCBE           
LDRNGE:               EQU       $FF30
MON_PRGRNGE:          EQU       $FC28
MON_ERARNGE:          EQU       $FF2C
MON_LDRNGE:           EQU       $FF24
EE_WRITE:             EQU       $FD3F
EE_READ:              EQU       $FDD0
MYID:                 EQU       $EBC0
            ORG $EC00
main:
_Startup:
            LDHX  #$EB80      
            LDA   ,X
            CMP   #NOTUPDA
            BNE   START
            JMP   $EB70
START:                  
            LDHX  #$0200
            TXS            
            LDHX  #$015F         
CLEARRAM:            
            CLR   ,X
            AIX   #-1
            TXA
            CMP   #$5F
            BNE   CLEARRAM
            SEI                            ; Disable interrupts 

;** ### MC68HC908JL16_32FA "Cpu" init code ... **
;** PE initialization code after reset **
; System clock initialization 

; Common initialization of the write once registers 
; CONFIG1: COPRS=1,LVID=1,SSREC=0,STOP=0,COPD=0 
            MOV     #$90,CONFIG1                                        
; CONFIG2: IRQPUD=0,LVIT1=0,LVIT0=0,IICSEL=0,STOP_ICLKDIS=0 
            CLR     CONFIG2                                               
; Common initialization of the CPU registers 
; ### Init_SCI init code 
; SCC1: LOOPS=0,ENSCI=0,TXINV=0,M=0,WAKE=0,ILTY=0,PEN=0,PTY=0 
            CLR     SCC1                   ; Disable the SCI module 
            LDA     SCS1                   ; Dummy read of the SCS1 registr to clear flags 
            LDA     SCS2                   ; Dummy read of the SCS2 registr to clear flags 
            LDA     SCDR                   ; Dummy read of the SCDR registr to clear flags 
; SCC3: R8=0,T8=0,ORIE=0,NEIE=0,FEIE=0,PEIE=0 
            CLR     SCC3                                               
; SCBR: SCP1=1,SCP0=0,SCR2=0,SCR1=1,SCR0=0 
            MOV     #$20,SCBR;#$22,SCBR                                        
; SCC1: LOOPS=0,ENSCI=1,TXINV=0,M=1,WAKE=1,ILTY=1,PEN=0,PTY=0 
            MOV     #$5C,SCC1 ; #$40,SCC1                                        
; SCC2: SCTIE=0,TCIE=1,SCRIE=1,ILIE=1,TE=1,RE=1,RWU=0,SBK=0 
            MOV   #$2E,SCC2 ; #$24,SCC2                                         
; ### Init_COP init code 
            LDA     #$FF
            STA     COPCTL                 ; Clear WatchDog counter 
; ### Init_TIM init code 
; T1SC: TOF=0,TOIE=0,TSTOP=1,TRST=1,PS2=0,PS1=0,PS0=0 
            MOV     #$30,T1SC              ; Stop and reset counter 
            LDHX    #$6000            
            STHX    T1MOD                  ;/* Period value setting */
            LDA     T1SC                   ; Overflow int. flag clearing (first part) 
; T1SC: TOF=0,TOIE=1,TSTOP=0,TRST=0,PS2=0,PS1=0,PS0=0 
            MOV     #$40,T1SC              ; Int. flag clearing (2nd part) and timer contr. register setting 
            CLI
            BSET    4,DDRB
            jsr     CHECKADD    
mainLoop:   ;com     PTB
            ; Insert your code here
            feed_watchdog            
            ;LDA   ERASE
            ;BEQ   MAINLOOP1
            ;JSR   ERASERALL
MAINLOOP1:  
            LDA   UPOVER
            BEQ   MAINLOOP2
            JSR   CHANGFLAG
MAINLOOP2:
            LDA   SENDSTRAT
            BEQ   MAINLOOP3
            JSR   STARTSEND
MAINLOOP3:  
            ;LDA   SET_BAUD
            ;BEQ   MAINLOOP4
            ;JSR   *          
MAINLOOP4:  
            JSR   CHECKADD
            BRA   mainLoop
                                                                           
;************************************************************************
;************* 检测本机地址 ***********
;'入口条件: (无)
;'出口条件: (无)
;************************************************************************ 


STARTSEND:
            LDHX  #TR_BUFF
            LDA   ,X
            BRCLR 7,SCS1,STARTSEND1
            STA   SCDR
            AIX   #$01
            STHX  RSTOHX
            MOV   X+,LENTH
            BSET  SCC2_SCTIE,SCC2
            DIR_Transmit
            CLR   SENDSTRAT
STARTSEND1:            
            RTS
            
;************************************************************************
;************* 检测本机地址 ***********
;'入口条件: (无)
;'出口条件: (无)
;************************************************************************  
            
CHECKADD:               
            LDA   MYADDRESS1
            ADD   MYADDRESS2
            ADD   MYADDRESS3
            ADD   MYADDRESSJY
            COMA
            BEQ   CHECKADD0
            LDHX  #MYID
            MOV   X+,MYADDRESS1
            MOV   X+,MYADDRESS2
            MOV   X+,MYADDRESS3
            MOV   X+,MYADDRESSJY            
CHECKADD0:
            RTS            
            
                        
;************************************************************************
;************* 写编程标记子程序 ***********
;'入口条件: BUS_SPD               DS.B      1
;           DATASIZE              DS.B      1
;           START_ADDR            DS.W      1
;           DATAARRAY             DS.B      32
;'出口条件: (无)
;************************************************************************          


;PROGRAM:
;            PSHH
;            PSHX
;            LDHX    #FILE_PTR
;            JSR     PRGRNGE 
;            PULX
;            PULH
;            RTS
            
            
;************************************************************************
;************* 写编程标记子程序 ***********
;'入口条件: BUS_SPD               DS.B      1
;           DATASIZE              DS.B      1
;           START_ADDR            DS.W      1
;           DATAARRAY             DS.B      32
;'出口条件: (无)
;************************************************************************             


;ERASER:     
;            PSHH
;            PSHX                                    
;            LDHX    #FILE_PTR
;            JSR     ERARNGE
;            PULX
;            PULH
;            RTS
            
            
;************************************************************************
;************* 写编程标记子程序 ***********
;'入口条件: BUS_SPD               DS.B      1
;           DATASIZE              DS.B      1
;           START_ADDR            DS.W      1
;           DATAARRAY             DS.B      32
;'出口条件: (无)
;************************************************************************              


;VERIFY:     
;            PSHH
;            PSHX
;            LDHX    #FILE_PTR
;            PULX
;            PULH
;            RTS
            
                                                                               
;************************************************************************
;************* 写编程标记子程序 ***********

;'入口条件: BUS_SPD               DS.B      1
;           DATASIZE              DS.B      1
;           START_ADDR            DS.W      1
;           DATAARRAY             DS.B      32
;'出口条件: (无)
;************************************************************************  

            
;INITIALISATION:
;            MOV   #20,BUS_SPD
;            MOV   #32,DATASIZE
;            MOV   #$ec,START_ADDR
;            MOV   #$00,START_ADDR+1           
;            RTS
            
                      
;************************************************************************
;************* 写编程标记子程序 ***********
;'入口条件:(无)
;'出口条件:ERR_NUM  FF:写编程标记错
;************************************************************************


;ERASERALL: 

;=======================================================================
;测试 
;            BCLR  5,SCC2
;            MOV   #$BC,START_ADDR
;            MOV   #$00,START_ADDR+1
;            MOV   #191,BLOCK_NUM
;ERASERALL12:            
;            MOV   #20,BUS_SPD
;            MOV   #1,DATASIZE
;            LDHX  #FILE_PTR
;            MOV   #$AA,DATAARRAY
;            JSR   PRGRNGE
;            LDHX  START_ADDR
;            AIX   #64
;            STHX  START_ADDR
;            DBNZ  BLOCK_NUM,ERASERALL12
;=======================================================================                                  
            ;关通讯中断
            ; SCC2: SCTIE=0,TCIE=1,SCRIE=1,ILIE=1,TE=1,RE=1,RWU=0,SBK=0 
;            BCLR  5,SCC2
;            MOV   #$BC,START_ADDR
;            MOV   #$00,START_ADDR+1
;            MOV   #3,ERR_NUM
;            MOV   #190,BLOCK_NUM
;ERASERALL1: 

⌨️ 快捷键说明

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