📄 main.c.bak
字号:
Delay(10);
CLR_F_SCL();
Delay(10);
SETB_F_SCL();
Delay(10);
SETB_F_SDA();
return 0xFFFF;
}
void FM3130I2RdData(unsigned int Addr, unsigned char *RdData, unsigned short usnCount)
{
unsigned short i = 0;
unsigned short j = 0;
unsigned short usErrTime = 10;//因故障接收方无ACK,超时值为255。
unsigned short Addr_H,Addr_L;
//停止信号******************************************************************************************
CLR_F_SDA();
Delay(10);
CLR_F_SCL();
Delay(10);
SETB_F_SCL();
Delay(10);
SETB_F_SDA();
Delay(10);
//开始信号******************************************************************************************
SETB_F_SDA();
Delay(10);
SETB_F_SCL();
Delay(10);
CLR_F_SDA();
Delay(10);
CLR_F_SCL();
Delay(10);
//从机地址******************************************************************************************
//存储器为0xA0
for(i = 0; i < 8; i++)
{
CLR_F_SCL();
GPIOPinWrite(GPIO_PORTG_BASE, GPIO_PIN_4, (160L << 8) >> (11 - i));
Delay(10);
SETB_F_SCL();
Delay(10);
}
//等待ACK
usErrTime = 100;
CLR_F_SCL();
Delay(10);
SETB_F_SCL();
GPIODirModeSet(GPIO_PORTG_BASE, GPIO_PIN_4, GPIO_DIR_MODE_IN); //PG4置为输入
Delay(10);
while(GPIOPinRead(GPIO_PORTG_BASE, GPIO_PIN_4))
{
usErrTime--;
if(!usErrTime)
{
CLR_F_SCL();
//停止信号
CLR_F_SDA();
Delay(10);
CLR_F_SCL();
Delay(10);
SETB_F_SDA();
Delay(10);
SETB_F_SCL();
Delay(10);
GPIODirModeSet(GPIO_PORTG_BASE, GPIO_PIN_4, GPIO_DIR_MODE_OUT); //PG4置为输出
}
}
GPIODirModeSet(GPIO_PORTG_BASE, GPIO_PIN_4, GPIO_DIR_MODE_OUT); //PG4置为输出
CLR_F_SCL();
//发送数据地址**************************************************************************************
Addr_H = (Addr &0xFF00)>>8;
Addr_L = Addr &0x0FF;
//高字节
for(i = 0; i < 8; i++)
{
CLR_F_SCL();
GPIOPinWrite(GPIO_PORTG_BASE, GPIO_PIN_4, (Addr_H << 8) >> (11 - i));
Delay(10);
SETB_F_SCL();
Delay(10);
}
//等待ACK
usErrTime = 100;
CLR_F_SCL();
Delay(10);
SETB_F_SCL();
Delay(10);
GPIODirModeSet(GPIO_PORTG_BASE, GPIO_PIN_4, GPIO_DIR_MODE_IN); //PG4置为输入
while(GPIOPinRead(GPIO_PORTG_BASE, GPIO_PIN_4))
{
usErrTime--;
if(!usErrTime)
{
CLR_F_SCL();
//停止信号
CLR_F_SDA();
Delay(10);
CLR_F_SCL();
Delay(10);
SETB_F_SDA();
Delay(10);
SETB_F_SCL();
GPIODirModeSet(GPIO_PORTG_BASE, GPIO_PIN_4, GPIO_DIR_MODE_OUT); //PG4置为输出
Delay(10);
}
}
GPIODirModeSet(GPIO_PORTG_BASE, GPIO_PIN_4, GPIO_DIR_MODE_OUT); //PG4置为输出
CLR_F_SCL();
//低字节
for(i = 0; i < 8; i++)
{
CLR_F_SCL();
GPIOPinWrite(GPIO_PORTG_BASE, GPIO_PIN_4, (Addr_L << 8) >> (11 - i));
Delay(10);
SETB_F_SCL();
Delay(10);
}
//等待ACK
usErrTime = 100;
CLR_F_SCL();
Delay(10);
SETB_F_SCL();
GPIODirModeSet(GPIO_PORTG_BASE, GPIO_PIN_4, GPIO_DIR_MODE_IN); //PG4置为输入
Delay(10);
while(GPIOPinRead(GPIO_PORTG_BASE, GPIO_PIN_4))
{
usErrTime--;
if(!usErrTime)
{
CLR_F_SCL();
//停止信号
CLR_F_SDA();
Delay(10);
CLR_F_SCL();
Delay(10);
SETB_F_SDA();
Delay(10);
SETB_F_SCL();
GPIODirModeSet(GPIO_PORTG_BASE, GPIO_PIN_4, GPIO_DIR_MODE_OUT); //PG4置为输出
Delay(10);
}
}
GPIODirModeSet(GPIO_PORTG_BASE, GPIO_PIN_4, GPIO_DIR_MODE_OUT); //PG4置为输出
CLR_F_SCL();
Delay(10);
//开始信号******************************************************************************************
SETB_F_SDA();
Delay(10);
SETB_F_SCL();
Delay(10);
CLR_F_SDA();
Delay(10);
CLR_F_SCL();
Delay(10);
//从机地址******************************************************************************************
//存储器为0xA0状态为读
for(i = 0; i < 8; i++)
{
CLR_F_SCL();
GPIOPinWrite(GPIO_PORTG_BASE, GPIO_PIN_4, (161L << 8) >> (11 - i));
Delay(10);
SETB_F_SCL();
Delay(10);
}
//等待ACK
usErrTime = 100;
CLR_F_SCL();
Delay(10);
SETB_F_SCL();
GPIODirModeSet(GPIO_PORTG_BASE, GPIO_PIN_4, GPIO_DIR_MODE_IN); //PG4置为输入
Delay(10);
while(GPIOPinRead(GPIO_PORTG_BASE, GPIO_PIN_4))
{
usErrTime--;
if(!usErrTime)
{
CLR_F_SCL();
//停止信号
CLR_F_SDA();
Delay(10);
CLR_F_SCL();
Delay(10);
SETB_F_SDA();
Delay(10);
SETB_F_SCL();
GPIODirModeSet(GPIO_PORTG_BASE, GPIO_PIN_4, GPIO_DIR_MODE_OUT); //PG4置为输出
Delay(10);
}
}
GPIODirModeSet(GPIO_PORTG_BASE, GPIO_PIN_4, GPIO_DIR_MODE_OUT); //PG4置为输出
CLR_F_SCL();
Delay(10);
//接收数据**************************************************************************************
for(j = 0;j < (usnCount - 1); j++)
{
for(i = 0; i < 8; i++)
{
CLR_F_SCL();
Delay(10);
SETB_F_SCL();
Delay(10);
RdData[j] |= GPIOPinRead(GPIO_PORTG_BASE, GPIO_PIN_4) >> 4;
RdData[j] = RdData[j] << 1;
}
//发送ACK
CLR_F_SDA();
Delay(10);
SETB_F_SCL();
Delay(10);
CLR_F_SCL();
Delay(10);
}
for(i = 0; i < 8; i++)
{
CLR_F_SCL();
Delay(10);
SETB_F_SCL();
Delay(10);
RdData[j] |= GPIOPinRead(GPIO_PORTG_BASE, GPIO_PIN_4) >> 4;
RdData[j] = RdData[j] << 1;
}
//发送NOTACK
SETB_F_SDA();
Delay(10);
SETB_F_SCL();
Delay(10);
CLR_F_SCL();
Delay(10);
//停止信号******************************************************************************************
CLR_F_SDA();
Delay(10);
CLR_F_SCL();
Delay(10);
SETB_F_SCL();
Delay(10);
SETB_F_SDA();
Delay(10);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -