打印

求助:DS12CR887读到的总是地址而不是相应寄存器里的数

[复制链接]
2366|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
杨琳lin|  楼主 | 2013-6-26 10:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用DS12CR887编写的读写时钟程序,读程序中读到的总是地址而不是相应寄存器里的数。程序如下,哪位高手能帮我解答一下。
DS12CR887_AS_RTC=1;
   DS12CR887_RD=1;
   DS12CR887_WR=1;
   DS12CR887_CS_RTC=0;
   DS12CR887_AD=DSAdree;
   delay();
   DS12CR887_AS_RTC=0;
   delay();
   delay();
   DS12CR887_RD=0;
   DSData=DS12CR887_AD;
   delay();
   DS12CR887_RD=1;
   delay();
   DS12CR887_AS_RTC=1;
   DS12CR887_CS_RTC=1;
   read_DS=DSData;
   return(DSData);

相关帖子

沙发
杨琳lin|  楼主 | 2013-6-26 13:21 | 只看该作者
急!有没有人帮忙解答一下啊?

使用特权

评论回复
板凳
杨琳lin|  楼主 | 2013-6-26 13:42 | 只看该作者
或者,向大师们请教:有没有什么方法能查查问题呢?先谢谢了!

使用特权

评论回复
地板
logokfu| | 2013-6-26 13:47 | 只看该作者
看不懂你写的程序。你挂示波器看看波形对不对啊。

使用特权

评论回复
5
杨琳lin|  楼主 | 2013-7-4 15:59 | 只看该作者
大家好,还想请高手帮我看看。程序重新改过了,读到的数不一定是地址值,但仍是0~9之间的数,这显然是不对的。时序图也看过,没有问题,找过例程也都这么写的。有谁做过或了解的还请赐教,在此拜谢。
/*DS12CR887初始化函数*/
void InitDS12CR887(void)
{
        DS12CR887_AD_C=0;       //AD0~7口初始化为输出口
    DS12CR887_AD=0xFF;      //AD0~7口初始化为高电平
    /*定义PIC的这些I/O口为输出口*/                 
        DS12CR887_RD_C=0;       //数据选通信号端 (即DS,读使能)      
    DS12CR887_WR_C=0;       //读写输入信号端(即WR,写使能)               
    DS12CR887_AS_RTC_C=0;   // 地址选通信号端(即AS)   
    DS12CR887_CS_RTC_C=0;   //片选信号,低电平有效(即CS)
    /*初始化DS、WR、AS*/                                    
        DS12CR887_RD=0;         //数据选通信号端                
    DS12CR887_WR=0;         //读写输入信号端                 
    DS12CR887_AS_RTC=0 ;    // 地址选通信号端      
    Ds12CR887_write(control_A, 0x20); //2A
}
/*DS12CR887写函数*/
void Ds12CR887_write(unsigned char DSAdree, unsigned char DSData)
{  
        unsigned char         write_data;
        unsigned char         write_DSAdree;  
        DS12CR887_CS_RTC=0;     //片选信号,低电平有效
    DS12CR887_RD=1;         //数据选通信号端,DS置高
    DS12CR887_WR=1;         //读写输入信号端,WR置高
    DS12CR887_AS_RTC=1;     // 地址选通信号端,AS置高
    DS12CR887_AD=DSAdree;
        DS12CR887_AS_RTC=0;     //AS下降沿将地址存入DS12887      
        DS12CR887_WR=0;         //写使能   
    DS12CR887_AD=DSData;
        DS12CR887_WR=1;         //上升沿锁存数据,将数据发到数据总线上
    DS12CR887_AS_RTC=1;
        DS12CR887_CS_RTC=1;
}
/*DS12CR887读函数*/
unsigned char Ds12CR887_read(unsigned char DSAdree)
{  
    unsigned char             DSData;
    unsigned char          read_DSAdree;
    DS12CR887_CS_RTC=0;
    DS12CR887_WR=1;
    DS12CR887_RD=1;
    DS12CR887_AS_RTC=1;
    DS12CR887_AD=DSAdree;
    DS12CR887_AS_RTC=0;     //AS下降沿将地址存入DS12887
    DS12CR887_RD=0;         //读使能
  DSData=DS12CR887_AD;
    DS12CR887_RD=1;         
    DS12CR887_AS_RTC=1;
    DS12CR887_CS_RTC=1;  
    return(DSData);
}

使用特权

评论回复
6
杨琳lin|  楼主 | 2013-7-4 16:00 | 只看该作者
本来调整的很整齐,怎么出来的这么乱,不好意思。

使用特权

评论回复
7
早晨的细雨| | 2013-12-25 14:36 | 只看该作者
问题解决了吗?我也遇到同样的问题,能说说看为什么嘛?

使用特权

评论回复
8
guangbiao| | 2013-12-25 14:58 | 只看该作者
估计是个时序问题。
上电后延时一段时间,然后初始化器件,再延时一段时间,读数据,延时一段时间,再读数据,直到看到你想要的值。
读取间隔,读/写间隔不要太短。。。
写入数据后,不要马上就读取,要延时一段时间。。。
这样试试看。。。。

使用特权

评论回复
9
cjseng| | 2013-12-25 16:15 | 只看该作者
可以尝试一下用总线方式,时序就不要考虑了,除非你的单片机读写速度远远超过12887的读写速度。

使用特权

评论回复
10
947622248| | 2014-8-19 15:41 | 只看该作者
杨琳lin 发表于 2013-7-4 15:59
大家好,还想请高手帮我看看。程序重新改过了,读到的数不一定是地址值,但仍是0~9之间的数,这显然是不对 ...

请问后来问题解决来吗,最近也遇到这个问题了。。

使用特权

评论回复
11
947622248| | 2014-8-19 15:49 | 只看该作者
早晨的细雨 发表于 2013-12-25 14:36
问题解决了吗?我也遇到同样的问题,能说说看为什么嘛?

请问你后来解决来吗?

使用特权

评论回复
12
947622248| | 2014-8-19 15:55 | 只看该作者
**kfu 发表于 2013-6-26 13:47
看不懂你写的程序。你挂示波器看看波形对不对啊。

请问你玩过这个DS12CR887吗?

使用特权

评论回复
13
xg3469| | 2014-8-19 17:55 | 只看该作者
先锁存数据字节的地址,然后再读写。

使用特权

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

本版积分规则

19

主题

96

帖子

2

粉丝