0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

51单片机定时/计数器详解(工作原理及模式、应用)

h1654155282.3538 来源:网络整理 2018-04-26 14:04 次阅读

51单片机是基础入门的一个单片机,还是应用最广泛的一种。本文主要介绍51单片机定时/计数器,首先介绍了51单片机定时/计数器的工作原理,其次介绍了51单片机定时/计数器的工作模式,最后阐述了51单片机定时/计数器的应用,具体的跟随小编一起来了解一下吧。

51单片机的定时/计数器的概念

单片机中,脉冲计数与时间之间的关系十分密切,每输入一个脉冲,计数器的值就会自动累加1,只要相邻两个计数脉冲之间的时间间隔相等,则计数值就代表了时间的流逝,因此,单片机中的定时器和计数器其实是同一个物理的电子元件,只不过计数器记录的是单片机外部发生的事情(接受的是外部脉冲),而定时器则是由单片机自身提供的一个非常稳定的计数器,这个稳定的计数器就是单片机上连接的晶振部件;MCS-51单片机的晶振经过12分频之后提供给单片机稳定脉冲;晶振的频率是非常准确的,所以单片机的计数脉冲之间的时间间隔也是非常准确的。

51单片机的定时/计数器的工作原理

加1计数器输入的计数脉冲有两个来源,一个是由系统的时钟振荡器输出脉冲经12分频后送来;一个是T0或T1引脚输入的外部脉冲源。

作为定时器使用时,定时器计数8051单片机片内振荡器输出经过12分频后的脉冲个数,即:每个机器周期使定时器T0/T1的寄存器值自动累加1,直到溢出,溢出后继续从0开始循环计数;所以,定时器的分辨率是时钟振荡频率的1/12;

作为计数器使用时,通过引脚T0(P3.4)或T1(P3.5)对外部脉冲信号进行计数,当输入的外部脉冲信号发生从1到0的负跳变时,计数器的值就自动加1由于检测一个从1到0的下降沿需要2个机器周期,因此要求被采样的电平至少要维持一个机器周期。当晶振频率为12MHz时,最高计数频率不超过1/2MHz,即计数脉冲的周期要大于2微秒。;计数器的最高频率一般是时钟振荡频率的1/24;

由此可知,不论是定时器还是计数器工作方式,定时器T0和T1均不占用CPU的时间,除非定时器/计数器T0和T1溢出,才可能引起CPU中断,转而去执行中断处理程序。所以说,定时器/计数器是单片机中效率高而工作灵活的部件。

51单片机定时器工作原理图:

51单片机定时/计数器详解(工作原理及模式、应用)

由上图可见与定时器相关的寄存器主要有下面这几个:TMOD、 TCON、 TL0、TH0、TL1、TH1。下面介绍一下这几个寄存器

16位加法计数器:

51单片机定时/计数器详解(工作原理及模式、应用)

是定时计数器的核心,其中 TL0、TH0、是定时计数器0的底八位和高八位;TL1、TH1是定时计数器1的底八位和高八位;并且高八位和底八位可单独使用。16位加法计数器主要是在设置定时计数器的初值时候使用

TMOD定时器工作模式及方式寄存器

51单片机定时/计数器详解(工作原理及模式、应用)

GATE :定时操作开关控制位,当GATE=1时,INT0或INT1引脚为高电平,同时TCON中的TR0或TR1控制位为1时,计时/计数器0或1才开始工作。若GATE=0,则只要将TR0或TR1控制位设为1,计时/计数器0或1就开始工作。

C/T :定时器或计数器功能的选择位。C/T=1为计数器,通过外部引脚T0或T1输入计数脉冲。C/T=0时为定时器,由内部系统时钟提供计时工作脉冲。

M1 M0:T0、T1工作模式选择位

51单片机定时/计数器详解(工作原理及模式、应用)

TCON定时器控制寄存器

51单片机定时/计数器详解(工作原理及模式、应用)

TF1:定时器T1溢出标志,可由程序查询和清零,TF1也是中断请求源,当CPU响应T1中断时由硬件清零。

TF0:定时器T0溢出标志,可由程序查询和清零,TF0也是中断请求源,当CPU响应T0中断时由硬件清零。

TR1:T1充许计数控制位,为1时充许T1计数(定时)。

TR0:T0充许计数控制位,为1时充许T0计数(定时)。

IE1:外部中断1请示源(INT1,P3.3)标志。IE1=1,外部中断1正在向CPU请求中断,当CPU响应该中断时由硬件清“0”。

IT1:外部中断源1触发方式控制位。此位为1设置为底电平触发,为0设置为下降沿触发。

IE0:外部中断0请示源(INT0,P3.2)标志。IE0=1,外部中断1正在向CPU请求中断,当CPU响应该中断时由硬件清“0”。

IT0:外部中断源0触发方式控制位。此位为1设置为底电平触发,为0设置为下降沿触发。

51单片机定时器4种工作模式

工作模式0:

由TL0的低5位和TH0的全部8位共同构成一个13位的定时器/计数器,定时器/计数器启动后,定时或计数脉冲个数加到TL0上,从预先设置的初值(时间常数)开始累加,不断递增1,当 TL0计满后,向TH0进位,直到13位寄存器计满溢出,TH0溢出时,置位TCON中的TF0标志,向CPU发出中断请求。并且定时器/计数器硬件会自动地把13位的寄存器值清0,如果需要进一步定时/计数,需要使用相关指令重置时间常数,并把定时器/计数器的中断标记TF0置0。

工作模式1:最常用的定时器工作模式

模式1与模式0几乎完全相同,唯一的区别就是,模式1中的寄存器TH0和TL0共同构成的是一个16位定时器/计数器来参与操作,因此比模式0中的定时/计数范围更大

51单片机定时/计数器详解(工作原理及模式、应用)

工作模式2: 工作方式2特别适合于用作较精确的脉冲信号发生器。

这种模式又称为自动再装入预置数模式。有时候,我们的定时/计数操作是需要多次重复定时/计数的,如果溢出时不做任何处理,那么,在第二轮定时/计数时就是从0开始定时/计数了,而这并不是我们想要的。所以,要保证每次溢出之后,再重新开始定时/计数的操作是我们想要的,那就要把预置数(时间常数)重新装入某个地方,而重新装入预置数的操作是硬件设备自动完成的,不需要人工干预,所以这种工作模式就叫自动再装入预置数方式。在工作模式2中,把自动重装入的预置数存放在定时器/计数器的寄存器的高8位中,也就是存放在TH0中,而只留下TL0参与定时/计数操作。

这个工作模式常用于波特率发生器(串口通讯),T1工作在串口模式2;用于这种方式时,定时器就是为了提供一个时间基准;计数溢出之后,不需要做太多的事情,只做一件事就可以,就是重新装入预置数,再开始重新计数,而且中间不需要任何延时。

51单片机定时/计数器详解(工作原理及模式、应用)

工作模式3:

方式3只适用于定时/计数器T0,定时器T1处于方式3时相当于TR1=0,停止计数由于定时器/计数器T1没有工作模式3,如果把定时器/计数器T0设置为工作模式3,那么TL0和TH0将被分割成两个相互独立的8位定时器/计数器。

51单片机定时/计数器详解(工作原理及模式、应用)

51单片机的定时/计数器的应用

在protues下搭建仿真环境:

51单片机定时/计数器详解(工作原理及模式、应用)

在这里介绍一下定时器初值的设定:

工作方式0:13位定时器/计数器工作模式,最多可计数2的13次方次,即:8192次

工作方式1:16位定时器/计数器工作模式,最多可计数2的16次方次,即:65536次

工作方式2:8位定时器/计数器工作模式,最多可计数2的8次方次,即:256次,

工作方式3:8位定时器/计数器工作模式,最多可计数2的8次方次,即:256次

以12M晶振为例:每秒钟可以执行1000000次机器周期个机器周期。而定时器每次溢出 最多65536 个机器周期。

那么对12MHz的晶振来讲

1个机器周期 1us ( 12/fosc = 1us)

方式0 13位定时器最大时间间隔 = 2^13 = 8.192ms

方式1 16位定时器最大时间间隔 = 2^16 = 65.536ms

方式2 8位定时器最大时间间隔 = 2^8 = 0.256ms =256 us

方式3 8位定时器最大时间间隔 = 2^8 = 0.256ms =256 us

以上是对定时器定时的最大时间间隔做一个说明,下面具体说明怎么计算初值(小于最大时间间隔)假如定时10ms那么的定时器初值计算如下:

-当使用12M晶振,12MHz除12为1MHz,也就是说一秒=1000000次机器周期。10ms=10000次 机器周期。

预置数的计算公式:预置数=最大值-需要计数的次数;(65536-10000)

再将预置数装入16位定时计数器,如下:

TH0=(65536-10000)/256

TL0=(65536-10000)%256

-当使用11.0592M晶振,11.0592MHz除12为921600Hz,就是一秒921600次机器周期,10ms=9216次机器周期。

预置数的计算公式:预置数=最大值-需要计数的次数;(65536-9216)

再将预置数装入16位定时计数器,如下:

TH0=(65536-9216)/256

TL0=(65536-9216)%256

介绍完初值的确定,下面介绍定时器最常见的两种用法

定时:定时计数器作为定时器使用,配置步骤如下:

1.模式设置,配置TMOD寄存器

2.定时器初值设置 假设10ms中断

3.开定时器中断

4.开总中断

5.打开定时器

通过以上5步就打开了一个定时器,定时器没10毫秒发起一次中断,即没10毫秒进入一次中断服务程序

示例程序如下:

#include《reg51.h》

sbit led=P1^0;

unsigned int flag;

void main()

{

TMOD=0x01;//1.模式设置,00000001,采用的是定时器0,工作与式1(M1=0,M0=1)。

TH0=(65536-10000)/256; //2.定时器设置,每隔10毫秒发起一次中断。

TL0=(65536-10000)%256;

ET0=1; //3.开定时器0中断

EA = 1; //4.开总中断

TR0=1; //5.打开定时器

while(1)

{

if(flag==100)

{

led=~led;

flag=0;

}

}

}

void TIM0() interrupt 1 //中断服务程序

{

TH0=(65536-10000)/256; //进入中断要重新设置定时器处置,要注意。

TL0=(65536-10000)%256;

flag++;

}1234567891011121314151617181920212223242526272829

计数:定时计数器作为计数器使用,配置步骤如下:

1.模式设置,配置TMOD寄存器。

2.开计数器中断

3.开总中断

4.打开计数器

通过这简单的四步,我们就打开了一个计数器,可以对P3.4或者P3.5进行下降沿的脉冲计数,这里有一点要注意就是计数器可以不开中断,这样溢出时只是不会进去中断服务程序。

示例程序如下:

#include《reg51.h》

sbit led=P1^0;

sbit s=P3^4;

unsigned int count;

void main()

{

TMOD=0x05; //1.模式设置,00000101,采用的是计数器0,工作模式1(M1=0,M0=1)。

TH0=0; //计数器清零

TL0=0;

ET0=1; //2.开计数器0中断

EA=1; //3.开总中断

TR0=1; //4.打开计数器

led=1;

while(1)

{

count=(TH0《《8)|TL0;

if((count*10000)==50000)//按5下按键led状态取反

{

led=0;

TH0=0XFF;

TL0=0XFF; //人为的让计数器进入中断

}

}

}

void TIM0() interrupt 1 //中断服务程序

{

led=1;

TH0=0;

TL0=0;

}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 51单片机
    +关注

    关注

    274

    文章

    5702

    浏览量

    123484
