ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2020-04-14 16:02:47  阅读:1150  来源: 互联网

标签:方式 计数 T0 T1 单片机 计数器 详解 定时 AT89C51


 

 


目录

定时/计数器应用范围

定时/计数器概述

定时/计数器的结构和工作原理

 定时/计数器的结构:

定时/计数器的工作原理:

定时/计数器的控制寄存器

定时/计数器方式寄存器TMOD

 定时/计数器控制寄存器TCON

定时/计数器的四种工作方式

方式0

方式1

方式2

方式3

 总结:

定时/计数器的应用

计算定时/计数初值

定时/计数器应用步骤

定时/计数器的案例分析(见下一篇,尽请期待!!!)



定时/计数器应用范围

 定时/计数器是单片机系统一个重要的部件,其工作方式灵活、编程简单、使用方便,可用来实现定时控制、延时、频率测量、脉宽测量、信号发生、信号检测等。此外,定时/计数器还可作为串行通信中波特率发生器。

定时/计数器概述

  1. 80C51单片机内部有两个定时/计数器T0和T1,其核心是计数器,基本功能是加1。
  2. 对外部事件脉冲(下降沿)计数,是计数器;对片内机周脉冲计数,是定时器。
  3. 计数器由二个8位计数器组成。
  4. 定时时间和计数值可以编程设定,其方法是在计数器内设置一个初值,然后加1计满后溢出。调整计数器初值,可调整从初值到计满溢出的数值,即调整了定时时间和计数值。
  5. 定时/计数器作为计数器时,外部事件脉冲必须从规定的引脚(P3.4,P3.5)输入。且外部脉冲的最高频率不能超过时钟频率的1/24

定时/计数器的结构和工作原理

 定时/计数器的结构

8051单片机内部有两个16位的可编程定时/计数器,称为定时器0(T0)和定时器1(T1),可编程选择其作为定时器用或作为计数器用。其逻辑结构如下图所示:

定时/计数器的工作原理

可用一个简单的框图构造它的模型 :N位计数器构成了电路的核心。定时和计数两种方式的区别在于计数器的脉冲来源.初值寄存器是用来设定“定时/计数的具体参数”

注:

(1) 何时控制启动计数?                               启动控制(TR)                       

(2) 如何控制定时还是计数?                        定时/计数控制C/T来控制(后面会介绍)

(3) 如何控制定时/计数的长短?                   N位初值寄存器(设定初值)

定时/计数器的控制寄存器

参与定时器/计数器管理的SFR有TMODTCON  

定时/计数器方式寄存器TMOD

TMOD

4位控制T1

4位控制T0

门控位

计数/定时

方式选择

工作方式

选择

门控位

计数/定时

方式选择

工作方式

选择

G

C / T

M1

M0

G

C / T

M1

M0

 M1-M0:工作方式的选择位

M1M0

工作方式

功能

00

方式0

13位计数器

01

方式1

16位计数器

10

方式2

两个8位计数器,初值自动装入

11

方式3

两个8位计数器,仅适用T0

 C/T:计数/定时方式选择位

  •    C/T=1,计数工作方式,对外部事件脉冲计数,用作计数器。
  •    C/T=0,定时工作方式,对片内机周脉冲计数,用作定时器。

GATE:门控位 

  •    GATE=0,运行只受TCON中运行控制位TR0/TR1的控制。
  •    GATE=1,运行同时受TR0/TR1和外中断输入信号的双重控制。只有当INT0/INT1=1且TR0/TR1=1,T0/T1才能运行。

     注:TMOD字节地址89H,不能位操作,设置TMOD须用字节操作指令。

     eg:TMOD=0XA6              0XA6 --->1010 0110    说明:高四位(T1双重控制,定时工作方式,并且为方式2)低四位(T0只              受TCON中运行控制位TR0/TR1的控制,计数工作方式,并且方式2)

说明:不管是定时还是计数工作方式,定时器T0或T1在对内部时钟或外部脉冲计数时,不占用CPU时间,除非产生溢出时才可能中断CPU的当前操作。

 定时/计数器控制寄存器TCON

TCON

 

TCON

T1

中断标志

T1

运行标志

T0

