设为首页收藏本站淘宝杂货铺

从F到0 - From F to 0

 找回密码
 注册已关闭
搜索
查看: 754|回复: 0
收起左侧

STC32G12K128 单片机 RTC实时时钟中断+外部 32.768Khz 晶振实现输出高精度1HZ方波信号

[复制链接]
发表于 2022-7-31 22:40:10 | 显示全部楼层 |阅读模式
本帖最后由 GPIO 于 2022-8-1 13:27 编辑

1.png
单片机型号:STC32G12K128 编译环境:Keil C251 晶振频率:任意 外部晶振:32.768Khz
硬件连接:LED的负极接P3.2、正极串联100R电阻到VCC。
无源晶振:P1.6、P1.7接两个20~47p瓷片电容并接地
有源晶振:P1.7时钟输入 (无需瓷片电容)
  1. #include "STC32G.h"
  2. sbit hz1 = P3 ^ 2;          //1Hz方波输出
  3. sbit XTALO = P1 ^ 6;        //32.768Khz 无源晶振脚 接两个20~47p瓷片电容与GND
  4. sbit XTALI = P1 ^ 7;        //32.768Khz 无源晶振脚 或 有源晶振信号
  5. void main() {
  6.     EAXFR = 1;              //使能访问XFR
  7.     WTST = 0;               //赋值为0 CPU执行速度最快
  8.     WDT_CONTR = 0x27;       //开看门狗
  9.     P3M0 = 0x00;            //STC32:除P3.0、P3.1外 其余IO口上电瞬间为高阻模式
  10.     P3M1 = 0x00;            //将P3.0~P3.7设置为准双向模式,否则LED不亮
  11.     X32KCR = 0xC0;                  //启动外部32K晶振
  12.     while (!(X32KCR & 0x01));       //等待时钟稳定
  13.     RTCCFG &= ~0x02;                //RTC选择外部时钟

  14.     //年月日时分秒,1/128秒 2000年1月1日0时0分0秒
  15.     INIYEAR = 00;
  16.     INIMONTH = 1;
  17.     INIDAY = 1;
  18.     INIHOUR = 0;
  19.     INIMIN = 0;
  20.     INISEC = 0;
  21.     INISSEC = 0;

  22.     RTCCFG |= 0x01;   //触发RTC寄存器初始化

  23.     RTCCR |= 0x01;          //开RTC计数
  24.     while (RTCCFG & 0x01);        //等待初始化完成,需要在 "RTC使能" 之后判断
  25.     RTCIEN = 0x04;          //使能半秒中断

  26.     EA = 1;                     //开总中断
  27.     while (1) {
  28.         _nop_();_nop_();
  29.        CLR_WDT = 1;     //看门狗清零(喂狗)
  30.        _nop_();_nop_();
  31.     }
  32. }

  33. void RTC_Interrupt() interrupt 36{     //RTC中断
  34.     if (RTCIF & 0x04) {                 //半秒中断请求
  35.         RTCIF &= ~0x04;
  36.         hz1 = !hz1;
  37.     }
  38. }
复制代码

相关帖子

您需要登录后才可以回帖 登录 | 注册已关闭

本版积分规则

QQ|手机版|Archiver|从F到0 ( 蒙ICP备17002595号-1 )
蒙公网安备15010402000325号

腾讯云安全认证

GMT+8, 2024-4-25 08:45 , Processed in 0.894051 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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