收藏 人收藏

    评论

    相关推荐

    单片机计数器_定时器工作原理_

    单片机计数器_定时器工作原理定时器计数器寄存
    发表于 05-06 14:12 1次下载

    80C51单片机定时器/计数器详解(含工作方式)

    80C51单片机要实现定时功能,比较方便的办法是利用单片机内部的定时/计数器。下面我们将对80C
    发表于 11-09 20:10 5.9w次阅读
    80C<b class='flag-5'>51</b><b class='flag-5'>单片机</b><b class='flag-5'>定时器</b>/<b class='flag-5'>计数器</b><b class='flag-5'>详解</b>(含<b class='flag-5'>工作</b>方式)

    51单片机的中断系统和定时计数器的结构和工作原理及应用设计资料概述

    本文档的主要内容详细介绍的是51单片机的中断系统和定时计数器的结构和工作原理及应用设计资料概述。
    发表于 10-24 16:22 5次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b>的中断系统和<b class='flag-5'>定时计数器</b>的结构和<b class='flag-5'>工作原理</b>及应用设计资料概述

    51单片机定时计数器的结构和工作原理详细说明

    定时/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存组成。80C51单片机
    发表于 08-21 17:31 1次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b>的<b class='flag-5'>定时计数器</b>的结构和<b class='flag-5'>工作原理</b>详细说明

    51单片机定时计数器的应用实验资料说明

    熟悉keil仿真软件、protues仿真软件的使用和单片机定时程序的编写。了解51单片机定时计数
    发表于 09-06 17:03 22次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b>的<b class='flag-5'>定时计数器</b>的应用实验资料说明

    MCS-51单片机定时器计数器的4种工作方式解析

    MCS-51单片机含有2个定时器/计数器,具有4种工作方式。具有两种工作
    发表于 10-22 16:24 3.3w次阅读
    MCS-<b class='flag-5'>51</b><b class='flag-5'>单片机</b><b class='flag-5'>定时器</b>和<b class='flag-5'>计数器</b>的4种<b class='flag-5'>工作</b>方式解析

    51单片机定时/计数器工作原理

    定时/计数器的最基本工作原理是进行计数。对内部时钟脉冲进行计数时,作为定时器;对外部脉冲信号
    发表于 11-10 20:36 14次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b><b class='flag-5'>定时</b>/<b class='flag-5'>计数器</b>的<b class='flag-5'>工作原理</b>

    51单片机定时器/计数器工作原理和结构(一)

    51单片机定时器/计数器工作原理和结构回看下单片机中断系统内部结构:分析内部中断触发:先看
    发表于 11-11 09:21 11次下载
    【<b class='flag-5'>51</b><b class='flag-5'>单片机</b>】<b class='flag-5'>定时器</b>/<b class='flag-5'>计数器</b>的<b class='flag-5'>工作原理</b>和结构(一)

    51单片机定时器\计数器工作原理

    51单片机定时器\计数器工作原理定时器/计数器的结构:何时处于
    发表于 11-11 11:36 10次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b>之<b class='flag-5'>定时器</b>\<b class='flag-5'>计数器</b>的<b class='flag-5'>工作原理</b>

    51单片机定时器计数器配置

    一、51单片机定时/计数器工作原理在了解了单片机的时钟频率、时钟周期、机器周期之后,显然我们
    发表于 11-11 13:51 17次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b><b class='flag-5'>定时器</b>、<b class='flag-5'>计数器</b>配置

    51单片机定时/计数器

    定时计数器什么是定时/计数器以及用处51单片机有2个16位定时器/
    发表于 11-12 14:51 13次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b><b class='flag-5'>定时</b>/<b class='flag-5'>计数器</b>

    单片机(AT89C51定时/计数器详解及其实验案例

    单片机(AT89C51定时/计数器及其实验案例目录:定时/计数器应用范围
    发表于 11-17 10:06 114次下载
    <b class='flag-5'>单片机</b>(AT89C<b class='flag-5'>51</b>)<b class='flag-5'>定时</b>/<b class='flag-5'>计数器</b><b class='flag-5'>详解</b>及其实验案例

    51单片机定时器/计数器

    一、课前须知:1、51单片机有两组定时器/计数器,因为既可以定时,也可以计数,所以称之为
    发表于 11-20 20:06 47次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b><b class='flag-5'>定时器</b>/<b class='flag-5'>计数器</b>

    【Practical】51单片机定时/计数器

    51单片机定时/计数器程序查询方式与中断方式
    发表于 11-22 17:36 16次下载
    【Practical】<b class='flag-5'>51</b><b class='flag-5'>单片机</b><b class='flag-5'>定时</b>/<b class='flag-5'>计数器</b>

    单片机定时/计数器工作定时计数方式时有何异同点?

    单片机定时/计数器工作定时计数方式时有何异同点? 单片机
    的头像 发表于 10-25 11:50 4181次阅读