新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > I2C总线之(三)---以C语言理解IIC

I2C总线之(三)---以C语言理解IIC

作者: 时间:2016-12-16 来源:网络 收藏
void init()//总线初始化 将总线都拉高一释放总线 发送启动信号前,要先初始化总线。即总有检测到总线空闲才开始发送启动信号 { sda=1; delay(); scl=1; delay(); } //*************************************************************************** void write_byte(uchar date) //写一个字节 { uchar i,temp; temp=date; for(i=0;i<8;i++) { temp=temp<<1; scl=0;//拉低SCL,因为只有在时钟信号为低电平期间按数据线上的高低电平状态才允许变化;并在此时和上一个循环的scl=1一起形成一个上升沿 delay(); sda=CY; delay(); scl=1;//拉高SCL,此时SDA上的数据稳定 delay(); } scl=0;//拉低SCL,为下次数据传输做好准备 delay(); sda=1;//释放SDA总线,接下来由从设备控制,比如从设备接收完数据后,在SCL为高时,拉低SDA作为应答信号 delay(); } //*************************************************************************** uchar read_byte()//读一个字节 { uchar i,k; scl=0; delay(); sda=1; delay(); for(i=0;i<8;i++) { scl=1;//上升沿时,IIC设备将数据放在sda线上,并在高电平期间数据已经稳定,可以接收啦 delay(); k=(k<<1)|sda; scl=0;//拉低SCL,使发送端可以把数据放在SDA上 delay(); } return k; } //*************************************************************************** void write_add(uchar address,uchar date)//任意地址写一个字节 { start();//启动 write_byte(0xa0);//发送从设备地址 respons();//等待从设备的响应 write_byte(address);//发出芯片内地址 respons();//等待从设备的响应 write_byte(date);//发送数据 respons();//等待从设备的响应 stop();//停止 } //*************************************************************************** uchar read_add(uchar address)//读取一个字节 { uchar date; start();//启动 write_byte(0xa0);//发送发送从设备地址 写操作 respons();//等待从设备的响应 write_byte(address);//发送芯片内地址 respons();//等待从设备的响应 start();//启动 write_byte(0xa1);//发送发送从设备地址 读操作 respons();//等待从设备的响应 date=read_byte();//获取数据 stop();//停止 return date;//返回数据 }


上一页 1 2 下一页

关键词: I2C总线C语

评论


相关推荐

技术专区

关闭