110 lines
1.8 KiB
C
110 lines
1.8 KiB
C
/*
|
|
* IIC.c
|
|
*
|
|
* Created on: 2022年03月12日
|
|
* Author: User
|
|
*/
|
|
|
|
#include <Main.h>
|
|
|
|
static void Start1(void);
|
|
static void Write1(uint8_t Data);
|
|
static void ACK1(void);
|
|
static void Stop1(void);
|
|
static void Delay2us(uint8_t); //@16.000MHz 2us
|
|
|
|
IIC_t IIC_1 = {
|
|
Start1,
|
|
Write1,
|
|
ACK1,
|
|
Stop1};
|
|
|
|
|
|
/*
|
|
* @name Start1
|
|
* @brief IIC1启动命令
|
|
* @param None
|
|
* @retval None
|
|
*/
|
|
static void Start1(void)
|
|
{
|
|
SCL_1 = HIGH;
|
|
SDA_1 = HIGH;
|
|
Delay2us(1); //@16.000MHz // 2微秒延时
|
|
SDA_1 = LOW; //时钟线高电平 拉低数据线以为传输开始
|
|
}
|
|
|
|
/*
|
|
* @name Write1
|
|
* @brief IIC1写命令
|
|
* @param Data
|
|
* @retval None
|
|
*/
|
|
static void Write1(uint8_t Data)
|
|
{
|
|
uint8_t i = 0;
|
|
|
|
SCL_1 = LOW; //拉低时钟线 数据可以变化
|
|
Delay2us(1); // 1微秒延时
|
|
for (i = 0; i < 8; i++)
|
|
{
|
|
if (Data & 0x80)
|
|
SDA_1 = HIGH;
|
|
else
|
|
SDA_1 = LOW;
|
|
|
|
Delay2us(1); // 1微秒延时
|
|
SCL_1 = LOW;
|
|
Delay2us(1); // 1微秒延时
|
|
SCL_1 = HIGH;
|
|
Delay2us(1); // 1微秒延时
|
|
SCL_1 = LOW;
|
|
Data <<= 1;
|
|
}
|
|
}
|
|
|
|
/*
|
|
* @name ACK1
|
|
* @brief IIC1应答命令
|
|
* @param None
|
|
* @retval None
|
|
*/
|
|
static void ACK1(void)
|
|
{
|
|
static uint8_t timeout = 1;
|
|
SCL_1 = 1;
|
|
Delay2us(1);
|
|
SCL_1 = 0;
|
|
Delay2us(1);
|
|
while ((SDA_1) && (timeout <= 200))
|
|
{
|
|
timeout++;
|
|
}
|
|
SCL_1 = 0;
|
|
}
|
|
/*
|
|
* @name Stop1
|
|
* @brief IIC1停止命令
|
|
* @param None
|
|
* @retval None
|
|
*/
|
|
static void Stop1(void)
|
|
{
|
|
SCL_1 = 1;
|
|
SDA_1 = 0;
|
|
Delay2us(1);
|
|
SDA_1 = 1; //时钟线高电平时 拉高数据线为停止信号
|
|
}
|
|
|
|
/*
|
|
* @name Delay2us
|
|
* @brief 延时2uS
|
|
* @param None
|
|
* @retval None
|
|
*/
|
|
static void Delay2us(uint8_t fui_i) //@16.000MHz 2us
|
|
{
|
|
// uint8_t fui_i =1;
|
|
while(fui_i--);
|
|
}
|