📄 ledcont.asm
字号:
* LEDCont.asm
**********************************************************************
* Contains the controls for all the LEDs. *
* PTA[0] = RX *
* PTB[0] = LF *
* PTB[1] = LR *
* PTB[2] = RR *
* PTB[3] = RF *
**********************************************************************
BlinkLEDs: LDA PTB ;Flash the LEDs to indicate to the user
ORA #%00001111 ;that the module is on, and the Romeo2 is
STA PTB ;configured properly.
BSET 0,PTA
LDX #$FF
JSR Delay
LDA PTB
AND #%11110000
STA PTB
BCLR 0,PTA
RTS
TurnOnLEDs: LDA PTB ;Turn on all LEDs to indicate to the user
ORA #%00001111 ;that there's a problem with the module.
STA PTB ;Code is still running to try to recover,
BSET 0,PTA ;but if the LEDs stay on persistently then
RTS ;there's probably a bad connection to Romeo.
LED_Flicker: LDX #$10
L0: CLRA ;The Rx LED will flicker to indicate that
;something was received, but the checksum
BSET 0,PTA ;did not match so the data is not processed.
DBNZA *
BCLR 0,PTA
DBNZA *
DBNZX L0
LDA FAST_MODE
BEQ Flick_Done
BSET 0,PTA
Flick_Done: RTS
Blink_Rx: LDA FAST_MODE
BEQ Blink
BSET 0,PTA
BRA DoneBlink
Blink: LDX #$20 ;The Rx LED will blink once to indicate that
BSET 0,PTA ;good data was received.
JSR Delay
BCLR 0,PTA
DoneBlink: RTS
**********************************************************************
* ProcessData *
* Process the (already confirmed valid) data frame, and send tire *
* status, position and data to the user. *
* DATA + 7: ID1 *
* DATA + 6: ID2 *
* DATA + 5: ID3 *
* DATA + 4: ID4 *
* DATA + 3: PRESSURE *
* DATA + 2: TEMPERATURE *
* DATA + 1: STATUS (bit 7=LVIOUT, bit 6=LOWV, bit 4=FastTx) *
* DATA + 0: CHECKSUM *
* PTB[0] = LF *
* PTB[1] = LR *
* PTB[2] = RR *
* PTB[3] = RF *
* *
* Position is stored in the STATUS byte (DATA + 1) for the device *
* receiving the serial data. *
* STATUS[3] high -> LF *
* STATUS[2] high -> RF *
* STATUS[1] high -> LR *
* STATUS[0] high -> RR *
**********************************************************************
ProcessData: LDA DATA+1
BEQ FindPos
BSET 7,FAST_MODE ;Flag that this tire is in fast mode.
FindPos: LDA DATA+7 ;Check all tire ID bytes.
CMP LFID
BNE L1
LDA DATA+6
CMP LFID+1
BNE L1
LDA DATA+5
CMP LFID+2
BNE L1
LDA DATA+4
CMP LFID+3
BNE L1
LF_Match: CLR LFCNTL
CLR LFCNTH
BSET 3,DATA+1 ;Indicate which tire in STATUS
JSR Blink_Rx ;Blink the Rx LED.
BRCLR 7,FAST_MODE,LF
BSET 0,FAST_MODE ;Flag that the LF tire is in fast mode.
BRA LF1
LF: BCLR 0,FAST_MODE
LF1: LDA DATA+3 ;Check the pressure
CMP THRESHOLD
BHI LF_OK
BSET 0,PTB ;Pressure low: light LED.
JMP EXIT
LF_OK: BCLR 0,PTB ;Pressure okay: clear LED.
JMP EXIT
L1: LDA DATA+7 ;Check all tire ID bytes.
CMP RFID
BNE L2
LDA DATA+6
CMP RFID+1
BNE L2
LDA DATA+5
CMP RFID+2
BNE L2
LDA DATA+4
CMP RFID+3
BNE L2
RF_Match: CLR RFCNTL
CLR RFCNTH
BSET 2,DATA+1 ;Indicate which tire in STATUS
JSR Blink_Rx ;Blink the Rx LED.
BRCLR 7,FAST_MODE,RF
BSET 3,FAST_MODE
BRA RF1
RF: BCLR 3,FAST_MODE
RF1: LDA DATA+3
CMP THRESHOLD
BHI RF_OK
BSET 3,PTB
BRA EXIT
RF_OK: BCLR 3,PTB
BRA EXIT
L2: LDA DATA+7 ;Check all tire ID bytes.
CMP LRID
BNE L3
LDA DATA+6
CMP LRID+1
BNE L3
LDA DATA+5
CMP LRID+2
BNE L3
LDA DATA+4
CMP LRID+3
BNE L3
LR_Match: CLR LRCNTL
CLR LRCNTH
BSET 1,DATA+1 ;Indicate which tire in STATUS
JSR Blink_Rx ;Blink the Rx LED.
BRCLR 7,FAST_MODE,LR
BSET 1,FAST_MODE
BRA LR1
LR: BCLR 1,FAST_MODE
LR1: LDA DATA+3
CMP THRESHOLD
BHI LR_OK
BSET 1,PTB
BRA EXIT
LR_OK: BCLR 1,PTB
BRA EXIT
L3: LDA DATA+7 ;Check all tire ID bytes.
CMP RRID
BNE BadID
LDA DATA+6
CMP RRID+1
BNE BadID
LDA DATA+5
CMP RRID+2
BNE BadID
LDA DATA+4
CMP RRID+3
BNE BadID
RR_Match: CLR RRCNTL
CLR RRCNTH
BSET 0,DATA+1 ;Indicate which tire in STATUS
JSR Blink_Rx ;Blink the Rx LED.
BRCLR 7,FAST_MODE,RR
BSET 2,FAST_MODE
BRA RR1
RR: BCLR 2,FAST_MODE
RR1: LDA DATA+3
CMP THRESHOLD
BHI RR_OK
BSET 2,PTB
BRA EXIT
RR_OK BCLR 2,PTB
EXIT: BCLR 7,FAST_MODE
RTS
BadID: RSP
BCLR 7,FAST_MODE
JMP Loop ;If the ID is bad, then we can ignore
;the data.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -