研究了一晚上了,怎么改都改不对……复制光盘的代码可以运行
自己写的就不行,但是时序什么的都和源代码一样……完全不知道怎么办了
求各位大神帮忙看看哪里出问题了
我调试过代码,貌似是response()里面的while(sda==1);
//这是IIC.h文件
#include<reg52.h>
sbit sda=P2^0;
sbit scl=P2^1;
void delay()
{;;}
void init()
{
scl=1;
delay();
sda=1;
delay();
}
void start()
{
sda=1;
delay();
scl=1;
delay();
sda=0;
delay();
}
void response()
{
scl=1;
delay();
while(sda==1);
delay();
scl=0;
delay();
}
void stop()
{
sda=0;
delay();
scl=1;
delay();
sda=1;
delay();
}
void write(unsigned char date)
{
unsigned char i,temp;
temp=date;
for(i=1;i<=8;i++)
{
temp=temp<<1;
scl=0;
delay();
sda=CY;
delay();
scl=1;
delay();
}
scl=0;
delay();
sda=1;
delay();
}
unsigned char read()
{
unsigned char i,date=0;
scl=0;
delay();
sda=1;
delay();
for(i=1;i<=8;i++)
{
scl=1;
delay();
date=(date<<1)|sda;
scl=0;
delay();
}
delay();
return date;
}
//这是main函数所在文件
#include<reg52.h>
#include"IIC.h"
#include"show_num.h"
int main()
{
unsigned char x;
init();
start();
write(0xa0);
response();
write(0x02);
response();
write(14);
response();
stop();
start();
write(0xa0);
response();
write(0x02);
response();
start();
write(0xa1);
response();
x=read();
stop();
while(1)
{
show_num(1,x%10,0);//显示函数已确认不会有问题
show_num(2,x/10,0);
show_num(0,10,0);
}
return 0;
}
------解决方案--------------------
start();
write(0xa0);
response();
write(0x02);
response();
write(14);
response();
stop();
//这里加延时看看,加到10ms看看
start();
write(0xa0);
response();
write(0x02);
response();
start();
write(0xa1);
response();
x=read();
stop();
另外8楼说的有道理的,你直接用别人的项目里面的优化级别可能为0,而你自己的项目可能是有默认的优化把你delay()优化没了,所以造成你的时序过快.你比较下两个项目的优化级别是不是一样.
------解决方案--------------------