IIC时序操作24C02芯片
1.心血来潮看自己能不能参考时序图重新写一个IIC驱动,加强一下时序图的理解。记录下来,以后遇到此类的IIC时序的芯片可以直接操作。
先说说自己参照手册来写AT24c02的IIC低层驱动,从写完到最后调试成功所遇到的问题:
1.先确定SDA、SCL两根线的硬件连接。 (由于自己换了一套开发板,自己当时没有意识到,最后发现了)。
2.先调串口便于打印调试 (但是之前调试好的代码,竟然不能用)自己也是醉了。然后把总中断关掉,就莫名其妙的变好了。这个问题自己也没搞明白。
3.自己错在了起始信号那里,我把SCL拉高后,没有再拉低,就直接去写数据了。这肯定就悲剧了。。
4.还有不能很频繁不断擦除、写入。不然会出错。。。
自己的想法是 写入一个字节在读出用串口发出来。
2.模拟iic时序
2.1起始信号

先是 SDA和SCL都拉高 并延时(延时时间可以参考手册<读写周期那块>)
//总线初始化
void Iic_init()
{
SDA=1;
delay10us();
SCL=1;
delay10us();
}
//iic的开始信号(在时钟线SCL为高的时候数据线由高变低)
void start()
{
SDA=0;
delay10us();
SCL=0;
delay10us(); //之前是这里没有把时钟线拉低。才导致没有正确的起始信号。
}
2.2停止信号
//停止信号 (在时钟线SCL为高时数据线由低变高)
void stop()
{
SCL=1;
delay10us();
SDA=0;
delay10us();
SDA=1;
delay10us();
}
2.3 写一个字节带应答信号:

//写一个字节(带应答的) 返回值为1,成功写入并应答。否则反之。
unsigned char Iic_write(unsigned char date) //高位在前
{
unsigned char i,j=0; for(i=0;i<8;i++) // 比如: data: 10011001
{
SDA=date>>7; //第一次发送一个字节的最高位(bit7),第二次发送一个字节的bit6,
//先送给数据线,让他准备好
date=date<<1; // 为了方便读取下一位 // C语言的位操作自己要特别熟悉<C语言高级专题>
//delay10us();
SCL=1;
delay10us();
SCL=0;
delay10us(); //成功给SDA写入一位数据。
}
//此时在这里 SCL(时钟线) 已经为低了。
SDA=1; //应答信号 acknowledge 时序是先把 数据先拉高,第九个时钟周期,看SDA是否被拉低。
delay10us();
SCL=1;
delay10us();
while(SDA) //由时序图知 如果发送应答 SDA由高置低
{
j++; //如果不应答避免死循环
if(j>200)
{
SCL=0;
return 0; //SDA=1; SCL=0
} }
SCL=0;
delay10us();
return 1; //SDA=0; SCL=0
}
2.3 读一个字节的数据
//iic读一个字节
unsigned char Iic_read()
{
unsigned char dat=,i;
SDA=; //不知道为什么这里要把数据线拉高,我感觉高低都行吧!
delay10us();
for(i=;i<;i++)
{
SCL=; // 这个时候就要准备往SDA数据线里送数据了。
delay10us();
dat=dat<<;
dat=dat|SDA; // 这两句代码的顺序要注意,第八次的时候就直接把最低位的赋给dat了
SCL=;
delay10us();
}
return dat;
}
然后在写稍微高层(针对器件)的时序协议:
写、读一个字节的时序:

