http://blog.csdn.net/wodejiaoao/article/details/5461921

2010

单片机T2定时器实现1秒精确定时程序

/********************************************************************************************

* 文 件 名:test.c

* 功    能:使用T2定时器实现1秒精确定时并闪灯

* 1.CPU型号:AT89S52

* 2.晶振:12.000MHz

*********************************************************************************************/

#include "reg52.h"                               // 包含头文件

#define uint unsigned int

#define uchar unsigned char

sbit P1_7 = P1 ^ 7;                              // 定义位变量

/********************************************************************************************

* 函数名称:Timer2_Server()

* 功    能:定时器2溢出中断。

* 入口参数:无

* 出口参数:无

* 注    意:在本函数中设置了一个静态变量Timer2_Server_Count,静态变量的值在进入函数时是不会被

*           初始化的,而是保持上次的值。它用来计数T2定时器的溢出次数(进入本函数的次数),每

*           溢出16次,就控制一次LED11反转显示。这时的时间正好是1秒,而且是精确的1秒!只与晶振

*           的精度有关。

*********************************************************************************************/

void Timer2_Server(void) interrupt 5

{

static uint Timer2_Server_Count;

// 定义静态变量,用来计数T2定时器的溢出次数(进入本函数的次数)

TF2=0;

// T2定时器发生溢出中断时,需要用户自己清除溢出标记,而51的其他定时器是自动清除的?

Timer2_Server_Count++;

if(Timer2_Server_Count==16)                    // T2定时器的预装载值为0x0BDC,溢出16次就是1秒钟。

{

Timer2_Server_Count=0;

P1_7=~P1_7;                                // LED11反转显示。

}

}

/********************************************************************************************

* 函数名称:main()

* 功    能:使用T2定时器实现1秒精确定时并使LED11闪灯,即LED11亮1秒,灭1秒,亮1秒,灭1秒......

* 注    意:

*           1、要精确定时,必须使用定时器的自动装载方式。本实验使用T2定时器,让它工作在16bit自动

*           装载方式,这时,有另一个位置专门装着16位预装载值,当T2溢出时,预装载值立即被装入,

*           这就保证了精确定时。

*           2、T2定时器是一个16位定时器,最长的溢出时间也就几十毫秒,要定时1秒,就需要用一个变量

*           来保存溢出的次数,积累到了一定的次数后,才执行一次操作。这样就可以累加到1秒或者更

*           长的时间才做一次操作。

*           3、当T2定时器发生溢出中断时,需要用户自己清除溢出标记,而51的其他定时器是自动清除的。

*           4、T2定时器预装载值的计算:

*              设晶振为12MHz,每秒钟可以执行1000000(12000000/12)个机器周期。而T2每次溢出时最多

*           经过了65536个机器周期。我们应该尽量让T2定时器的溢出中断的次数最少,这样对主程序的干扰

*           也就最小。

*           选择每秒中断14次,每次溢出1000000/14=71428.57个机器周期,不为整数且超出65536个机器周期,有效。

*           选择每秒中断16次,每次溢出1000000/16=62500个机器周期,小于65536个机器周期,有效。

*           选择每秒中断20次,每次溢出1000000/20=50000个机器周期,小于65536个机器周期,有效。

*           .

*           .

*           .

*           通过上面的计算,我们可以发现,我们可以选择的方式有很多,但是最佳的是每秒中断16次,每次

*           溢出62500个机器周期,那么赋给T2定时器的初值应为65536-62500=3036,转换成十六进制值为

*           0x0BDC。

*********************************************************************************************/

void main (void)

{

P1_7=1;                                        // LED11灭

/* T2定时器赋预装载值,溢出16次就是1秒。 */

RCAP2H=0x0B;

RCAP2L=0xDC;

ET2=1;                                         // 允许T2定时器中断

EA=1;                                          // 打开总中断

TR2=1;                                         // 启动T2定时器

while(1);                                      // 死循环,等待T2定时器的溢出中断

}

单片机小精灵t2_51单片机定时器T2初始化设置相关推荐

  1. 单片机小精灵t2_51单片机的最小系统

    自己焊的51单片机的最小系统包括:CUP(STC89C52),晶振与谐振电容(22pF,晶振加电容的主要目的是滤波,这样可以使得晶振输出的波形更加平滑),复位电路(最简单的复位电路:电解电容10uF. ...

  2. 入门51单片机(STC8952RC)定时器、有关中断原理简述、寄存器设置与程序示例(包括流水灯和计时器)

    目录 1.单片机之定时器 1.1 STC89C52RC定时器模式1工作流程 1.1.1 计数部分 1.1.2 时钟部分 1.1.3 中断部分 1.2 定时器T0.T1相关寄存器 1.2.1 TCOM寄 ...

  3. spring 定时器设置停止_单片机MSP430入门-理论⑦--定时器模块-定时器A②

    单片机MSP430入门-理论⑦--定时器模块-定时器A② 上期大概给大家汇总介绍了,定时器模块中比较重要并且常用的定时器A,大概说了下定时器A的两种常用模式,比较模式和捕获模式 本期将继续介绍定时器A ...

  4. AutoLeaders控制组——51单片机学习笔记(定时器、串口通信)

    本篇内容是观看B站江科大自化协UP主的教学视频所做的笔记,对其中内容有所引用,并结合自己的单片机板块进行了更改调整. 以下笔记内容以一个视频为一个片段(内容较多,可能不适合速食,望见谅) 一些内容涉及 ...

  5. PIC16F15323单片机 (中断与定时器Timer0)

    PIC16F15323单片机 (中断与定时器Timer0) 1 基本原理 2 实现代码 开发环境选择的是 MPLAB X IDE v5.50和 xc8-v2.32-full-install-windo ...

  6. PIC16F877A单片机 (中断与定时器Timer1)

    PIC16F877A单片机 (中断与定时器Timer1) 1 基本原理 2 实现代码 1 基本原理 上图中,如果RC0左边外接了外部的晶振,那么T1OSCEN必须置一.这个外部的晶振频率一般都比较低. ...

  7. PIC16F877A单片机 (中断与定时器Timer2)

    PIC16F877A单片机 (中断与定时器Timer2) 1 基本原理 2 实现代码 1 基本原理 2 实现代码 主要根据定时器2的逻辑框图和中断的逻辑框图来编写代码,这样代码的可读性强,也便于理解. ...

  8. 51单片机实现用一个定时器输出可调PWM

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.为什么要用一个定时器实现? 使用步骤 2.代码思路 3.如何改变输出频率和正脉宽 一.调节正脉宽 二.调节频率 使 ...

  9. 51单片机 (九)定时器

    什么是定时器? 定时器是单片机的重要功能模块之一,在检测.控制领域有广泛应用.定时器常用作定时时钟,以实现定时检测,定时响应.定时控制,并且可以产生ms宽的脉冲信号,驱动步进电机.定时和计数的最终功能 ...

最新文章

  1. 使用SharpPCap在C#下进行网络抓包
  2. SAP WM Production Schedule Profile设置问题导致生产补货的TO单自动创建问题
  3. 用户及用户组管理(week1_day4)--技术流ken
  4. BZOJ1901: Zju2112 Dynamic Rankings
  5. 一行代码就能解决微服务分布式事务问题,你知道GTS怎么做到的吗?
  6. C# TCP服务器和客户端
  7. 利用Resource Hacker简单去除WinRar广告
  8. word to latex 2.56安装方法
  9. 加速度传感器灵敏度表示的几种方式LSB/g,count/g,V/g,V/°
  10. Python 之下划线
  11. 什么是“海恩法则”?
  12. What is UTF-8?
  13. 一起avi文件播放时没有图像问题的解决(tscc.exe)
  14. I2C总线时序以及ACK和NACK(NAK),SCL被从机拉低?
  15. Java-判断回文数
  16. 抽象类DateFormat
  17. 华硕主板禁用UEFI安全启动(Disable Secure Boot for ASUS Motherboard)
  18. 2020-3-17课堂笔记
  19. p u b g服务器维护中是什么意思,数控G71里面P和Q是什么意思,你知道吗?
  20. 基于Android的网上订餐系统

热门文章

  1. 优化器--牛顿法总结
  2. PCB布局布线基础技巧问答_“Altium杯”Altium_Designer应用技巧
  3. IIS 7 php 7.0 部署WE MALL
  4. 清除number输入框的上下箭头
  5. 30kJava程序员升为全栈架构师的晋升之路
  6. winform 代码定义事件
  7. 实验九——基本数据类型存储及应用总结
  8. [Swift] 使用Playground
  9. UVA dp题目汇总
  10. 对Coverage进行编辑