📄 twi.c
字号:
#include <avr/io.h>
#include <util/delay.h>
#include "TWI.h"
uchar fo;
//*************************************
void i2c_start(){ //其始信号
SET_SCL;
SET_SDA;
_delay_us(6);
CLR_SDA;
_delay_us(6);
CLR_SCL; //当SCL为高电位时SDA上的数据无效,当SCL为低电位SDA有效
}
//***************************************
void i2c_stop(){ //停止信号
CLR_SDA;
SET_SCL;
_delay_us(6);
SET_SDA;
_delay_us(6);
CLR_SCL;
}
//****************************************
void i2c_ack(){ //答应信号
CLR_SDA;
SET_SCL;
_delay_us(6);
CLR_SCL;
SET_SDA;
}
//****************************************
void i2c_nack(){ //非答应信号
SET_SDA;
SET_SCL;
_delay_us(6);
CLR_SCL;
CLR_SDA;
}
//****************************************
write_byte(uchar c){ //写一字节
uchar i;
for(i=0;i<8;i++){
if((c<<i)&0x80)SET_SDA;
else CLR_SDA;
SET_SCL;
_delay_us(6);
CLR_SCL;
}
SET_SDA;
SET_SCL;
_delay_us(6);
if (PINC&(1<<PC4))fo=0;
else fo=1;
CLR_SCL;
}
//**************************************
/*uchar read_byte(){ //读一字节
uchar ii;
uchar r=0;
SET_SDA;
for(ii=0;ii<8;ii++){
r=r<<1;
SET_SCL;
_delay_us(6);
if (PINC&(1<<PC4))r++;
CLR_SCL;
}
return r;
}*/
//****************************************
/*uchar write_nbyte(uchar slave,uchar addr,uchar *ss,uchar num){ //写N字节
uchar iii;
i2c_start();
write_byte(slave);
if(fo==0)return 0;
write_byte(addr);
if(fo==0)return 0;
for(iii=0;iii<num;iii++){
write_byte(*ss);
if(fo==0)return 0;
ss++;
}
i2c_stop();
return(1);
}*/
//****************************************
/*uchar read_nbyte(uchar slave,uchar addr,uchar *s,uchar num){ //读N字节
uchar is;
i2c_start();
write_byte(slave); //写操作
if(fo==0)return 0;
write_byte(addr);
if(fo==0)return 0;
i2c_start();
write_byte(slave+1);//读操作
if(fo==0)return 0;
for(is=0;is<num;is++){
*s=read_byte();
i2c_ack();
s++;
}
*s=read_byte();
i2c_nack();
i2c_stop();
return(1);
}*/
//***************************************************
uchar write_nbyte1(uchar slave,uchar dat){ //写1字节
i2c_start();
write_byte(slave);
if(fo==0)return 0;
write_byte(dat);
if(fo==0)return 0;
i2c_stop();
return(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -