找回密码
 立即注册
查看: 108|回复: 3

STC8H1K08/17T RTC功能

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:139
  • 最近打卡:2026-03-16 08:00:45
已绑定手机

31

主题

118

回帖

299

积分

中级会员

积分
299
发表于 2026-1-29 08:46:45 | 显示全部楼层 |阅读模式
现在我的程序需要长时间进入空闲模式,通过RTC的闹钟模式 10分钟 中断一次 退出空闲 然后查询一次ADC
查询完成处理好数据以后再次进入空闲


还有一个是记录工作时间 最大不超过12小时 中途工作结束则12小时计时清零,再次工作从零计时
用ADC来判断是否需要工作结束,需要的时候清零就可以了

但是问题是,是否一定要使用外部32K晶振 ,还是说内部低速晶振也可以,只要像我这样 不工作的时候及时清零误差就不会累计太大
因为我这个差一两秒没关系



RTC的例程下面这个程序吗?
  1. #include "STC8Hxxx.h"
  2. bit B_Alarm;                    // 闹钟触发标志
  3. void RTC_config(void);          // RTC 初始化函数声明
  4. void main(void)
  5. {
  6.     P_SW2 |= 0x80;              // 使能扩展寄存器(XFR)访问
  7.     RTC_config();               // 配置并启动 RTC
  8.     EA = 1;                     // 开启总中断
  9.     while(1)
  10.     {
  11.         if(B_Alarm)             // 检测到闹钟中断
  12.         {
  13.             B_Alarm = 0;        // 清标志
  14.             // 可在此添加蜂鸣器、LED、继电器等闹钟动作
  15.         }
  16.     }
  17. }
  18. void RTC_Isr() interrupt 13     // RTC 中断服务函数(中断向量13)
  19. {
  20.     if(RTCIF & 0x80)            // 闹钟中断标志(bit7 = ALAIF)
  21.     {
  22.         RTCIF &= ~0x80;         // 软件清中断标志
  23.         B_Alarm = 1;            // 置闹钟处理标志
  24.     }
  25. }
  26. void RTC_config(void)           // RTC 初始化函数
  27. {
  28.     INIYEAR  = 21;              // 初始化年:2021
  29.     INIMONTH = 12;              // 月:12
  30.     INIDAY   = 31;              // 日:31
  31.     INIHOUR  = 23;              // 时:23
  32.     INIMIN   = 59;              // 分:59
  33.     INISEC   = 50;              // 秒:50
  34.     INISSEC  = 0;               // 亚秒(1/128秒):0
  35.     ALAHOUR  = 0;               // 闹钟小时:0
  36.     ALAMIN   = 0;               // 闹钟分钟:0
  37.     ALASEC   = 0;               // 闹钟秒:0
  38.     ALASSEC  = 0;               // 闹钟亚秒:0
  39.     IRC32KCR = 0x80;            // 启动内部 32K RC 振荡器
  40.     while(!(IRC32KCR & 1));     // 等待内部 32K 时钟稳定
  41.     RTCCFG   = 0x03;            // 选内部 32K 时钟源 + 触发 RTC 寄存器初始化
  42.     RTCIF    = 0x00;            // 清所有 RTC 中断标志
  43.     RTCIEN   = 0x88;            // 使能闹钟中断(0x80) + 秒中断(0x08)
  44.     RTCCR    = 0x01;            // RTC 模块使能
  45.     while(RTCCFG & 0x01);       // 等待 RTC 初始化完成(约 30μs)
  46. }
复制代码







回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:139
  • 最近打卡:2026-03-16 08:00:45
已绑定手机

31

主题

118

回帖

299

积分

中级会员

积分
299
发表于 2026-1-29 11:35:03 | 显示全部楼层
图中这个闹钟是每天更新一次
有没有什么办法一直产生十分钟的中断

最下下册就采用分钟中断叠加十次算10分钟 但是会唤醒IDLE十次 再重新进入空闲的间隔就产生功耗了
截图202601291133247469.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:476
  • 最近打卡:2026-03-16 08:56:00
已绑定手机

104

主题

4175

回帖

9203

积分

荣誉版主

无情的代码机器

积分
9203
发表于 2026-1-29 11:42:41 | 显示全部楼层
需要外部晶振,内部晶振我记版主提过只能用来判断在走时


闹钟可以设置当前时间+ 十分钟之后的时间。
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:139
  • 最近打卡:2026-03-16 08:00:45
已绑定手机

31

主题

118

回帖

299

积分

中级会员

积分
299
发表于 2026-1-29 14:11:26 | 显示全部楼层
erci*** 发表于 2026-1-29 11:42
需要外部晶振,内部晶振我记版主提过只能用来判断在走时

我看规格书有测试表 偏差太多了 外部接一个吧还是
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-3-17 07:07 , Processed in 0.110719 second(s), 62 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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