单片机小精灵t2_单片机T2定时器实现1秒精确定时

本文档介绍了如何使用AT89S52单片机的T2定时器实现1秒的精确定时,并通过中断服务函数`Timer2_Server`进行计数控制LED灯闪烁。通过设置静态变量记录溢出次数,当达到16次溢出时,即1秒时间,LED状态反转。程序中详细解释了定时器的配置和中断处理过程。
摘要由CSDN通过智能技术生成

单片机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次,就控制一次LED_1反转显示。这时的时间正好是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; // LED_1反转显示。

}

}

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

* 函数名称:main()

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

* 注 意:

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

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

* 这就保证了精确定时。

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

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

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

* 3、当T2定时器发生溢出中断时,需要用户自己清除溢出标

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值