📄 avr-i2c.txt
字号:
//I2C通讯子程序
//初始化
I2C_init:
ldi Temp,$ff
out ddrb,Temp
out portb,Temp
ret
//发送数据
I2C_communication:
rcall I2C_start
ldi Temp1,$60
rcall I2C_send
mov Temp1,Senddata
rcall I2C_send
rcall I2C_stop
ret
//发送起始位
I2C_start:
sbi SDA,1
nop
;nop
sbi SCL,0
ldi I2CTime,TimeCoin
rcall delay_us
cbi SDA,1
ldi I2CTime,TimeCoin
rcall delay_us
cbi SCL,0
ldi I2CTime,TimeCoin
rcall delay_us
ret
//I2C发送结束信号
I2C_stop:
ldi I2CTime,TimeCoin2
rcall delay_us
cbi SDA,1
nop
;nop
sbi SCL,0
ldi I2CTime,TimeCoin
rcall delay_us
sbi SDA,1
ldi I2CTime,TimeCoin
rcall delay_us
ret
//发送一个数据 rol Temp
I2C_send:
ldi Time1,$08
I2C_send_loop:
mov Temp,Temp1
andi Temp,0x80
brne Send_one
cbi SDA,1
nop
;nop
sbi SCL,0
ldi I2CTime,TimeCoin
rcall delay_us
cbi SCL,0
ldi I2CTime,TimeCoin2
rcall delay_us
rjmp Check_loop
Send_one:
sbi SDA,1
nop
;nop
sbi SCL,0
ldi I2CTime,TimeCoin
rcall delay_us
cbi SCL,0
ldi I2CTime,TimeCoin2
rcall delay_us
Check_loop:
rol Temp1
dec Time1
brne I2C_send_loop
ldi I2CTime,TimeCoin3
rcall delay_us
;Check_ACK:
sbi SDA,1
nop
;nop
sbi SCL,0
ldi I2CTime,TimeCoin
rcall delay_us
cbi SCL,0
ldi I2CTime,TimeCoin2
rcall delay_us
ret
delay_us:
dec I2CTime
brne delay_us
ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -