首页 > 算法 > 图像识别 > Iic读写 之间需要多少延时问题,TW8835 IIC总线读写问题

Iic读写 之间需要多少延时问题,TW8835 IIC总线读写问题

来源:整理 时间:2022-12-22 06:28:37 编辑:亚灵电子网 手机版

1,TW8835 IIC总线读写问题

8位寄存器是说寄存器的容量是8位的,也就是8位的数据,这和寄存器的地址大小没有冲突嘛。
我不会~~~但还是要微笑~~~:)

TW8835 IIC总线读写问题

2,单片机用IIC读写EEPROM

对iicEEPROM进行写入操作时,IC内部有个自循环写时序大约10mS(不同的芯片可能略有差异),如果在这个时序尚未结束之前,执行读操作,读出的数据只能是先前有效的写操作记录的数据,因为单步调试操作的时间远大于10mS,iic的自循环写时序已经结束,所以读出的数据是正确的。建议在写操作之后延时10mS后再进行读操作。

单片机用IIC读写EEPROM

3,24lc256写一个字节需要延时多久

//在主程序中,先i2c_init();然后开始读/写24LC256中数据,经多次运行no bug//程序中的寄存器必须芯片内部包含,否则无法实现硬件iic读写。
期待看到有用的回答!

24lc256写一个字节需要延时多久

4,一个PCF8591 的IIC读写的时序问题有一些困惑

别人编的不代表你能用,不同的电路情况是有细微区别的,可以你晶振离CPU远点 可能你晶振跟别人的不一个品牌 可能你那温度比别人的高, 这都导致延时函数不准。自己动手测量才是王道。用个示波器测一下,不费什么功夫,而且自己心里也有底了。下面是我自己的延时函数,仅供参考/***************************************************************************/void Delayms_110592(unsigned int time_)//延时时间为 1ms * x 晶振是11.0592M unsigned int _x,_y; for(_y = 0; _y < time_; _y++) for(_x = 0;_x < 111; _x++); } /***************************************************************************/void Delayus_110592(unsigned int time_)//延时时间为 1us * x 晶振是11.0592M unsigned int _x,_y; for(_y = 0; _y < time_; _y++) for(_x = 0;_x < 1; _x++); }Delayms_110592();这个函数的形参越大相对误差越小,一般都是大于标准值,比如Delayms_110592(100);肯定大于100ms,而且Delayms_110592(1000);的相对误差要小一点你可以用示波器测量来试一下,具体什么原因,自己思考~~~Delayms_110592();这个函数的形参越小相对误差越小,一般都是大于标准值

5,iic总线中是SCL还是SDA要延时

应该是SDA在发送起始信号和停止信号的时候需要延时,使得设备能够判断起始位和停止位,具体延时多长要看芯片手册。如果CPU工作在“主发送”的模式下,CPU通过在SCL高电平时候拉低SDA线,就等于发送了一个起始信号,SCL的上升沿到SDA的下降沿的时间段A,及SDA的下降沿到SCL的下降沿的时间段B,芯片手册中都会有详细的规定。同理,发送停止信号的时候也是类似的。

6,iic的应用

I2C总线是各种总线中使用信号线最少,并具有自动寻址、多主机时钟同步和仲裁等功能的总线。因此,使用I2C总线设计计算机系统十分方便灵活,体积也小,因而在各类实际应用中得到广泛应用。下面举二个应用示例。I2C的运用比如在铁电存储器中,用铁电存储数据就是用的I2C总线协议。 目前,51、96系列的单片机应用很广,但是由于它们都没有I2C总线接口,从而限制了在这些系统中使用具有I2C总线接口的器件。通过对I2C总线时序的分析,可以用51单片机的两根I/O线来实现I2C总线的功能。接I2C总线规定:SCL线和SDA线是各设备对应输出状态相“与”的结果,任一设备都可以用输出低电平的方法来延长SCL的低电平时间,以迫使高速设备进入等待状态,从而实现不同速度设备间的时钟同步。因此,即使时钟脉冲的高、低电平时间长短不一,也能实现数据的可靠传送,可以用软件控制I/O口做I2C接口。下面就是用GMS97C2051的通用I/O口来作为I2C总线接口,并由软件控制实现数据传送的例子,图6为其连线图。在单主控器的系统中,时钟线仅由主控器驱动,因此可以用51系列的一根I/O线作为SCL的信号线,将其设置为输出方式,并由软件控制来产生串行时钟信号。在实际系统中使用了P1.3。另一根I/O线P1.2作为I2C总线的串行数据线,可在软件控制下在时钟的低电平期间读取或输出数据。系统传输数据的过程如下:先由单片机发出一个启始数据信号,接着送出要访问器件的7位地址数据,并等待被控器件的应答信号。当收到应答信号后,根据访问要求进行相应的操作。如果是读入数据,则数据线可一直设为输入方式,中间不需要改变SDA线的工作方式,每读入一个字节均应依次检测应答信号;如果是输出数据,则首先将SDA设置为输出方式,当发送完一个字节后,需要改变SDA线为输入方式,此时读入被控器件的应答信号就完成了一个字节的传送。当所有数据传输完毕后,应向SDA发出一个停止信号,以结束该次数据传输。 下面给出51系列用汇编语言实现启始、停止、读、写、应答的程序,读者也可以根据I2C总线时序在96系列或其它单片机上实现I2C总线接口。a.启动位程序ACK:CLR P1.3NOPNOPSETB P1.2NOPNOPNOPCPL P1.3 ;P1.3=1NOPNOPNOPDENGDAI:JB P1.2,DENGDAIRETb.读数据程序读字节可以在当前地址读(CURRENTREAD),也可以随机读(RANDOM READ),读出数据的最后一个字节后不用加应答信号。READ:PUSH 0EHCLR P1.4LCALL BSTART ;STARTMOV A,#0A0H ;SEND THE CNOTROL BYTELCALL SENDBYTELCALL ACKMOV A,R1 ;SEND THE ADDRESSLCALL SENDBYTELCALL ACKLCALL BSTART ;STARTMOV A,#0A1H ;SEND THE CNOTROL BYTELCALL SENDBYTELCALL ACKLCALL READBYTELCALL BSTOPPOP 0EHRET送字节程序:SENDBYTE:PUSH 0EHPUSH 00HMOV R0,#08HLOOP1:CLR P1.3NOPNOPRLC AMOV P1.2,CCPL P1.3 ;P1.3=1NOPNOPDJNZ R0,LOOP1POP 00HPOP 0EHRET读字节子程序:READBYTE:PUSH 0EHPUSH 00HMOV R0,#08H;READ THE CONTENTCLR ALOOP4:CLR P1.3NOPNOPNOPSETB P1.3 ;P1.3=1MOV C,P1.2RLC ADJNZ R0,LOOP4MOV R2,APOP 00HPOP 0EHRETc.写数据程序:WRITE:PUSH 0EHCLR P1.4LCALL BSTARTMOV A,#0A0HCLALL SENDBYTE ;SEND THE CONTROL BYTELCALL ACKMOV A,R1 ;SEND THE ADDRESSLCALL SENDBYTELCALL ACKMOV A,R2 ;WRITE THE CONTENTLCALL SENDBYTELCALL ACKLCALL BSTOPPOP 0EHRET连续写的两个字节之间最好是有10ms的延时。当然,也可以进行页写(PAGEWRITE),即一次性连续写8个字节,但采用页写方式时每个字节后要有一个应答信号。d.停止位程序:BSTOP:CLR P1.3NOPNOPCLR P1.2NOPNOPNOPSETB P1.3NOPNOPNOPSETB P1.2RET // IIC开始void Start()SDA=1;SCL=1;NOP4();SDA=0;NOP4();SCL=0;}// IIC 结束void Stop()SDA=0;SCL=0;NOP4();SCL=1;NOP4();SDA=1;}// IIC 读取应答void RACK()SDA=1;NOP4();SCL=1;NOP4();SCL=0;}// IIC 发送非应答void NO_ACK()SDA=1;SCL=1;NOP4();SCL=0;SDA=0;}// IIC向从设备写入一字节数据void Write_A_Byte(uchar b)uchar i;for(i=0;i<8;i++)b<<=1;SDA=CY;_nop_();SCL=1;NOP4();SCL=0;}RACK();}// IIC 向从设备的指定地址写入数据void Write_IIC(uchar addr,uchar dat)Start();Write_A_Byte(0xa0);Write_A_Byte(addr);Write_A_Byte(dat);Stop();DelayMS(10);}// IIC 从从设备读取数据uchar Read_A_Byte()uchar i,b;for(i=0;i<8;i++)SCL=1;b<<=1;B|=SDA;SCL=0;}return b;}// IIC 从从设备的当前地址读取数据uchar Read_Current()uchar d;Start();Write_A_Byte(0xa1);d=Read_A_Byte();NO_ACK();Stop();return d;}// IIC 从从设备的任意地址读取数据uchar Random_Read(uchar addr)Start();Write_A_Byte(0xa0);Write_A_Byte(addr);Stop();return Read_Current();}

7,iic接口的读写要以时钟上升沿为参考吗

其实程序是一模一样的,唯一的区别是模拟IIC需要CPU运算,这样就增加了单片机的运算时间,而带IIC接口的单片机,程序还是需要的,但是IIC的运算通过集成在单片机里面的寄存器硬件电路来运算,就像定时器电路一样自己会运算,这样就不要cpu来运算过程了,从而节省了时间,使cpu运算的更快。当然这样就的多付出经济成本哦
应该不用吧。

8,C语言for循环嵌套延时问题

这说明是你的延时时间不足,造成的错误。这个延时函数是个指令延时,指令多了,延时时间就长。for(x=0;x<120;x++) 这个循环里,每一次循环,都会有一个 加一 和 判断跳转指令。X为char 时是单字节,这些指令都是一条指令,当改为 int时 x就成了双字节了,这些操作就需要多几条指令来完成。这就相当于,每次循环的时间加长了。
你好!加入预处理语句#include 再调用Sleep()函数。 比如 #include #include int main() { printf("1"); Sleep(1000); printf("2"); } 里面的参数为毫秒 我的回答你还满意吗~~

9,iic协议读取数据的问题

start_iic(); write_byte(0xa0); respons(); write_byte(address);这上面的是要告诉器件,我要 (操作) 你的那个地址(address)单元。write_byte(0xa1);//这句话是要告诉器件,准备要来读你,读就要有对像,对像在哪呢?就是你上面所写入的地址。data=read_byte();//这句话才是真正的把数据给读出来,明白了吗?
读地址和写地址是不一样的,读操作也是得先把读操作的地址先写进去才能读
从读数据的角度来说没有区别;但是发了应答的话,从器件会继续输出数据,处于工作状态,发非应答则从器件就停止输出数据,处于standby状态,两种状态的耗能不一样的,实际应用时,就会在功率上有差别。

10,一个PCF8591 的IIC读写的时序问题有一些困惑

别人编的不代表你能用,不同的电路情况是有细微区别的,可以你晶振离CPU远点 可能你晶振跟别人的不一个品牌 可能你那温度比别人的高, 这都导致延时函数不准。自己动手测量才是王道。用个示波器测一下,不费什么功夫,而且自己心里也有底了。下面是我自己的延时函数,仅供参考/***************************************************************************/void Delayms_110592(unsigned int time_)//延时时间为 1ms * x 晶振是11.0592M unsigned int _x,_y; for(_y = 0; _y < time_; _y++) for(_x = 0;_x < 111; _x++); } /***************************************************************************/void Delayus_110592(unsigned int time_)//延时时间为 1us * x 晶振是11.0592M unsigned int _x,_y; for(_y = 0; _y < time_; _y++) for(_x = 0;_x < 1; _x++); }Delayms_110592();这个函数的形参越大相对误差越小,一般都是大于标准值,比如Delayms_110592(100);肯定大于100ms,而且Delayms_110592(1000);的相对误差要小一点你可以用示波器测量来试一下,具体什么原因,自己思考~~~Delayms_110592();这个函数的形参越小相对误差越小,一般都是大于标准值
上面#define pcf8591 0x90 //pcf8591 宏定义,0x90为器件地址
文章TAG:Iic读写读写之间需要

