📄 at24c02.c
字号:
/*******************************************************************
I2C存储器AT24C02读写实验
网址:http://www.kaifaban.com
功能:在AT24C02某一地址写入一个数据
再读出显示在P0口
********************************************************************/
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit SCL=P3^4;//串行时钟线
sbit SDA=P3^5;//串行数据线
sbit DsySelect=P3^7;//控制LED的74HC244所在IO口
//I2C延时程序
void I2cDelay(){
_nop_();_nop_();_nop_();_nop_();_nop_();
}
//I2C起始条件
void I2cStart(){
SDA=1;
_nop_();
SCL=1;
I2cDelay();
SDA=0;
I2cDelay();
SCL=0;//钳住I2C总线,准备发送或接收数据
_nop_();
}
//I2C停止条件
void I2cStop(){
SDA=0;
_nop_();
SCL=1;
I2cDelay();
SDA=1;
I2cDelay();
}
//发ACK应答
void I2cAck(){
SDA=0;
_nop_();
SCL=1;
I2cDelay();
SCL=0;
_nop_();
}
//发NOACK应答
void I2cNoAck(){
SDA=1;
_nop_();
SCL=1;
I2cDelay();
SCL=0;
_nop_();
}
//等待应答
bit WaitAck(){
uchar Time=255;
SDA=1;
_nop_();
SCL=1;
I2cDelay();
while(SDA){
Time--;
if(Time==0){
I2cStop();
return (0);
}
}
SCL=0;
_nop_();
return (1);
}
//I2C写一字节数据
void I2cWriteByte(uchar Data){
uchar i;
for(i=0;i<8;i++){
SCL=0;
I2cDelay();
SDA=(bit)(Data&0x80);
Data<<=1;
I2cDelay();
SCL=1;
I2cDelay();
}
SCL=0;
}
//I2C读一字节数据
uchar I2cReadByte(){
uchar i,TmpData=0;
SDA=1;
for(i=0;i<8;i++){
SCL=0;
I2cDelay();
SCL=1;
I2cDelay();
TmpData<<=1;
TmpData|=SDA;
}
SCL=0;
return(TmpData);
}
//I2C写数据到AT24C02
void I2cWrite(uchar Address,uchar Data){
I2cStart();//启动总线
I2cWriteByte(0xA0);//发送器件地址
WaitAck();
I2cWriteByte(Address);//发送器件子地址
WaitAck();
I2cWriteByte(Data);//发送数据
WaitAck();
I2cStop();
}
//I2C从AT24C02读数据
uchar I2cRead(uchar Address){
uchar TmpData;
I2cStart();//启动总线
I2cWriteByte(0xA0);//发送器件地址
WaitAck();
I2cWriteByte(Address);//发送器件子地址
WaitAck();
I2cStart();//启动总线
I2cWriteByte(0xA1);//发送器件地址
I2cAck();
TmpData=I2cReadByte();//读取数据
I2cNoAck();
I2cStop();
return(TmpData);
}
//主函数
main(){
uchar ReadData;
DsySelect=0;//打开LED
I2cWrite(0x00,0x12);//在地址0x00写入数据0x12
while(1){
ReadData=I2cRead(0x00);//读出地址为0x00的数据
P0=~ReadData;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -