标题: 这三条C语言赋值语句的目的是干什么? [打印本页]

作者: QWE4562012    时间: 2020-7-26 17:45
标题: 这三条C语言赋值语句的目的是干什么?
这三条赋值语句的目的是干什么?

51hei图片20200726174208.png (287.56 KB, 下载次数: 64)

51hei图片20200726174208.png

51hei图片20200726174217.png (395.45 KB, 下载次数: 64)

51hei图片20200726174217.png

51hei图片20200726174202.png (275.3 KB, 下载次数: 65)

51hei图片20200726174202.png

作者: linpx    时间: 2020-7-26 21:08
位运算 左移
作者: lyxing    时间: 2020-7-26 21:40
这个应是模拟I2C总线传输数据流程,可以参考I2C总线传输协议。第一图SDA拉高延时,第二图发送一位数据,第三图接收一位数据后,与K合并,完成一字节的接收。
作者: windows100    时间: 2020-7-26 22:31
本帖最后由 windows100 于 2020-7-26 22:37 编辑

第一张图是说,SDA为高则总线不忙退出,或者程序自加(起延时作用)溢出。第二张图是,写sda高低,通过参数传递
第三张图是,把每一次读回来的一个位 或操作,理解为读一个位。你应该还有个for循环没有截图进来。
不要追问了,我不一定按时回答

作者: TTQ001    时间: 2020-7-26 23:53
首先,I2C SDA高且变量i不大于255,请保持递增。 第二,将SDA设置为CY(高或低); 第三,将SDA读取到j,K右移1位并与j结合;
作者: mm201    时间: 2020-7-26 23:59
第一张图是说,SDA为高,程序自加(起延时作用)溢出。第二张图是,写sda高低,通过参数传递
第三张图是,把每一次读回来的一个位 或操作,理解为读一个位。
作者: QWE4562012    时间: 2020-7-27 11:50
mm201 发表于 2020-7-26 23:59
第一张图是说,SDA为高,程序自加(起延时作用)溢出。第二张图是,写sda高低,通过参数传递
第三张图是, ...

您好,为什么是255呢
作者: QWE4562012    时间: 2020-7-27 11:52
lyxing 发表于 2020-7-26 21:40
这个应是模拟I2C总线传输数据流程,可以参考I2C总线传输协议。第一图SDA拉高延时,第二图发送一位数据,第 ...

直接发一个字节按八次发不就行了吗?他这样做很麻烦啊
作者: QWE4562012    时间: 2020-7-27 11:54
mm201 发表于 2020-7-26 23:59
第一张图是说,SDA为高,程序自加(起延时作用)溢出。第二张图是,写sda高低,通过参数传递
第三张图是, ...

CY是寄存器的一个高位符号  给到SDA好抽象啊
作者: QWE4562012    时间: 2020-7-27 12:04
TTQ001 发表于 2020-7-26 23:53
首先,I2C SDA高且变量i不大于255,请保持递增。 第二,将SDA设置为CY(高或低); 第三,将SDA读取到j,K ...

将SDA读取到j,K右移1位并与j结合;-----------------你讲下这个具体是怎么运算的好不
作者: 土豆西红柿    时间: 2020-7-27 15:00
QWE4562012 发表于 2020-7-27 12:04
将SDA读取到j,K右移1位并与j结合;-----------------你讲下这个具体是怎么运算的好不

k先左移1位,然后位运算或上j的值,最后在赋值给k
作者: gbchang    时间: 2020-7-27 15:16
这明显是 模拟方式发送 IIC 字节呀。在 C 语言中调用 CY 寄存器,是个有深度的想法。设计者对MCU底层汇编还是比较在行的。
作者: QWE4562012    时间: 2020-7-27 15:49
土豆西红柿 发表于 2020-7-27 15:00
k先左移1位,然后位运算或上j的值,最后在赋值给k

这个j是多少
作者: gbchang    时间: 2020-7-27 15:52
QWE4562012 发表于 2020-7-27 15:49
这个j是多少

j 的值是sda,sda是一个管脚,值可能是 1 或者 0
作者: gbchang    时间: 2020-7-27 15:56
其实,楼主应该问, 这个 CY 是干什么的,在什么地方定义的。这样才符合I2C提问的常规场景。
作者: QWE4562012    时间: 2020-7-27 18:19
gbchang 发表于 2020-7-27 15:56
其实,楼主应该问, 这个 CY 是干什么的,在什么地方定义的。这样才符合I2C提问的常规场景。

51单片机Cy位即baiPSW.7,是51单片机算数运算du中的进位借位标zhi志,根据算数运算结果由系统置位或复位dao,也可以编程置位或复位。置位指令为:SETB C;复位指令为CLR C。
作者: QWE4562012    时间: 2020-7-27 18:21
gbchang 发表于 2020-7-27 15:52
j 的值是sda,sda是一个管脚,值可能是 1 或者 0

那K左移一位再火上0或者1 是什么目的
作者: gbchang    时间: 2020-7-28 08:35
QWE4562012 发表于 2020-7-27 18:21
那K左移一位再火上0或者1 是什么目的

接收数据
作者: gbchang    时间: 2020-7-28 08:51
QWE4562012 发表于 2020-7-27 18:19
51单片机Cy位即baiPSW.7,是51单片机算数运算du中的进位借位标zhi志,根据算数运算结果由系统置位或复位d ...

在这里,CY是移位运算时,移出累加器的那个位,进入CY
作者: gbchang    时间: 2020-7-28 08:53
QWE4562012 发表于 2020-7-27 18:19
51单片机Cy位即baiPSW.7,是51单片机算数运算du中的进位借位标zhi志,根据算数运算结果由系统置位或复位d ...

在这段程序里,CY是移位操作时,移出累加器的那个位,
这段话,对这段程序理解没有任何帮助。
作者: Y_G_G    时间: 2020-7-28 09:01
问题1:这是IIC通讯中的的等待响应程序,没有什么是"255",你喜欢的话可以是12345或者是655353555,这个是作者自己写,就是查询255次,看IIC接收器有没有响应,这并不是一个严谨的程序
问题2:这个是IIC的写入
问题3:这个是IIC的读取
2和3原理是一样的,但你并没有认真看数字电路方面的东西,这个属于移位寄存器这一块的
对于单片机编程,基础很重要,而且基础要花很多时间去学,不然,你看后面的代码基本是没有一句你能真正理解的,你要是理解了,也就是好像明白它在说什么而已,实际上,你看了那么久的C语言,估计是一点用都没有
作者: QWE4562012    时间: 2020-7-28 18:10
Y_G_G 发表于 2020-7-28 09:01
问题1:这是IIC通讯中的的等待响应程序,没有什么是"255",你喜欢的话可以是12345或者是655353555,这个是作者 ...

你现在有自己做产品不   用C语言
作者: Y_G_G    时间: 2020-7-28 20:40
QWE4562012 发表于 2020-7-28 18:10
你现在有自己做产品不   用C语言

C我不会,我只会汇编
作者: chaos2005    时间: 2020-7-29 08:06
254或256也可以, 差不多一小段时间




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1