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

📄 ir_m3004.asm

📁 .ifnz I2C_SUPPORT ************************************************************** Function : fPro
💻 ASM
字号:
.ifnz IR_M3004
;;--------------------------------------------------------------
SRAM_PG1:		.section				;;PAGE1 start
;;--------------------------------------------------------------
        lda     IrStateFlag
        cmp     #IR_IDLE_STATE
        beq     M_idle_state
        cmp     #IR_HIGH_STATE
        beq     M_high_state
        cmp     #IR_LOW_STATE
        beq     Pre_M_low_state
        bra     M_idle_state
Pre_M_low_state:
        jmp     M_low_state 
;;===========================================================================        
M_idle_state:
        lda     IR_PORT
        and     #IR_IN
        beq     Idle_low          
        lda     First_pulse_flag                  
        cmp     #1
        bne     pre_M_error_handle          
        stz     Idle_counter              ;;clear Idle_counter
        stz     First_pulse_flag          ;;clear First_pulse_flag
        lda     #IR_HIGH_STATE
        sta     IrStateFlag
        jmp     Exit_IR_interrupt     
Idle_low:                  
        inc     Idle_counter       
        lda     Idle_counter     
        cmp     #BIT_1_TOP
        bcc     Exit_idle_state                 
        stz     Idle_counter 
        lda     #1
        sta     First_pulse_flag
Exit_idle_state:
        lda     #IR_IDLE_STATE
        sta     IrStateFlag
        jmp     Exit_IR_interrupt
pre_M_error_handle:
        jmp     M_error_handle      
;;===========================================================================
M_high_state:    
        lda     IR_PORT
        and     #IR_IN
        bne     Exit_high_state       
        lda     Level_high_flag
        cmp     #1
        bne     Process_next_pulse      ;;fisrt pulse 
        stz     Level_high_flag         ;;clear Level_high_flag
        lda     Bit01_counter       
        cmp     #BIT_1_TOP         ;;max length
        bcs     M_error_handle
        cmp     #BIT_1_BOTTOM
        bcs     Bit_is_1
        cmp     #BIT_0_BOTTOM
        bcs     Bit_is_0
        jmp     M_error_handle
Bit_is_1:
        sec       
        bra     Receive_bit_end
Bit_is_0:      
        clc  
Receive_bit_end:    
        rol     Last_8bit_data    
        rol     First_5bit_data    
        inc     Data_bit_counter    
        lda     Data_bit_counter
        cmp     #13
        bne     Process_next_pulse   
        stz     Data_bit_counter 
        jmp     ProcessIRData           ;;exit and receive data
Process_next_pulse:    
        stz     Bit01_counter           ;;clear Bit01_counter  
        lda     #IR_LOW_STATE
        sta     IrStateFlag
        jmp     Exit_IR_interrupt
Exit_high_state:
        lda     Level_high_flag
        cmp     #1
        bne     No_increment_counter
        inc     Bit01_counter        
No_increment_counter:        
        lda     #IR_HIGH_STATE
        sta     IrStateFlag
        jmp     Exit_IR_interrupt
;;===========================================================================
M_low_state:
        lda     IR_PORT
        and     #IR_IN
        beq     Exit_low_state 
        lda     #1
        sta     Level_high_flag     
        lda     #IR_HIGH_STATE
        sta     IrStateFlag
        jmp     Exit_IR_interrupt
Exit_low_state:        
        inc     Bit01_counter
        lda     #IR_LOW_STATE
        sta     IrStateFlag
        jmp     Exit_IR_interrupt  
M_error_handle:
        stz     Idle_counter
        stz     Bit01_counter
        stz     Data_bit_counter       
        lda     #IR_IDLE_STATE
        sta     IrStateFlag
        jmp     Exit_IR_interrupt
ProcessIRData: 
        lda     First_5bit_data
        and     #%00010111
        eor     #%00010101
        bne     M_error_handle
        ;;lda     Last_8bit_data
        ;;and     #%00000011
        ;;eor     #%00000000      
        ;;bne     M_error_handle  
        lda     Prev_first5bit
        cmp     First_5bit_data
        bne     SendIRdataToRISC 
        lda     Prev_last8bit
        cmp     Last_8bit_data
        bne     SendIRdataToRISC       
        inc     DataRepeatCounter
        lda     IOP_DATA5_H
        and     #$0f
        cmp     DataRepeatCounter       
        bne     ClearRepeatCounter
        stz     DataRepeatCounter
        lda     IOP_DATA5_H
        ora     #%11000000
        sta     IOP_DATA5_H         
        bra     Exit_receive_data        
ClearRepeatCounter:         
        lda     IOP_DATA5_H
        and     #%10111111
        sta     IOP_DATA5_H    
        bra     Exit_receive_data  
SendIRdataToRISC:   
        lda     Last_8bit_data
        sta     Prev_last8bit     
        lda     First_5bit_data
        sta     Prev_first5bit  
        lda     Last_8bit_data
        sta     IOP_DATA5_L
        lda     First_5bit_data
        and     #%00000111
        sta     IOP_DATA6_L   
        lda     IOP_DATA5_H
        and     #$80
        bne     Exit_receive_data
        lda     IOP_DATA5_H
        ora     #%10000000
        sta     IOP_DATA5_H  
Exit_receive_data:        
        stz     First_5bit_data
        stz     Last_8bit_data    
        lda     #IR_IDLE_STATE
        sta     IrStateFlag
Exit_IR_interrupt:
;;===========================================================================
.endif

⌨️ 快捷键说明

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