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

📄 mcuinit.asm

📁 自已编的程序.能通过RS485总线更新单片机中的应用程序,带一程序流程图和一些说明希望能对大家有所帮助!
💻 ASM
字号:
;** ###################################################################
;**     This code is generated by the Device Initialization Tool.
;**     It is overwritten during code generation.
;**     USER MODIFICATION ARE PRESERVED ONLY INSIDE INTERRUPT SERVICE ROUTINES
;**
;**     Project   : asdf
;**     Processor : MC68HC908JL16CFJE
;**     Version   : Bean 01.046, Driver 01.00, CPU db: 2.87.069
;**     Datasheet : MC68HC908JL16 Rev. 1.1 11/2005
;**     Date/Time : 2007-5-11, 20:22
;**     Abstract  :
;**         This bean "MC68HC908JL16_32FA" provides initialization of the 
;**         CPU core and shared peripherals.
;**     Settings  :
;**         Clock setting
;**             External clock     : 9.8306 MHz
;**             CPU mode selection : 0
;**             Initialization interrupt priority : 1
;**             Stop instruction enabled : no
;**             LVI module         : no
;**
;**             Source clock       : Main clock frequency / 1
;**             Internal bus clock : 2.45765 MHz
;**     Contents  :
;**         Function "MCU_init" initializes selected peripherals
;**
;**     (c) Copyright UNIS, spol. s r.o. 1997-2006
;**     UNIS, spol s r.o.
;**     Jundrovska 33
;**     624 00 Brno
;**     Czech Republic
;**     http      : www.processorexpert.com
;**     mail      : info@processorexpert.com
;** ###################################################################

        INCLUDE MC68HC908JL16.inc      ; I/O map for MC68HC908JL16CFJE


CGM_DELAY: EQU  $27FF
CODE_SECT:      SECTION

        XDEF    MCU_init
;** ===================================================================
;**     Method      :  MCU_init (bean MC68HC908JL16_32FA)
;**
;**     Description :
;**         Device initialization code for selected peripherals.
;** ===================================================================
MCU_init:

;** ### 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=1 
        MOV     #$91,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     #$22,SCBR                                        
        ; SCC1: LOOPS=0,ENSCI=1,TXINV=0,M=0,WAKE=0,ILTY=0,PEN=0,PTY=0 
        MOV     #$40,SCC1                                        
        ; SCC2: SCTIE=0,TCIE=0,SCRIE=1,ILIE=0,TE=0,RE=1,RWU=0,SBK=0 
        MOV     #$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                            ; Enable interrupts 
        RTS


;** ===================================================================
;**     Interrupt handler : isrINT_SCITransmit
;**
;**     Description :
;**         User interrupt service routine. 
;**     Parameters  : None
;**     Returns     : Nothing
;** ===================================================================
        XDEF    isrINT_SCITransmit
isrINT_SCITransmit:
  ; Write your interrupt code here ... 

        RTI
; 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 ... 
        PSHH
        PSHX
        LDHX  #$EBBF
        LDA   ,X
        CBEQA #$FF,UPR
        PULH
        PULX
        JMP   $EC09
R0_01:  BRSET SCC2_RWU,SCC2,R0_02
        LDA   SCDR
        STA   ADDR
        AND   #$C0
        CMP   #$C0
        BEQ   IS_ME1
        BCLR  SCC2_RWU,SCC2
        LDHX  TR_BUFF
        MOV   ADDR,X+
        STHX  HX
        MOV   #!0,LENTH
           ;JNB     SM2,R0_02
           ;MOV     A,SBUF
           ;CJNE    A,MYADDR,IS_ME1   ;'判断是否为本机地址,地址不符合,跳转
           ;CLR     SM2
           ;MOV     R0,#TR_BUFF        ;'存地址
           ;MOVX    @R0,A
           ;INC     R0
           ;MOV     R2,#00H
IS_ME1: JMP    SRET

