📄 24c00.c
字号:
#include "reg51.h"
#include "intrins.h"
#include"address.h"
#define uchar unsigned char
#define uint unsigned char
#define true 1
#define false 0
#define bool bit
#define Byte unsigned char
#define Word unsigned int
#define read 0x80
#define write 0x00
//私有内部函数
#define \
SomeNOP(); \
_nop_();_nop_();_nop_();_nop_();
//私有内部函数
void IICStart(void)
{
EA = 0;
IICDATA = 1;IICSCL = 1;SomeNOP();
IICDATA = 0;SomeNOP();
IICSCL = 0; IICDATA = 1;
}
//私有内部函数
void IICStop(void)
{
IICSCL = 0;IICDATA = 0;SomeNOP();
IICSCL = 1;SomeNOP();IICDATA = 1;
EA = 1;
}
//私有内部函数
void SendAck(void)
{
IICDATA = 0;SomeNOP();
IICSCL = 1;SomeNOP();
IICSCL = 0;
}
//私有内部函数
void SendNotAck(void)
{
IICDATA = 1;SomeNOP();
IICSCL = 1;SomeNOP();
IICSCL = 0;
}
//私有内部函数
void IICSendByte(uchar ch)
{
uchar i = 8;
while(i--)
{
IICSCL = 0;_nop_();
IICDATA = (bit)(ch&0x80);ch<<=1;SomeNOP();
IICSCL = 1;SomeNOP();
}
IICSCL = 0;
}
//私有内部函数
uchar IICReceiveByte(void)
{
uchar i = 8;
uchar ddata = 0;
IICDATA = 1;
while(i--)
{
ddata<<=1;
IICSCL = 0;SomeNOP();
IICSCL = 1;SomeNOP();
if(IICDATA)ddata |= 0x01;
}
IICSCL = 0;
return ddata;
}
//私有内部函数
bool WaitAck(void)
{
IICDATA = 1;SomeNOP();
IICSCL = 1;SomeNOP();
while(IICDATA){IICStart(); IICSendByte(0xa0);IICDATA = 1;SomeNOP(); IICSCL = 1;SomeNOP();}
IICSCL = 0;
return true;
}
//***********************************
//**公有函数,外部接口 **
//***********************************
//写一个数据
void Write24c02_OneByte(unsigned char addr,unsigned char ddata)
{
IICStart();
IICSendByte(0xa0);
WaitAck();
IICSendByte(addr);
WaitAck();
IICSendByte(ddata);
WaitAck();
IICStop();
SomeNOP();
}
//读一个数据
unsigned char Read24c02_OneByte(unsigned char addr)
{
uchar temp;
IICStart();
IICSendByte(0xa0); //先写入地址,设置写
WaitAck();
IICSendByte(addr);
WaitAck();
IICStart();
IICSendByte(0xa1); //设置读
WaitAck();
temp = IICReceiveByte();
SendNotAck();
IICStop();
return temp;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -