STC89C51——定时器/计数器介绍及程序配置
前言
本文介绍基于常见的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——定时器/计数器介绍及程序配置相关推荐
- MPU6050基本原理介绍及程序配置
一.MPU6050简介 1.内部主要结构: 陀螺仪.加速度计.数字运动处理器DMP(Digital Motion Processor) PS: MPU6050还含有第二IIC接口,用于连接一个 第三方 ...
- 【STC8A8K64S4A12开发板】—开始做 定时器/计数器 实验啦
版权声明:本文为博主原创文章,转载请附上原文出处链接. 文章目录 前言 一.硬件设计 1.TIMER概念介绍 2.STC8A8K64S4A12系列单片机定时器/计数器介绍 3.定时器/计数器工作模式 ...
- 单片机定时器精准定时_通过51单片机定时器/计数器实现精确延时
MCS-51单片机内部共有两个16位可编程定时器,计数器,即TO.Tl.既有定时功能,又有计数的功能.每个定时器都是由两个8位的特殊功能寄存器THi和TLi组成(i=0.1).TMOD是TO和Tl的工 ...
- 定时器/计数器使用示例(c语言程序)
51单片机内部拥有两个定时/计数器 T0和T1 两种工作模式: (1)计数器工作模式 (2)定时器工作模式 定时器/计数器的结构 TMOD:选择定时器/计数器T0.T1的工作模式和工作方式. TCO ...
- 定时器计数器实验C语言程序,实验二 单片机定时器和计数器编程
仲恺农业工程学院实验报告纸 信息学院 (院.系)专业班组单片机原理及接口技术课实验二单片机定时器/计数器编程 一.实验目的 1.掌握单片机定时器/计数器的工作方式: 2.掌握单片机定时器/计数器的编程 ...
- 定时器计数器实验C语言程序,单片机定时器计数器实验报告.docx
单片机定时器计数器实验报告 单片机定时器计数器实验报告 篇一:单片机计数器实验报告 计数器实验报告 ㈠ 实验目的 1. 学习单片机内部定时/计数器的使用和编程方法: 2. 进一步掌握中断处理程序的编程 ...
- 【51单片机快速入门指南】3.2:定时器/计数器
目录 快速使用 硬知识 传统51单片机 CPU 时序的有关知识(12T) 51 单片机定时器原理 51 单片机定时/计数器结构 定时器/计数器0/1 定时器/计数器0和1的相关寄存器 控制寄存器 工作 ...
- PIC单片机入门_定时器/计数器TMR0详解与实例
1.前言: PIC 系列单片机内部配备有数量不等的定时器/计数器模块:例如PIC17CX系列和PIC18CX系列都都配置了4个定时器/计数器模块:而PIC16F87X系列都配置了3个定时器/计数器模块 ...
- 51单片机之定时器/计数器应用实例(方式0、1、2、3)
硬件:STC89C52RC 开发工具:Keil uVision4 对于刚接触单片机的同学来说可能会对定时器/计数器的应用很蒙圈,特别是初值的计算和各种定时方式的选择.下面希望能给你带来一个清晰的思路. ...
最新文章
- 我所理解的原型原型链
- 检查Java测试中发生了什么
- C#几个经常用到的字符串的截取
- Oracle11g:分区表数据操作出现ORA-14400异常处理
- ruby+selenium-webdriver一步一步完成自动化测试(5)—–多个测试用例
- Android 屏幕刷新机制
- 2017-07-12 周三 今日总结
- 解决 SQL 注入的另类方法
- ajax+同步+返回数据库,如何使AJAX同步
- Android学习笔记之MeasureSpec
- word如何调整字间距离_WORD如何调整行间距和字间距
- 什么是PLC软元件和软继电器
- 目前国内的跨境收款通道有哪些还不错的?
- 计算机磁盘图标显示异常,Win7磁盘图标显示错误是怎么回事?修复分区磁盘图标异常教程...
- 【高自旋和低自旋配合物】
- 计算机怎么没有word文档,word没了怎么回事 为什么电脑没有了word
- 前端学习记录005_canvas绘制钟表
- AP 1532E register Cisco 2504 AP注册WLC
- IDC具体是干什么的?
- 过于执着其实没有什么好下场--《科学怪人之再生情缘》
热门文章
- php imap读取邮箱邮件信息
- noip c语言算法教学视频,信息学奥赛课课通(C++)课程视频课程课件与代码
- MATLAB算法实战应用案例精讲-【数据分析】时序异常检测(附实战应用案例)
- setTimeout和cleartimeout(),再settimeout执行到一半后,正确的使用cleartimeout()删除
- TCP/IP详解(特详!)
- 正弦交流电信号机数学描述
- Rasa课程、Rasa培训、Rasa面试系列之: Rasa NLU意图和实体-分词器
- TextView+Button
- logrotate失效的简单排查
- 【图像去噪】空域+频域滤波图像去噪【含GUI Matlab源码 914期】