高手请帮忙排查 :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);
}
展开
 我来答
jiagetain1234
2011-06-11
知道答主
回答量:3
采纳率:0%
帮助的人:0
展开全部
大概看了一下,没什么问题
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式