想珍宝岛自卫反击战sda

单片机 iic 应答信号程序中有一句 while((sda==1)&&(i&250))i++ 我想知道 为什么i&250,250这个数字从哪_百度知道
单片机 iic 应答信号程序中有一句 while((sda==1)&&(i&250))i++ 我想知道 为什么i&250,250这个数字从哪
来的,怎么不是等,还有即便是i&250了,那就怎么样呢,一个是1(sda),而另一个是一个比较的公式,他们取逻辑与 有什么意义。i 代表是什么东西呢。程序如下:void respons礌琅百赶知非版石保将(){ scl=1;delay(5us);while((sda==1)&&(i&250))i++;
scl=0;delay();}
这个程序24c0县綘愤咳莅纠缝穴俯膜8 上的,书上说 24c08 的器件地址是 0101 .换算成十进制是 5,而这里的i &250.
250+5=255,刚好是一个二进的 1111 。不知道和这有没有关系。、。
提问者采纳
首先这段程序是一个等待ACK的程序先看一下IIC规范是怎么说的:IIC总线上的所有数据都是以8位字节传送的,发送端每发送一个字节,就在第9个时钟脉冲期间释放数据线,由接收端反馈一个应答信号。对于有效应答信号ACK的要求是,接收方在第9个时钟脉冲之前的低电平期间将SDA线拉低,并且确保在该时钟的高电平期间为稳定的低电平。好了,现在针对你的程序进行解读:注意这句“接收方在第9个时钟脉冲之前的低电平期间将SDA线拉低,并且确保在该时钟的高电平期间为稳定的低电平”,程序中首先设置了SCL=1,然后开始等敦蹱策咳匕纠察穴畅膜待,如果sda一直为1且i&250(可以根据情况酌情设定,一般设置为250),则说明没有应答信号到来(sda=1)且未超时(i&250),那么继续等待ACK。如果sda一直deng一直为1,则说明一直没有应答信号,那么等待250次就不再等待了(不可能一直等待下去),如果等到sda=0,说明等到了应答信号,则将scl至0。scl从1到0的变化就是为了产生第9个时钟脉冲。只是我觉得你是初学者吧,说太简略了你肯定不懂,我当初也是这样的,好好用功吧.
提问者评价
其他类似问题
按默认排序
其他2条回答
为了防止IIC的sda信号异常惩预罐柑忒纺闺尸酣建导致在while的死循环,用i来限定sda跳变为0等待时间,如果sda==0则跳出while循环,如果sda==1,最多等待i的255次增量计数后跳出循环,i++是在while循环体内的。IIC对时序有严格的要求,由于各种原因接口上信号异常是有可能发生的。器件地址0101是器件的标识,多种IIC器件通信时没有这个标识就乱套了,这与i&255八辈子扯不上关系,i就是一个计时等待的变量。你的问题补充中对24C08器件地址的理解是错误的,有的还用i &100,有的连i都没有,那又怎么理解呢。
是为了等待ACK信号。如果回应了ACK即SDA=0,就表示从机应答了,那程序可以继续执行。如果没有应答(SDA=1),表示从机可能有问题,这样就计算超时,即i的值,当i++大于250时认为超时,就继续往下执行,不然就会卡在这里不动了。
iic的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁&&关注百姓微信公众号,尽享快捷刷新、信息推送、抽奖活动等众多微信功能您只需要:1 &用微信“扫一扫”右边的二维码2 &在微信中“关注”我们&|&|||||想做宣传的朋友可以联系我,sda宣传工具,只要把软&提示信息设置为“搞定了!”状态后,其他用户将无法查看您的联系方式。您确认搞定了这条信息吗?提示重新发布后可使用“刷新”将发布时间更新为最新时间,并将信息排到第一页。&&11月16日 12:31 &...次浏览 &信息编号: &1388326****(重庆)&&百姓网号码保护功能介绍&&拨打百姓400转呼电话绝不收取您任何额外费用,该信息发布人仍能看到您的来电号码。联系时,请一定说明在百姓网看到的,谢谢!见面最安全,发现问题请举报。求职意向:销售/业务员,房产经纪人,金融/银行/保险性别:男QQ号:地区:&-&重庆&想做宣传的朋友可以联&&系我,sda宣传工具,只要把软件打开,编辑想发送的内容,周围1到3公里的手机自动接收,每小时可发2万到5万条,可免费试效果
赞助商链接
反馈建议描述:请填写描述手机号:请填写手机号请填写手机号3.9&&关注百姓微信公众号,尽享快捷刷新、信息推送、抽奖活动等众多微信功能您只需要:1 &用微信“扫一扫”右边的二维码2 &在微信中“关注”我们&|&|||||信息编号:,删除时间:11月14日。重庆全职求职意向最新信息今天 22:15重庆今天 22:15九龙坡 - 沙坪坝今天 22:10江北 - 复盛女&/&22岁今天 22:04江北 - 复盛女&/&22岁今天 21:58彭水 - 彭水河堡滨江路男&/&35岁今天 21:47沙坪坝 - 中梁男&/&30岁今天 21:31双桥 - 双路男&/&28岁今天 19:02渝北 - 渝北周边男&/&36岁今天 17:58九龙坡 - 石桥铺男&/&21岁今天 17:08渝北 - 两路 - 工业园区西区女&/&23岁反馈建议描述:请填写描述手机号:请填写手机号请填写手机号4.2大哥,i2c协议上说sda上数据若想改变,得需scl为低电平。那传输数据时直接将scl置零不行么?何必置零又置1_百度知道
大哥,i2c协议上说sda上数据若想改变,得需scl为低电平。那传输数据时直接将scl置零不行么?何必置零又置1
难道数据不改变时scl得必须为高电平么?
提问者采纳
一个时序电子系统想要工作必须有时钟,就像划船比赛的时候要喊口号一样。I2C是串行通信,每一bit数据的传输至少需要一个时钟脉冲,时钟到来时让电路中的触发器有所动作,将数据保存起来,这个过程中需要保证SDA线上数据的稳定。因此SCL叫做时钟线,传输的是时钟信号。
提问者评价
其他类似问题
低电平的相关知识
其他1条回答
通信协议规定的你直接发送data,对方不识别。所谓通信协议就是暗号,没有暗号,怎么识别你到底是不是他要的找的那个人
我可能没把我意思表达清楚。我看了i2c的通信协议,然后去看别人的程序,大部分内容结合协议都能理解,但有一个问题不懂,就是,我发现每传送一个数据都需给scl一个脉冲,先置1再置0,可这点好像在协议上并没有规定啊!能扯上关系的顶多也就是“SDA在SCL为高时必须保持不变,而在SCL为低时变化数据才有效”,可这也不能得出让SCL置1再置0的结论吧!还望诲人不倦,指点迷津。
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 日本自卫队 的文章

 

随机推荐