高手请帮忙排查 :51单片机和24C02关于IIC总线通信的程序
本人写了一个程序,实验目的是:通过IIC总线,向24C02写入0x56,然后再从24C02把这个数读出,再赋给P2口显示出来。程序和电路图如下:#include<reg5...
本人写了一个程序,实验目的是:通过IIC总线,向24C02写入0x56,然后再从24C02把这个数读出,再赋给P2口显示出来。
程序和电路图如下:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit SDA = P1^6;
sbit SCL= P1^7;
void init();
void start();
void stop();
void ack();
uchar ReadOneChar();
void WriteOneChar(uchar dat);
void delay(uchar x);
main()
{
init(); //初始化
start(); //开始
WriteOneChar(0xa0); //表示写数据 到 24c02
delay(5);
ack();
WriteOneChar(3); //写入到器件的第3个地址
ack();
WriteOneChar(0x56); //表示 写入的数据为0x56
ack();
stop();
delay(100);
start();
WriteOneChar(0xa1); //表示从24c02读数据
ack();
WriteOneChar(0x03); //读器件的第3个地址里的数据
ack();
delay(5);
;
P2=ReadOneChar(); //将读出的数据给P2口
//P2=0xaa;
stop();
while(1);
}
void delay(uchar x) //延时函数
{
uint p,q;
for(p=0;p<x;p++) ;
for(q=0;q<10;q++) ;
// {}
}
void init() //初始化函数
{
SCL=1;
SDA=1;
}
void start() //开始函数
{
SDA=1;
delay(5);
SCL=1;
delay(10);
SDA=0;
delay(5);
}
void stop() //停止函数
{
SDA=0;
delay(5);
SCL=1;
delay(5);
SDA=1;
delay(5);
}
void ack() //应答函数
{
int i;
SCL=1;
while(SDA==1&&i<200)
{
i++;
}
}
uchar ReadOneChar()
{
uchar dat,i,k;
dat=0x00;
for(i=0;i<8;i++)
{
dat=dat>>1;
SCL=0;
k=SDA;
if(k)
{
dat=dat|0x80;
}
SCL=1;
delay(10);
}
return dat;
}
void WriteOneChar(uchar dat)
{
uchar i,k,temp;
temp=dat;
for(i=0;i<8;i++)
{
SCL=0;
k=(bit)(0x80&temp);
if(k)
SDA=1;
else
SDA=0;
temp=temp<<1;
delay(10);
SCL=1;
delay(10);
}
SDA=1;
delay(10);
} 展开
程序和电路图如下:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit SDA = P1^6;
sbit SCL= P1^7;
void init();
void start();
void stop();
void ack();
uchar ReadOneChar();
void WriteOneChar(uchar dat);
void delay(uchar x);
main()
{
init(); //初始化
start(); //开始
WriteOneChar(0xa0); //表示写数据 到 24c02
delay(5);
ack();
WriteOneChar(3); //写入到器件的第3个地址
ack();
WriteOneChar(0x56); //表示 写入的数据为0x56
ack();
stop();
delay(100);
start();
WriteOneChar(0xa1); //表示从24c02读数据
ack();
WriteOneChar(0x03); //读器件的第3个地址里的数据
ack();
delay(5);
;
P2=ReadOneChar(); //将读出的数据给P2口
//P2=0xaa;
stop();
while(1);
}
void delay(uchar x) //延时函数
{
uint p,q;
for(p=0;p<x;p++) ;
for(q=0;q<10;q++) ;
// {}
}
void init() //初始化函数
{
SCL=1;
SDA=1;
}
void start() //开始函数
{
SDA=1;
delay(5);
SCL=1;
delay(10);
SDA=0;
delay(5);
}
void stop() //停止函数
{
SDA=0;
delay(5);
SCL=1;
delay(5);
SDA=1;
delay(5);
}
void ack() //应答函数
{
int i;
SCL=1;
while(SDA==1&&i<200)
{
i++;
}
}
uchar ReadOneChar()
{
uchar dat,i,k;
dat=0x00;
for(i=0;i<8;i++)
{
dat=dat>>1;
SCL=0;
k=SDA;
if(k)
{
dat=dat|0x80;
}
SCL=1;
delay(10);
}
return dat;
}
void WriteOneChar(uchar dat)
{
uchar i,k,temp;
temp=dat;
for(i=0;i<8;i++)
{
SCL=0;
k=(bit)(0x80&temp);
if(k)
SDA=1;
else
SDA=0;
temp=temp<<1;
delay(10);
SCL=1;
delay(10);
}
SDA=1;
delay(10);
} 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询