STC15系列单片机学习3:定时器、计数器

STC15W4K系列单片机有5个16位的定时器/计数器,分别是T0,T1,T2,T3,T4;

一、定时器与计数器的区分

所谓定时器和计数器,它们本质上是一样的东西,它们的核心都是一个加法计数器,都是统计脉冲的个数,区别在于,定时器是在数单片机系统时钟的脉冲个数,而计数器是在数单片机外部引脚的脉冲个数。

二、与定时器/计数器相关的特殊功能寄存器

定时器/计数器T0和T1:使用特殊功能寄存器TMOD中控制位来选择T0或T1是定时器还是计数器;

定时器/计数器T2:使用特殊功能寄存器AUXR中的控制位来选择T2是定时器还是计数器;

定时器/计数器T3和T4:使用特殊功能寄存器T4T3M中的控制位来选择T3或T4是定时器还是计数器;

我们知道STC15W4K系列单片机号称是1T的单片机,比传统单片机运行速度快,而之前的89C51单片机是12T的单片机。1T和12T是什么意思?所谓1T就表示1个时钟周期就是一个机器周期,12T表示12个时钟周期就是一个机器周期。STC15W4K系列单片机既可以工作在1T模式,也可以工作在12T模式。

因此,定时器是使用1T还是12T模式,也需要设置,设置T0,T1,T2这三个定时器相关的特殊功能寄存器就是AUXR,定时器T3和T4,使用T4T3M寄存器来进行设置。

相关的寄存器太多,还是用在哪个定时器就说到哪里。

三、定时器/计数器的工作模式

关于定时器/计数器,它们的核心都是计数,我们得知道它们是怎么计数的。

向上计数:

STC15W系列单片机都只能向上计数,就是顺着数,比如1、2、3 ......,   不能倒着数,比如100,99,98......

定时器/计数器的位宽:

常说8位,16位定时器/计数器,指的是那个计数寄存器的位宽,每个定时器的计数寄存器有两个TH 和TL,它们都是8位的,TH与TL连起来就是16位的了,16位最多就能计数到65535。

自动重装载:

要计数我们可以从0开始计,也可以从100开始计,反正计数计到65535(16位定时器),就满了,要溢出,如果我们从100开始计数,溢出之后,有自动从100开始计数,一直循环着,这就是自动重装载,也叫自动重载,自动重载就是在计数溢出之后自动的添加计数初始值。

3.1 定时器/计数器0

模式0: 16位自动重装载模式(STC官方推荐学习的模式)

 

要让定时器/计数器工作,首先要确认是定时还是计数,前面说过定时是数系统时钟的脉冲,计数是数外部引脚的脉冲,这一块需要通过配置TMOD寄存器来实现。

因为STC15W系列单片机有12T和1T模式的设置 ,需要在AUXR寄存器种设置

定时器/计数器的模式设置好之后,只要设置好控制寄存器TCON 就行,控制寄存器可以位寻址

 

我们知道定时器工作在1T模式,11.0592MHz的时钟频率,16位定时器,最多只能计65535个数,总时间也不到6ms就溢出了,要想定时1s钟,就需要计1000次,让定时器溢出1000次,

定时器一般是与中断配合使用,牵扯到中断,那就有中断控制寄存器和中断优先级控制寄存器。

定时器0工作在定时模式、1T模式、中断模式,模式0的代码如下:

#include <STC15.H> 

#define FOSC  11059200L

unsigned int cnt = 0;

void main(void)
{
	AUXR |= 0x80;//定时器0为1T模式
    
    TMOD = 0x00; //设置定时器为模式0,16位自动重装载
    
    //定时器1ms
    TL0 = (65535- FOSC/1000);
    TH0 = (65535- FOSC/1000) >> 8;
    
    TR0 = 1;//开启定时器0,开始计数
    ET0 = 1;// 使能定时器0中断
    
    EA = 1;//中断总开关也要打开
    
    while(1);
}

