/* * IIC.c * * Created on: 2023年5月16日 * Author: User */ #include "IIC.h" static void Start(void); static void Write(u8 Data); static void ACK(void); static void Stop(void); static void Delay1us(); #define DELAY Delay1us() IIC_t IIC = {Start, Write, ACK, Stop}; static void Start(void) { SCL = HIGH; SDA = HIGH; DELAY; //@20.000MHz // 1微秒延时 SDA = LOW; // 时钟线高电平 拉低数据线以为传输开始 } static void Write(u8 Data) { u8 i; SCL = LOW; // 拉低时钟线 数据可以变化 DELAY; // 1微秒延时 for (i = 0; i < 8; i++) { if (Data & 0x80) SDA = HIGH; else SDA = LOW; DELAY; // 1微秒延时 SCL = LOW; DELAY; // 1微秒延时 SCL = HIGH; DELAY; // 1微秒延时 SCL = LOW; Data <<= 1; } } static void ACK(void) { // static uint8_t timeout = 0; SCL = HIGH; DELAY; SCL = LOW; // while ((SDA_1) || (timeout <= 10)) // { // timeout++; // } DELAY; DELAY; SCL = LOW; } static void Stop(void) { SCL = HIGH; SDA = LOW; DELAY; SDA = HIGH; // 时钟线高电平时 拉高数据线为停止信号 } static void Delay1us() { //@20.000MHz unsigned char i; _nop_(); _nop_(); i = 2; while (--i) ; }