最近更新

  • k60芯片是不是arm,KIA6040p是什么芯片?k60芯片是不是arm,KIA6040p是什么芯片?

    芯片采用天玑芯片,由台积电制造,具有良好的声誉和性能。这款芯片在很多机型上都有不错的表现,性能更强,功耗表现也相对稳定,全血版本还是非全血版本?它是台积电科技的骁龙,至尊版由小米公司在.....

    图像识别 日期:2024-04-11

  • 给冰柜打压应该打多少钱,冰箱打压加氟多钱给冰柜打压应该打多少钱,冰箱打压加氟多钱

    冰箱打压加氟多钱2,冰箱冰柜检漏打压是多少3,容声冰箱BCD172AY的制冷压缩机鼓掌要多少钱1,冰箱打压加氟多钱参考价格:¥1299元最低价格:¥1200元超级静音,省电。室温15度,冰箱冷藏室8度,变温室8度,.....

    图像识别 日期:2024-04-10

  • 调谐变压器输出电压视频,变压器调频和调压调谐变压器输出电压视频,变压器调频和调压

    当系统电压不变时,改变变压比就是改变二次侧的输出电压。变压器反馈振荡器的输出电压随振荡频率而变化,根据变压器每匝的高低压相等的原理,开关电源变压器:开关电源变压器是一种带有开关.....

    图像识别 日期:2024-04-10

  • Rc低频补偿电路,低频补偿电路图Rc低频补偿电路,低频补偿电路图

    rc阻容降压电路输出低。检查电源电路,因此,rc阻容降压电路的输出为低,以检查电源电路,RC电路:由两个元件组成的电路:电阻R和电容C..RL电路:由电阻r和电感l两个元件组成的电路,rc振荡电路的.....

    图像识别 日期:2024-04-10

  • 锂电池一般充电电流多少时间,锂电池一般充几个小时锂电池一般充电电流多少时间,锂电池一般充几个小时

    锂电池一般充几个小时锂电池充电时间一般是3-5小时,早期的电池是镍氢,但是锂电池是没有记忆效应不需要这么做,充时间过长会对电池的循环使用寿命产生影响。锂电池是以锂金属或锂合金为阳.....

    图像识别 日期:2024-04-10

  • 105va等多少安,1KVA等于多少安105va等多少安,1KVA等于多少安

    1KVA等于多少安2,变压器上的105VA是什么意思3,彩环电阻105欧等于多少安4,1KVA等于多少安电流5,150V等于多少安倍6,10千伏高压电流表50515a等于底压多少安7,电池容量1瓦时等于多少毫安时1,1KVA.....

    图像识别 日期:2024-04-10

  • 铃木vsf1400多少钱,这个铃木摩托多少钱这车怎么样铃木vsf1400多少钱,这个铃木摩托多少钱这车怎么样

    这个铃木摩托多少钱这车怎么样新车7500元,看样子有2年了.开起来很舒服.2,请问铃木GSX1400摩托车市场价多小还有什么摩车找善烧托车好看些根据年数不同市场价有低有高我觉得大魔神不好看.....

    图像识别 日期:2024-04-10

  • 2362IC供电是多少V,电磁炉 电磁盘的供电电压是多少2362IC供电是多少V,电磁炉 电磁盘的供电电压是多少

    电磁炉电磁盘的供电电压是多少2,ic供电最好取多少伏3,功放管2SA1302集电极供电是多少4,为什么电源IC的供电电压规格书里写的最大是28V但实际上却用312V呢5,电脑usb接口供电量多少V6,3862芯.....

    图像识别 日期:2024-04-10