调用底层时序来完成就行了。
IIC时序操作24C02芯片的更多相关文章
- MSP430F149模拟IIC读写24C02程序
板子上设置了EEPROM存储器,型号为AT24C02.板子的硬件连接为:SCL--->P2.4,SDA--->P2.5.直接了当,贴上程序! ======================= ...
- 十天学会单片机Day5 IIC总线AT2402芯片(EEPROM)应用
1.采用串行总线技术可以使系统的硬件设计大大简化.系统的体积减小.可靠性提高.同时,系统的更改和扩充极为容易. 常用的串行扩展总线有: IIC (Inter IC BUS)总线.单总线(1-WIRE ...
- 十天学会单片机Day6 学会看数据手册 (IIC总线PCF859芯片( A/D D/A)应用)
1.实际电路 2.引脚图 3.地址 高四位为固定地址1001,A2A1A0可编程地址,通过观察实际电路,可知A2A1A0 为000.最低位为读写为,1为读,0为写. 4.控制字 控制寄存器的高半字节用 ...
- IIC接口下的24C02 驱动分析
本节来学习IIC接口下的24C02 驱动分析,本节学完后,再来学习Linux下如何使用IIC操作24C02 1.I2C通信介绍 它是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据,是一个多 ...
- 【STM32】IIC的基本原理(实例:普通IO口模拟IIC时序读取24C02)(转载)
版权声明:本文为博主原创文章,允许转载,但希望标注转载来源. https://blog.csdn.net/qq_38410730/article/details/80312357 IIC的基本介绍 ...
- [51单片机] EEPROM 24c02 [I2C代码封装-保存实现流水灯]
这里把EEPROM 24c02封装起来,今后可以直接调用,其连线方式为:SDA-P2.1;SCL-P2.0;WP-VCC >_<:i2c.c /*--------------------- ...
- [51单片机] EEPROM 24c02 + 数码管 + 中断 [统计开机次数]
>_<:24c02的SCL连P2.0;SDA连P2.1;WP接GND;P0接8位数码管的8针;P2.2连段码;P2.3连位码; >_<:delay.c #include &qu ...
- 复习IIC协议---以AT24C02为例
1.总纲--复习IIC(inter integrated circuit)协议以及自己顺便读一下数据手册. /********************************************* ...
- 基于USB接口芯片CH372的人机接口设备设计与实现(转)
摘 要: 基于一种新型USB 总线接口芯片CH372,设计出一种人机接口设备-USB 鼠标.阐述了CH372 的工作原理和特点,给出了系统的硬件电路图:在软件设计中,分析了HID 类设备描述符枚举过程 ...
随机推荐
- 程序猿想聊天 - 創問 4C 團隊教練心得(二)
在第二天裡,主要談的是關於 Courage (勇氣) . Co-Create (共創) 的部分因為我們不是真實的團隊,就沒有繼續下去了 一早開始先回顧了一下前一天的內容,接下來我們就開始玩小遊戲 這個 ...
- spring的理解
看过<fate系列>的博友知道,这是一个七位英灵的圣杯争夺战争.今天主要来谈谈圣杯的容器概念,以便对spring的理解. 圣杯: 圣杯本身是没有实体的,而是将具有魔术回路的存在(人)作为“ ...
- 【转】解决未能加载文件或程序集'WebGrease‘的问题
在多个视图中,如果有使用共用的样式代码,可以把它们移至CSS文件中去.今天Insus.NET就举例一个例子来说明. 比如前2篇中<ASP.NET MVC图片管理(上传,预览与显示)>htt ...
- 如何在sublime text3运行nodejs
步骤一:nodejs的安装1到nodejs的官网下载安装包,直接点击Install即可.(参照自己的系统版本安装,官网会自动匹配系统的版本.) 2双击安装包,进行安装 3务必注意的地方:安装路径,要记 ...
- Dotspatial 要素重叠分析
private void toolStripButton30_Click(object sender, EventArgs e) { //面状重叠分析 if (mapMain.Layers.Count ...
- Redis笔记-Sentinel哨兵模式
Redis以主从的模式搭建集群后,如果主节点Master挂掉,虽然可以实现将备用节点Slave切换成主节点,但是Redis本身并没有自动监控机制,需要借助Sentinel哨兵模式,实现监控并实现自动切 ...
- Jenkins实现简单的CI功能
步骤一:安装JDK.Tomcat,小儿科的东西不在此详细描述 步骤二:下载安装Jenkins下载链接:https://jenkins.io/download/ 步骤三:将下载的jenkins.war部 ...
- WinForm 双向数据绑定
程序目标: 控件的属性值与对象的属性值双向绑定使窗口控件的属性值与对象的属性值保持一致.对窗口控件属性值更改后立即更新对象的属性值,对对象的属性值更改后立即更新窗口控件的属性值. 程序完整代码包:ht ...
- python从开始到放弃想标题的day12
上次有说道函数的返回值,但是不是所有的数据类型都有返回值,一些常用的比如str基本都有返回值,list基本都没有返回值,dict基本都有返回值,还有就是函数和函数之间的数据是互不影响的,哪怕是一个函数 ...
- Git clone远程目录443:Timed out 问题(go get)
现象: 在cmd中用go get -u github.com/kataras/iris ,提示:443:Timed out 于是在 git bash 中 git clone https://g ...