导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→求助ds1307不能握手

* 106326: 求助ds1307不能握手

   Dragon0906 
Dragon0906发表的帖子 

 求助ds1307不能握手
下面是我的I2C的程序,和其他的I2C设备通讯都没有问题,就是唯独和1307握手一直都是失败,请高手来给指点下巴
void Delay(void)
{
unsigned char i;
for(i=0;i  <=2;i++)
{
  ;
}
}
void IC_Start(void)   //启动IC通信
{     //SDA 1 TO 0 While SCL=1
while(Writer_Counter  <=10);
IC_SDA=1;
IC_SCL=1;
  Delay();
IC_SDA=0;
  Delay();
IC_SCL=0;
  Delay();
}
void IC_Stop(void)   //停止IC通信
{
IC_SDA=0;
IC_SCL=1;
  Delay();
IC_SDA=1;
  Delay();
Writer_Counter=0;
}
void IC_Receive_Ack(void)  //接受ACK
{
IC_SDA=1;
IC_SCL=1;
IC_Re_Time=0;
while(IC_Re_Time  <=10)
//while(IC_SDA)
{
  if(IC_SDA==0)
  {
   IC_Err_Flag=0;
   break;
  }
  else
  {
   IC_Err_Flag=1;
  }
}
IC_SCL=0;
Writer_Counter=0;
  //Delay();
}
void IC_Send_NAck(void)   //发送NACK
{
IC_SDA=1;
  Delay();
IC_SCL=1;
  Delay();
IC_SCL=0;
  Delay();
}
void IC_Send_Ack(void)   //发送NACK
{
IC_SDA=0;
  Delay();
IC_SCL=1;
  Delay();
IC_SCL=0;
  Delay();
IC_SDA=1;
}
void IC_Write_Byte(unsigned char Data) //写数据到1307
{
unsigned char i;
unsigned char j;
for(i=0;i  <=7;i++)
{
  j=7-i;
  if(VALBIT(Data,j))
   IC_SDA=1;
  else
   IC_SDA=0;
   Delay();
  IC_SCL=1;
   //Delay();
  IC_SCL=0;
}
IC_SCL=1;
}
unsigned char IC_Read_Byte(void) //从1307读取一个数据
{
unsigned char i;
unsigned char j;
unsigned char Data;
IC_SDA=1;
for(i=0;i  <=7;i++)
{
  j=7-i;
  IC_SCL=1;
   Delay();
  if(IC_SDA)
   SETBIT(Data,j);
  else
   CLRBIT(Data,j);
  IC_SCL=0;
   Delay();
}
return(Data);
}
/*ds1307的读写程序*/
void IC_Write_Data(unsigned char Data,unsigned char Addr)
{
unsigned char write_time;
for(write_time=0;write_time  <=2;write_time++)
{
  IC_Start();
  IC_Write_Byte(0xD0);
  IC_Receive_Ack();
  IC_Write_Byte(Addr);
  IC_Receive_Ack();
  IC_Write_Byte(Data);
  IC_Receive_Ack();
  IC_Stop();
  if(IC_Err_Flag==0)
   break;
}
}
void IC_Read_Data(void)
{
unsigned char read_time;
for(read_time=0;read_time  <=2;read_time++)
{
  IC_Start();
  IC_Write_Byte(0xD0);
  IC_Receive_Ack();
  IC_Write_Byte(0x00);
  IC_Receive_Ack();
  IC_Stop();
  IC_Start();
  IC_Write_Byte(0xD1);
  IC_Receive_Ack();
  Temp_Second=IC_Read_Byte();
  IC_Send_Ack();
  Temp_Minute=IC_Read_Byte();
  IC_Send_Ack();
  Temp_Hour=IC_Read_Byte();
  IC_Send_NAck();
  IC_Stop();
  if(IC_Err_Flag==0)
  {
   break;
  }
}
if(VALBIT(Temp_Second,7))
{
  IC_Write_Data(0x00,0x00);
}
}
电源部分如图


此主题相关图片如下:
按此在新窗口浏览图片

发表时间:2007年6月12日15:42:33

  
回复该帖

本主题共有 1 帖,分页:>>>>>该主题的所有内容[1]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

[上一篇帖子]:读键的程序为什么不对?各位高手请看一看,我的读键的程序为什么返回不了0; /P P unsign
[下一篇帖子]:高价求购S3C4510开发板本人高价求购S3C4510开发板(最好是优龙公司的). 联系方式