📄 ir_konka.asm
字号:
.ifnz IR_KONKA
;;---------------------------------------------------------------------------
SRAM_PG1: .section ;;PAGE1 start
;;---------------------------------------------------------------------------
lda IrStateFlag
cmp #STATE_IDLE
beq F_idle_state
cmp #STATE_3MS_LOW
beq F_3ms_low_state
cmp #STATE_3MS_HIGH
beq F_3ms_high_state
cmp #STATE_0_5MS_LOW
beq F_0_5ms_low_state
cmp #STATE_BIT01
beq F_bit_is_0_or_1_state
;;---------------------------------------------------------------------------
F_idle_state:
lda IR_PORT
and #IR_IN
bne Judge_repeat_press_key
stz IO_low_counter
stz Idle_counter
lda #STATE_3MS_LOW
sta IrStateFlag
jmp Exit_IR_Interrupt
Judge_repeat_press_key:
inc Idle_counter
lda Idle_counter
cmp #REPEAT_LEN
bcc Exit_idle_state
stz First_send_data_flag
stz Idle_counter
stz Repeat_counter
Exit_idle_state:
jmp Exit_IR_Interrupt
;;---------------------------------------------------------------------------
F_3ms_low_state:
inc IO_low_counter
lda IR_PORT
and #IR_IN
beq Pre_Exit_IR_Interrupt
lda IO_low_counter
cmp #MASK_LEN
bcc Pre_F_Error_Handle
stz IO_high_counter
lda #STATE_3MS_HIGH
sta IrStateFlag
jmp Exit_IR_Interrupt
;;---------------------------------------------------------------------------
F_3ms_high_state:
inc IO_high_counter
lda IR_PORT
and #IR_IN
bne Pre_Exit_IR_Interrupt
lda IO_high_counter
cmp #SPACE_LEN
bcc Pre_F_Error_Handle
stz IO_low_counter
lda #STATE_0_5MS_LOW
sta IrStateFlag
jmp Exit_IR_Interrupt
;;---------------------------------------------------------------------------
F_0_5ms_low_state:
inc IO_low_counter
lda IR_PORT
and #IR_IN
beq Pre_Exit_IR_Interrupt
lda IO_low_counter
cmp #SYNC_LEN
bcc Pre_F_Error_Handle
stz IO_high_counter
lda #STATE_BIT01
sta IrStateFlag
jmp Exit_IR_Interrupt
;;---------------------------------------------------------------------------
Pre_Exit_IR_Interrupt:
jmp Exit_IR_Interrupt
Pre_F_Error_Handle:
jmp F_Error_Handle
;;---------------------------------------------------------------------------
F_bit_is_0_or_1_state:
inc IO_high_counter
lda IR_PORT
and #IR_IN
bne Exit_IR_Interrupt
lda IO_high_counter
cmp #BIT1_LEN
bcs Bit_is_1
cmp #BIT0_LEN
bcs Bit_is_0
bra F_Error_Handle
Bit_is_1:
sec
bra Receive_data
Bit_is_0:
clc
Receive_data:
rol Data_IR_Code
rol Data_Customer_Code
inc Data_bits_counter
lda Data_bits_counter
cmp #16
bne Enter_0_5ms_low_state
stz Data_bits_counter
lda Data_IR_Code
eor Prev_ir_data
cmp #0
beq Process_next_receive
stz First_send_data_flag
stz Repeat_counter
Process_next_receive:
lda First_send_data_flag
cmp #1
bne Send_Data_To_Risc
inc Repeat_counter
lda IOP_DATA5_H
and #%00001111
eor Repeat_counter
cmp #0
bne Restart
stz Repeat_counter
lda IOP_DATA5_H
ora #%11000000
sta IOP_DATA5_H
Send_Data_To_Risc:
lda Data_IR_Code
sta IOP_DATA5_L
lda Data_IR_Code
sta Prev_ir_data
lda Data_Customer_Code
sta IOP_DATA6_L
lda IOP_DATA5_H
ora #%10000000
sta IOP_DATA5_H
lda #1
sta First_send_data_flag
bra Restart
Enter_0_5ms_low_state:
stz IO_low_counter
lda #STATE_0_5MS_LOW
sta IrStateFlag
jmp Exit_IR_Interrupt
;;---------------------------------------------------------------------------
F_Error_Handle:
Restart:
stz Data_bits_counter
stz IO_high_counter
stz IO_low_counter
stz Data_Customer_Code
stz Data_IR_Code
stz Idle_counter
lda #STATE_IDLE
sta IrStateFlag
;;---------------------------------------------------------------------------
Exit_IR_Interrupt:
.endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -