📄 asm.s43
字号:
;
*/
;-----------------------------------------------------------------------------
TA0_ISR ; RXTXData Buffer holds UART Data.
;-----------------------------------------------------------------------------
add.w #Bitime,&CCR0 ; Time to Next Bit
UART_TX bic.w #OUTMOD2,&CCTL0 ; TX Mark
rra.w RXTXData ; LSB is shifted to carry
jc TX_Test ; Jump --> bit = 1
TX_Space bis.w #OUTMOD2,&CCTL0 ; TX Space
TX_Test dec.w BitCnt ; All bits sent (or received)?
jnz TX_Next ; Next bit?
bic.w #CCIE,&CCTL0 ; All Bits TX/RX, Disable Int.
TX_Next reti ;
;
;-----------------------------------------------------------------------------
TAX_ISR; Common ISR - CCR1-4 and overflow
;-----------------------------------------------------------------------------
add.w &TAIV,PC ; Add Timer_A offset vector
reti ; CCR0 - no source
jmp TA1_ISR ; CCR1
jmp TA2_ISR ; CCR2
reti ; CCR3
;----------------------------------------------------------------------------- ;
TA1_ISR bit.w #CAP,&CCTL1 ;
jc RX_edge ; Jump -> Edge captured
;
RX_Bit dec.w IRBit ;
jz RX_Comp ; Test of end of packet
RX_Cont bit.w #SCCI,&CCTL1 ; Carry = Data bit in SCCI
rlc.w IRData ; Carry -> IRData
mov.w #CM1+CM0+CAP+CCIE+SCS,&CCTL1 ; CAP CCI1A,both edges, int
push.w &CCR1 ; Max time till next edge
add.w #Bit_50,0(SP) ;
pop.w &CCR2 ;
mov.w #CCIE,&CCTL2 ; Enable timeout interrupt
reti ;
;
RX_Comp clr.w &CCTL1 ; Disable CCR1
and.w #0FFFh,IRData ; Isolate 12-bit packet
mov.w #GIE,0(SP) ; Decode = Active in Mainloop
reti ;
;
RX_edge clr.w &CCTL2 ; Disable CCR2 timeout
mov.w #CCIE,&CCTL1 ; Compare mode w/ int.
add.w #Bit_75,&CCR1 ; Time to middle of data bit
reti ;
;----------------------------------------------------------------------------- ;
TA2_ISR clr.w &CCTL2 ; Disable CCR2 timeout
call #IR_Ready ; ERROR - restart RX sequence
reti ; Return from interrupt
;-----------------------------------------------------------------------------
;----------------------------------------------------------------------------------
PORT1_ISR
bic.b #00fh,&P1IFG
bic.b #00fh,&P1IE
bit.b #Esc,&P1IN
jz Key_delay
bit.b #Return,&P1IN
jz Key_delay
bit.b #Right,&P1IN
jz Key_delay
bit.b #Left,&P1IN
jz Key_delay
jmp Portreti
;-----------------------------------------------------------------------------
PORT2_ISR
bic.b #018h,&P2IFG
bic.b #018h,&P2IE
bit.b #Down,&P2IN
jz Key_delay
bit.b #Up,&P2IN
jz Key_delay
jmp Portreti
;-----------------------------------------------------------------------------
Portreti
bic.w #SCG1 + SCG0 + CPUOFF , 0(SP)
bis.b #SCG1+SCG0,SR
reti
;----------------------------------------------------------------------------------------
Key_delay ;按键延时判断
mov #40 , R15
LOOP9 dec R15
jnz LOOP9
jmp Key_sure
Key_sure ;按键确认
bit.b #Esc,&P1IN
jz Key_wait_Esc
bit.b #Return,&P1IN
jz Key_wait_Ret
bit.b #Right,&P1IN
jz Key_wait_Rig
bit.b #Left,&P1IN
jz Key_wait_Lef
bit.b #Down,&P2IN
jz Key_wait_Dow
bit.b #Up,&P2IN
jz Key_wait_Up
jmp Portreti
Key_wait_Esc bit.b #Esc,&P1IN ;按键按下后,等待按键松开
jnz Save_Esc
jmp Key_wait_Esc
Key_wait_Ret bit.b #Return,&P1IN ;按键按下后,等待按键松开
jnz Save_Ret
jmp Key_wait_Ret
Key_wait_Rig bit.b #Right,&P1IN ;按键按下后,等待按键松开
jnz Save_Rig
jmp Key_wait_Rig
Key_wait_Lef bit.b #Left,&P1IN ;按键按下后,等待按键松开
jnz Save_Lef
jmp Key_wait_Lef
Key_wait_Dow bit.b #Down,&P2IN ;按键按下后,等待按键松开
jnz Save_Dow
jmp Key_wait_Dow
Key_wait_Up bit.b #Up,&P2IN ;按键按下后,等待按键松开
jnz Save_Up
jmp Key_wait_Up
Save_Esc bis.b #LED,&P3OUT
jmp Portreti
Save_Ret bis.b #LED,&P3OUT
jmp Portreti
Save_Rig bis.b #LED,&P3OUT
jmp Portreti
Save_Lef bis.b #LED,&P3OUT
jmp Portreti
Save_Dow bis.b #LED,&P3OUT
jmp Portreti
Save_Up bis.b #LED,&P3OUT
jmp Portreti
;----------------------------------------------------------------------------------
;LED_Disp; LED0 (P1.0) set if IRData = Channel+ code (32)
;-----------------------------------------------------------------------------
; and.w #03Fh,IRData ; Isolate 6-bit comand code
;LED_off bic.b #01h,&P1OUT ; LED0 off
;LED0_tst cmp.w #Ch_up,IRData ; Test for Channel+ (32)
; jne LED_exit ;
; bis.b #01h,&P1OUT ; LED0 on
;LED_exit ret ; Return from subroutine
;
;-----------------------------------------------------------------------------
; Interrupt Vectors Used
;-----------------------------------------------------------------------------
ORG 0FFFEh ; MSP430 RESET Vector
DW RESET
ORG 0FFE4h
DW PORT1_ISR
ORG 0FFE6h
DW PORT2_ISR
ORG 0FFF2h ; Timer_A0 Vector
DW TA0_ISR ;
ORG 0FFF0h ; Timer_AX Vector
DW TAX_ISR ;
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -