打印

时钟芯片PCF8563问题

[复制链接]
923|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
李良123|  楼主 | 2015-11-4 17:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
李良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();

其它地方没有看

使用特权

评论回复
5
shauew| | 2015-11-4 22:04 | 只看该作者
像这一句
if((alarm_AF&0x08)==0x08)//报警时间到
可以直接写成
if (alarm_AF&0x08)
这样的 有很多冗余啊

使用特权

评论回复
6
李良123|  楼主 | 2015-11-5 08:24 | 只看该作者
shauew 发表于 2015-11-4 22:04
像这一句
if((alarm_AF&0x08)==0x08)//报警时间到
可以直接写成

学习啦

使用特权

评论回复
7
李良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();  
这样吗????

使用特权

评论回复
8
ayb_ice| | 2015-11-5 08:38 | 只看该作者
李良123 发表于 2015-11-5 08:29
void alarm_flag()//报警标志查询
{
     Start_I2c();  

对的,主机接收的最后一个字节要发送非应答信号

使用特权

评论回复
9
李良123|  楼主 | 2015-11-5 11:37 | 只看该作者
ayb_ice 发表于 2015-11-5 08:38
对的,主机接收的最后一个字节要发送非应答信号

谢啦  就是这的事  

使用特权

评论回复
10
ayb_ice| | 2015-11-5 13:33 | 只看该作者
李良123 发表于 2015-11-5 11:37
谢啦  就是这的事

协议没有理解透的结果

使用特权

评论回复
11
李良123|  楼主 | 2015-11-5 14:18 | 只看该作者
ayb_ice 发表于 2015-11-5 13:33
协议没有理解透的结果

谨记!!!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

40

帖子

1

粉丝