GPIO 发表于 2022-8-1 14:34:56

STC单片机 定时器0计数器模式+外部32.768Khz有源晶振实现高精度分频输出1Hz方波


单片机型号:STC任意 IRC晶振频率:任意 若有外部晶振,不可省略。
P3.4(T0)使用了定时器/计数器0的外部输入功能,其他脚功能不同,不可随意更改。
定时器0设置为计数器模式,对引脚(T0/P3.4)的外部脉冲进行计数。
外部有源晶振为其提供高精度的32.768Khz脉冲(不支持无源晶振)。
定时器0每半秒溢出一次并触发中断,使P3.3输出1Hz方波。

#include "stc15.h"
#include "intrins.h"
#define u8 unsigned char
#define T500ms 0xC000   //32.768Khz 1T 半秒 定时器初值
sbit XTALI = P3 ^ 4;   //接32.768Khz有源晶振
sbit hz1 = P3 ^ 3;      //1Hz高精度方波输出
void InitTimer0(){
    TMOD = 0x05;      //定时器0作为计数器 对引脚(T0/P3.4)的外部脉冲进行计数
    TH0 = T500ms >> 8;//装入TH0与TL0初值 (每秒计32768个外部脉冲)
    TL0 = T500ms;
    PT0 = 1;      //定时器0高优先级
    ET0 = 1;      //定时器0中断
    TR0 = 1;      //定时器0计数
    EA = 1;         //开总中断
}

void main() {
    WDT_CONTR = 0x27;       //开看门狗
    InitTimer0();
    while (1) {
      _nop_();
      _nop_();
      WDT_CONTR |= 0x10;      //喂狗
      _nop_();
      _nop_();
    }
}

void Timer0Interrupt() interrupt 1{   //定时器0(高优先级,半秒中断)
    TH0 = T500ms >> 8;
    TL0 = T500ms;
    hz1 = !hz1;
}
页: [1]
查看完整版本: STC单片机 定时器0计数器模式+外部32.768Khz有源晶振实现高精度分频输出1Hz方波