STC8F系列单片机定时器学习

本篇文章介绍STC8F系列单片机。具体型号是STC8F2K08S2,主要介绍定时器的使用。

由于STC8F添加了很多特殊寄存器,所以请先按下图操作

AELH6s.jpg

然后写程序时,不需要写#include <reg51.h>而是写#include <stc8.h>,这个头文件已经将特殊功能寄存器全部定义好了。

Timer4

Timer4,定时器/计数器。

控制寄存器-T4T3M

不支持位寻址,复位值[0000,0000],详细定义请看下图。

AEOY4S.jpg

中断标志辅助寄存器-UXINTIF

不支持位寻址,详细定义请看下图。

AEjYlQ.jpg

中断使能寄存器-IE

可位寻址,详细定义请看下图。

AEjLnA.jpg

中断使能寄存器2-IE2

不支持位寻址,详细定义请看下图。

AEjbXd.jpg AEjH6H.jpg

工作模式

定时器/计数器4的工作模式固定为 16 位重载模式。
T4L和T4H组合成为一个16位寄存器,T4L为低字节,T4H 为高字节。当[T4H,T4L]中的16 位计数值溢出时,系统会自动将内部16 位重载寄存器中的重载值装入[T4H,T4L]中。

AEL3YF.jpg

定时器初值计算

计算公式:

AVPFRP.jpg

65536:16位定时器,216+1=65535+1=65536
T:想要设置的中断时间。
Fosc:单片机晶振频率。
A:根据控制寄存器-T4T3MT4x12:定时器4速度控制位。12T模式,即CPU时钟12 分频(FOSC/12),所以A=12;1T模式,即CPU时钟不分频分频(FOSC/1),所以A=1。
THx:高八位初值。把N对256求模。
TLx:低八位初值。把N对256求余。
例如:24M晶振,12分频,定时10ms。计算得到THx=177,TLx=224。转换为十六进制是THx=0xB1,TLx=0xE0

AVit6f.jpg

范例程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <STC8.H>

sbit LED=P1^0;

void TM4_Isr() interrupt 20
{
LED = !LED; //测试端口
AUXINTIF &= ~T4IF; //清中断标志
}

void main()
{
//晶振频率为24MHz,定时10ms
T4L = 0xE0;
T4H = 0xB1;
T4T3M |= 0x80; //启动定时器
IE2 |= ET4; //使能定时器4中断
EA = 1; //开启中断

while(1);
}

测试效果有些误差。

AVFNCR.jpg