51单片机的IIC总线和24C02驱动不了,调试发现P2口的值为0XFF不变..求大侠解析啊

#include<reg52.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintsbi... #include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit sda=P1^2;
sbit scl=P1^1;

void start(void);
void stop(void);
void ack(void);
void noack(void);
void iicwr_byte(uchar dat);
uchar iicre_byte(void);
void delay(void);
void init(void);
void delay1(void);

void delay(void)
{
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
}

void start(void)
{
sda=1;
delay();
scl=1;
delay();
sda=0;
delay();
}

void stop(void)
{
sda=0;
delay();
scl=1;
delay();
sda=1;
delay();
}

void ack(void)
{
uchar i;
scl=1;
delay();
while((sda==1)&&(i<200))i++;
scl=0;
delay();
}

void noack(void)
{
sda=1;
delay();
scl=1;
delay();
scl=0;
delay();
}

void init(void)
{
sda=1;
scl=1;
}

void iicwr_byte(uchar dat)
{
uchar i;
scl=0;
for(i=0;i<8;i++)
{
if(dat&&0x80)
{
sda=1;
}
else
{
sda=0;
}
dat=dat<<1;
delay();
scl=1;
delay();
scl=0;
delay();
}
sda=1;
delay();
}

uchar iicre_byte(void)
{
uchar i;
uchar dat;
scl=0;
delay();
sda=1;
delay();
for(i=0;i<8;i++)
{
scl=1;
delay;
dat=dat<<1;
if(sda)
{
dat++;
}
scl=0;
delay();
}
return dat;
}

void delay1(void)
{
uint a=30000;
while(a--);
}

void main()
{
init();
start();
iicwr_byte(0xa0);
ack();
iicwr_byte(10);
ack();
iicwr_byte(0x55);
ack();
stop();
delay1();

init();
start();
iicwr_byte(0xa0);
ack();
iicwr_byte(10);
ack();
start();
iicwr_byte(0xa1);
ack();
P2=iicre_byte();
noack();
stop();
while(1);

}
谢谢啦~~
展开
 我来答
liujianli1012
2011-07-22 · 超过16用户采纳过TA的回答
知道答主
回答量:151
采纳率:0%
帮助的人:41.6万
展开全部
void iicwr_byte(uchar dat)
这个函数里面 if(dat&&0x80) 应该是if(dat&0x80),按位与不是逻辑与并键。
void delay1(void)延时时间可能有点短,应该唯野延时10ms,多调用两次或在建个延时函数延指蔽喊时10ms都可以。
更多追问追答
追问
还是不行~~~调试出来还是0XFF....头都大了
追答
你用的什么型号的单片机?
把写函数改一下:
void iicwr_byte(uchar dat)
{
uchar i;
scl=1;
for(i=0;i<8;i++)
{
if(dat&&0x80)
{
sda=1;
}
else
{
sda=0;
}
dat=dat<<1;
delay();
scl=0;
delay();
scl=1;
delay();
}
sda=0;
delay();
sda=1;
delay();
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式