📄 i2c.c
字号:
/**********************************
函数名:I2C.c
功 能:AT24C32读写函数
**********************************/
#include <W77C32.h>
#include <intrins.h>
#include "hal.h"
#include "I2C.h"
//I2C起始
void I2C_START(void)
{I2C_SCL=1;
_NOP();
I2C_SDA=1;
_NOP();
I2C_SDA=0;
_NOP();
I2C_SCL=0;
_NOP();
}
//I2C停止
void I2C_STOP(void)
{I2C_SDA=0;
_NOP();
I2C_SCL=1;
_NOP();
I2C_SDA=1;
_NOP();
}
//等待I2C应答
void I2C_ACK(void)
{uint i=0xffff;
I2C_SDA=1;
_NOP();
I2C_SCL=1;
_NOP();
do{i--;
if(I2C_SDA!=1)
{I2C_SCL=0;i=0;}
}while(i!=0);
I2C_SCL=0;
_NOP();
}
//I2C写8位
void I2C_WRITE_8BIT(uchar dat)
{uchar i;
for(i=0;i<8;i++)
{I2C_SDA=dat&0x80;
_NOP();
I2C_SCL=1;
_NOP();
I2C_SCL=0;
_NOP();
dat<<=1;
}
I2C_ACK();
}
//I2C读8位
uchar I2C_READ_8BIT(void)
{uchar i,dat=0;
I2C_SDA=1;
for(i=0;i<8;i++)
{I2C_SCL=1;
_NOP();
if(I2C_SDA==1)
{dat|=0x01;}
I2C_SCL=0;
if(i<7)
{dat<<=1;}
}
return(dat);
}
//I2C读指定地址数据
uchar I2C_READ(uint addr)
{uchar dat;
I2C_START();
I2C_WRITE_8BIT(OP_WRITE);
I2C_WRITE_8BIT((uchar)(addr/256));
I2C_WRITE_8BIT((uchar)(addr%256));
I2C_START();
I2C_WRITE_8BIT(OP_READ);
dat=I2C_READ_8BIT();
I2C_STOP();
return(dat);
}
//I2C写数据到指定地址
void I2C_WRITE(uint addr,uchar dat)
{I2C_START();
I2C_WRITE_8BIT(OP_WRITE);
I2C_WRITE_8BIT((uchar)(addr/256));
I2C_WRITE_8BIT((uchar)(addr%256));
I2C_WRITE_8BIT(dat);
I2C_STOP();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -