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

📄 ir_tdp101.asm

📁 .ifnz I2C_SUPPORT ************************************************************** Function : fPro
💻 ASM
字号:
.ifnz IR_TDP101
;;---------------------------------------------------------------------------
SRAM_PG1:       .section        ;;PAGE1 start
;;--------------------------------------------------------------------------- 
        lda     IrStateFlag
        cmp     #STATE_IDLE
        beq     F_idle_state
        cmp     #STATE_PRE_CODE_1
        beq     F_pre_code_1
        cmp     #STATE_PRE_CODE_2
        beq     F_pre_code_2
        cmp     #STATE_PRE_CODE_3
        beq     F_pre_code_3
        cmp     #STATE_PRE_CODE_4
        beq     Pre_F_pre_code_4         
        cmp     #STATE_BIT_LOW
        beq     Pre_F_bit_low
        cmp     #STATE_BIT_HIGH
        beq     Pre_F_bit_high       
        bra		F_idle_state
;-----------------------------------------------------------------------------
Pre_F_pre_code_4:
		jmp		F_pre_code_4
Pre_F_bit_low:
		jmp		F_bit_low	
Pre_F_bit_high:
		jmp		F_bit_high	
;-----------------------------------------------------------------------------
F_idle_state:
		lda     IR_PORT
        and     #IR_IN
        bne     Exit_idle_state
        stz		IO_low_counter
        lda     #STATE_PRE_CODE_1
        sta     IrStateFlag
Exit_idle_state:         
        jmp     F_Exit_IR_Interrupt   
;-----------------------------------------------------------------------------
F_pre_code_1:
		jsr		F_Check_low_irport
        beq     Exit_pre_code_1_state
        lda		Separate_flag
        cmp		#1
        bne		Normal_pro_pre_code_1
        inc		Separate_counter
        lda		IO_low_counter
        cmp		#LEN_PRE_CODE_1
        bcc		Pre_1_F_Error_Handle
        jsr		F_Enter_PRE_CODE_4
        jmp     F_Exit_IR_Interrupt 
Normal_pro_pre_code_1:
        lda		IO_low_counter
        cmp		#LEN_PRE_CODE_1
        bcc		Pre_1_F_Error_Handle
        stz		IO_high_counter
        lda     #STATE_PRE_CODE_2
        sta     IrStateFlag
Exit_pre_code_1_state:        
        jmp     F_Exit_IR_Interrupt 
;-----------------------------------------------------------------------------
F_pre_code_2:
		jsr		F_Check_high_irport
        bne     Exit_pre_code_2_state
        lda		IO_high_counter
        cmp		#LEN_PRE_CODE_2
        bcc		Pre_1_F_Error_Handle
        stz		IO_low_counter
        lda     #STATE_PRE_CODE_3
        sta     IrStateFlag
Exit_pre_code_2_state:           
        jmp		F_Exit_IR_Interrupt          
;-----------------------------------------------------------------------------
Pre_1_F_Error_Handle:
		jmp		F_Error_Handle		
;-----------------------------------------------------------------------------
F_pre_code_3:
		jsr		F_Check_low_irport
        beq     Exit_pre_code_3_state
        lda		IO_low_counter
        cmp		#LEN_PRE_CODE_3
        bcc		Pre_1_F_Error_Handle
        jsr		F_Enter_PRE_CODE_4
Exit_pre_code_3_state:        
        jmp     F_Exit_IR_Interrupt 
;-----------------------------------------------------------------------------
F_pre_code_4:
		jsr		F_Check_high_irport
        bne     Exit_pre_code_4_state
        lda		Separate_flag
        cmp		#1
        bne		Normal_pro_pre_code_4
        inc		Separate_counter
        lda		IO_high_counter
        cmp		#LEN_PRE_CODE_4
        bcc		Pre_F_Error_Handle
        lda     Separate_counter
        cmp		#4
        bne		Con_In_Separate
        stz		Separate_counter
        stz		Separate_flag
        stz		IO_low_counter  			
        lda     #STATE_BIT_LOW
        sta     IrStateFlag	
        jmp		F_Exit_IR_Interrupt   		
Con_In_Separate:        
        stz		IO_low_counter  			
        lda     #STATE_PRE_CODE_1
        sta     IrStateFlag	
        jmp		F_Exit_IR_Interrupt   
Normal_pro_pre_code_4:        
        lda		IO_high_counter
        cmp		#LEN_PRE_CODE_4
        bcs		Enter_low_sync
        cmp		#LEN_REPEAT
        bcs     Enter_repeat
        jmp     Pre_F_Error_Handle
Enter_repeat:
		inc		Repeat_counter
		lda     IOP_DATA5_H
        and     #%00001111
        eor     Repeat_counter 
        cmp     #0   
        bne     Pre_F_Restart
        stz     Repeat_counter   
        lda     IOP_DATA5_H
        ora     #%01000000
        sta     IOP_DATA5_H   
        jmp		Send_code_and_data          
Enter_low_sync:
        stz		IO_low_counter     
        lda     #STATE_BIT_LOW
        sta     IrStateFlag
Exit_pre_code_4_state:             
        jmp		F_Exit_IR_Interrupt   
;-----------------------------------------------------------------------------
Pre_F_Restart:
		jmp		F_Restart
;-----------------------------------------------------------------------------
F_bit_low:
		jsr		F_Check_low_irport
        beq     Exit_low_sync_state
        lda		IO_low_counter
        cmp		#LEN_BIT_LOW
        bcc		Pre_F_Error_Handle
        stz		IO_high_counter
        lda     #STATE_BIT_HIGH
        sta     IrStateFlag
Exit_low_sync_state:        
        jmp     F_Exit_IR_Interrupt
;-----------------------------------------------------------------------------
Pre_F_Error_Handle:
		jmp		F_Error_Handle
;-----------------------------------------------------------------------------
F_bit_high:
		jsr		F_Check_high_irport
        bne     Exit_bit_high_state
        lda		IO_high_counter
        cmp		#LEN_BIT_IS_1
        bcs		Bit_is_1
        cmp		#LEN_BIT_IS_0
        bcs     Bit_is_0
        jmp     F_Error_Handle
Bit_is_1:
		sec
        bra		Make_data          
Bit_is_0:
        clc    
Make_data:
		rol		IR_data
        rol		IR_data_reverse
        rol		Custom_code
        rol		Custom_code_reverse
        
        inc		Data_bit_counter
        lda     Data_bit_counter
        cmp     #32
        beq     Send_Data_To_RISC
        cmp     #16
        beq		Enter_separate_state
        stz		IO_low_counter   
        lda     #STATE_BIT_LOW
        sta     IrStateFlag
        jmp		F_Exit_IR_Interrupt  
Enter_separate_state:     
		lda		#1
		sta		Separate_flag
		stz		IO_low_counter  			
        lda     #STATE_PRE_CODE_1
        sta     IrStateFlag 
Exit_bit_high_state:           
        jmp     F_Exit_IR_Interrupt 
Send_Data_To_RISC:		
		stz     Repeat_counter  
 		lda     Custom_code
 		eor		Custom_code_reverse
 		cmp     #$ff
 		beq		Check_ir_data
 		jmp		F_Error_Handle
Check_ir_data:
		lda     IR_data
		eor     IR_data_reverse
		cmp     #$ff
		beq     Send_code_and_data 	
		jmp		F_Error_Handle	
Send_code_and_data: 		
        lda     IR_data
        sta     IOP_DATA5_L 
        lda     Custom_code
        sta     IOP_DATA6_L
        lda     IOP_DATA5_H
        ora     #%10000000
        sta     IOP_DATA5_H   
        jmp		F_Restart 
;-----------------------------------------------------------------------------
F_Check_low_irport:
		inc	    IO_low_counter
		lda     IR_PORT
        and     #IR_IN
        rts
;-----------------------------------------------------------------------------
F_Check_high_irport:
		inc	    IO_high_counter
		lda     IR_PORT
        and     #IR_IN
        rts        
;-----------------------------------------------------------------------------
F_Enter_PRE_CODE_4:
		stz		IO_high_counter
        lda     #STATE_PRE_CODE_4
        sta     IrStateFlag
        rts
;-----------------------------------------------------------------------------
F_Error_Handle:	
		stz		Data_bit_counter
        stz		Repeat_counter		
        stz		Separate_flag			
        stz		Separate_counter
F_Restart:
		lda     #STATE_IDLE
        sta     IrStateFlag
		stz     IO_high_counter       
		stz		IO_low_counter  			
;-----------------------------------------------------------------------------  
F_Exit_IR_Interrupt:
.endif

⌨️ 快捷键说明

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