用的从器件是e2prom,24c08,得不到想要的结果,个人觉得是read()函数出问题了,应该怎么改求助攻。
#include
#define uchar unsigned char
#define uint unsigned int
sbit scl=P3^4;
sbit sda=P3^5;
void delay(void ) /*/延时函数产生5us以上延时 */
{; ; ; ; ; }
void delay1(uchar i)
{
uchar j;
for(i;i>0;i--)
for( j=100;j>0;j--);
}
void start(void)/*/开始信号函数scl保持高电平,sda由高电平跳转到低电平 */
{
sda=1;
delay();
scl=1;
delay();
sda=0;
delay();
}
void stop(void)/*/终止信号,scl保持高电平,sda由低电平到高电平*/
{
sda=0;
delay();
scl=1;
delay();
sda=1;
delay();
}
void inition(void)/*/信号初始化 */
{
sda=1;
delay();
scl=1;
delay();
}
void response(void)
{
uchar i=0;
while((sda==1)&&(i<10))i++;
}
void write(uchar date)/*/写数据函数,主机通过sda向从机传送数据 */
{
uchar temp,j;
temp=date;
for(j=0;j<8;j++)
{
scl=0;
delay();
temp=(temp<<1);
sda=CY;
scl=1;
delay();
}
}
uchar read(void)
{
uchar i,k;
for(i=0;i<8;i++)
{
scl=0;
delay();
k=(k<<1)|sda;
scl=1;
delay();
}
return k;
}
void main(void)
{
uchar temp;
inition();
start();
write(0xa0);/*/主机选从机;24c08 1010???r/w 0主机向从机写数据 1主机接收从机传来的数据 */
response();
write(3);/*/从机起始地址 ???????r/w 0写 */
response();
write(0xf0);/*/传送数据 */
response();
stop();
delay1(200);
start();
write(0xa0);
response();
write(3);
response();
start();
write(0xa1);
response();
temp=read();
P0=temp;
delay();
stop();
while(1);
}
谢谢,错误有两处,一处在应答函数,应答时scl是高电平,一处在写数据处,一个数据写完,没有释放总线。我改了,能工作了.不知还有没有问题?