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 类设备描述符枚举过程 ...
随机推荐
- LeetCode 上最难的链表算法题,没有之一!
题目来源于 LeetCode 第 23 号问题:合并 K 个排序链表. 该题在 LeetCode 官网上有关于链表的问题中标注为最难的一道题目:难度为 Hard ,通过率在链表 Hard 级别目前最低 ...
- 分享基于 websocket 网页端聊天室
博客地址:https://ainyi.com/67 有一个月没有写博客了,也是因为年前需求多.回家过春节的原因,现在返回北京的第二天,想想,应该也要分享技术专题的博客了!! 主题 基于 websock ...
- Spring异常分析
异常报错 2019-01-14 10:40:18.427 ERROR 11776 --- [ost-startStop-1] o.s.b.w.e.t.TomcatStarter : Error sta ...
- ado.net的简单数据库操作(二)之封装SqlHelperl类
今天我书接上回,接着昨天的ado.net的数据库操作的相关知识来讲哈! 从上篇文章给出的实例来看,你一定会发现,操作数据库其实还挺麻烦的,就连一个最简单的数据库操作语句都要包括 定义数据库连接字符串. ...
- InnoSetup 以命令行自动编译打包
本章介绍,在新建Innosetup的编译脚本iss文件后,在不运行Innosetup软件的基础上,以bat自动编译运行打包. 一.添加Innosetup软件包 下载InnoSetup软件包并解压到bu ...
- Spring入门(三):通过JavaConfig装配bean
上一篇博客中,我们讲解了使用组件扫描和自动装配实现自动化装配bean,这也是最好的使用方式. 但是某些场景下,我们可能无法使用自动装配的功能,此时就不得不显式的配置bean. 比如我们引用了一个第三方 ...
- 如何快速清理 docker 资源
如果经常使用 docker,你会发现 docker 占用的资源膨胀很快,其中最明显也最容易被察觉的应该是对磁盘空间的占用.本文将介绍如何快速的清理 docker 占用的系统资源,具体点说就是删除那些无 ...
- 【Oracle教程资源大合集】Oracle数据库免费学习资源汇总
Oracle的产品非常丰富,各类学习资源也五花八门,本文将介绍Oracle官方的免费教程与风哥整理的Oracle视频教程: 1.Oracle帮助中心 Oracle帮助中心也称为Oracle文档中心,这 ...
- 点击 Button触发事件将GridView1 CheckBox勾选的行添加到GridView2中
有时候想实现一个CheckBox选取功能,但是很多细节不是很清楚 相信大家都有遇到类似的情况,直接看代码,如下: 前端代码GridView1,CheckBox控件设置 <asp:GridView ...
- python使用rabbitMQ介绍四(路由模式)
一.模式介绍 路由模式,与发布-订阅模式一样,消息发送到exchange中,消费者把队列绑定到exchange上. 这种模式在exchange上添加添加了一个路由键(routing-key),生产者发 ...