完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
这是模拟应答的程序:
bit I2C_RecvACK()//处理器检测到SDA拉低就能知道外接IIC设备数据已经收到 { SCL = 1; //拉高时钟线 Delay5us(); //延时 CY = SDA; //读应答信号 SCL = 0; //拉低时钟线 Delay5us(); //延时 return CY; }我查了下资料,说:CY表示了运算是否有进位(或借位)。如果操作结果在最高位有进位(加法)或者借位(减法),则该位为1,否则为0。我想问, 1.怎么才算借位??。 2.SDA只有1或0,那他最高位就只有1位,怎么都进不上去啊,那CY不就一直是0吗?。 3.能不能直接设个变量,如 uchar flag;flag=SDA;return flag;这样可以不? |
|
相关推荐
4个回答
|
|
你先看看iic的原理,他是位操作的,你在往下看你的代码就知道了,还有你弄一个uchar的变量叫他接收位变量怎么理解?
|
|
|
|
就是把SDA引脚1或0赋值给这个变量,我不知道这样可不可以,我想着可以判断引脚是0还是1,那应该也可以把引脚是0或1赋值给一个变量的吧... |
|
|
|
是的,但是赋值给位变量
|
|
|
|
I2C单个位发送原理
I2C发送时,一个字节8位,需一位一位的发送,那么一个字节8位,如何单个单个发送呢 单片机中c语言“右移>>和左移<<”与CY 左移 << 0100 1111 << 左移一位:1001 1110 CY=0 ;第一位跑到CY上,最后一位补0 ; 在keil c51中,内部函数库INTRINS.H中_crol_(m,n)表示将m循环左移n位,第一位的跑到最后一位上。 右移>> 1000 1111 >> 右移一位 0100 0111 CY=1 ;第一位补0,最后一位跑到CY上; 利用单片机的左移<<”与CY两个功能,对一个字节的数据进行依次左移 第一次左移:0100 1111 << 左移一位:1001 1110;第一位是0,没有发生进位, CY=0 第二次左移:1001 1110 << 左移一位:001 11100;第一位是1,发生进位, CY=1 第三次左移:001 11100 << 左移一位:01 111000;第一位是0,没有发生进位, CY=0 第四次左移:01 111000 << 左移一位:1 111 0000;第一位是0,没有发生进位,CY=0 第五次左移:1 111 0000<< 左移一位:1110 0000; 第一位是1,发生进位, CY=1 …….. 这样就把数据的8个位依次移动到CY进位标志位里去了 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
《DNESP32S3使用指南-IDF版_V1.6》第三十五章 摄像头实验
632 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第三十章 DHT11数字温湿度传感器
671 浏览 0 评论
772 浏览 0 评论
【敏矽微ME32G070开发板免费体验】之原厂2812测试例程解析
1340 浏览 0 评论
1166 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12057 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-29 02:06 , Processed in 0.731123 second(s), Total 75, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号