/*
名称:C51IO口模拟I2C总线驱动EEPROM(AT24C16)

说明:I2C总线是由Philips公司开发的一种简单、半双工同步串行总线。它只需要两根线(SCL、SDA)即可在连接于总线上的器件之间传送信息。其中SCL时钟总线用于同步数据,SDA数据总线用来发送数据(或地址)。

和SPI总线不同的是,I2C总线通过在SDL上发送存储器的地址用来选中总线上对应的设备。关于具体的通信协议这里就不说了,无非是通过IO口模拟产生所需信号
(如通信开始信号是SCL为高时,SDA产生一个下降沿信号。) 驱动程序中有 具体的说明。
*/


//定义I2C相关变量
sbit     SCL=P2^1;     //I2C  时钟
sbit     SDA=P2^0;     //I2C  数据 bit ack;                 /*应答标志位*/static void Delay_I2C() /*延时函数*/
{_Nop();_Nop();_Nop();_Nop();_Nop();
}//启动I2C总线,即发送I2C起始条件:SCL为高电平期间,SDA出现下降沿
void Start_I2C()
{SDA = 1;Delay_I2C();            //延时一段时间SCL = 1;Delay_I2C();SDA = 0;Delay_I2C();SCL = 0;                //???           /*钳住I2C总线,准备发送或接收数据 */Delay_I2C();        }//停止I2C总线信号,即发送I2C停止条件:SCL为高电平期间,SDA出现上升沿
void Stop_I2C()
{SDA = 0;Delay_I2C();            //延时一段时间SCL = 1;Delay_I2C();SDA = 1;Delay_I2C();
}//检验应答信号
bit CheckAck(void)
{bit val;/*发送完一个字节后检验设备的应答信号*/SDA=1;SCL=1;Delay_I2C();val=SDA;Delay_I2C();SCL=0;Delay_I2C();return val;
}//通过I2C总线发送一个字节
bit  SendByte_I2C(unsigned char  c)
{unsigned char i = 0;SCL = 0;                //???           /*钳住I2C总线,准备发送或接收数据 */Delay_I2C();        for(i = 0;i<8;++i){if(c<<i & 0x80)SDA = 1;elseSDA = 0;SCL = 1;    /*置时钟线为高,通知被控器开始接收数据位*/Delay_I2C();    SCL = 0;Delay_I2C();            //???}return CheckAck();      //返回接收方的确认结果
}//从I2C总线中接收一个字节的数据
unsigned char RecByte_I2C()
{unsigned char  retc;unsigned char  BitCnt;retc=0; SDA=1;                       /*释放总线*/for(BitCnt=0;BitCnt<8;BitCnt++){SCL=0;                  /*置时钟线为低,准备接收数据位*/Delay_I2C();SCL=1;                  /*置时钟线为高使数据线上数据有效*/Delay_I2C();retc=retc<<1;if(SDA==1)retc=retc+1;  /*读数据位,接收的数据位放入retc中 */Delay_I2C(); }SCL=0;    Delay_I2C();return(retc);
}//发送应答信号
void Ack_I2C(bit ack)
{if(ack==0)SDA=0;              /*在此发出应答或非应答信号 */elseSDA=1;Delay_I2C();     SCL=1;Delay_I2C();SCL=0;                     /*清时钟线,钳住I2C总线以便继续接收*/Delay_I2C();
}

C51IO口模拟I2C总线驱动AT24C16 (I2C协议部分)相关推荐

  1. SylixOS iMX6平台I2C总线驱动

    原理概述 I2C总线驱动概述 I2C总线驱动是I2C适配器的软件实现,提供I2C适配器与从设备间完成数据通信的能力,比如起始,停止,应答信号和MasterXfer的实现函数.驱动程序包含初始化I2C总 ...

  2. i.MX6ULL终结者Linux I2C驱动实验IMX6ULL的I2C总线驱动分析

    在上一节中我们了解了I2C框架分为I2C核心.I2C总线驱动和I2C设备驱动三部分.其中I2C总线驱动就是SOC的I2C控制器驱动,一般来说都是SOC厂家实现好的.而I2C设备驱动是用户根据自己不同的 ...

  3. Linux I2C子系统分析-I2C总线驱动

    在drivers/i2c/busses下包含各种I2C总线驱动,如S3C2440的I2C总线驱动i2c-s3c2410.c,使用GPIO模拟I2C总线的驱动i2c-gpio.c,这里只分析i2c-gp ...

  4. arm linux i2c 总线驱动,ARM-Linux中I2C总线驱动开发

    摘  要: 针对I2C总线的特点,Linux内核中定义了I2C驱动体系结构.在分析Linux的I2C总线驱动体系结构基础上,介绍了在S3C2410中设计I2C总线驱动的方法. 关键词: ARM-Lin ...

  5. linux I2C总线驱动框架

    本文为转载,只为方便复习,如有侵权请联系我. 1.i2c子系统软件框架 应用------------------------------------------i2c driver:从设备驱动层需要和 ...

  6. Linux设备驱动---OMAP3630 Linux I2C总线驱动分析(2)

    4 OMAP3630 I2C device驱动     在Linux内核中,I2C device驱动位于drivers/i2c/chips目录下,可以看到该目录下有很多相关的device驱动,这里以x ...

  7. OMAP3630 Linux I2C总线驱动分析(2)

    4 OMAP3630 I2C device驱动     在Linux内核中,I2C device驱动位于drivers/i2c/chips目录下,可以看到该目录下有很多相关的device驱动,这里以x ...

  8. omap3630 linux i2c总线驱动分析,OMAP3630 Linux I2C总线驱动分析

    4 OMAP3630 I2C device驱动在Linux内核中,I2C device驱动位于drivers/i2c/chips目录下,可以看到该目录下有很多相关的device驱动,这里以xxxx项目 ...

  9. linux i2c 总线驱动编写及分析笔记

    1.写i2c控制器驱动即是写i2c_adapter或者i2c_bus驱动,   写这个驱动属于对i2c control的硬件操作驱动,必须要将芯片手册的关于i2c control的硬件启动流程仔细研读 ...

最新文章

  1. c盘怎么扩容_给电脑减压,C盘清理全攻略!
  2. 切换卡TabHost控件的使用
  3. 计算机缺乏内存将无法运行,电脑增加内存为什么无法启动
  4. ​多任务学习漫谈:行梯度之事
  5. 从需求到设计,嵌入式产品开发流程
  6. python flask框架是什么_Flask框架是什么?带你安装运行第一个Flask程序
  7. 扩展 CommandField 类别 - Header 加入新增钮
  8. Problem I: 函数---判断某年某月某日是这一年中的第几天
  9. 1024节日快乐~~~~
  10. html复选框全选按钮代码,全选复选框JavaScript编写小结(附代码)
  11. vector java 复制_面试官:关于Java性能优化,你有什么技巧
  12. Project 3 resources reassigned !!!
  13. .net core linux 串口,.Net Core 跨平台应用使用串口、串口通信 ,可能出现的问题、更简洁的实现方法...
  14. 数学建模算法与应用习题 1-4 解析 MATLAB 换一下思路做题
  15. 交换机/路由器实验:保姆级别的iperf安装和使用教程
  16. 2021深圳杯东三省建模
  17. python 红黑树_手把手教你43行代码写红黑树(包括删除操作)
  18. 小米手机TCP连接一些奇怪现象
  19. 华为eNSP--4多个路由器连接配置(静态路由)
  20. 氢原子光谱、类氢原子光谱和类氢离子光谱

热门文章

  1. 中专是不是学计算机就只要学理科,中专计算机是理科?
  2. 橡皮筋类CRectTracker
  3. 雷军和马化腾的战争?
  4. 人脸识别安全面临三重挑战
  5. 2022年全国最新消防设施操作员(中级消防设施操作员)题库及答案
  6. 论文摘要(一):Reinforcement Learning on Variable Impedance Controller for High-Precision Robotic Assembly
  7. 20140102-lua binder另一只轮子的雏形
  8. javaScript技巧集合
  9. 零基础程序员想要学好.Net,跟着这7个步骤学习就可以了
  10. sqlserver 获取汉字拼音首字母