51单片机I2C总线驱动程序
来源:互联网 发布:优化ping 编辑:程序博客网 时间:2024/05/24 22:42
SI2I2C总线是PHLIPS公司推出的一种串行总线,是具备多主机系统所需的包括总线裁决和高低速器件同步功能的高性能串行总线。
I2C总线只有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。
一.I2C系统结构
每个接到I2C总线上的器件都有唯一的地址。主机与其它器件间的数据传送可以是由主机发送数据到其它器件,这时主机即为发送器。由总线上接收数据的器件则为接收器。
二.数据位的有效性规定
I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。
三.字节传送与应答
每一个字节必须保证是8位长度。数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)。
四.驱动程序
#define uchar unsigned char#define uint unsigned int#define somenop() _nop_(),_nop_(),_nop_(),_nop_(),_nop_(),_nop_()sbit SCL=P2^1;sbit SDA=P2^0;
1.起始信号和终止信号
SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;
SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号。
起始和终止信号都是由主机发出的,在起始信号产生后,总线就处于被占用的状态;在终止信号产生后,总线就处于空闲状态
void I2C_Start() //起始{ SCL=1; somenop(); SDA=1; somenop(); SDA=0; somenop(); SCL=0; somenop();}void I2C_Stop() //终止{ SDA=0; somenop(); SCL=1; somenop(); SDA=1; somenop();}
2.发送数据
void I2C_SendByte(uchar dat, uchar ack) //发送一个字节{ uchar i,j,b=0; for(i=0;i<8;i++) { SCL=0; somenop(); SDA=(bit)(dat&0x80); //每次取最高位进行发送 dat<<=1; //从最高位开始发送,左移使每一位逐渐成为最高位 SCL=1; //上升沿时发送数据 somenop(); } SCL=0; somenop(); SDA=1; somenop(); SCL=1; _nop_(); while((SDA==1)&&(j<250)) j++; //等待应答,也就是等待从设备把SDA拉低 SCL=0; _nop_(); }
3.读取数据
uchar I2C_ReadByte() //读一个字节{ uchar i,dat=0; SCL=0; //此处也可以不置低,因为起始和发送一个字节之后SCL都是0 somenop(); SDA=1; //拉高准备数据读取 _nop_(); for(i=0;i<8;i++) //读取8位数据 { SCL=1; somenop(); dat<<=1; if(SDA==1) dat=dat|0x01; somenop(); SCL=0; //下降沿时读取数据 somenop(); } return dat;}
1 0
- 51单片机I2C总线驱动程序
- 51单片机I2C总线代码
- Linux I2C总线驱动程序
- I2C总线驱动程序
- 51单片机——I2C总线
- I2C总线驱动程序的实现
- 51单片机模拟I2C总线的C语言实现
- 51单片机模拟I2C总线的C语言实现
- 用Proteus学习51单片机之I2C(IIC)总线
- I2C总线及单片机模拟I2C总线通信程序编写
- 2014-04-12 i2c总线驱动程序__
- I2C总线 驱动程序设计 --- EEPROM 驱动设计
- AVR单片机 I2C总线 的使用
- 51单片机模拟I2C总线(我见过最好的,与大家共享)
- 基于proteus的51单片机仿真实例六十六、I2C总线上接两个AT24C02读写实例
- 51单片机I2C程序
- 51单片机I2C程序
- 51单片机总线时序
- ZOJ 3662 Math Magic 分阶段的动态规划 (+离散化) ★★★☆
- HTTP头部详解
- 你还在为无法完美卸载SQL Server 2008 R2而烦恼吗?
- 直接插入排序
- 5.4.3、SSAS-创建KPIs
- 51单片机I2C总线驱动程序
- Scrollview中嵌套ViewPager中嵌套ListView 滑动中tab固定顶部ScrollingTricks效果特效
- DD测试磁盘读写速度
- Codeforces Round #335 (Div. 2) 606B Testing Robots(模拟)
- 5.5、从Analysis Services检索数据
- iOS设计模式--责任链模式
- repo的使用
- 5.6、管理分区及数据库处理
- MySQL INTO OUTFILE导出导入数据