1,51单片机I2C总线延时怎么写

因为Z是这个变量,而且是局部变量。如果别的函数还有用到就不行。看你要实现什么样的功能。个人意见!
你说呢...

51单片机I2C总线延时怎么写

2,2M网速 游戏延迟正常多少

家里装电信的话 在60ms以下就正常看你家离电信局有多远 和线路的信号衰减程度一般就60左右,超过了就有点卡了。
是什么游戏啊?

2M网速 游戏延迟正常多少

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

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

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

4,请教51模拟iic通信中的问题

IIC总线的时序,好像是:最高频率在400KHz。单片机指令的执行时间,速度快,所以要加延时。停止函数,是在SCL=1期间,SDA出现上升,那么SDA先要为0,这个0,要在SCL=0实现。
iic协议就是这么规定的,时序要求,需要4-5us的时间间隔,而12Mhz的单片机一个机器周期为1us,所以需延时!!!呃,你看程序时,必须结合标准IIC总线模拟时序图,写起始信号、停止信号也是根据总线模拟时序图来的。郭天翔的视频写得很清晰,推荐看!!!
多字节读取的时候,每个字节都需要给出应答,但是,不对最后一个字节应答所以,对同样应答操作的数据字节数要-1,最后一个字节单独读取并不应答

5,i2c 应答

建议您看看I2C通信协议 SETB SDA NOP NOP SETB SCL ;以上程序把SDA和SCL拉高,等待对方发出应答位 CLR ACK ;清楚本机内ACK(应答位)的值,等待接收 NOP NOP ;等待时序 MOV C,SDA ;把SDA的值送入C JC CEND ;判断C,跳转 SETB ACK ;ACK置位,应答成功 CEND: NOP CLR SCL ;C=1,则拉低时钟,准备下一次发送 NOP RET 这个程序只是应答成功的,如果失败,ACK仍然为1。 至于时序,请参考I2C通信协议 SDA是用伪指令定义成的一个端口的名字,例:SDA EQU P1.2 SDA其实就是指IO口:P1.2 MOV C,SDA和SDA和SET SDA 分别 对SDA这个IO口进行了读和写操作。

6,一个IIC协议的小问题求前辈点拨

SDA的值在SCL为低时才能变化,否则将产生启动和停止信号,为了防止SDA在SCL为高电平变化所以讲SCL每操作后拉低
归根还是时序问题,SCLK为低时,保证SDA数据线数据可变(如果SCLK=1,SDA变只能是停止信号、起始信号,否则出错)从收发函数就可以看出,或者能够保证接受应答、非应答信号。 将SCL线拉成低电平,可以使主机处于等待状态。且SCLK、SDA存在“线与”关系,应该是考虑到多机通信和主从机通信吧!!!! IIC有严格时序要求,单片机通过模拟IIC协议标准来实现通信的!!
你看看开始信号和结束信号是怎么产生和识别的就明白了。
建议详细了解IIC的协议,按照协议规定,总线空闲时两线为高,当进行通信时,SDA在SCL高电平时由高变低表示通信开始( void iic_start(void) ),以后传输数据,SDA只能在SCL为低的时候才能发生变化,在SCL上升抓取数据;而停止位是在SCL高时SDA由低变高(void iic_stop(void) )。其实只要满足了协议要求最终两线处于什么状态也许都是可以的,或者你也可以试下在某些地方将SCL最终由低又拉为高是否能正常,当然首要还是在符合协议规定的前提下。
多字节读取的时候,每个字节都需要给出应答,但是,不对最后一个字节应答所以,对同样应答操作的数据字节数要-1,最后一个字节单独读取并不应答

7,延时时间如何计算是多少 下例 void delay1unsigned char x

10ms
这个最好看反汇编,一般看主频和指令周期来确定
char*转换qt下面,字符串都用qstring,确实给开发者提供了方便,想想vc里面定义的各种变量类型,而且函数参数类型五花八门,经常需要今年新那个类型转换qt再使用第三方开源库时,由于库的类型基本上都是标准的类型,字符串遇的多的就是char*类型在qt下怎样将qstring转char*呢,需要用到qbytearray类,qbytearray类的说明详见qt帮助文档。因为char*最后都有一个/0作为结束符,而采用qstring::tolatin1()时会在字符串后面加上/0方法如下:qstring str;char* ch;qbytearray ba = str.tolatin1(); ch=ba.data();这样就完成了qstring向char*的转化。经测试程序运行时不会出现bug注意第三行,一定要加上,不可以str.tolatin1().data()这样一部完成,可能会出错。补充:以上方法当qstring里不含中文时,没有问题,但是qstring内含有中文时,转换为char*就是乱码,采用如下方法解决:方法1:添加gbk编码支持:#include qtextcodec::setcodecfortr(qtextcodec::codecforname("gbk")); qtextcodec::setcodecforlocale(qtextcodec::codecforname("gbk")); 然后改变上面的第三行为:qbytearray ba = str.toloacl8bit(); toloacl8bit支持中文 方法2: 先将qstring转为标准库中的string类型,然后将string转为char*,如下: std::string str = filename.tostdstring(); const char* ch = str.c_str();
delay()是按毫秒为单位的 10就是10毫秒
这要看程序代码运行时间了

文章TAG:标准iic协议延时是多少标准  协议  延时  
下一篇