时钟芯片PCF8563问题

[复制链接]
1147|10
 楼主| 李良123 发表于 2015-11-4 17:14 | 显示全部楼层 |阅读模式
最近在学PCF8563,时间能调出来了,可是报警功能怎么也没调通,感觉没问题,希望朋友们帮忙看看
 楼主| 李良123 发表于 2015-11-4 17:16 | 显示全部楼层
本帖最后由 李良123 于 2015-11-4 17:22 编辑

定时扫描下面程序

 楼主| 李良123 发表于 2015-11-4 17:18 | 显示全部楼层
void alarm_flag()//报警标志查询
{
    Start_I2c();  
    pcf8563_SendByte(0xa2);//写
    if(getack())
     { Stop_I2c();}
    pcf8563_SendByte(0x01);//地址
    if(getack())
     {Stop_I2c();}  

    Start_I2c();   
    pcf8563_SendByte(0xa3);//读
       if(getack())
          {Stop_I2c();}   
                  _NOP();     
      alarm_AF=RcvByte();
      putack(0);
      Stop_I2c();
      
      if((alarm_AF&0x08)==0x08)//报警时间到
      {
        beel();
        LED1();//led1常亮
        //*********清报警标志位
        Start_I2c();
        pcf8563_SendByte(0xa2);      
        if(getack())
        { Stop_I2c();}
        pcf8563_SendByte(0x01);
        if(getack())
        { Stop_I2c();}
        pcf8563_SendByte(0x02);
        if(getack())
        { Stop_I2c();}
        Stop_I2c();            
      }  
}
ayb_ice 发表于 2015-11-4 17:24 | 显示全部楼层
本帖最后由 ayb_ice 于 2015-11-5 07:57 编辑

这地方不对

void alarm_flag()//报警标志查询
{
    Start_I2c();  
    pcf8563_SendByte(0xa2);//写
    if(getack())
     { Stop_I2c();}
    pcf8563_SendByte(0x01);//地址
    if(getack())
     {Stop_I2c();}  

    Start_I2c();   
    pcf8563_SendByte(0xa3);//读
       if(getack())
          {Stop_I2c();}   
                  _NOP();     
      alarm_AF=RcvByte();
      putack(0);    // 此处应该发送 非 应答符号
      Stop_I2c();

其它地方没有看
shauew 发表于 2015-11-4 22:04 | 显示全部楼层
像这一句
if((alarm_AF&0x08)==0x08)//报警时间到
可以直接写成
if (alarm_AF&0x08)
这样的 有很多冗余啊
 楼主| 李良123 发表于 2015-11-5 08:24 | 显示全部楼层
shauew 发表于 2015-11-4 22:04
像这一句
if((alarm_AF&0x08)==0x08)//报警时间到
可以直接写成

学习啦
 楼主| 李良123 发表于 2015-11-5 08:29 | 显示全部楼层



void alarm_flag()//报警标志查询
{
     Start_I2c();  
     pcf8563_SendByte(0xa2);//写
    if(getack())
      { Stop_I2c();}
     pcf8563_SendByte(0x01);//地址
    if(getack())
      {Stop_I2c();}  

     Start_I2c();   
     pcf8563_SendByte(0xa3);//读
       if(getack())
           {Stop_I2c();}   
                   _NOP();     
       alarm_AF=RcvByte();
       putack(1);    // 此处应该发送 非 应答符号
      Stop_I2c();  
这样吗????
ayb_ice 发表于 2015-11-5 08:38 | 显示全部楼层
李良123 发表于 2015-11-5 08:29
void alarm_flag()//报警标志查询
{
     Start_I2c();  

对的,主机接收的最后一个字节要发送非应答信号
 楼主| 李良123 发表于 2015-11-5 11:37 | 显示全部楼层
ayb_ice 发表于 2015-11-5 08:38
对的,主机接收的最后一个字节要发送非应答信号

谢啦  就是这的事  
ayb_ice 发表于 2015-11-5 13:33 | 显示全部楼层
李良123 发表于 2015-11-5 11:37
谢啦  就是这的事

协议没有理解透的结果
 楼主| 李良123 发表于 2015-11-5 14:18 | 显示全部楼层
ayb_ice 发表于 2015-11-5 13:33
协议没有理解透的结果

谨记!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

40

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部