📄 24c02.c
字号:
#include <reg51.h>
// 对24C02的读、写
void DelayMs(unsigned int);
void delay1ms();
void delay(char k);
void Read24c02(unsigned char *RamAddress,unsigned char RomAddress,unsigned char bytes);
void Write24c02(unsigned char *RamAddress,unsigned char RomAddress,unsigned char bytes);
void Start();
void Stop();
void Ack();
void NoAck();
bit TestAck();
bit Write8Bit(unsigned char input);
unsigned char Read8Bit();
/***************************************************************************/
#define WriteDeviceAddress 0xae
#define ReadDviceAddress 0xaf
/***************************************************************************/
sbit SCL=P3^4;
sbit SDA=P3^5;
sbit tt=ACC^5;
//sbit DOG=P3^7;
/***************************************************************************/
void main()
{
int i;
unsigned char wdata[10],rdata[10],temp,temp1;
for( i=0;i<10;i++)
{
wdata[i]=i+1;
}
Write24c02(wdata,0x00,10);
Read24c02(rdata,0x00,10);
temp=rdata[0];
temp1=temp;
temp=rdata[1];
temp=rdata[2];
temp=rdata[3];
temp=rdata[4];
while(1)
{
temp =10;
}
}
/***************************************************************************/
void DelayMs(unsigned int number) {
unsigned int i;
for( i=0;i< number;i++)
delay1ms();
}
/***************************************************************************/
void Start() {
SCL=0;
SDA=1;
delay(50);
tt=1;
SCL=1;
SCL=tt;
delay(50);
SDA=0;
delay(50);
SCL=0;
//delay(50);
}
/***************************************************************************/
void Stop() {
SCL=0;
//delay(50);
SDA=0;
delay(50);
tt=1;
SCL=tt;
SCL=tt;
delay(50);
SDA=1;
delay(50);
}
/***************************************************************************/
void Ack() {
tt=0;
SDA=tt;
//delay(50);
tt=1;
SCL=1;
delay(50);
SCL=0;
//delay(50);
//SDA=1;
}
/***************************************************************************/
void NoAck() {
SDA=1;
delay(50);
SCL=SDA;
delay(50);
SCL=0;
delay(50);
}
/***************************************************************************/
bit TestAck() {
bit ErrorBit;
SDA=1;
SCL=1;
ErrorBit=SDA;
SCL=0;
return(ErrorBit);
}
/***************************************************************************/
bit Write8Bit(unsigned char input) {
unsigned char temp;
for(temp=0;temp<8;temp++) {
//SDA=(bit)(input&0x80);
if( input&0x80)
SDA=1;
else SDA=0;
SCL=1;
delay(50);
SCL=0;
input=0xc0;
input=input<<1;
}
}
/***************************************************************************/
void Write24c02(unsigned char *Wdata,unsigned char RomAddress,unsigned char number) {
int k;
k=0;
Start();
Write8Bit(WriteDeviceAddress);
tt=1;
tt=TestAck();
Write8Bit(RomAddress);
tt=TestAck();
for(;number!=0;number--) {
Write8Bit(*Wdata);
tt=TestAck();
Wdata++;
}
Stop();
DelayMs(10);
}
/***************************************************************************/
unsigned char Read8Bit() {
unsigned char temp,rbyte=0;
for(temp=8;temp!=0;temp--) {
SCL=1;
rbyte=rbyte<<1;
rbyte=rbyte|((unsigned char)(SDA));
SCL=0;
}
return(rbyte);
}
/***************************************************************************/
void Read24c02(unsigned char *RamAddress,unsigned char RomAddress,unsigned char bytes) {
unsigned char temp,rbyte;
Start();
Write8Bit(WriteDeviceAddress);
TestAck();
Write8Bit(RomAddress);
TestAck();
Start();
Write8Bit(ReadDviceAddress);
TestAck();
while(bytes!=1) {
*RamAddress=Read8Bit();
Ack();
RamAddress++;
bytes--;
}
*RamAddress=Read8Bit();
NoAck();
Stop();
}
void delay1ms()
{
IE=00;
TMOD=0x10;
TH1=0xfc;
TL1=0x23;
TR1=1;
while(!TF1);
TF1=0;
}
void delay(unsigned char k)
{
unsigned char i;
for(i=0;i<k;i++) ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -