Files
BLTouchTest/App/IIC.c
2023-05-19 15:50:27 +08:00

83 lines
1.2 KiB
C

/*
* 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)
;
}