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

📄 main.asm

📁 STC单片机开Bootload起动程序,可以Flash下载程序,可仿真寄存器
💻 ASM
📖 第 1 页 / 共 4 页
字号:
;*******************************************************************
;* 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 'derivative.inc'

; export symbols
;*            XDEF _Startup, main
            ; we export both '_Startup' and 'main' as symbols. Either can
            ; be referenced in the linker .prm file or from C/C++ later on

;*            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

; code section
;*MyCode:     SECTION
;*main:
;*_Startup:
;*            LDHX   #__SEG_END_SSTACK ; initialize the stack pointer
;*            TXS
;*            CLI                     ; enable interrupts

;*mainLoop:
;*           ; Insert your code here
;*            NOP

;*           feed_watchdog
;*            BRA    mainLoop 


;****************************************************************
;*
;*    Tsinghua Motorola MCU/DSP Application Center
;*         Monitor Program for MC68HC90GP32
;*                    V.1.1
;*                 All right Reserved 
;*  The debug originally for MC6805E2 made by Shao Beibei in 1982
;*  Chen yong ported it to MCHC908MP16
;*  Wang Yunfei & Xue Tao ported it to 68HC908Gp32
;*  Gong Hui simplified it(remove the asm/dasm
;*  Hou Lie made comments and some more modiffcation
;*
;****************************************************************


;*
;**=====================Registers=====================
;*
PRRTA      EQU   $0000
PRRTB      EQU   $0001
PRRTC      EQU   $0002
PRRTD      EQU   $0003
DDRA       EQU   $0004
DDRB       EQU   $0005
DDRC       EQU   $0006
DDRD       EQU   $0007
PORTE      EQU   $0008

;*
;**=======================SPI==========================
;*
SPCR       EQU   $0010
SPSCR      EQU   $0011
B_SPTE     EQU   3
SPDR       EQU   $0012
;*
;**=======================SCI==========================
;*
SCCR1      EQU   $0013
B_LOOPS    EQU   7
B_ENSCI    EQU   6
B_TXINV    EQU   5
B_M        EQU   4
B_WAKE     EQU   3
B_ILTY     EQU   2
B_PEN      EQU   1
B_PTY      EQU   0
;*
SCCR2      EQU   $0014
B_SCTIE    EQU   7
B_TCIE     EQU   6
B_SCRIE    EQU   5
B_ILIE     EQU   4
B_TE       EQU   3
B_RE       EQU   2
B_RWU      EQU   1
B_SBK      EQU   0
;*
SCSR       EQU   $0016
B_TDRF     EQU   7
B_TC       EQU   6
B_RDRF     EQU   5
;*
SCDR       EQU   $0018
BAUD       EQU   $0019
;*
CONFIG1    EQU   $001E
CONFIG1    EQU   $001F
;*
T1SC       EQU   $0020
T1MODH     EQU   $0023
T1MODL     EQU   $0024
;*
PCTL       EQU   $0036
B_PLLON    EQU   5
B_BCS      EQU   4
PBWC       EQU   $0037
B_AUTO     EQU   7
B_LOCK     EQU   6
PMSH       EQU   $0038
PMSL       EQU   $0039
PMRS       EQU   $003A
PMDS       EQU   $003B
;*
RAM_BEGIN  EQU   $0040
RAM_END    EQU   $0240
ROM_BEGIN  EQU   $8000
ROM_END    EQU   $E000
MON_BEGIN  EQU   $E000
;*
SBSR       EQU   $FE00
B_BW       EQU   1
SBFCR      EQU   $FE03
B_BCFE     EQU   7
BRKH       EQU   $FE09
BRKL       EQU   $FE0A
BRKSCR     EQU   $FE0B
B_BRKE     EQU   $7
B_BRKA     EQU   6
;*
FLCR       EQU   $FE08
FLBPR      EQU   $FF7E
VectorStart EQU  $FFDC
;*
PROG_BEGIN EQU   $0100
PROG_BEGIN2 EQU   $010D
PAGE_BEGIN EQU   $0180
;*
;*=================Equivalents For ASCII Keycodes==============*
;*
CTRLA      EQU   $01
CTRLC      EQU   $03
CTRLP      EQU   $10
CTRLX      EQU   $18
QUIT       EQU   $2E
BKSP       EQU   $08
CR         EQU   $0D
LF         EQU   $0A

;*=====================Ram Variables====================*
ORG  RAM_BEGIN
BUFF       RMB   6
MIRR_A     RMB   1          ;The Mirror of A Register
MIRR_H     RMB   1          ;The Mirror of H Register
MIRR_X     RMB   1          ;The Mirror of X Register
MIRR_PC    RMB   2          ;The Mirror of PC Register
MIRR_CC    RMB   1          ;The Mirror of CC Register
MIRR_SP    RMB   2          ;The Mirror of SP Register
FLAG       RMB   1
GO_FLAG    RMB   1
TEMP       RMB   2
INTJMP     RMB   3
ERASEBEGIN RMB   2
;*
FLASHFLAG  RMB   1
B_ERROR    EQU   0
;*
C5USH      RMB   1
C5USL      RMB   1
C10USH     RMB   1
C10USL     RMB   1
C30USH     RMB   1
C30USL     RMB   1
C50USH     RMB   1
C50USL     RMB   1
C1MSH      RMB   1
C1MSL      RMB   1
;*
TEMPH      RMB   2           ;Temp Buffer for Copy Flash Program To Ram
TEMP2      RMB   2
RAM50      RMB   1
BUFFCOU    RMB   2
;*
COUNTE1    RMB   1
COUNTE2    RMB   1
PRADDR     RMB   2
;*
PROG_BUF   EQU   *
;*

;*=======================virtual Vectors====================*
 ORG   $DFDA
V_MONITOR  DW    INIT
V_TIMB     DW    $FFFF
V_ADC      DW    $FFFF
V_KEY      DW    $FFFF
V_SCI_TR   DW    $FFFF
V_SCI_RX   DW    $FFFF
V_SPI_ER   DW    $FFFF
V_SPI_TR   DW    $FFFF
V_SPI_RX   DW    $FFFF
V_TIM2_OV  DW    $FFFF
V_TIM2_CH1 DW    $FFFF
V_TIM2_CH0 DW    $FFFF
V_TIM1_OV  DW    $FFFF
V_TIM1_CH1 DW    $FFFF
V_TIM1_CH0 DW    $FFFF
V_PLL      DW    $FFFF
V_IRQ      DW    $FFFF
V_SWI      DW    $FFFF
V_RESET    DW    $8000

;*
;**========================Main Program======================**
;*
 ORG    MON_BEGIN
RESET_INIT:
        SEI
        LDHX     #$023F          ;Ste the SP Register
        TXS      
        LDA      #$01            ;Init CONFIG Regisiter
        STA      CONFIG1
        LDA      #$3D
        STA      CONFIG2
        
;*========================Initial CGMC=======================**
                                 ;Set Fbus=2.4576MHz
        CLR      PCTL
        MOV      #$01,PCTL       ;SET P=0 E=1,Close PLL,Use CGMXCLK
        LDA      #$01            ;SET N300
        STA      PMSH
        LDA      #$2c
        STA      PMSL
        LDA      #$80            ;SET L=128
        STA      PMRS
        LDA      #$01            ;SET R=1
        STA      PMDS
        BSET     B_PLLON,PCTL    ;Open PLL
        BSET     B_AUTO,PBWC     ;Set AUTO 
        BRCLR    B_LOCK,PBWC     ;Wait Until PLL Stable
        BSET     B_BCS,PCTL      ;Use PLL
        
;*=================Initialize For Main Program===============*
INIT:
        LDA      #$00
        STA      GO_FLAG
        
;*======================Initial SCI==========================*
        LDA      #$02
        STA      BAUD
        BSET     B_ENSCI,SCCR1   ;Enable sci
        BSET     B_TE,SCCR2
        BSET     B_RE,SCCR2      ;Enable Transmitter and receiver
        
;*====================Breakpoint Init========================*

        LDA      #%00000000
        STA      BRKSCR
        LDA      #%00010000
        STA      SBSR
        LDA      #%10000000
        STA      SBFCR
        
;*=======================PORT Init===========================*
        LDA      V_RESET
        CMP      #$FF
        BNE      ENTER_CHOICE
        LDX      V_RESET+1
        CPX      #$FF
        BEQ      ENTER_MON
ENTER_CHOICE:
        LDHX     #$00
DIS_WAIT:
        LDA      WAITPROMPT,X
        AIX      #1
        CMP      #$04
        BEQ      WAIT_KEY
        JSR      OUTCH
        BRA      DIS_WAIT
WAITPROMPT:
        FCB      $0D,$0A,$0D,$0A      ;CR,LF,CR,LF
        FCB      "Waiting for key press"
        FCB      $04
WAIT_KEY:
        LDA      #$11
        STA      FLAG
        LDHX     #$C814               ;25*200=5S
        STHX     TEMP
        LDA      #%01010000           ;Enable Reset Prescaler,Divided by 1
        STA      T1SC
        LDHX     #$F000               ;25ms Timer Interrupt
        STHX     T1MODH
        CLI
        JSR      INCH                 ;Try To Receive 
          
WAIT_SUCCESS:                         ;Receive Code,Start User's Program
        CLR      FLAG
        LDA      #%00100000           ;Disable
        STA      T1SC
        LDHX     #$FFFF               ;Change T1MODH To $FFFF
        STHX     T1MODH
        BRA      ENTER_MON
WAIT_FAIL:                            ;No Code Receive,Start Mon-Program
        CLR      FLAG 
        LDA      #%00100000
        STA      T1SC
        LDHX     #$FFFF
        STHX     T1MODH
        LDA      V_RESET
        LDX      V_RESET+1
        STA      INTJMP+1
        STX      INTJMP+2
        LDA      #$CC                 ;Opcode For<JMP addr16>
        STA      INTJMP
        JMP      INTJMP
ENTER_MON: 
        LDHX     #$00                 ;Display Prompt message
DISPMT:                               ;****
        LDA      PROMPT,X
        AIX      #1
        CMP      #$04
        BEQ      INIRAM
        JSR      OUTCH
        BRA      DISPMT
PROMPT:                               ;****
        FCB      $0D,$0A,$0D,$0A      ;CR,LF,CR,LF
        FCB      "Tsingghua Motorola MCU center IDK debug V.1.1."
        FCB      "All right reserved"
        FCB      "Type"
        FCB      "."
        FCB      "H"
        FCB      "."
        FCB      "for help......what ecer you like"
        FCB      $04
;*
INIRAM:
        STA      MIRR_A
        STHX     MIRR_H
        LDA      #$00
        STA      MIRR_PC
        STA      MIRR_PC+1
        TSX 
        STHX     MIRR_SP
        CLR      FLAG
        LDA      #$E8
        STA      MIRR_CC
        LDA      #$CC                 ;Opcode for<JMP addr16>
        STA      INTJMP
;*
;**=======================Main Loop=======================**
;*
CMDLOOP:
        JSR      CRLF                 ;Outpur Cr(Enter)And LF
        LDA      #'>'
        JSR      OUTCH                ;Display Prompt
IGNORE_0A:
        JSR      INCH
        CMP      #$0D                 ;If Input Is 'ENTER', Loop Again
        BEQ      CMDLOOP
        CMP      #$0A                 ;If Input 'LF',Receive Again
        BEQ      IGNORE_0A
        TAX 
        CMP      #$20                 ;Other Code Lower Than $20 Are 'CTRL+*'
        BHS      PCMD 
        LDA      #'^'
        JSR      OUTCH                ;'CTRL+*'='CTRL'-$40
        TXA                           ;Restore A From X
        ADD      #$40
PCMD:                                 ;****
        JSR      OUTCH                ;Output '*'
        LDA      #''
        JSR      OUTCH
        TXA 
        LDHX     #$00                 ;****
NEXTCH:                               ;Judge What Order It Is
        CMP      JMPTAB,X
        BEQ      JCMD
        AIX      #4
        CPHX     #(TABEND-JMPTAB)
        BLO      NEXTCH
        LDHX     #$00
WHAT:   LDA      MSG1,X               ;****Output 'what?',If Not The Order Defined
        AIX      #1
        CMP      #$04
        BEQ      CMDLOOP
        JSR      OUTCH
        BRA      WHAT
MSG1:   FCB      "What?"
        FCB      $04
JCMD:                                 ;****
        AIX      #1                   ;To The According Routine
        JSR      JMPTAB,X
        JMP      CMDLOOP
JMPTAB: FCB      CTRLA                ;****
        JMP      CHG_A
        FCB      CTRLX
        JMP      CHG_X
        FCB      CTRLP
        JMP      CHG_PC
        FCB      CTRLC
        JMP      CHG_CC
        FCB      'H'
        JMP      HELP
        FCB      'G'
        JMP      CMD_GO
        FCB      'D'
        JMP      MDUMP
        FCB      'M'
        JMP      MEMCHG
        FCB      'R'
        JMP      REGDSP
        FCB      'B'
        JMP      IN_BKPT
        FCB      'E'
        JMP      ERASE
        FCB      'L'
        JMP      DOWNLDFLASH
;*
TABEND  EQU *
;*
CHG_A:  
        JSR      PRT_A                ;Output 'A=*'
        JSR      OUTDOT               ;Output '.'
        JSR      IN2H                 ;Input The New Code For Register A
        BCS      CA1                  ;If The Code Is Not Proper,Not Store
        STA      MIRR_A               ;If The Code Is Proper,Store
CA1:    RTS
;*
CHG_X:  JSR      PRT_X
        JSR      OUTDOT
        JSR      IN4H
        BCS      CX1
        STX      MIRR_H
        STA      MIRR_X
CX1:    RTS
;*
CHG_PC: JSR      PRT_PC
        JSR      OUTDOT
        JSR      IN4H
        BCS      CP1
        STX      MIRR_PC
        STA      MIRR_PC+1
CP1:    RTS
;*
CHG_CC: JSR      PRT_CC
        JSR      OUTDOT
        JSR      IN2H
        BCS      CC1
        STA      MIEE_CC
CC1:    RTS

;*===============================================================
;* TMIE TABLE FOR FLASH ROUTINES
;* ( Constants For Fbus=9.8304M)
;*===============================================================
STE_TIME_TABLE:
        MOV      #$FF,C5USH          ;Set For 5uS Delay
        MOV      #$F9,C5USL
        MOV      #$FF,C10USH         ;Set For 10uS Delay
        MOV      #$F4,C10USL
        MOV      #$FF,C30USH         ;Set For 30uS Delay
        MOV      #$DB,C30USL
        MOV      #$FF,C50USH         ;Set For 50uS Delay
        MOV      #$C3,C50USL
        MOV      #$FB,C1MSH          ;Set For 5mS Delay
        MOV      #$33,C1MSL
        RTS
        
USER_MEMCHG:
        LDA      #$FF                ;FLAG=$FF
        STA      FLAG
        JMP      USERMEM2
        
;***************************************************************
;* COMMAND 'M' :Examine and Change Memory Byte by Byte
;*
;***************************************************************
MEMCHG: JSR      IN4H                ;Input Address****
        BCS      MCX
        STX      BUFF+1
        STA      BUFF+2
        CLR      FLAG                ;FLAG=0

⌨️ 快捷键说明

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