打印
[51单片机]

c8051f410 用内部RTC做时钟 有时候时间会停止

[复制链接]
2988|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wape271|  楼主 | 2013-11-9 16:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
wape271|  楼主 | 2013-11-9 16:56 | 只看该作者
初始化函数,发现改函数在main中的位置也会影响走时与否
void RTC_Init(void)
{
   RTC0KEY = 0xA5;                     // Unlock the RTC interface
   RTC0KEY = 0xF1;
   RTC0ADR = 0x06;                     // Point to RTC0CN
   RTC0DAT = 0x80;                     // Enable the RTC
   while ((RTC0ADR & 0x80) == 0x80);   // Poll on the BUSY bit

   RTC0ADR = 0x07;                     // Point to RTC0XCN
   RTC0DAT = 0xc0;//RTC0DAT = 0x40;    // Set the RTC for crystal mode, AGCEN// disabled, and BIASX2 disabled                                       
   while ((RTC0ADR & 0x80) == 0x80);   // Poll on the BUSY bit
   do// Wait until the clock is valid
   {
     RTC0ADR |= 0x80;
     while ((RTC0ADR & 0x80) == 0x80);   
   }
   while((RTC0DAT & 0x10) == 0x00);
}

使用特权

评论回复
板凳
wape271|  楼主 | 2013-11-11 08:07 | 只看该作者
有没有谁遇到过这种问题,不然就只有外挂时钟芯片了

使用特权

评论回复
地板
ayb_ice| | 2013-11-11 09:00 | 只看该作者
没有用过内部的RTC,但几乎可以肯定是没有用对或程序问题

使用特权

评论回复
5
wape271|  楼主 | 2013-11-11 10:29 | 只看该作者
ayb_ice 发表于 2013-11-11 09:00
没有用过内部的RTC,但几乎可以肯定是没有用对或程序问题

确实是程序的问题,之前在网上看了一个例程
http://read.pudn.com/downloads155/sourcecode/embed/689017/C8051F410-uCOS286-Port/smaRTC/smaRTClock.c__.htm
参照其初始化,发现我之前没有将该位
位4 :  RTC0TR :smaRTClock 定时器运行控制
0 :smaRTClock 定时器保持其当前值。
1 :smaRTClock 定时器每个 smaRTClock 时钟周期增 1

置一导致的,现在正常了

使用特权

评论回复
6
wape271|  楼主 | 2013-11-11 10:38 | 只看该作者
有时候会走,有时候又不走的原因是
我只在读和写定时器时才将 RTC0TR置一,而程序中 要用户查看时间是才会读取时间,所以如果不查看时间,就会导致下次开机时 时间停在上次的时间。之前就因此困在其中,百思不得其解。

使用特权

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

本版积分规则

15

主题

166

帖子

5

粉丝