51单片机 24C02程序不知道哪里出问题,求助

现象与我所写的代码不符、、、、、、#include<reg51.h>#include<intrins.h>#defineuintunsignedint#defineuch... 现象与我所写的代码不符、、、、、、
#include<reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit sda=P2^0; //IO口定义
sbit scl=P2^1;
sbit beep=P2^3;
//延时2MS左右(一个nop()12M的晶振1MS)
void nop()
{
_nop_();
_nop_();
}
/////////24C02读写驱动程序////////////////////
void delayms(uint m)
{
uint i;
for(;m>0;m--)
for(i=110;i>0;i--);
}
void clock() //I2C总线时钟
{
unsigned char i=0;
scl=1;
nop();
while((sda==1)&&(i<255))
i++;
scl=0;
nop();
}
void init() //24c02初始化子程序
{
scl=1;
nop();
sda=1;
nop();
}
void start() //启动I2C总线
{
sda=1;
nop();
scl=1;
nop();
sda=0;
nop();
scl=0;
nop();
}
void stop() //停止I2C总线
{
sda=0;
nop();
scl=1;
nop();
sda=1;
nop();
}
void writebyte(uchar j) //写一个字节
{
unsigned char i,temp;
temp=j;
for (i=0;i<8;i++)
{
temp=temp<<1;
scl=0;
nop();
sda=CY; //temp左移时,移出的值放入了CY中
nop();
scl=1; //待sda线上的数据稳定后,将scl拉高
nop();
}
scl=0;
nop();
sda=1;
nop();
}
uchar readbyte() //读一个字节
{
unsigned char i,j,k=0;
scl=0; nop(); sda=1;
for (i=0;i<8;i++)
{
nop();
scl=1;
nop();
if(sda==1)
j=1;
else
j=0;
k=(k<<1)|j;
scl=0;
}
nop();
return(k);
}
void writeadd (uchar add,uchar date)
{
start();
writebyte(0xa0);
clock();
writebyte(add);
clock();
writebyte(date);
clock();
stop();
}
uchar readadd (uchar add)
{
uchar date;
start();
writebyte(0xa0);
clock();
writebyte(add);
clock();
start();
writebyte(0xa1);
clock();
date=readbyte();
stop();
return date;
}

void main()
{ int i=0;
init();
while(1)
{
writeadd(2,0xaa);
i=readadd(2);
i++;
P1=readadd(2);
delayms(1000);
if(i>1)
writeadd(2,0x55);
P1=readadd(2);
delayms(1000);
}
}
展开
 我来答
百度网友186dfeac08
2014-03-10 · TA获得超过754个赞
知道小有建树答主
回答量:1074
采纳率:50%
帮助的人:528万
展开全部
延时要搞长一点,IIC接口标准上可达到400K,但实际上不好实现,建议在100K以下,所以最好在50K左右就很稳定了。

void delay(void)
{
uint i;
for(i=100;i>0;i--)
_nop_();
}
bjdonglw
2014-03-10 · TA获得超过3813个赞
知道大有可为答主
回答量:1万
采纳率:58%
帮助的人:2090万
展开全部
问题出在延时语句不正确
追问
请问该怎么改呢
追答
void delay(void)
{
uint i;
for(i=100;i>0;i--)
_nop_();
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友1c723ff30
2014-03-10 · 超过33用户采纳过TA的回答
知道答主
回答量:87
采纳率:100%
帮助的人:36万
展开全部
印象中I2C总线操作时序好像至少要延时4.7uS,你的两个nop 达不到。还有注意上拉电阻选值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-03-10
展开全部
什么问题,贴程序
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式