📄 iicbusrom.c
字号:
//I2cE2pRom的读写操作
//读写操作之间需要一个(5ms)以上的延时
#include <REG52.H>
#define uchar unsigned char
#define uint unsigned int
sbit SCL = P3^6;
sbit SDA = P3^7;
void start()//开始信号
{
SDA = 1;
SCL = 1;
SDA = 0;
}
void stop()//结束信号
{
SDA = 0;
SCL = 1;
SDA = 1;
}
void respond()//应答信号
{
uchar t;
SCL = 1;
while((SDA==1)&&(t<250)) t++;
SCL = 0;;
}
void softwareReset()//软复位
{
uchar c;
start();
SDA = 1;
for(c=0;c<9;c++)
{
SCL = 1;
SCL = 0;
}
start();
stop();
}
void writeByte(uchar byte)
{
uchar c;
for(c=0;c<8;c++)
{
byte <<= 1;//先将dat的MSB左移出到PSW的CY位
SCL = 0;
SDA = CY; //将数据送给SDA
SCL = 1;
}
SCL = 0;
SDA = 1;//释放
}
uchar readByte()
{
uchar byte,temp,c;
SCL = 0;
for(c=0;c<8;c++)
{
byte <<= 1;//先将byte的LSB清零,准备接收数据
SCL = 1;
temp = SDA;
byte |= temp;
SCL = 0;
}
return byte;
}
//在某个E2PROM上的某个地址写一个字节数据;DeviceAdd的LSB为0,
//表示要发送数据,即DeviceAdd为1010xxx0
void writeData(uchar DeviceAdd, WordAdd, ByteData)
{
start(); //先在SDA上给一个开始信号
writeByte(DeviceAdd);//在SDA上给要写数据的E2PROM的地址,进行设备寻址
respond(); //等待特定E2PROM的应答信号
writeByte(WordAdd); //给特定E2PROM送开始写数据的地址
respond(); //等待特定E2PROM的应答信号
writeByte(ByteData); //把数据写入E2PROM
respond(); //等待特定E2PROM的应答信号
stop();
}
//在某个E2PROM上的某个地址读一个字节数据;DeviceAdd的LSB为0,
//即DeviceAdd为1010xxx0
uchar readData(uchar DeviceAdd, WordAdd)
{
uchar ReadAdd,dat;
ReadAdd = DeviceAdd|0x01;//DeviceAdd的LSB改为1,表示要读数据
//开始读数据动作
start(); //先在SDA上给一个开始信号
writeByte(DeviceAdd);//在SDA上给要读数据的E2PROM的地址,进行设备寻址
respond(); //等待特定E2PROM的应答信号
writeByte(WordAdd); //给特定E2PROM送要读数据的地址
respond(); //等待特定E2PROM的应答信号
start(); //再先在SDA上给一个开始信号
writeByte(ReadAdd);//再在SDA上给要读数据的E2PROM的地址,其LSB已改为1
respond(); //等待特定E2PROM的应答信号
dat = readByte(); //读数据
stop();
return dat; //返回所读的数据
}
/*
//开始测试
void delay(uint time)
{
uint i,j;
for(i=time;i>0;i--)
for(j=125;j>0;j--); //在11.0592的晶振下,延时大约1ms
}
void main()
{
softwareReset();
writeData(0xa0,1,0x99);//在1010000E2PROM的地址1上写入数据0x99
delay(10); //写入数据后延时>5ms,以便E2PROM将数据写入ROM
P1 = readData(0xa0,1); //在1010000E2PROM的地址1上读出数据,并赋予P1口,驱动LED显示
while(1);
}
//测试结束
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -