让代码助你理解I2C总线.doc

让代码助你理解I2C总线.doc

ID:28142162

大小:85.00 KB

页数:10页

时间:2018-12-08

让代码助你理解I2C总线.doc_第1页
让代码助你理解I2C总线.doc_第2页
让代码助你理解I2C总线.doc_第3页
让代码助你理解I2C总线.doc_第4页
让代码助你理解I2C总线.doc_第5页
资源描述:

《让代码助你理解I2C总线.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、让代码助你理解I2C总线  I2C只是用两条双向的线,一条SerialDataLine(SDA),另一条SerialClock(SCL)。  SCL:上升沿将数据输入到每个EEPROM器件中;下降沿驱动EEPROM器件输出数据。(边沿触发)  SDA:双向数据线,为OD门,与其它任意数量的OD与OC门成“线与”关系。  为了加深对I2C总线的理解,用C语言模拟IIC总线,边看源代码边读波形:  如下图所示的写操作的时序图:    读时序的理解同理。对于时序不理解的朋友请参考“I2C总线概述及时序总结”  完整的程序如下:  #include  #defineucha

2、runsignedchar  #defineuintunsignedint  #definewrite_ADD0xa0  #defineread_ADD0xa1  uchara;  sbitSDA=P2;  sbitSCL=P2;  voidSomeNop();//短延时  voidinit();//初始化  voidcheck_ACK(void);  voidI2CStart(void);  voidI2cStop(void);  voidwrite_byte(uchardat);//写字节  voiddelay(uintz);  ucharread_byte

3、();//读字节  voidwrite(ucharaddr,uchardat);//指定地址写  ucharread(ucharaddr);//指定地址读  bitflag;//应答标志位  voidmain()  {  init();  write_add(5,0xaa);//向地址5写入0xaa  delay(10);//延时,否则被坑呀!!!  P1=read_add(5);//读取地址5的值  while(1);  }  //*******************************************************************

4、********  voiddelay()//简单延时函数  {;;}  //***************************************************************************  voidstart()//开始信号SCL在高电平期间,SDA一个下降沿则表示启动信号  {  sda=1;//释放SDA总线  delay();  scl=1;  delay();  sda=0;  delay();  }  //*******************************************************

5、********************  voidstop()//停止SCL在高电平期间,SDA一个上升沿则表示停止信号  {  sda=0;  delay();  scl=1;  delay();  sda=1;  delay();  }  //***************************************************************************  voidrespons()//应答SCL在高电平期间,SDA被从设备拉为低电平表示应答  {  uchari;  scl=1;  delay();  //至多等待250

6、个CPU时钟周期  while((sda==1)&&(i《250))i++;  scl=0;  delay();  }  //***************************************************************************  voidinit()//总线初始化将总线都拉高一释放总线发送启动信号前,要先初始化总线。即总有检测到总线空闲才开始发送启动信号  {  sda=1;  delay();  scl=1;  delay();  }  //*************************************

7、**************************************  voidwrite_byte(uchardate)//写一个字节  {  uchari,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();  }  sc

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。