void Timer0_ISR() interrupt 1
{
    cnt++; //每次定时溢出,cnt就加1
    if(cnt == 1000) //累计1000次就是1s
    {
        cnt = 0;
        P55 = !P55;
    }
}
//

3.2 定时器/计数器1

定时器1的工作原理与定时器0 基本相同

3.3 定时器/计数器2

定时器/计数器2的工作模式比较单一,只有16位自动重装载模式,T2除了用作基本的定时器和计数器外,更多的是用于串口的波特率发生器。

与T2相关的寄存器

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是DS小龙哥编写的(STC)51单片机开发手册,适合51单片机入门初学者,大学生等当做工具书使用。实验的平台采用的是普中科技单片机平台,文章中的知识点详细,代码清晰,注释清楚,可以复制粘贴,配套代码详细。目前写了4个大章节,后续会持续更新,更新后重新下载即可。 每个例子的完整的工程源码在PDF里有百度云盘的下载链接。失效了可以私信发送。 目前PDF里包含的目录如下: 51单片机开发手册 1 一、 单片机开发入门知识介绍 1 1.1 51单片机介绍 1 1.2 市场上的主流单片机种类 1 1.3 FPGA与单片机区别 2 1.4 DSP和单片机区别 3 二、搭建开发环境 4 2.1 STC单片机命名介绍 4 2.2 安装keil软件 4 2.3 新建工程 5 2.4 下载程序 8 2.5 使用辅助工具计算延时时间 12 2.6 STC90C51系列单片机引脚图 13 三、 基础入门学习 14 3.1 LED灯模块 14 3.2 蜂鸣器模块 17 3.5 独立按键 18 3.6 矩阵键盘 22 3.7 独立数码管(静态数码管) 26 3.8 动态数码管 29 3.9 LED 16*16点阵 33 3.10 采用38译码器驱动8位数码管 48 四、单片机提高篇 53 4.1 定时器 53 4.2 中断 60 4.3 串口通信 71 4.4 NEC红外线遥控器解码 80 4.5 DS18B20温度传感器 87 4.6 EEPROM存储芯片(AT24C02) 96 4.7 DS1302 实时时钟芯片 107 4.8 PCF8591(ADC/DAC)转换芯片 119 4.9 (HC-SR04)超声波测距模块 130 4.10 使用计数器测量NE555脉冲频率 134 4.11 LCD1602显示屏 139 四、 单片机项目篇 146 5.1 16x16点阵滚动显示 146
STC15定时器的定时时间计算可以通过以下的步骤进行: 1. 确定定时器工作的时钟频率:STC15单片机内部有一个主时钟源,其频率可以通过设置相关寄存器来选择。假设我们选择的时钟频率为f。 2. 确定定时器的工作模式:STC15定时器有多种工作模式可选,包括定时器模式和计数器模式。在这里我们以定时器模式为例。 3. 设置定时器的计数值:定时时间可以通过设定定时器的计数值来确定。STC15定时器的计数值是16位的,可以通过两个8位的数据寄存器THx和TLx来设置。假设我们要设置的定时时间为T。 4. 计算定时器的计数值:定时器的计数值可以通过以下公式来计算: 计数值 = (定时时间 / 定时器的周期) - 1 其中,定时器的周期可以通过以下公式来计算: 定时器的周期 = 1 / (定时器的时钟频率) 将上述公式代入到计数值的公式中,可以得到: 计数值 = (定时时间 × 定时器的时钟频率) - 1 注意,这个计数值应该是一个整数,并且不能超过16位寄存器的范围。 5. 将计数值设置到定时器的计数寄存器中:将计算得到的计数值设置到THx和TLx寄存器中,即可完成定时器定时时间的设置。 需要注意的是,STC15定时器计时的精度与所设置的时钟频率有关,时钟频率越高,计时的精度越高。另外,还需要根据具体的需求来选择合适的工作模式和计数值,以满足定时要求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值