⑴ 很纠结啊!I2C通信,为什么芯片有些要写“读写驱动程序”,有些则不要
楼主错了,51单片机是没有集成I2C模块的,那是用普通的IO口去模拟的I2C的时序,所以就需要把IO口随时的变化成需要的电平,而ARM或者其他的,单片机里集成了IIC模块,你只需要把寄存器设置好了,由模块自己按照标准的IIC协议执行。
⑵ 单片机中 I2C总线协议中的问题
SCL=0; //拉低时钟线,准备接收数据,否则后面循环中就无法出第1个上升沿了
delay(); //延时
SDA=1; //释放数据线(不驱动,悬浮)由发送方驱动此线
delay(); //延时
for(i=0;i<8;i++) //8次循环每次接收1位
{
SCL=1; //拉高时钟线,出一个上升沿,读取数据,发送方会保持数据在SDA线上
delay();
k=(k<<1)|SDA;//k的其他位左移,将数据线状态保存在k的最低位
SCL=0; //拉低时钟线,等待发送放在数据线上放下1位
delay();
}
⑶ i2c的驱动睡眠和恢复操作怎么被调用
I2C 有主机模式和从机模式,,所以有2个工程,,分别给2个单片机,,
也可以在一个工程中完成,,也就是1个单片机有时做主机 有时做从机
那你就要写一个主机和从机的判断函数了,,
所以楼主你先要搞清楚 谁是主机 谁是从机 谁给谁发数据!!!弄清楚再写代码!
至于为什么加nop延时,,主要是因为I2C协议SCL,SDA的高低电平持续时间要求 是有严格的规
定 特别是对频率晶振比较大的单片机 所以加NOP保证高电平 或者低电平 到位
一般规定5US 如果只持续1US 就不行
⑷ stc89c52单片机 实现i2c的引脚固定吗
stc89c52单片机 实现i2c的引脚固定吗?
第一种方式是固定的:如果使用stc89c52单片机I2C控制对EEPROM进行读写,读写访问寄存器就好了,不用编代码,这种情况下只能使用规定的两个引脚,否则实现不了读写;
第二种方式不是固定的:你可以任意使用stc89c52单片机两个引脚,作为数据和时钟,然后自己编写模块I2C代码,网上一大把,随便下载都可以用。
⑸ 51单片机I2C总线的问题。关于EEPROM
你刚把数据写进去立马从中读出来,硬件反应不过来,必须要延时一段时间,void delay1(int z)
{
intr x,y;
for(x=z;x>0;x--)
for(y=123;y>0;y--);
}
在写函数之后加delay1(1000);
就对了
⑹ 1602液晶显示屏在51单片机上用I2C协议驱动
去网络网页搜51虚拟I2C,有很多相关资料和程序可供参考。
⑺ 如何用51单片机模拟i2c协议
I2C 协议包含了起始条件,停止条件,串行移位;这里面包含了三段时序。
下面根据应用分析:
1,假如你要写一个ic的通信协议,而这个通信协议用的是I2C。
一般需要I2C通信的ic都会告诉你具体的时序图,你可以查看具体的IC技术手册,然后你根据时序图的高低电位和电平改变的先后顺序来写I2C协议就行了,注意速度。
2,你想做一个模拟 I2C 驱动协议。
你在网上搜索一下I2C时序图(有很多哦),然后你根据时序图上面的电平高低,电平改变顺序来写这个协议就行了。
⑻ 现在要写一个stm32的i2c驱动,以前没任何单片机基础,现学的,有软件编程基础
不理解你说的I2C驱动是什么意思,是指用stm32与其他设备进行I2C通信吗?还是用PC通过I2C控制stm32?
如果是后者,直接看I2C协议。
如果是前者,stm32有硬件I2C,但是都说不太好用bug多,建议用stm32模拟I2C。首先学习如何把程序下载到单片机,然后看stm32的时钟树图和官方库函数(主要看初始化部分),设备初始化完毕之后就可以执行你的I2C代码了。
⑼ 这是一个单片机I2C的程序,麻烦高手帮忙指点下;为什么有时显示不行呢,虽然概率很低,要隔很长
1、可能延时时间不够,器件读写速度慢,跟不上。
void delay()
{ ;; } //延迟5毫秒左右;
你用多少的晶振?12M的晶振标准51核,只能延时2个微秒。
2、write_byte(0xaa);
respons();
像这种写入数据的操作需要时间比较长,你的等待时间可能不够。查看你器件的datasheet,看它的写入时间需要多久。
3、拿示波器看一下你IIC总线的波形的上升时间和下降时间能不能满足IIC规范的要求。
4、嵌入式系统从稳定性考虑,最好对每个函数的操作成功与否进行判断,系统要对错误的情况进行处理。比如楼主的respons();函数,比较好的一种处理方式是:如果等待超时,那么返回错误码,由上层函数决定如何处理错误。重发or放弃,等等。 楼主刚刚开始学习不必要深究,可以思考下这方面的问题。
⑽ 请问I2C总线的驱动程序 要学会自己写嘛 还是平时写的时候只要复制过来,拿来用就可以 求指教啊!!!
如果你学单片机的哈,肯定是要学会自己写的,最起码你要能把别人的程序能调通,能通信,而且不同单片机的I2C协议是有部分的不同的,例如有的I2C在接收的时候会发两次,第一次不是数据而是要把它读空,第二次才是数据,如果你用正常的单片机协议肯定就读不到数据了