📄 24c02.c
字号:
#include "intrins.h"
#include "At89x51.h"
/////////////////////////////////////
//采用P1口作控制
//11.0592的晶体
////////////////////////////////////
//I2C总线的数据和时钟
#define SCL P1_5
#define SDA P1_4
//////////////////////////////////////
#define NOP _nop_();_nop_();_nop_();_nop_();
#define AddWr 0xa0 /*器件地址选择及写标志*/
#define AddRd 0xa1 /*器件地址选择及读标志*/
//延时程序
void mDelay(unsigned j)
{
unsigned int i;
for(;j>0;j--)
{
for(i=0;i<125;i++)
{;}
}
}
//发送起始条件
void Start(void)
{
SDA=1;
SCL=1;
NOP;
SDA=0;
NOP;
}
//发送停止条件
void Stop(void)
{
SDA=0;
SCL=1;
NOP;
SDA=1;
NOP;
}
//应答位
void Ack(void)
{
SDA=0;
NOP;
SCL=1;
NOP;
SCL=0;
}
//非应答
void NoAck(void)
{
SDA=1;
NOP;
SCL=1;
NOP;
SCL=0;
}
//发送数据子程序,Data为要发送的数据a
void Send(unsigned char Data)
{
unsigned char BitCounter=8;//位数控制
unsigned char temp;//中间变量控制
do{
temp=Data;
SCL=0;
NOP;
if((temp&0x0080)==0x0080)//如果最高位是1
SDA=1;
else
SDA=0;
SCL=1;
temp=Data<<1;//左移
Data=temp;
BitCounter--;
}while(BitCounter);
SCL=0;
}
//读一个字节的数据,并返回该字节的值
unsigned Read(void)
{
unsigned char temp=0;
unsigned char temp1=0;
unsigned BitCounter=8;
SDA=1;
do{
SCL=0;
NOP;
SCL=1;
NOP;
if(SDA)
temp=temp|0x01;
else
temp=temp&0xfe;
if(BitCounter-1)
{
temp1=temp<<1;
temp=temp1;
}
BitCounter--;
}while(BitCounter);
return(temp);
}
//向24c02中写数据
void WrToROM(unsigned char Data[],unsigned char Address,unsigned char Num)
{
unsigned char i;
unsigned char *Pdata;
Pdata=Data;
for(i=0;i<Num;i++)
{
Start();
Send(AddWr);
Ack();
Send(Address+i);
Ack();
Send(*(Pdata+i));
Ack();
Stop();
// mDelay(20);
}
}
void RdFromROM(unsigned char Data[],unsigned char Address,unsigned char Num)
{
unsigned char i;
unsigned char *Pdata;
Pdata=Data;
for(i=0;i<Num;i++)
{
Start();
Send(AddWr);
Ack();
Send(Address+i);
Ack();
Start();
Send(AddRd);
Ack();
*(Pdata+i)=Read();
SCL=0;
NoAck();
Stop();
}
}
main()
{
unsigned char Number[4]={1,2,3,4};
WrToROM(Number,4,4);
mDelay(20);
Number[0]=0;
Number[1]=0;
Number[2]=0;
Number[3]=0;
RdFromROM(Number,4,4);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -