找回密码
 立即注册
查看: 68|回复: 5

RTC失效或是误差特别大

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-08-05 09:13:27
已绑定手机

10

主题

12

回帖

252

积分

中级会员

积分
252
发表于 6 天前 | 显示全部楼层 |阅读模式


要实现的功能:
   当设备开机后启动一次模块,在这个过程中会收到当前准确时间及后续要启动模块的两个时间;
       1.把接收到的当前准确时间更新到RTC也就是void ParseAndUpdateRTC(char *time_str)
       2.设置两个时间:比如一个是上午12点,一个是晚上21点,也就是void Parse_NNMO_Data(char *time_str) 接收到的时间,
       3.分钟中断也就是void RTC_Isr() interrupt 36 这里设置的是满足5分钟后也就是当B_1m = 1时执行一次Result_Check(),但每次分钟中断时把B_Sleep = 1也就是每分钟都做一次其它检测,其它           时间处于掉电模式。
问题:
       1.设置的两个时间有时会失效,不失效的话误差也会特别大,比如15分钟可能有5分钟左右或者4个小时左右大概会延后90分钟左右(这个值不确定有时更多有时更少),是设置错误还是程序问题            请大家指点!感谢!
       2.不加外部晶振的解决办法。
说明:
       1.设备用电池供电,电压在2.5-3.0V
       2.型号为STC8H8K64U,丝印的第三行最后两个字母是HD
       3.使用STC内部晶振,因为时间精度没有太大要求,12小时内误差10分钟到30分钟都可以接受,后续每次模块启动后都可以更新RTC的值为当前准确时间
       4.烧录程序时:输入用户程序运行时的IRC频率为11.0592,允许低压复位没有勾选
  1. <blockquote>xdata int t1_hou, t1_min;   // 时间段1
复制代码
/* 中断函数 */
  1. void RTC_Isr() interrupt 36
  2. {
  3.        if(RTCIF & 0x10) //分钟中断
  4.         {
  5.           RTCIF &= ~0x10;
  6.           rtc_1min_counter++; // 每分钟中断计数增加1
  7.           if (rtc_1min_counter >= 5) // 满足5分钟
  8.            {
  9.               rtc_1min_counter = 0; // 清零重新计数
复制代码
/* 接收到的模块启动时间 */  这里是两个时间段,比如12:00启动一次模块,21:00启动一次模块
  1. void Parse_NNMO_Data(char *time_str)
  2. {
  3.     // 检查数据是否以 "NNMO:" 开头
  4.     if (strncmp(time_str, "NNMO:", 5) != 0)
  5.       {
  6.          return; // 不是时间数据,直接返回
  7.        }
  8.     // 跳过 "NNMO:" 解析时间数据
  9.     if (sscanf(time_str + 5, "%d,%d,%d,%d", &mt1, &mt2, &mt3, &mt4) == 4)
  10.       {
  11.       // 数据有效性校验
  12.        f (mt1 < 24 && mt2 < 60 && mt3 < 24 && mt4 < 60)
复制代码



回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-08-05 09:13:27
已绑定手机

10

主题

12

回帖

252

积分

中级会员

积分
252
发表于 6 天前 | 显示全部楼层
下面还有代码为何会显示不完整?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:495
  • 最近打卡:2025-08-06 15:38:26

33

主题

2484

回帖

5393

积分

论坛元老

积分
5393
发表于 6 天前 | 显示全部楼层
RTC的话 不使用外部32K晶振的话,15分钟差个5、6分钟很正常。
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-08-05 10:18:33

5

主题

10

回帖

359

积分

中级会员

积分
359
发表于 6 天前 | 显示全部楼层
_奶*** 发表于 2025-8-5 09:39
RTC的话 不使用外部32K晶振的话,15分钟差个5、6分钟很正常。

用人来计时,15分钟也不会差5,6分?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:495
  • 最近打卡:2025-08-06 15:38:26

33

主题

2484

回帖

5393

积分

论坛元老

积分
5393
发表于 6 天前 | 显示全部楼层
xpz*** 发表于 2025-8-5 10:18
用人来计时,15分钟也不会差5,6分?

那你就帮它计时吧
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:486
  • 最近打卡:2025-08-09 12:35:18
已绑定手机

44

主题

2151

回帖

7485

积分

论坛元老

积分
7485
发表于 6 天前 | 显示全部楼层
despe*** 发表于 2025-8-5 09:16
下面还有代码为何会显示不完整?

代码显示不全的话,编辑时最好在“高级”下勾选“纯文本”
然后在格式符外面插入代码,避免代码结构里面混入其它格式符,或者复制的代码内容里包含格式符导致显示不正常:

截图202508051705291043.jpg

回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-8-11 06:05 , Processed in 0.118486 second(s), 80 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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