R0_02:     ;'SM2=0,为数据
           ;'是不是长度字节
        LDA   LENTH
        CMP   #$00
        BNE   R0_04
        MOV   SCDR,LENTH
        BNE   R0_03
R0_031:        
        BCLR  SCC2_RWU,SCC2
        JMP   SRET
R0_03:
        LDA   LENTH
        SUB   #$08
        BCS   R0_031
        LDA   LENTH
        SUB   #!60
        BHI   R0_031
        LDHX  HX
        MOV   LENTH,X+
        STHX  HX
        DEC   LENTH
        JMP   SRET
        
                
           ;CJNE    R2,#00H,R0_04   ;'R2<>0不是长度字节
          ; MOV     A,SBUF
           ;MOV     R2,A
           ;JZ      R0_03            ;'长度=0,拒绝接受
           ;CLR     C
	   ;SUBB	   A,#05H
	   ;JC	   R0_03	    ;'长度<6,拒绝
	   ;MOV	   A,R2
	   ;CLR     C
	   ;SUBB    A,#54
	   ;JNC     R0_03            ;'长度>48,拒绝
           ;MOV     A,R2             ;'长度大于等于6,小于等于48,接收长度
           ;MOVX    @R0,A
           ;INC     R0
           ;DEC     R2
           ;LJMP    SRET
;R0_03:     SETB    SM2
        ;   LJMP    SRET
R0_04:     ;'为数据
        LDHX  HX
        MOV   SCDR,X+
        STHX  HX
        LDA   LENTH
        DBNZA R0_05
        JMP   R0_10
           ;MOV     A,SBUF
           ;MOVX    @R0,A
           ;INC     R0
           ;DEC     R2
           ;CJNE    R2,#00H,R0_05
           ;LJMP    R0_10
R0_05:  JMP   SRET
R0_06:  JMP   DA_ER
R0_10:     ;'数据处理
        BCLR  SCC2_RWU,SCC2
        LDHX  TR_BUFF+1
        MOV   X+,CRCLENTH
        INC   CRCLENTH
        LDHX  TR_BUFF
        JSR   MAKECRC
        LDA   CRCH
        ORA   CRCL
        BEQ   R0_18
        MOV   #$01,DATA_ER
        JMP   DA_ER     
           ;SETB    SM2            ;'使只能接收地址
           ;MOV     R0,#TR_BUFF+1
           ;MOVX    A,@R0
           ;INC     A
           ;MOV     R2,A
           ;MOV     R0,#TR_BUFF
           ;LCALL   MAKECRC
           ;MOV     A,R6
           ;ORL     A,R7
           ;JZ      R0_18
           ;'CRC校验错误
           ;SETB    DATA_ER
           ;LJMP    DA_ER

R0_18:     
        LDHX  TR_BUFF+2
        LDA   ,X
        SUB   #!60
        BCS   S_UP_ERR
        STA   TEMP
        ADD   TEMP
        ADD   TEMP
        LDHX  R0_22
        STHX  HX
        
        LDHX  HX
        JMP   ,X
R0_22:  JMP   S_UPOR1
        JMP   S_UPDA
        JMP   S_WSTA
        JMP   DA_ER
        JMP   DA_ER
        JMP   DA_ER
            ;MOV     R0,#TR_BUFF+2
           ;MOVX    A,@R0
        
           ;ANL     A,#00011111B
	          ;CLR	   C
           ;SUBB	  A,#1DH
	         ; JC     S_UP_ERR
	         ; JMP	  R0_211
           ;'小于1D则跳入用户中断程序
S_UP_ERR:
        PULH
        PULX
        PULA
        RTI
      ;POP     DPH
	   ;POP     DPL
      ;     POP     SCONF
	   ;POP     PSW
	   ;POP     B
	  ; POP     ACC
           ;RETI
;+++++++++++++++++++++++++++++++++++++++++

;R0_211:   
        
           ;CPL     L_LED
          ; MOVX    A,@R0
          ; ANL     A,#00011111B
          ; SUBB    A,#1DH
          ; MOV     R4,A
          ; ADD     A,R4
          ; ADD     A,R4
           ;MOV     DPTR,#R0_22
          ;JMP     @A+DPTR
;R0_22:     LJMP    S_UPOR1
 ;          LJMP    S_UPDA
  ;         LJMP    S_WSTA
   ;        LJMP    DA_ER
    ;       LJMP    DA_ER
     ;      LJMP    DA_ER
        
        
                   
       
; end of isrINT_SCIReceive 


;** ===================================================================
;**     Interrupt handler : isrINT_SCIError
;**
;**     Description :
;**         User interrupt service routine. 
;**     Parameters  : None
;**     Returns     : Nothing
;** ===================================================================
        XDEF    isrINT_SCIError
isrINT_SCIError:
  ; Write your interrupt code here ... 

        RTI
; end of isrINT_SCIError 


;** ===================================================================
;**     Interrupt handler : isrINT_TIM1Ovr
;**
;**     Description :
;**         User interrupt service routine. 
;**     Parameters  : None
;**     Returns     : Nothing
;** ===================================================================
        XDEF    isrINT_TIM1Ovr
isrINT_TIM1Ovr:
  ; Write your interrupt code here ... 

        RTI
; end of isrINT_TIM1Ovr 



; Initialization of the CPU registers in FLASH 

        ; MOR: OSCSEL=1 
        ORG     MOR
        DC.B    $FF



UNASSIGNED_ISR: EQU     $FFFF          ; unassigned interrupt service routine

        XREF    _Startup               ; reset interrupt service routine

        ORG     $FFDE                  ; Interrupt vector table
_vect:
        DC.W   UNASSIGNED_ISR          ; Int.no.  0 INT_ADC (at FFDE)               Unassigned
        DC.W   UNASSIGNED_ISR          ; Int.no.  1 INT_KBI (at FFE0)               Unassigned
        DC.W   isrINT_SCITransmit      ; Int.no.  2 INT_SCITransmit (at FFE2)       Used
        DC.W   isrINT_SCIReceive       ; Int.no.  3 INT_SCIReceive (at FFE4)        Used
        DC.W   isrINT_SCIError         ; Int.no.  4 INT_SCIError (at FFE6)          Used
        DC.W   UNASSIGNED_ISR          ; Int.no.  5 INT_MMIIC (at FFE8)             Unassigned
        DC.W   UNASSIGNED_ISR          ; Int.no.  6 Reserved6 (at FFEA)             Unassigned
        DC.W   UNASSIGNED_ISR          ; Int.no.  7 INT_TIM2Ovr (at FFEC)           Unassigned
        DC.W   UNASSIGNED_ISR          ; Int.no.  8 INT_TIM2CH1 (at FFEE)           Unassigned
        DC.W   UNASSIGNED_ISR          ; Int.no.  9 INT_TIM2CH0 (at FFF0)           Unassigned
        DC.W   isrINT_TIM1Ovr          ; Int.no. 10 INT_TIM1Ovr (at FFF2)           Used
        DC.W   UNASSIGNED_ISR          ; Int.no. 11 INT_TIM1CH1 (at FFF4)           Unassigned
        DC.W   UNASSIGNED_ISR          ; Int.no. 12 INT_TIM1CH0 (at FFF6)           Unassigned
        DC.W   UNASSIGNED_ISR          ; Int.no. 13 Reserved13 (at FFF8)            Unassigned
        DC.W   UNASSIGNED_ISR          ; Int.no. 14 INT_IRQ1 (at FFFA)              Unassigned
        DC.W   UNASSIGNED_ISR          ; Int.no. 15 INT_SWI (at FFFC)               Unassigned
        DC.W   _Startup                ; Int.no. 16 INT_RESET (at FFFE)             Reset vector


        END

;** ###################################################################
;**
;**     This file was created by UNIS Processor Expert 2.98 [03.80]
;**     for the Freescale HC08 series of microcontrollers.
;**
;** ###################################################################

⌨️ 快捷键说明

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