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

📄 asm.s43

📁 该程序是基于iar平台用msp430f123设计的红外线接受(RC,40khz),同时带有按键和指示灯。
💻 S43
📖 第 1 页 / 共 2 页
字号:
                                            ;
*/
;----------------------------------------------------------------------------- 
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 + -