我的PIC16F887程序始终读不出DS1307中的数据,请高手看程序
其他
3946 人阅读
|
1 人回复
|
2011-05-11
|
|
我的PIC16F887程序始终读不出DS1307中的数据,请高手看程序
<div id="postmessage_1087851" class="t_msgfont">读这一部分的程序这样子:
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 |
|
|
|
|
|
|
|
|
|
|
沙发
彩虹糖
发表于 2011-5-12 13:49:07
|
只看该作者
RE:我的PIC16F887程序始终读不出DS1307中的数据,请高手看程序
DS1307地址和数据是通过两条双向的串行总线传输的,首先发送开始信号并发送器件地址,接着从机检测,继续发送待操作的地址,然后重新发送起始信号,最后读取数据IIC停止,并返回读取的数据。
IIC_SEND(0b11010000); 主机发送的SSPADD与从机的完全相同时,从机最好发送应答信号,主机等待应答信号,加入IIC_Wait_Ack()函数,也就是说发送起始位和重新发送起始位之后都加入等待应答信号。。还有看看你的主函数里有返回语句吗?? |
|
|
|
|
|
|
|
|