第一步:配置工作方式寄存器—TMOD

TMOD寄存器的字节地址为89H,不能位寻址。一般采用整体赋值的方式进行配置;如:TMOD=0x01 // 0000 0001   GATE=0,定时器仅受TCON寄存器中TRx(x=0,1)来控制
  GATE=1,定时器TCON寄存器中TRx(x=0,1)和外部中断引(INT0或INT1)上的电平状态来共同控制。
  C/T=1,为计数器模式;
  C/T=0,为定时器模式。
  M1M0一工作方式选择位;一共有4种工作方式,通常选择 方式1 和 方式2;即M1M0 = 0 1 或M1M0 = 1 0

第二步:赋初值 —— THx、TLx

注意:
(1) 51单片机定时器常常方式1或者方式2
(2)方式1可以装入的总数是65536
(3)方式2可以转入的总数是256
赋值举例(以方式1和方式2):
 1、采用方式1
 使用定时器0的方式1,定时1ms。因为1ms = 1000us。故,65536 - 1000=64536 。即为16进制的0xfc18。
 方法一:

TH0 = (65536 - 1000) / 256
TL0 = (65536 - 1000) % 256

方法二

TH0 = 0xfc
TL0 = 0x18

2、采用方式2定时
  使用定时器0的方式2,定时0.1ms。因为0.1ms = 100us。故,256 - 100 = 246 。即为16进制的 0xf6 。

TH0 = TL0 = 0xf6
或者:
TH0 = 0xf6
TL0 = 0xf6

第三步:配置控制寄存器——TCON

控制寄存器(TCON)在特殊功能寄存器中,字节地址为88H,位地址(由低位到高位)分别是88H~8FH,该寄存器可进行位寻址。可采用TRO=1,IT0=1的方式进行配置启动
  

TF1一定时器1溢出标志位。
  当定时器1计满溢出时,由硬件使TF1置1,并且申请中断。进入中断服务程序后,由硬件自动清0。需要注意的是,如果使用定时器的中断,那么该位完全不用人为去操作,但是如果使用软件查询方式的话,当查询到该位置1后,就需要用软件清0。
TR1-定时器1运行控制位。
  由软件清0关闭定时器1。当GATE=1,且INT1为高电平时,TR1置1启动定时器1;当GATE=0时,TR1置1启动定时器1。
TFO-定时器0溢出标志,其功能及操作方法同TF1。
TRO-定时器0运行控制位,其功能及操作方法同TR1.
IE1-外部中断1请求标志
  当IT1=0时,为电平触发方式,每个机器周期的S5P2采样lNT1引脚,若INT1脚为低电平,则置1,否则IE1清0。
  当IT1=1时,INT1为跳变沿触发方式,当第一个机器周期采样到INT1为低电平时,则IE1置1。IE1=1,表示外部中断1正在向CPU申请中断。当CPU响应中断,转向中断服务程序时,该位由硬件清0。
IT1-外部中断1触发方式选择位。
IT1=0,为电平触发方式,引脚INT1.上低电平有效。
IT1=1,为跳变沿触发方式,引脚INT1.上的电平从高到低的负跳变有效。
IE0一外部中断0请求标志,其功能及操作方法同IE1。
IT0–外部中断0触发方式选择位,其功能及操作方法同IT1。

第四步:开总中断——EA = 1;

定时器0方式1的逻辑框图

程序示例

(1)使用定时器0、方式1
  定时 1ms(500HZ),使LED闪烁
  1ms = 1000us ;65536 - 1000 = 64536。 64536的十六进制为 0xfc18

 #include<reg51.h>
sbit LED = P1^0;int main(void)
{TMOD = 0x01;      //第一步:配置TMOD     //  0000 0001 ; 选择方式1TH0 = 0xfc;TL0 = 0x18;        // 第二步:赋初值       //  0xfc18 = 64536.  定时1000us = 1ms (500HZ)TR0 = 1;            //第三步:配置TCON     // 定时方式,选择定时器 T0ET0 = 1;                                    // 定时器/计数器0中断允许位,打开T0中断EA = 1;          //第四步:开总中断   while(1);
}void timer0() interrupt 1
{TH0 = 0xfc;TL0 = 0x18;       // 方式1 在中断中需要重新赋初值LED = ~LED;}

(1)使用定时器0、方式2
  定时 0.1ms(5000HZ),使LED闪烁
  0.1ms = 100us ; 256 - 100 = 156; 十六进制为0x9c

#include<reg51.h>
sbit LED = P1^0;int main(void)
{TMOD = 0x02;      //第一步:配置TMOD     //  0000 0002 ; 选择方式2TH0=TL0=0x9c;     // 第二步:赋初值       //  0x9c = 156.  定时100us = 0.1ms (5000HZ)TR0 = 1;          //第三步:配置TCON     // 定时方式,选择定时器 T0ET0 = 1;                                    // 定时器/计数器0中断允许位,打开T0中断EA = 1;          //第四步:开总中断   while(1);
}void timer0() interrupt 1
{LED = ~LED;               //方式2不需要重新赋初值
}

【参考文档】
《51单片机C语言教程(郭天祥)》

51单片机定时器(T0/T1)的使用与配置流程相关推荐

  1. 51单片机定时器计数器原理以及应用(方波、pwm、脉冲计数、高电平脉宽测量)

    1.基本原理:http://www.51hei.com/bbs/dpj-103111-1.html 补充: 1.TMOD定时器/计数器工作方式寄存器 GATE=1时,定时器由INT和TR共同控制,用于 ...

  2. 51单片机定时器/计数器(定时器中断)

    51单片机定时器/计数器(中断系统:定时器中断) 实现功能 通过定时器终端控制LED灯 D1 间隔一秒闪烁 单片机型号:STC89C52 定时器介绍 1.51单片机定时器原理 定时器实质上就是一个加1 ...

  3. 51单片机定时器量程的硬件扩展方式

    51单片机工作模式2自动装载定时值,按教科书的描述定时能力显得相对精准,但是此时的为8位定时器:当晶振为12MHz时,只能定时0.256ms. 升个级,精准性不要了,使定时器工作在模式1,16位定时器 ...

  4. 51单片机——定时器中断

    新版51单片机内部有3个16位可编程的定时器/计数器,即定时器T0,T1,T2.他们既有定时功能又有计数功能,我们可以通过配置与它们相关的特殊功能寄存器可以选择启用定时功能或计数功能:其中需要注意的是 ...

  5. C语言课设项目-51单片机-定时器和计数器

    (创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 一.定时器的原理 1.CPU时序的有关知识 2.在学习定时器之前需要明白的 3.定时/计数器的工作原理 ...

  6. 51单片机c语言定时器程序,51单片机定时器设置入门与程序解析

    89C51单片机有两个计数器T0和T1,每个计数器都是由两个8位的RAM 单元组成的,即每个计数器都是16 位的计数器,最大的计数容量是216=65536,记住是从0-65535. 其次.提供给定时器 ...

  7. 51单片机定时器及其应用(3)(测量脉冲频率)

    51单片机定时器及其应用(3)(测量脉冲频率) 前面介绍了定时器的一般应用以及定时器GATE位的应用,还有一个位没有介绍,那就是定时器C/TˉC/\bar{T}C/Tˉ位.前面讲解定时器时总是写作定时 ...

  8. 单片机学习:51单片机-定时器/计数器

    定时器顾名思义就是设定一段时间,这段时间到了之后可以触发中断,在中断中处理我们的任务.定时器还有一个功能就是计数,每次一个出发定时器内部的TH.TL就会加一,如果加满了就会产生溢出中断.那如何控制定时 ...

  9. c语言单片机定时器的应用程序,51单片机定时器中断程序(C语言)

    51c程序 51单片机定时器中断程序(C语言) 用C语言实现的,先要定义好定时器的初值 不管你使用多大的晶振,使用51单片机,一般都是12分频出来,也就可以得出一个机器周期 机器周期=12/n(n指晶 ...

最新文章

  1. github上传流程图记录
  2. react显示隐藏动画
  3. 解读千人千面,洞悉数据智能的价值
  4. 使用Java进行串口SerialPort通讯
  5. 【机器视觉】 measure_projection算子
  6. golang完成聊天室功能
  7. go语言中go+select的理解
  8. Android 中的LayoutInflater的理解
  9. 在微型计算机中r o m是什么,微机原理试题一
  10. windows批处理命令大全
  11. python网易云_使用Python实现下载网易云音乐的高清MV
  12. web浏览器数据本地存储
  13. 基于Windows2003实现网关-网关虚拟专用网络
  14. Python金融系列第七篇:市场风险
  15. 命令提示符(文件操作基础)
  16. Frank-Cucumber - Core Frank Steps
  17. AUTOSAR 基础知识简介
  18. 动态动作系统——一种全新的游戏人物动作制作思路
  19. 劳动节纪念——叹苦逼码农之古诗今改几篇汇总
  20. 开源切片工具--TileStache

热门文章

  1. 经济学人精读笔记17:无现金时代,电子支付大势所趋
  2. 您如何用leetcode进行面试很不好
  3. 微软小娜 服务器连不上,windows10小娜连不上网络怎么办 win10小娜无法连接网络如何解决...
  4. 阿里云服务器 开放端口
  5. Picked up JAVA_TOOL_OPTIONS: -agentlib:jvmhook解决方法
  6. Intellij IDEA 14 配置SVN
  7. CL3D: Camera-LiDAR 3D Object Detection With Point Feature Enhancement and Point-Guided Fusion 阅读笔记
  8. 三角形外接球万能公式_三棱锥外接球半径公式
  9. 随笔---XXXIII
  10. java模板velocity,java模板引擎:velocity