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

📄 main.asm

📁 STC单片机开Bootload起动程序,可以Flash下载程序,可仿真寄存器
💻 ASM
📖 第 1 页 / 共 4 页
字号:
       CMP        #$11
       BLO        NOTHEX
       SUB        #$07
       CMP        #$0F
       BLS        ISHEX
NOTHEX:SEC                           ;****
       RTS   
ISHEX: CLC                           ;****
       RTS
IN4H:                                ;****Input 4 Codes To A:X,And Display
       JSR        IN2H
       BCS        IN2HX
       TAX
IN2H:                                ;****Input 2 Codes To A-Reg,And Display
       JSR        INHEX
       BCS        IN2HX
       ASLA
       ASLA
       ASLA
       ASLA
       STA        TEMP
       JSR        INHEX 
       BCS        IN2HX
       ADD        TEMP
IN2HX: RTS                           ;****
INHEXUSER:                           ;****Input a Code To A-Reg,Not Display
       JSR        INCH               ;While Input To '0~F','0~F',C=0
       CMP        #$30
       BLO        NOTHEXUSER
       SUB        #$30
       CMP        #$09
       BLS        ISHEXUSER
       CMP        #$11
       BLO        NOTHEXUSER
       SUB        #$07
       CMP        #$0F
       BLS        ISHEXUSER
NOTHEXUSER:                          ;****
       SEC
       RTS
ISHEXUSER:                           ;****
       CLC
       RTS
IN2HNE:                              ;Input 2 Codes To A-Reg,Not Display
       JSR       INHEXUSER
       BCS       IN2HEO
       ASLA
       ASLA
       ASLA
       ASLA
       STA       TEMP
       JSR       INHEXUSER
       BCS       IN2HEO
       ADD       TEMP
IN2HEO:                              ;****
       RTS   
OUT4H:                               ;****Output 4 Codes In A:X
       STA       TEMP
       TXA 
       LDX       TEMP
       BSR       OUT2H
       TXA
OUT2H:                               ;Output 2 Codes In A-Reg
       STA       TEMP  
       LSRA
       LSRA 
       LSRA 
       LSRA
       JSR       OUT1H
       LDA       TEMP
       AND       #$0F
OUT1H:                               ;****Output a Code In A-Reg
       ADD       #$30
       CMP       #$39
       BLS       OUTIT
       ADD       #$07
OUTIT: JMP       OUTCH               ;****
;*
INCH:                                ;****Input a Code To A-Reg,Not Display
       BRCLR     B_RDRF,SCSR,INCH    ;Test RDRF (b_5) Bit Until It's Set
       LDA       SCDR
       RTS
INCHE:                               ;****Input a Code To A-Reg,And Display
       BSR       INCH
       BSR       OUTCH
       RTS
OUTCH:                               ;Output The Data In A-Reg
       BRCLR     B_TDRF,SCSR,OUTCH
       STA       SCDR
       RTS
CRLF:  EQU*                          ;****Output CR And LF
       PSHA
       LDA       #CR
       BSR       OUTCH
       LDA       #LF
       BSR       OUTCH
       PULA
       RTS
OUT4SP:JSR       OUT2SP              ;****Output 4 Spaces
OUT2SP:JSR       OUT1SP              ;****Output 2 Spaces
OUT1SP:LDA       #''                 ;****Output a Spaces
       JSR       OUTCH
       RTS
OUTDOT:LDA       #'.'                ;****
       JSR       OUTCH
       RTS 
;*=============================================================
;* Interrupt Service Routine for SWI
;*=============================================================
SWI2:  STHX      MIRR_H              ;****
       PSHH                          ;SP=SP0-1
       JSR       FINDSP              ;SP=SP0-1-2=SP0-3
       LDHX      TEMP                ;TEMP=SP0-1
       AIX       #1                  ;H;X=SP0
       STHX      MIRR_SP             ;H:X=SP0
;*
       LDA       0,X                 ;Store Register's Meanings In Stack
       STA       MIRR_CC             ;To MIRROR In RAM
       LDA       1,X
       STA       MIRR_A
       LDA       2,X
       STA       MIRR_X
       LDA       4,X
       STA       MIRR_PC+1
       LDA       3,X
       STA       MIRR_PC
       LDA       #{CMDLOOP/$100}     ;Change PC In Stack With CMDLOOP's PC
       STA       3,X                 ;To Return To Main Loop
       LDA       #{CMDLOOP%$100}
       STA       4,X
;*
       LDHX      #$00
BK1:   LDA       BKPMSG,X            ;****Output String BKPMSG
       CMP       #$04
       BEQ       BK2
       JSR       OUTCH
       AIX       #1
       BRA       BK1
BK2:   JSR       REGDSP              ;****'R' Interrupt Service Routine
SWIX:  LDA       #$00                ;****
       STA       BRKSCR              ;Disable BREAK Interrupt
       PULH
       RTI