中断标志

T0

运行

标志

INT1

中断

标志

INT1

触发

方式

INT0

中断

标志

INT0

触发

方式

位名称

TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0

 

TCON低4位与外中断INT1,INT0有关,已在中断中叙述。不清楚可以查看上一篇blog(单片机(AT89C51)中断系统详解和中断系统应用实验

高4位与定时/计数器T0、T1有关。

⑴ TF1: 定时/计数器T1溢出(中断)标志。

⑵ TF0: 定时/计数器T0溢出(中断)标志。

⑶ TR1: 定时/计数器T1运行控制位。TR1=1,T1运行;  TR1=0,T1停止。

⑷ TR0: 定时/计数器T0运行控制位。TR0=1,T0运行;  TR0=0,T0停止。

注:TCON的字节地址为88H,每一位有位地址,均可位操作。


定时/计数器的四种工作方式

在TMOD的M1-M0中已经提到,现在对此进行深入的探讨 

方式0

当TMOD中的M0=0,M1=0时,为13位计数或定时方式。其中 TLi 使用低5位。

方式1

当TMOD中的M0=1,M1=0时,为16位计数或定时方式。

方式2

当TMOD中的M0=0,M1=1时,为8位自动重装初值计数或定时方式。

在方式2时,将16位计数器分成两个8位的计数器,THi 用来存放初值,当计数器溢出时,一方面将TFi置1,申请中断,一方面自动将TH的值装入TL。

方式3

T0 在方式3下时,T1作为波特率发生器,T1的控制位TF1、TR1出借给T0使用,而T0则构成两个独立的结构,其中TL0构成一个完整的8位定时器/计数器,而TH0则是一个仅能对晶振频率12分频的定时器。

T1作波特率发生器时,可以设置成方式0、1或2,用在任何不需要中断控制的场合。一般作波特率时常设成方式2的自动重装模式。

 总结:

M1M0

方式

计   数   器   配   置

0   0

0

TLx低5位与THx的8位构成13位计数器

0  1

1

TLx与THx构成16位计数器

1  0

2

自动重装初值(THx)的8位(TLx溢出时)计数器

1  1

3

仅用于T0,分成两个8位计数器,T1停止计数

             


定时/计数器的应用

计算定时/计数初值

定时/计数初值计算公式:

其中:

N与工作方式有关:     方式0时,N=13;   方式1时,N=16;   方式2、3时,N=8。

机周时间与主振频率有关:机周时间=12/fosc       eg:fosc=12MHZ时,1机周=1mS; fosc=6MHZ 时,1机周=2mS

 

例:定时器工作方式0,晶振频率6MHz,定时1ms,初值为?

       T=2^13-1ms/2us= 8192-500=7692=1 1110 0000 1100    所以:TLi(低五位)=01100                    THi(高八位)=11110000

       工作方式1,频率12MHz,定时25ms,初值为?

       T=2^16-25ms/1us=65536-25000=9E58                             所以:TLi(低八位)=0101 1000             THi(高八位)=1001 1110  

       晶振频率12MHz时,工作方式2的最长定时时间为多少毫秒?四种工作方式最长定时时间分别为多少毫秒?

      工作方式2,3--->八位                          最长时间=1us*2^8=0.256ms

      工作方式1     ---->16位                         最长时间=1us*2^16=65.536ms   

      工作方式0     ---->13位                         最长时间=1us*2^13=8.192ms 

 

定时/计数器应用步骤

⑴ 合理选择定时/计数器工作方式

⑵ 计算定时/计数器定时初值(按上述公式计算)

⑶ 编制应用程序

    ①定时/计数器的初始化

       包括定义TMOD、写入定时初值、设置中断系统、启动定时/计数器运行等。

    ②正确编制定时/计数器中断服务程序

        注意是否需要重装定时初值,若需要连续反复使用原定时时间,且未工作在方式2,则应在中断服务程序中重装定时初值。

 


定时/计数器的案例分析(见下一篇,尽请期待!!!

 

 

标签:方式,计数,T0,T1,单片机,计数器,详解,定时,AT89C51
来源: https://blog.csdn.net/weixin_45629315/article/details/105418365

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有