搜索
bottom↓
回复: 13

PCF8563响应问题。

[复制链接]

出0入0汤圆

发表于 2011-7-20 15:22:37 | 显示全部楼层 |阅读模式
在根据ZLG网站提供的I2C程序包,修改过了应用在MSP430中。

发现写数据到PCF8563中的时候,JATG仿真过程中写从地址A2后,PCF8563有应答,但是接着写寄存器地址0x02之后,PCF8563就没有应答。



unsigned char IRcvStr(uchar sla,uchar suba,uchar *s,uchar no)            发送数据到PCF8563
{
   uchar i;

   Start_I2c();               /*启动总线*/
   SendByte(sla);            /*发送器件地址*/
     if(ack==0)return(0);                                                 //此处有应答。
   SendByte(suba);            /*发送器件子地址*/
     if(ack==0)return(0);                                                 //此处没有应答,返回0,退出。

   Start_I2c();
   SendByte(sla+1);
      if(ack==0)return(0);

   for(i=0;i<no-1;i++)
    {   
     *s=RcvByte();               /*发送数据*/
      Ack_I2c(0);                /*发送就答位*/  
     s++;
    }
   *s=RcvByte();
    Ack_I2c(1);                 /*发送非应位*/
Stop_I2c();                    /*结束总线*/
  return(1);
}



void  SendByte(uchar c)                                                  //发送单字节到PCF8563
{
uchar BitCnt;
SDA_OUT;
SCL_OUT;
for(BitCnt=0;BitCnt<8;BitCnt++)  /*要传送的数据长度为8位*/
    {
     if((c<<BitCnt)&0x80)
     {
         SDA_H;
     }   /*判断发送位*/  
     else  
     {
         SDA_L;
     }              
     _Nop();
     SCL_H;               /*置时钟线为高,通知被控器开始接收数据位*/
     delay_nus(4);
      _Nop();
      _Nop();               /*保证时钟高电平周期大于4μs*/        
     SCL_L;
    }
   
    delay_nus(1);
//    SDA_H;               /*8位发送完后释放数据线,准备接收应答位*/
    SDA_IN;
    delay_nus(1);   
    SCL_L;
    delay_nus(1);
   
   
//    delay_1us();
    if(SDA_DATA)                                                                      //判断是否有收到ACK
    {
      ack=0;
    }        
    else
    {
        ack=1;
    }        /*判断是否接收到应答信号*/
    SCL_L;
    delay_nus(1);
}

出0入0汤圆

 楼主| 发表于 2011-7-21 11:23:08 | 显示全部楼层
昨晚使用hhrfjz提供的PCF8563头文件,移植到AVR上面,内部8MHz,成功。
今早移植到MSP430上面,没有修改时钟配置,使用内部的~1MHz时钟,也是可以的。
就是修改为外部16MHz的晶振,时钟1分频的时候读出来的寄存器都是FF。2分频或以上分频的时候,读出来就是正常的。
看来是和时钟有关系。
延时函数改为下面的也是不行
void delay_1us(void)                 //1us延时函数
  {
    unsigned int i;
   for (i=0;i<16;i++)                //16MHz晶振,重复16个空操作,延时1us。
   asm("nop");
     
  }

void delay_nus(unsigned int n)       //N us延时函数
  {
   unsigned int i=0;
   for (i=0;i<n;i++)
   delay_1us();
  }

出0入0汤圆

发表于 2011-7-23 07:35:41 | 显示全部楼层
学习了,正准备用8563做个东东呢!

出0入0汤圆

发表于 2011-7-23 13:05:40 | 显示全部楼层
学习一下!

出0入0汤圆

发表于 2012-10-12 19:44:02 | 显示全部楼层
xingkong911 发表于 2011-7-21 11:23
昨晚使用hhrfjz提供的PCF8563头文件,移植到AVR上面,内部8MHz,成功。
今早移植到MSP430上面,没有修改时 ...

原来你也遇到,用STM8 8M读取PCF8563正常,就是改为16M就不行了,不过不是全部都不能读,有的还是能读。不知你后来怎么解决的;因为delay的时间都改为一样的了,实在想不出哪里出了问题。。。

出0入0汤圆

 楼主| 发表于 2012-10-13 09:26:00 | 显示全部楼层
linjunxiong 发表于 2012-10-12 19:44
原来你也遇到,用STM8 8M读取PCF8563正常,就是改为16M就不行了,不过不是全部都不能读,有的还是能读。 ...

隔了一年了,记得当时还是根据时序的问题。
代码给你参考一下,MSP430的,模拟I2C

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-10-26 01:10:46 | 显示全部楼层
我的能读不能写,什么原因

出0入0汤圆

发表于 2012-10-27 13:21:17 | 显示全部楼层
xingkong911 发表于 2012-10-13 09:26
隔了一年了,记得当时还是根据时序的问题。
代码给你参考一下,MSP430的,模拟I2C

呵呵,是时序问题,用了4.7K的还是有其他板子出问题,我的是ACK等久一点就又ok了。谢谢啦

出0入0汤圆

发表于 2012-12-6 23:15:30 | 显示全部楼层
xingkong911 发表于 2012-10-13 09:26
隔了一年了,记得当时还是根据时序的问题。
代码给你参考一下,MSP430的,模拟I2C

你好,我用这个代码 读出来的怎么都是00呀
主函数是这样写的
main()
{
  WDTCTL = WDTPW + WDTHOLD;//停止看门狗
  set8563();         
  delay_nus(200);
  while(1)
  {
    GetPCF8563();         
    delay_nus(2);
  }
}
其他代码是参照你提供的代码的

出0入0汤圆

发表于 2012-12-6 23:21:35 | 显示全部楼层
xingkong911 发表于 2012-10-13 09:26
隔了一年了,记得当时还是根据时序的问题。
代码给你参考一下,MSP430的,模拟I2C

我用的是luanchpad G2553 上电默认频率为1MHZ

出0入0汤圆

 楼主| 发表于 2012-12-7 09:18:44 | 显示全部楼层
chenyu988 发表于 2012-12-6 23:21
我用的是luanchpad G2553 上电默认频率为1MHZ

1MHz是没问题的,反正时序是你自己控制。
其他的部分,如果调用这个文件的函数应该没问题了。
你再看看其他的硬件电路。

出0入0汤圆

发表于 2012-12-7 09:37:27 | 显示全部楼层
xingkong911 发表于 2012-12-7 09:18
1MHz是没问题的,反正时序是你自己控制。
其他的部分,如果调用这个文件的函数应该没问题了。
你再看看其 ...

硬件电路是我自己搭的,控制时序,就是控制延时的时间吧?

出0入0汤圆

 楼主| 发表于 2012-12-7 10:10:46 | 显示全部楼层
chenyu988 发表于 2012-12-7 09:37
硬件电路是我自己搭的,控制时序,就是控制延时的时间吧?

对,单片机是主机,8563是从机,延时是由主机控制。

出0入0汤圆

发表于 2014-4-16 21:33:58 | 显示全部楼层
为什么我读出来都是0XFF,求解
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 11:35

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表