📄 24c02.c
字号:
#include <reg51.h>
sbit DataClk = P1^0;
sbit DataBit = P1^1;
extern unsigned short AT24C02DelayTime;
unsigned short TempAT24C02DelayTime;
void RxWrite24C02StartBit()
{
DataClk = 0;
DataBit = 1;
TempAT24C02DelayTime=AT24C02DelayTime;
while(TempAT24C02DelayTime==AT24C02DelayTime);
DataClk = 1;
TempAT24C02DelayTime=AT24C02DelayTime;
while(TempAT24C02DelayTime==AT24C02DelayTime);
DataBit = 0;
TempAT24C02DelayTime=AT24C02DelayTime;
while(TempAT24C02DelayTime==AT24C02DelayTime);
DataClk = 0;
TempAT24C02DelayTime=AT24C02DelayTime;
while(TempAT24C02DelayTime==AT24C02DelayTime);
}
void RxWrite24C02StopBit()
{
DataClk = 0;
DataBit = 0;
TempAT24C02DelayTime=AT24C02DelayTime;
while(TempAT24C02DelayTime==AT24C02DelayTime);
DataClk = 1;
TempAT24C02DelayTime=AT24C02DelayTime;
while(TempAT24C02DelayTime==AT24C02DelayTime);
DataBit = 1;
TempAT24C02DelayTime=AT24C02DelayTime;
while(TempAT24C02DelayTime==AT24C02DelayTime);
DataClk = 0;
TempAT24C02DelayTime=AT24C02DelayTime;
while(TempAT24C02DelayTime==AT24C02DelayTime);
DataBit = 0;
TempAT24C02DelayTime=AT24C02DelayTime;
while(TempAT24C02DelayTime==AT24C02DelayTime);
}
void RxWrite24C02BitOne()
{
DataClk = 0;
DataBit = 1;
TempAT24C02DelayTime=AT24C02DelayTime;
while(TempAT24C02DelayTime==AT24C02DelayTime);
DataClk = 1;
TempAT24C02DelayTime=AT24C02DelayTime;
while(TempAT24C02DelayTime==AT24C02DelayTime);
DataClk = 0;
TempAT24C02DelayTime=AT24C02DelayTime;
while(TempAT24C02DelayTime==AT24C02DelayTime);
DataBit = 0;
TempAT24C02DelayTime=AT24C02DelayTime;
while(TempAT24C02DelayTime==AT24C02DelayTime);
}
void RxWrite24C02BitZero()
{
DataClk = 0;
DataBit = 0;
TempAT24C02DelayTime=AT24C02DelayTime;
while(TempAT24C02DelayTime==AT24C02DelayTime);
DataClk = 1;
TempAT24C02DelayTime=AT24C02DelayTime;
while(TempAT24C02DelayTime==AT24C02DelayTime);
DataClk = 0;
TempAT24C02DelayTime=AT24C02DelayTime;
while(TempAT24C02DelayTime==AT24C02DelayTime);
DataBit = 0;
TempAT24C02DelayTime=AT24C02DelayTime;
while(TempAT24C02DelayTime==AT24C02DelayTime);
}
unsigned char RxRead24C02OneBit()
{
DataClk = 0;
DataBit = 1;
TempAT24C02DelayTime=AT24C02DelayTime;
while(TempAT24C02DelayTime==AT24C02DelayTime);
DataClk = 1;
TempAT24C02DelayTime=AT24C02DelayTime;
while(TempAT24C02DelayTime==AT24C02DelayTime);
if (DataBit == 0){
DataClk = 0;
TempAT24C02DelayTime=AT24C02DelayTime;
while(TempAT24C02DelayTime==AT24C02DelayTime);
DataBit = 0;
TempAT24C02DelayTime=AT24C02DelayTime;
while(TempAT24C02DelayTime==AT24C02DelayTime);
return 0;
}
else{
DataClk = 0;
TempAT24C02DelayTime=AT24C02DelayTime;
while(TempAT24C02DelayTime==AT24C02DelayTime);
DataBit = 0;
TempAT24C02DelayTime=AT24C02DelayTime;
while(TempAT24C02DelayTime==AT24C02DelayTime);
return 1;
}
}
void RxRead24C02Ack()
{
DataClk = 0;
DataBit = 0;
TempAT24C02DelayTime=AT24C02DelayTime;
while(TempAT24C02DelayTime==AT24C02DelayTime);
DataClk = 1;
TempAT24C02DelayTime=AT24C02DelayTime;
while(TempAT24C02DelayTime==AT24C02DelayTime);
DataClk = 0;
TempAT24C02DelayTime=AT24C02DelayTime;
while(TempAT24C02DelayTime==AT24C02DelayTime);
DataBit = 0;
TempAT24C02DelayTime=AT24C02DelayTime;
while(TempAT24C02DelayTime==AT24C02DelayTime);
}
unsigned char RxRead24C02OneByte(unsigned char Address)
{
unsigned char usLoop, TempChar;
// Write Start 1010 000 0/Write
RxWrite24C02StartBit();
RxWrite24C02BitOne();
RxWrite24C02BitZero();
RxWrite24C02BitOne();
RxWrite24C02BitZero();
RxWrite24C02BitZero();
RxWrite24C02BitZero();
RxWrite24C02BitZero();
RxWrite24C02BitZero();
RxRead24C02Ack();
// Write Data Address
for (usLoop=0; usLoop<8; usLoop++){
if (((Address << usLoop) & (0x80)) == 0x00)
RxWrite24C02BitZero();
else
RxWrite24C02BitOne();
}
RxRead24C02Ack();
// Write Start 1010 000 1/Read
RxWrite24C02StartBit();
RxWrite24C02BitOne();
RxWrite24C02BitZero();
RxWrite24C02BitOne();
RxWrite24C02BitZero();
RxWrite24C02BitZero();
RxWrite24C02BitZero();
RxWrite24C02BitZero();
RxWrite24C02BitOne();
RxRead24C02Ack();
TempChar = 0;
for (usLoop=0; usLoop<8; usLoop++){
TempChar = TempChar << 1;
if (RxRead24C02OneBit()!=0)
TempChar = TempChar | 1;
}
RxWrite24C02StopBit();
return TempChar;
}
void RxWrite24C02OneByte(unsigned char TempAddress, unsigned char TempData)
{
unsigned char usLoop;
// Write Start 1010 000 0/Write
RxWrite24C02StartBit();
RxWrite24C02BitOne();
RxWrite24C02BitZero();
RxWrite24C02BitOne();
RxWrite24C02BitZero();
RxWrite24C02BitZero();
RxWrite24C02BitZero();
RxWrite24C02BitZero();
RxWrite24C02BitZero();
RxRead24C02Ack();
// Write Data Address
for (usLoop=0; usLoop<8; usLoop++){
if (((TempAddress << usLoop) & (0x80)) == 0x00)
RxWrite24C02BitZero();
else
RxWrite24C02BitOne();
}
RxRead24C02Ack();
// Write Data
for (usLoop=0; usLoop<8; usLoop++){
if (((TempData << usLoop) & (0x80)) == 0x00)
RxWrite24C02BitZero();
else
RxWrite24C02BitOne();
}
RxRead24C02Ack();
RxWrite24C02StopBit();
//wait 12 ms
TempAT24C02DelayTime=AT24C02DelayTime;
TempAT24C02DelayTime=TempAT24C02DelayTime+12;
while(TempAT24C02DelayTime!=AT24C02DelayTime);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -