读字节程序如下:
READ: MOV R0.#08H 一个字节8BIT LOP2: SETB SCL ACALL DELAY 转延时程序 MOV C,SDA RLC A CLR SCL ACALL DELAY DJNZ R0,LOP2 CJNE R7,#1,LOP3 R7是要读8个字节 SETB SDA AJMP SETOK LOP3: CLR SDA SETOK: ACALL DELAY SETB SCL ACALL DELAY CLR SCL ACALL DELAY SETB SDA RET 红色部分的程序我不是很明白,我不知道这样理解是否正确。 如果R7为1,那是读最后一个字节的数据,SDA拉高,跳SETOK,执行延时,拉高SCL,I2C停止。继续延迟,后面再为什么要再CLR SCL和SETB SDA什么作用呢?
如果R7不为1,则代表还有数据要读,转LOP3,延时,拉低SDA是代表51确认读取到了数据?拉高SCL 响应? 如果是响应的话那再CLR SCL和SETB SDA什么作用呢? 望指教,谢谢哈。 |