BKPMSG:                              ;****
       FCB       CR,LF
       FCB       "BreakPoint Encountered,Register Values:"
       FCB       #04
DUMMY:
       RTI
;*
ISR_TIMB:                            ;****
       LDX       V_TIMB
       LDA       V_TIMB+1
       CMP       #$FF
       BNE       ISR_TIMB_X          ;If There Is aVectorStart
       CPX       #$FF
       BNE       ISR_TIMB_X
       LDX       MON_DUMMY_VEC       ;No VectorStart
       LDA       MON_DUMMY_VEC+1
ISR_TIMB_X:                          ;****
       JMP       ISRCOMM
ISR_ADC:                             ;****
       LDX       V_ADC
       LDA       V_ADC+1
       CMP       #$FF
       BNE       ISR_ADC_X
       CPX       #$FF
       BNE       ISR_ADC_X
       LDX       MON_DUMMY_VEC
       LDA       MON_DUMMY_VEC+1
ISR_ADC_X:                           ;****
       JMP       ISRCOMM
ISR_KEY:                             ;****
       LDX       V_KEY
       LDA       V_KEY+1
       CMP       #$FF
       BNE       ISR_KEY_X
       CPX       #$FF
       BNE       ISR_KEY_X
       LDX       MON_DUMMY_VEC
       LDA       MON_DUMMY_VEC+1
ISR_KEY_X:                           ;****
       JMP       ISRCOMM
ISR_SCI_TR:                          ;****
       LDX       V_SCI_TR
       LDA       V_SCI_TR+1
       CMP       #$FF
       BNE       ISR_SCI_TR_X
       CPX       #$FF
       BNE       ISR_SCI_TR_X
       LDX       MON_DUMMY_VEC
       LDA       MON_DUMMY_VEC+1
ISR_SCI_TR_X:                        ;****
       JMP       ISRCOMM
ISR_SCI_RX:                          ;****
       LDX       V_SCI_RX
       LDA       V_SCI_RX+1
       CMP       #$FF
       BNE       ISRCOMM
       CPX       #$FF
       BNE       ISRCOMM
       LDX       MON_DUMMY_VEC
       LDA       MON_DUMMY_VEC+1
       BRA       ISRCOMM
ISR_SCI_ER:                          ;****
       LDX       V_SCI_ER
       LDA       V_SCI_ER+1
       CMP       #$FF
       BNE       ISRCOMM
       CPX       #$FF
       BNE       ISRCOMM
       LDX       MON_DUMMY_VEC
       LDA       MON_DUMMY_VEC+1
       BRA       ISRCOMM
ISR_SCI_TR:                          ;****
       LDX       V_SPI_TR
       LDA       V_SPI_TR+1
       CMP       #$FF
       BNE       ISRCOMM
       CPX       #$FF
       BNE       ISRCOMM
       LDX       MON_DUMMY_VEC
       LDA       MON_DUMMY_VEC+1
       BRA       ISRCOMM
ISR_SPI_RX:                          ;****
       LDX       V_SPI_RX
       LDA       V_SPI_RX+1
       CMP       #$FF
       BNE       ISRCOMM
       CPX       #$FF
       BNE       ISRCOMM
       LDX       MON_DUMMY_VEC
       LDA       MON_DUMMY_VEC+1
       BRA       ISRCOMM
ISR_TIM2_OV:                         ;****
       LDX       V_TIM2_OV
       LDA       V_TIM2_OV+1
       CMP       #$FF
       BNE       ISRCOMM
       CPX       #$FF
       BNE       ISRCOMM
       LDX       MON_DUMMY_VEC
       LDA       MON_DUMMY_VEC+1
       BRA       ISRCOMM
ISR_TIM2_CH1:                        ;****
       LDX       V_TIM2_OV
       LDA       V_TIM2_OV+1
       CMP       #$FF
       BNE       ISRCOMM
       CPX       #$FF
       BNE       ISRCOMM
       LDX       MON_DUMMY_VEC
       LDA       MON_DUMMY_VEC+1
       BRA       ISRCOMM
ISRCOMM:                             ;****
       STX       INTJMP+1
       STA       INTJMP+2
       JMP       INTJMP
ISR_TIM2_CH0:                        ;****
       LDX       V_TIM2_CH0
       LDA       V_TIM2_CH0+1
       CMP       #$FF
       BNE       ISRCOMM
       CPX       #$FF
       BNE       ISRCOMM
       LDX       MON_DUMMY_VEC
       LDA       MON_DUMMY_VEC+1
       BRA       ISRCOMM
ISR_TIM1_OV:                         ;****
       LDA       FLAG
       CMP       #$11
       BNE       ITO_NORMAL
       LDA       T1SC
       BCLR      7_T1SC              ;Reset Interrupt FLAG
       DEC       TEMP
       LDA       TEMP
       BNE       ITO_DISP
       JMP       WAIT_FAIL
