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

📄 tbm_isr.asm

📁 胎压监测系统接收端控制器motorolar开发源代码
💻 ASM
字号:
*TBM_ISR.asm

**********************************************************************
* This file contains the timebase module interrupt service routine.  *
* The TBM is disabled (and its counter reset) during critical        *
* operations, but other than that it generates periodic interrupts   *
* every 32768 clock cycles (6.67 ms).                                *
* PTA[0] = RX                                                        *
* PTB[0] = LF                                                        *
* PTB[1] = LR                                                        *
* PTB[2] = RR                                                        *
* PTB[3] = RF                                                        *
**********************************************************************
TBM_ISR:        PSHH                                    ;HR modified by SCI_rec, need to save.
Check_LF:       LDA     LFCNTH
                CMP     #$FF                            ;Check if LF tire is overdue (7.5 minutes)
                BNE     Inc_LF                          ;If not, increment the counter.

Toggle_LF:      LDA     LFCNTL                          ;This makes the LED toggle
                INCA                                    ;every 1/4 second if the tire is overdue
                STA     LFCNTL                          ;for a transmission.
                CMP     #!18
                BNE     Check_LR

                CLR     LFCNTL
                LDA     PTB                             ;Toggle the LF tire LED.
                EOR     #%00000001
                STA     PTB
                BRA     Check_LR

Inc_LF:         INC     LFCNTL                          ;Increment the LF tire counter (2 bytes).
                BNE     Check_LR
                LDA     LFCNTH
                INCA
                STA     LFCNTH

Check_LR:       LDA     LRCNTH
                CMP     #$FF                            ;Check if LR tire is overdue.
                BNE     Inc_LR

Toggle_LR:      LDA     LRCNTL                          ;This makes the LED toggle
                INCA                                    ;every 1/4 second.
                STA     LRCNTL
                CMP     #!18
                BNE     Check_RR

                CLR     LRCNTL
                LDA     PTB                             ;Toggle the LR tire LED.
                EOR     #%00000010
                STA     PTB
                BRA     Check_RR

Inc_LR:         INC     LRCNTL                          ;Increment the LR tire counter.
                BNE     Check_RR
                LDA     LRCNTH
                INCA
                STA     LRCNTH

Check_RR:       LDA     RRCNTH
                CMP     #$FF                            ;Check if RR tire is overdue.
                BNE     Inc_RR

Toggle_RR:      LDA     RRCNTL                          ;This makes the LED toggle
                INCA                                    ;every 1/4 second.
                STA     RRCNTL
                CMP     #!18
                BNE     Check_RF

                CLR     RRCNTL
                LDA     PTB                             ;Toggle the RR tire LED.
                EOR     #%00000100
                STA     PTB
                BRA     Check_RF

Inc_RR:         INC     RRCNTL                          ;Increment the RR tire counter.
                BNE     Check_RF
                LDA     RRCNTH
                INCA
                STA     RRCNTH

Check_RF:       LDA     RFCNTH
                CMP     #$FF                            ;Check if RF tire is overdue.
                BNE     Inc_RF

Toggle_RF:      LDA     RFCNTL                          ;This makes the LED toggle
                INCA                                    ;every 1/4 second.
                STA     RFCNTL
                CMP     #!18
                BNE     Check_SCI

                CLR     RFCNTL
                LDA     PTB                             ;Toggle the RF tire LED.
                EOR     #%00001000
                STA     PTB
                BRA     Check_SCI

Inc_RF:         INC     RFCNTL                          ;Increment the RF tire counter.
                BNE     Check_SCI
                LDA     RFCNTH
                INCA
                STA     RFCNTH

Check_SCI:      JSR     SCI_Rec                         ;Look to see if new threshold value received.
                JSR     ModeSwitch                      ;See if the user wants to switch btwn
                                                        ;driving mode & parking mode.

                BSET    3,TBCR                          ;Acknowledge interrupt.
                PULH
                RTI

**********************************************************************
* ModeSwitch                                                         *
* Looks at the user switch, which is used to change between driving  *
* mode and parking mode.  Driving mode is FSK at 9600bps, and parking*
* mode is ASK at 1200bps.                                            *
* The switch is connected to the /IRQ pin, however interrupts are    *
* not used.  See below.                                              *
* A keyboard debounce routine is also used.                          *
**********************************************************************
ModeSwitch:     BIH     IRQ_High                        ;Look at the user switch.
                LDA     SWITCH                          ;SWITCH is the debounce register.
                BEQ     KB_End                          ;If SWITCH=$00, user wants ASK.
                DECA                                    ;IRQ low, but SWITCH !=$00 -> debounce needed.
                STA     SWITCH
                BRA     ModeSwitch                      ;Continue debounce.

IRQ_High:       LDA     SWITCH                          ;SWITCH is the debounce register.
                CMP     #$FF                            ;If SWITCH = $FF, user wants FSK.
                BEQ     KB_End                          ;
                INCA                                    ;IRQ high, but SWITCH !=$FF -> debounce needed.
                STA     SWITCH
                BRA     ModeSwitch                      ;Continue debounce.

KB_End:         LDA     SWITCH
                CMP     LAST_SWITCH
                BEQ     Switch_Done

                CLR     LFCNTH
                CLR     LFCNTL
                CLR     LRCNTH
                CLR     LRCNTL
                CLR     RRCNTH
                CLR     RRCNTL
                CLR     RFCNTH
                CLR     RFCNTL

                TSTA                                    ;Set the CCR by the value in SWITCH.
                BEQ     Config_Park                     ;If SWITCH=$00, configure parking mode.

                                                        ;Otherwise, configure driving mode.
Config_Drive:   MOV     #%01110111,Write_SPI            ;434MHz, FSK, SOE=Yes, SR=7, DME=Yes, HE=Yes.
                MOV     #%10111000,Write_SPI+1          ;ID Byte=$B8
                MOV     #%11001000,Write_SPI+2          ;9600bps, MG=0, MS=0, PG=1.
                JSR     RomeoConfig
                JSR     MCU_Slave
                JSR     BlinkLEDs                      ;Indicate to user that config went okay.
                MOV     SWITCH,LAST_SWITCH
                BRA     Switch_Done

Config_Park:    MOV     #%01010111,WRITE_SPI            ;434MHz, ASK, SOE=Y, SR=7, DME=Y, HE=Y.
                MOV     #%10111000,WRITE_SPI+1          ;ID Byte=$B8.
                MOV     #%10001000,WRITE_SPI+2          ;4000bps, MG=0, MS=0, PG=1.
                JSR     RomeoConfig
                JSR     MCU_Slave
                JSR     BlinkLEDs                       ;Indicate to user that config went okay.
                MOV     SWITCH,LAST_SWITCH

Switch_Done:    RTS

⌨️ 快捷键说明

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