📄 iic.asm
字号:
include "Iic.inc"
include "chip.inc"
include "Key.inc"
public mcu_iic_send, chk_iic_send, mcu_iic_recv
public delay_10us, delay_3us
extern delayX64us, delay_4us, lcd_wr_data
org 790
chk_iic_send: PROC
jbs rec_is, 0x7
ret
;decide current key is power_key
mov a, @POWER_KEY
sub a, ir_data_low
jbc status, z
jmp send_power_key
mov a, @0x01
mov iic_sendcom, a
mov a, ir_data_low
mov iic_senddata, a
call mcu_iic_send
clr rec_is ;清除接收成功标志
jmp end_chk_iic_send
send_power_key:
jbs pwr_on_off, 0x00
jmp power_on
jmp power_off
power_off:
jbc curr_play_state, 0x00
jmp clr_rec_is_flag
jbc usb_status, 0x00
jmp clr_rec_is_flag
mov a, @0x01
mov iic_sendcom, a
mov a, ir_data_low
mov iic_senddata, a
call mcu_iic_send
bs ctrl_port, dmp_pin
mov a, @0x00
mov pwr_on_off, a
;不允许检查密码
mov a, @0x00
mov en_password_chk, a
clr_rec_is_flag:
clr rec_is
jmp end_chk_iic_send
power_on:
bc ctrl_port, dmp_pin
mov a, @0x01
mov pwr_on_off, a
;不允许检查密码
mov a, @0x00
mov en_password_chk, a
clr rec_is
;为了LCD开电后初始化
mov a, @lcd_init_flag
mov rec_is, a
end_chk_iic_send:
ret
ENDP
delay_10us: PROC
mov a, @0x60
mov iic_counter, a
cycle_10us:
djz iic_counter
jmp cycle_10us
ret
ENDP
delay_3us: PROC
mov a, @0x60
mov iic_counter, a
cycle_3us:
djz iic_counter
jmp cycle_3us
ret
ENDP
wwj_delay_10us: PROC
mov a, @0x20
mov wwj_iic_counter, a
wwj_cycle_10us:
djz wwj_iic_counter
jmp wwj_cycle_10us
ret
ENDP
wwj_delay_3us: PROC
mov a, @0x08
mov wwj_iic_counter, a
wwj_cycle_3us:
djz wwj_iic_counter
jmp wwj_cycle_3us
ret
ENDP
mcu_iic_send: PROC
;send start condition
bs cs_port, IIC_CS
bc clk_port, IIC_CLK
call wwj_delay_3us
bs clk_port, iic_clk
call wwj_delay_10us
bc cs_port, IIC_CS
call wwj_delay_3us
;send send flag 0xff
mov a, @0x08
mov wwj_iic_val, a
send_send_flag:
bs data_port, IIC_DATA
call wwj_delay_3us
bc clk_port, IIC_CLK
call wwj_delay_3us
bs clk_port, IIC_CLK
call wwj_delay_10us
djz wwj_iic_val
jmp send_send_flag
iic_start_send:
;send iic command
mov a, @0x08
mov wwj_iic_val, a
send_iic_command:
jbs iic_sendcom, 0x07
jmp send_command_data0
jmp send_command_data1
send_iic_command_cycly:
call wwj_delay_3us
bc clk_port, IIC_CLK
call wwj_delay_3us
bs clk_port, IIC_CLK
call wwj_delay_10us
rlc iic_sendcom
djz wwj_iic_val
jmp send_iic_command
;send iic data
mov a, @0x08
mov wwj_iic_val, a
send_iic_data:
jbs iic_senddata, 0x07
jmp send_data_data0
jmp send_data_data1
send_iic_data_cycle:
call wwj_delay_3us
bc clk_port, iic_clk
call wwj_delay_3us
bs clk_port, iic_clk
call wwj_delay_10us
rlc iic_senddata
djz wwj_iic_val
jmp send_iic_data
bs clk_port, iic_clk
call wwj_delay_3us
bs data_port, IIC_DATA
call wwj_delay_3us
bs cs_port, IIC_CS
call wwj_delay_3us
jmp end_mcu_iic_send
send_command_data0:
bc data_port, iic_data
jmp send_iic_command_cycly
send_command_data1:
bs data_port, iic_data
jmp send_iic_command_cycly
send_data_data0:
bc data_port, iic_data
jmp send_iic_data_cycle
send_data_data1:
bs data_port, iic_data
jmp send_iic_data_cycle
end_mcu_iic_send:
ret
ENDP
mcu_iic_recv: PROC
;disi
;send start condition
clr iic_recvdata
bs cs_port, IIC_CS
call delay_3us
call delay_3us
bc clk_port, IIC_CLK
call delay_3us
call delay_3us
bs clk_port, iic_clk
call delay_10us
bc cs_port, IIC_CS
call delay_3us
call delay_3us
;send iic recv index
mov a, @0x08
mov iic_val, a
recv_iic_index:
jbs iic_recvindex, 0x07
jmp recv_index_data0
jmp recv_index_data1
recv_iic_index_cycly:
bc clk_port, IIC_CLK
call delay_3us
call delay_3us
bs clk_port, iic_clk
call delay_10us
rlc iic_recvindex
djz iic_val
jmp recv_iic_index
;set p5_2 to input
call delay_3us
call delay_3us
ior ioc5
or a, @0x04
iow IOC5
call delay_3us
call delay_3us
;chk recv enable
bc clk_port, iic_clk
call delay_3us
call delay_3us
bs clk_port, IIC_CLK
call delay_10us
jbs data_port, iic_data
jmp iic_recv_end_proc
;chk recv enable
bc clk_port, iic_clk
call delay_3us
call delay_3us
bs clk_port, IIC_CLK
call delay_10us
jbc data_port, iic_data
jmp iic_recv_end_proc
;recv iic data
mov a, @0x08
mov iic_val, a
recv_iic_data:
rlc iic_recvdata
bc clk_port, iic_clk
call delay_3us
call delay_3us
bs clk_port, IIC_CLK
call delay_10us
jbs data_port, iic_data
jmp recv_data_data0
jmp recv_data_data1
recv_iic_data_cycle:
djz iic_val
jmp recv_iic_data
bc clk_port, IIC_CLK
call delay_10us
bs clk_port, IIC_CLK
call delay_10us
mov a, @0x01
mov is_iic_recved, a
iic_recv_end_proc:
;set p5_2 output
call delay_3us
call delay_3us
ior ioc5
and a, @0xfb
iow IOC5
call delay_3us
call delay_3us
bs clk_port, iic_clk
call delay_3us
call delay_3us
bs data_port, IIC_DATA
call delay_3us
call delay_3us
bs cs_port, IIC_CS
call delay_3us
call delay_3us
jmp end_mcu_iic_recv
recv_index_data0:
bc data_port, iic_data
jmp recv_iic_index_cycly
recv_index_data1:
bs data_port, iic_data
jmp recv_iic_index_cycly
recv_data_data0:
mov a, @0xfe
and iic_recvdata, a
jmp recv_iic_data_cycle
recv_data_data1:
mov a, @0x01
or iic_recvdata, a
jmp recv_iic_data_cycle
end_mcu_iic_recv:
;eni
ret
ENDP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -