前言

本文介绍基于常见的51单片机,即如下图的芯片:

  • AT89C51具备2个定时器/计数器,即定时器/计数器 0、定时器/计数器 1 ( 简称 T0 /  T1)
  • T0 有 4 种工作方式,T1 有 3 种工作方式,2个定时器前3种工作方式一样,但是在T0 处于工作方式 3 时,T1 只能作为波特率发生器。
工作方式 说明
0 13位定时/计数器(最大值8192)
1 16位定时/计数器(最大值65535)
2 8位自动重装载定时/计数器(最大值255)
3 定时器0为双8位定时器,可独立使用
  • 有关定时器配置的2个重要寄存器为:TMOD(T工作模式寄存器) 和 TCON(T控制寄存器)

一、定时器/计数器相关寄存器介绍

1.TMOD:定时器/计数器工作模式寄存器

作用于 T1 作用于 T0
D7 D6 D5 D4 D3 D2 D1 D0
TMOD GATE C/T M1 M0 GATE C/T M1 M0

对寄存器位功能介绍如下:

①GATE 

GATE=0,TR0或TR1软件置1,定时器T0/T1工作。一般应用下此位配置为0

GATE=1,TR0或TR1软件置1,同时外部中断引脚INT0/INT1对应为高电平,定时器T0/T1工           作

②C/T:   

C/T=0,T作为定时器时钟来自 晶振
        C/T=1,T作为计数器时钟来自P3.4(T0)或P3.5(T1),即外部脉冲

③M1、M0

        2位取值不同,设置定时器/计数器的工作方式。

M1 M0 工作方式 说明 12M晶振下最大计数值
0 0 0 13位定时/计数器(最大值8192) 8.192 ms
0 1 1 16位定时/计数器(最大值65535) 65.535 ms
1 0 2 8位自动重装载定时/计数器(最大值255) 256 us
1 1 3 定时器0为双8位定时器,可独立使用 256 us

一般应用中,方式 0 使用较少;方式 1 一般用来做定时器中断,定时处理某个程序;方式 2 一般用来做波特率发生器,因为其自动重装载功能可能减少软件装载产生的时间误差;方式 3 也较为少用,在定时器不够且需要串口通信时,T0 使用在方式 3 做2个8位定时器用,T1工作在方式 1 做串口波特率发生器。

2.TCON:定时器/计数器控制寄存器(可位寻址)

D7 D6 D5 D4 D3 D2 D1 D0
TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

对寄存器位功能介绍如下:

①TF1: T1 溢出标志位。T1溢出后,硬件置1,硬件清0。
②TR1:T1 运行控制位。在 GATE=0时(此位功能见上文TMOD介绍),只要TR1=1 , T1开始工作。
③TF0:T0 溢出标志位。T0溢出后,硬件置1,硬件清0。
④TR0:T0 运行控制位。在 GATE=0时(此位功能见上文TMOD介绍),只要TR0=1 , T0开始工作。
⑤IE1:外部中断1请求标志位。硬件置1,硬件清0。
⑥IT1:外部中断1触发方式控制位。IT1=0,低电平触发;IT1=1,下降沿触发。
⑦IE0:外部中断0请求标志位。硬件置1,硬件清0。
⑧IT0:外部中断0触发方式控制位。IT0=0,低电平触发;IT0=1,下降沿触发。

在这个寄存器中,只需要管 TR0 和 TR1 位,因为这是用来启动定时器的。TF0 和 TF1 溢出标志位用于CPU触发定时器中断,不需要配置。

3.TL0、TH1、TL1、TH1

这四个位,用来配置 T0 和T1 的初值。

12M 晶振下,T0 工作方式1 下定时 50ms,程序配置语句为:

TL0=(65535-50000) %256 ;

TH0=(65535-50000) / 256 ;

以上是比较简单快捷的赋值方法,如果使用十六进制,则为:

TL0 = 0xAF   ;

TH0 = 0x3C  ;

因为 (65535-50000) = 15535 = 0x3CAF ; 方式1最大定时65.536ms,如果定时更久就要用软件处理,多次定时叠加。

二、程序应用

1、T0 方式 1 定时器中断 500ms

#include "reg51.h"
unsigned int count=0;void TIM0( ) interrupt 1
{TL0=(65535-50000)%256;TH0=(65535-50000)/256;if(--count == 0 ){count=10;    //    50ms *10 = 500ms//........(something to do)}}void main( )
{TMOD=0X01;    //定时器T0工作方式1TL0=(65535-50000)%256;  //50ms    TH0=(65535-50000)/256;TR0=1;        //启动T0ET0=1;        //使能T0溢出中断EA=1;         //打开总中断while(1);
}

1、T1 方式 1 定时器中断 300ms

#include "reg51.h"
unsigned int count=0;void TIM1( ) interrupt 3
{TL1=(65535-3000)%256;TH1=(65535-5000)/256;if(--count == 0 ){count=100;    //    3ms *100 = 300ms//........(something to do)}}void main( )
{TMOD=0X10;    //定时器T1工作方式1TL1=(65535-3000)%256;  //3ms    TH1=(65535-3000)/256;TR1=1;        //启动T1ET1=1;        //使能T1溢出中断EA=1;         //打开总中断while(1);
}

可以对比着看一下2个定时器配置上的不同,如果想自定义自己的功能,可以充分理解上述内容后自己编写程序。

STC89C51——定时器/计数器介绍及程序配置相关推荐

  1. MPU6050基本原理介绍及程序配置

    一.MPU6050简介 1.内部主要结构: 陀螺仪.加速度计.数字运动处理器DMP(Digital Motion Processor) PS: MPU6050还含有第二IIC接口,用于连接一个 第三方 ...

  2. 【STC8A8K64S4A12开发板】—开始做 定时器/计数器 实验啦

    版权声明:本文为博主原创文章,转载请附上原文出处链接. 文章目录 前言 一.硬件设计 1.TIMER概念介绍 2.STC8A8K64S4A12系列单片机定时器/计数器介绍 3.定时器/计数器工作模式 ...

  3. 单片机定时器精准定时_通过51单片机定时器/计数器实现精确延时

    MCS-51单片机内部共有两个16位可编程定时器,计数器,即TO.Tl.既有定时功能,又有计数的功能.每个定时器都是由两个8位的特殊功能寄存器THi和TLi组成(i=0.1).TMOD是TO和Tl的工 ...

  4. 定时器/计数器使用示例(c语言程序)

    51单片机内部拥有两个定时/计数器 T0和T1 两种工作模式: (1)计数器工作模式 (2)定时器工作模式  定时器/计数器的结构 TMOD:选择定时器/计数器T0.T1的工作模式和工作方式. TCO ...

  5. 定时器计数器实验C语言程序,实验二 单片机定时器和计数器编程

    仲恺农业工程学院实验报告纸 信息学院 (院.系)专业班组单片机原理及接口技术课实验二单片机定时器/计数器编程 一.实验目的 1.掌握单片机定时器/计数器的工作方式: 2.掌握单片机定时器/计数器的编程 ...

  6. 定时器计数器实验C语言程序,单片机定时器计数器实验报告.docx

    单片机定时器计数器实验报告 单片机定时器计数器实验报告 篇一:单片机计数器实验报告 计数器实验报告 ㈠ 实验目的 1. 学习单片机内部定时/计数器的使用和编程方法: 2. 进一步掌握中断处理程序的编程 ...

  7. 【51单片机快速入门指南】3.2:定时器/计数器

    目录 快速使用 硬知识 传统51单片机 CPU 时序的有关知识(12T) 51 单片机定时器原理 51 单片机定时/计数器结构 定时器/计数器0/1 定时器/计数器0和1的相关寄存器 控制寄存器 工作 ...

  8. PIC单片机入门_定时器/计数器TMR0详解与实例

    1.前言: PIC 系列单片机内部配备有数量不等的定时器/计数器模块:例如PIC17CX系列和PIC18CX系列都都配置了4个定时器/计数器模块:而PIC16F87X系列都配置了3个定时器/计数器模块 ...

  9. 51单片机之定时器/计数器应用实例(方式0、1、2、3)

    硬件:STC89C52RC 开发工具:Keil uVision4 对于刚接触单片机的同学来说可能会对定时器/计数器的应用很蒙圈,特别是初值的计算和各种定时方式的选择.下面希望能给你带来一个清晰的思路. ...

最新文章

  1. 我所理解的原型原型链
  2. 检查Java测试中发生了什么
  3. C#几个经常用到的字符串的截取
  4. Oracle11g:分区表数据操作出现ORA-14400异常处理
  5. ruby+selenium-webdriver一步一步完成自动化测试(5)—–多个测试用例
  6. Android 屏幕刷新机制
  7. 2017-07-12 周三 今日总结
  8. 解决 SQL 注入的另类方法
  9. ajax+同步+返回数据库,如何使AJAX同步
  10. Android学习笔记之MeasureSpec
  11. word如何调整字间距离_WORD如何调整行间距和字间距
  12. 什么是PLC软元件和软继电器
  13. 目前国内的跨境收款通道有哪些还不错的?
  14. 计算机磁盘图标显示异常,Win7磁盘图标显示错误是怎么回事?修复分区磁盘图标异常教程...
  15. 【高自旋和低自旋配合物】
  16. 计算机怎么没有word文档,word没了怎么回事 为什么电脑没有了word
  17. 前端学习记录005_canvas绘制钟表
  18. AP 1532E register Cisco 2504 AP注册WLC
  19. IDC具体是干什么的?
  20. 过于执着其实没有什么好下场--《科学怪人之再生情缘》

热门文章

  1. php imap读取邮箱邮件信息
  2. noip c语言算法教学视频,信息学奥赛课课通(C++)课程视频课程课件与代码
  3. MATLAB算法实战应用案例精讲-【数据分析】时序异常检测(附实战应用案例)
  4. setTimeout和cleartimeout(),再settimeout执行到一半后,正确的使用cleartimeout()删除
  5. TCP/IP详解(特详!)
  6. 正弦交流电信号机数学描述
  7. Rasa课程、Rasa培训、Rasa面试系列之: Rasa NLU意图和实体-分词器
  8. TextView+Button
  9. logrotate失效的简单排查
  10. 【图像去噪】空域+频域滤波图像去噪【含GUI Matlab源码 914期】