[求助] 我的PIC16F887程序始终读不出DS1307中的数据,请高手看程序

温柔的绳索   2011-5-10 23:04 楼主

读这一部分的程序这样子:

char READ (char addr)

{ char R;

SEN=1; //产生起始位

while (SEN==1); //检测起始位完成

IIC_SEND(0b11010000); //与从机的SSPADD要完全相同,才能正确通信

IIC_SEND(addr); //此值为内部地址,从0-0xFF可选

PEN=1; //发送停止位

 while (PEN==0); //检查停止位结束

RSEN=1; //发送重新启始位

while(RSEN==1); //检测重新起始位完成

IIC_SEND(0b11010001); //读

SSPIF=0;

RCEN=1;

while (SSPIF==0); //等待读完成

 R=SSPBUF;

PEN=1; //发送停止位

while (PEN==0); //检查停止位结束

return (R); }

主程序部分: .... while(1)

{ for(i=0;i<7;i++)

{ TEMP(k)=READ(k);

DELAY(100);}

[ 本帖最后由 温柔的绳索 于 2011-5-10 23:08 编辑 ]

回复评论 (1)

DS1307地址和数据是通过两条双向的串行总线传输的,首先发送开始信号并发送器件地址,接着从机检测,继续发送待操作的地址,然后重新发送起始信号,最后读取数据IIC停止,并返回读取的数据。
IIC_SEND(0b11010000); 主机发送的SSPADD与从机的完全相同时,从机最好发送应答信号,主机等待应答信号,加入IIC_Wait_Ack()函数,也就是说发送起始位和重新发送起始位之后都加入等待应答信号。。还有看看你的主函数里有返回语句吗??
点赞  2011-5-12 20:35
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复