大家好,我是远方,这一章我们来学习下STC8G1K12的定时器/计数器。
手册上理论讲了一大推,我们直接进行总结:
1. STC8G 系列单片机有 3 个 16 位定时器/计数器,T0,T1,T2。
2. 本质是对脉冲进行计数,如果计数脉冲来自系统时钟,则为定时方式,如果计数脉冲来自单片机外部特定引脚,则为计数方式。
3. 有4 种工作模式:模式 0(16 位自动重装载模式),模式 1(16 位不可重装载模
式),模式 2(8 位自动重装模式),模式 3(不可屏蔽中断的 16 位自动重装载模式)。
我们今天以定时器T0举例,工作在模式 0,定时器1mS,控制LED亮1S灭1S。
TMOD寄存器,跟定时器T0有关的位是 T0_GATE T0_C/T T0_M1 T0_M0 。
T0_GATE:控制定时器0,置1时只有在INT0脚为高及TR0控制位置1时才可打开定时器/计数器0。 这里我们把T0_GATE写0,如果写1的话,T0受INT0脚和TR0一起控制。
T0_C/T:控制定时器0用作定时器或计数器,清0则用作定时器(对内部系统时钟进行计数),置1用作计数器(对引脚T0/P3.4外部脉冲进行计数)。我们这里是做定时器。所以写 0。
T0_M1/T0_M0:定时器定时器/计数器0模式选择 ,我们是工作在模式0,所以这二位写0。
TMOD &= 0xF0; //模式 0
TCON 寄存器,跟定时器T0有关的是TR0位,TR0写0禁止定时器T0运行,写1允许定时器T0运行。我们这里要运行T0,所以写1。
TCON |= (1 << 4);
IE中断使能寄存器,跟定时器T0有关的是EA 和 ET0。
EA:总中断允许控制位。0:CPU 屏蔽所有的中断申请 1:CPU 开放中断 ,我们这里写1。
EA = 1;
ET0:定时/计数器 T0 的溢出中断允许位。 0:禁止 T0 中断 1:允许 T0 中断 ,我们这里需要用到定时器T0中断,所以写1。
ET0 = 1;
IP和IPH是优先级控制,我们这里只有一个中断,就设置为最高级。
IP |= (1<<1);
IPH |= (1<<1);
AUXR铺助寄存器,T0x12是定时器0的速度控制位 。我们这里设置为12T模式。
AUXR &= ~(1 << 7);
TL0和TH0是定时器T0的计数寄存器,这二个寄存器非常重要,我们定时多长时间,就取决于TL0和TH0的值。那我们定时1mS,该设置多少呢?在这个快速开发的年代,产品需迅速占领市场。我们以最简单的方式来做,借助于下载软件中的工具定时器计算器。大家以后在开发过程中,能简单就简单处理,不要什么都想搞明白,等搞明白了,黄花菜都凉了,竞争公司的产品都已经占领市场了。
通过计算,得到
TL0 = 0x66;TH0 = 0xFC;
相关配置已经讲完了。开始写代码。
全部工程代码如下:
#include "STC8.H"
sbit LED = P1^1;
void TM0_Isr() interrupt 1
{
static unsigned int Cnt = 0;
Cnt++;
if (Cnt >= 1000) //1mS中断 0.001*1000=1S
{
Cnt = 0;
LED = !LED;
}
}
void main(void)
{
//使用内部时钟 烧录软件会帮我们配置好 如不懂 参考前面第3章系统设置学习。
// 烧录软件设置11.0592MHz为系统时钟。以后我们的学习都是这个时钟频率。
P_SW2 |= (1<<7);
CKSEL = 0x00; //选择内部 IRC ( 默认 )
P_SW2 &= ~(1<<7);
//配置端口 对于控制我们系统板的LED,配置准双向口和推挽输出都可以。
//只要是做为输出,我建议全部设置为推挽输出。
/*
PnM1.x PnM0.x Pn.x 口工作模式
0 0 准双向口
0 1 推挽输出
1 0 高阻输入
1 1 开漏输出
*/
P1M1 &= ~(1<<1); P1M0 |= (1<<1); //设置为推挽输出
P_SW2 |= (1<<7);
P1PU = 0x00;//禁止P1端口内部的 3.7K 上拉电阻
P1NCS = 0xFF; //禁止P1端口的施密特触发功能。
P_SW2 &= ~(1<<7);
AUXR &= ~(1 << 7);//定时器0为12T模式
TMOD &= 0xF0; //模式 0
TL0 = 0x66;//定时器1mS
TH0 = 0xFC;
TCON |= (1 << 4);//启动定时器0
IP |= (1<<1); //最高优先级
IPH |= (1<<1);
ET0 = 1;//允许定时器0中断
EA = 1;//总中断打开
LED = 1;//LED灭
while (1) ;
}
我们把程序编译好,烧录到板子里面,就会看到D2 LED一闪一闪亮晶晶。
好了这章就讲到这里。希望大家多多关注我的原创文章。谢谢。
閱讀更多 電子機械說 的文章