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

2019-03-25 19:42发布

读这一部分的程序这样子: 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条回答
芝锐
1楼-- · 2019-03-26 00:03
DS1307地址和数据是通过两条双向的串行总线传输的,首先发送开始信号并发送器件地址,接着从机检测,继续发送待操作的地址,然后重新发送起始信号,最后读取数据IIC停止,并返回读取的数据。
IIC_SEND(0b11010000); 主机发送的SSPADD与从机的完全相同时,从机最好发送应答信号,主机等待应答信号,加入IIC_Wait_Ack()函数,也就是说发送起始位和重新发送起始位之后都加入等待应答信号。。还有看看你的主函数里有返回语句吗??

一周热门 更多>