254或256也可以, 差不多一小段时间 |
QWE4562012 发表于 2020-7-28 18:10 C我不会,我只会汇编 |
Y_G_G 发表于 2020-7-28 09:01 你现在有自己做产品不 用C语言 |
问题1:这是IIC通讯中的的等待响应程序,没有什么是"255",你喜欢的话可以是12345或者是655353555,这个是作者自己写,就是查询255次,看IIC接收器有没有响应,这并不是一个严谨的程序 问题2:这个是IIC的写入 问题3:这个是IIC的读取 2和3原理是一样的,但你并没有认真看数字电路方面的东西,这个属于移位寄存器这一块的 对于单片机编程,基础很重要,而且基础要花很多时间去学,不然,你看后面的代码基本是没有一句你能真正理解的,你要是理解了,也就是好像明白它在说什么而已,实际上,你看了那么久的C语言,估计是一点用都没有 |
QWE4562012 发表于 2020-7-27 18:19 在这段程序里,CY是移位操作时,移出累加器的那个位, 这段话,对这段程序理解没有任何帮助。 |
QWE4562012 发表于 2020-7-27 18:19 在这里,CY是移位运算时,移出累加器的那个位,进入CY |
QWE4562012 发表于 2020-7-27 18:21 接收数据 |
gbchang 发表于 2020-7-27 15:52 那K左移一位再火上0或者1 是什么目的 |
gbchang 发表于 2020-7-27 15:56 51单片机Cy位即baiPSW.7,是51单片机算数运算du中的进位借位标zhi志,根据算数运算结果由系统置位或复位dao,也可以编程置位或复位。置位指令为:SETB C;复位指令为CLR C。 |
其实,楼主应该问, 这个 CY 是干什么的,在什么地方定义的。这样才符合I2C提问的常规场景。 |
j 的值是sda,sda是一个管脚,值可能是 1 或者 0 |
土豆西红柿 发表于 2020-7-27 15:00 这个j是多少 |
这明显是 模拟方式发送 IIC 字节呀。在 C 语言中调用 CY 寄存器,是个有深度的想法。设计者对MCU底层汇编还是比较在行的。 |
QWE4562012 发表于 2020-7-27 12:04 k先左移1位,然后位运算或上j的值,最后在赋值给k |
TTQ001 发表于 2020-7-26 23:53 将SDA读取到j,K右移1位并与j结合;-----------------你讲下这个具体是怎么运算的好不 |
mm201 发表于 2020-7-26 23:59 CY是寄存器的一个高位符号 给到SDA好抽象啊 |
lyxing 发表于 2020-7-26 21:40 直接发一个字节按八次发不就行了吗?他这样做很麻烦啊 |
mm201 发表于 2020-7-26 23:59 您好,为什么是255呢 |
第一张图是说,SDA为高,程序自加(起延时作用)溢出。第二张图是,写sda高低,通过参数传递 第三张图是,把每一次读回来的一个位 或操作,理解为读一个位。 |
首先,I2C SDA高且变量i不大于255,请保持递增。 第二,将SDA设置为CY(高或低); 第三,将SDA读取到j,K右移1位并与j结合; |
本帖最后由 windows100 于 2020-7-26 22:37 编辑 第一张图是说,SDA为高则总线不忙退出,或者程序自加(起延时作用)溢出。第二张图是,写sda高低,通过参数传递 第三张图是,把每一次读回来的一个位 或操作,理解为读一个位。你应该还有个for循环没有截图进来。 不要追问了,我不一定按时回答 |
这个应是模拟I2C总线传输数据流程,可以参考I2C总线传输协议。第一图SDA拉高延时,第二图发送一位数据,第三图接收一位数据后,与K合并,完成一字节的接收。 |
位运算 左移 |