ITO_DISP:                            ;****Used To Delay
       DEC       TEMP+1
       BNE       ITO_X
       LDA       #$14
       STA       TEMP+1
       LDA       #$2E
       JSR       OUTCH               ;Output '.'
ITO_X: RTI                           ;****
ITO_NORMAL:                          ;****
       LDX       V_TIM1_OV
       LDA       V_TIM1_OV+1
       CMP       #$FF
       BNE       ISRCOMM
       CPX       #$FF
       BNE       ISRCOMM
       LDX       MON_DUMMY_VEC
       LDA       MON_DUMMY_VEC+1
       BRA       ISRCOMM
ISR_TIM1_CH1:                        ;****
       LDX       V_TIM1_CH1
       LDA       V_TIM1_CH1+1
       CMP       #$FF
       BNE       ISRCOMM
       CPX       #$FF
       BNE       ISRCOMM
       LDX       MON_DUMMY_VEC
       LDA       MON_DUMMY_VEC+1
       BRA       ISRCOMM
ISRC_TIM1_CH0:                       ;****
       LDX       V_TIM1_CH0
       LDA       V_TIM1_CH0+1
       CMP       #$FF
       BNE       ISRCOMM
       CPX       #$FF
       BNE       ISRCOMM
       LDX       MON_DUMMY_VEC
       LDA       MON_DUMMY_VEC+1
       BRA       ISRCOMM
ISR_PLL:                             ;****
       LDX       V_PLL
       LDA       V_PLL+1
       CMP       #$FF
       BNE       ISR_PLL_X
       CPX       #$FF
       BNE       ISR_PLL_X
       LDX       MON_DUMMY_VEC
       LDA       MON_DUMMY_VEC+1
ISR_IRQ:                             ;****
       LDX       V_IRQ
       LDA       V_IRQ+1
       CMP       #$FF
       BNE       ISR_IRQ_X
       CPX       #$FF
       BNE       ISR_IRQ_X
       LDX       MON_DUMMY_VEC
       LDA       MON_DUMMY_VEC+1
ISR_IRQ_X:                           ;****
       JMP       ISRCOMM
ISR_SWI:                             ;****
       LDA       BRKSCR
       AND       #%01000000          ;Check Interrupt's Reason:BRKP Or SWI?
       BEQ       NO_BREAK            ;The Reason Is SWI
       JMP       SWI2                ;The Reason Is BRKP
NO_BREAK:                            ;****
       LDA       GO_FLAG
       CMP       #$FF
       BNE       NO_GO_BREAK
       JMP       GO1                 ;GO_FLAG=$FF,GO1
NO_GO_BREACK:                        ;****
       LDX       V_SWI
       LDA       V_SWI+1
       JMP       ISRCOMM
;*
MON_DUMMY_VEC: DW DUMMY              ;****
       ORG       $EF80
       JMP       INCHE
       JMP       INCH
       JMP       IN2H
       JMP       IN2HNE
       JMP       OUTCH
       JMP       OUT2H
       JMP       CRLF
       JMP       USER_PROGRAM
       JMP       USER_MEMCHG
       JMP       CMDLOOP
       JMP       INIT
;*========================Include Files=====================*
       ORG       FLBPR
       DB        $C0
       ORG       VECTORSTART
       DW        ISR_TIMB            ;Time Base Vector
       DW        ISR_ADC             ;ADC Conversion Complete
       DW        ISR_KEY             ;Keyboard Vector
       DW        ISR_SCI_TR          ;SCI Transmit Vector
       DW        ISR_SCI_RX          ;SCI Receive Vector
       DW        ISR_SCI_ER          ;SCI Error Vector
       DW        ISR_SPI_TR          ;SPI Transmit Vector 
       DW        ISR_SPI_RX          ;SPI Receive Vector
       DW        ISR_TIM2_OV         ;TIM2 Overflow Vector
       DW        ISR_TIM2_CH1        ;TIM2 Channel 1 Vector
       DW        ISR_TIM2_CH0        ;TIM2 Channel 0 Vector
       DW        ISR_TIM1_OV         ;TIM1 Overflow Vector
       DW        ISR_TIM1_CH1        ;TIM1 Channel 1 Vector
       DW        ISR_TIM1_CH0        ;TIM1 Channel 0 Vector
       DW        ISR_PLL             ;PLL Vector
       DW        ISR_IRQ             ;IRQ1 Vector
       DW        ISR_SWI             ;SWI Vector
       DW        RESET_INIT          ;Reset Vector
       
       
       
       
       
       

       
       











       

       
       
        

       

       
       
       
       

         
       
        
       
       
       
              
       
        

       

     
        
         
        
        
            
      
        
        
        
          
        
        
             
   
        
        
        
        
        
        
        

         
        

              
        
        
        
        
        
                 
        
                        

        
        
        
        

        
        
        
        
             
             
        
    








             
    

⌨️ 快捷键说明

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