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 类设备描述符枚举过程 ...
随机推荐
- SpringBoot+Dubbo+Zookeeper整合搭建简单的分布式应用
为什么要使用分布式系统? 容错 减少延迟/提高性能 可用性 负载均衡 总而言之,其实目的只有一个,”用户体验“. 什么是分布式系统? 分布式系统是由使用分发中间件连接的自治计算机组成的网络.它们有助于 ...
- 18-09-20,String 与 StringBuilder (StringBuffer)
1.其一 在运行速度方面:StringBuilder > StringBuffer > String 上实例 class Program { static void Main(string ...
- EF 查询视图出现重复数据
解决方案: 由多张表组成的视图,要加实体键.而且实体键组合要能确保唯一性. 个人理解:确保唯一性,一个或多个实体键,实现了复合主键或组合主键的效果. 这样查询是,延迟加载机制,才知道哪些需要重新从数据 ...
- Vue.js实现后台菜单切换
因为刚初学Vue.js,暂时遇到以下问题,待之后解决 点击父节点,怎么隐藏显示子节点 点击父节点或子节点,切换li的class="active" iframe怎么自适应高度 思路 ...
- OpenCL中三种内存创建image的效率对比
第一种:使用ION: cl_mem_ion_host_ptr ion_host_ptr1; ion_host_ptr1.ext_host_ptr.allocation_type = CL_MEM_IO ...
- WordCount项目基本功能
一.项目源代码地址 本人Gitee项目地址:https://gitee.com/yuliu10/WordCount 二.PSP表格 psp阶段 预估耗时 (分钟) 实际耗时 (分钟) 计划 30 10 ...
- 点击 Button触发事件将GridView1 CheckBox勾选的行添加到GridView2中
有时候想实现一个CheckBox选取功能,但是很多细节不是很清楚 相信大家都有遇到类似的情况,直接看代码,如下: 前端代码GridView1,CheckBox控件设置 <asp:GridView ...
- 微软与开源干货对比篇_PHP和 ASP.NET在 Session实现和管理机制上差异
微软与开源干货对比篇_PHP和 ASP.NET在 Session实现和管理机制上差异 前言:由于开发人员要靠工具吃饭,可能和开发工具.语言.环境呆的时间比和老婆孩子亲人在一起的时间还多,所以每个人或多 ...
- zabbix利用SNMPTrap接收交换机主动告警
zabbix接收trap的工作流程: snmptrapd 收到trap snmptrapd将trap传递给SNMPTT或调用Perl接收器 SNMPTT或Perl trap接收器解析,格式化并将tra ...
- Ajax异步交互基础
1. ajax是什么? * asynchronous javascript and xml:异步的js和xml * 它能使用js访问服务器,而且是异步访问! * 服务器给客户端的响应一般是整个页面,一 ...