/*
本程序是IIC作为主设备(主动发起启动信号)
*/
#define uint8_t unsigned char
#define DEV_ADDR 0x70 //需要控制的设备地址
#define ADDRESS_DEV (DEV_ADDR << 7)
int SDA = 0; // 某GPIO_DAT;如51单片机时 #define SDA P1_0
int SCL = 0; // 某GPIO_CLK;如51单片机时 #define SCL P1_1
void I2C_SendByte(uint8_t _ucByte)
{
uint8_t i;
IIC_Delay();
/* 先发送字节的高位bit7 */
for (i = 0; i < 8; i++)
{
if (_ucByte & 0x80)
{
SDA = 1;
}
else
{
SDA = 0;
}
IIC_Delay();
SCL = 1;
IIC_Delay();
SCL = 0;
if (i == 7)
{
SDA = 1;
}
_ucByte <<= 1; /* 左移一个bit */
IIC_Delay();
}
}
uint8_t I2C_ReadByte(void)
{
uint8_t i;
uint8_t value = 0;
IIC_Delay();
// 读到第1个bit为数据的bit7
for (i = 0; i < 8; i++)
{
value <<= 1;
SCL = 1;
IIC_Delay();
if (SDA == 1)
{
value++;
[单片机] GPIO模拟IIC
于 2023-02-03 22:49:33 首次发布
该程序实现了IIC协议中的主设备功能,包括发送启动和停止信号、读写数据以及应答机制。通过定义GPIO口模拟SDA和SCL线,对指定设备地址进行通信,支持写传感器寄存器和读取传感器数据操作。

最低0.47元/天 解锁文章
728

被折叠的 条评论
为什么被折叠?



