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]