产品概述

单片机定时器中断 教你51单片机的定时器中断以及使用方法

小编 2025-06-18 产品概述 23 0

教你51单片机的定时器中断以及使用方法

51单片机共有两个16位可编程的定时器/计数器,即定时器T0和定时器T1。它们既有定时功能又有计数功能,通过设置一些相关的特殊功能寄存器就可以选择启用哪一个功能。定时器系统是单片机内部一个独立硬件部分,与CPU和晶振之间通过内部某些控制线连接并相互作用,CPU一旦启动定时功能,定时器便会在晶振的作用下自动计时,当定时器计数器积满之后就会产生中断,通知CPU接下来做什么。

定时器或计数器实质是加一计数器(16位)(其输入脉冲有两个来源,一是由系统时钟振荡器输出脉冲经过十二分频后送来;另外是T0或T1引脚输入的外部脉冲源,每来一个脉冲计数器加1,当加到计数器全为1时,在输入一个脉冲就可使计数器回零,计数器的溢出是的TCON寄存器中TF0或TF1置1,向CPU发出中断请求,如果定时或计数器工作于定时模式,则表示定时时间到了,如果是计数则表示计数值已满)由高八位和低八位两个寄存器组成。

TMOD:定时器/计数器模式控制寄存器(TIMER/COUNTER MODE CONTROL REGISTER) ,确定工作方式和功能

TCON:控制寄存器,控制T0,T1的启动和停止及设置溢出标志。

定时器/计数器模式控制寄存器TMOD是一个逐位定义的8位寄存器,但只能使用字节寻址,其字节地址为89H。其格式为:其中低四位定义定时器/计数器C/T0,高四位定义定时器/计数器C/T1,各位的说明:

GATE——门控制。

GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。 当INT0引脚为高电平时TR0置位,启动定时器T0; 当INT1引脚为高电平时TR1置位,启动定时器T1。 GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。

C/T——功能选择位

C/T=0时为定时功能,C/T=1时为计数功能。 置位时选择计数功能,清零时选择定时功能。

M0、M1——方式选择功能

由于有2位,因此有4种工作方式:

M1M0 工作方式计数器模式 TMOD(设置定时器模式)

0 0 方式0 13位计数器 TMOD=0x00

0 1 方式1 16位计数器 TMOD=0x01

1 0 方式2 自动重装8位计数器 TMOD=0x02

1 1 方式3 T0分为2个8位独立计数器,T1为无中断重装8位计数器 TMOD=0x03 单片机定时器0设置为工作方式1为TMOD=0x01

TCON: 定时器/计数器控制寄存器(TIMER/COUNTER CONTROL REGISTER)

TMOD分成2段,TCON控制更加精细,分成四段,在本文中只要用到高四段。 TF0(TF1)——计数溢出标志位,当计数器计数溢出时,该位置1。

TR0(TR1)——定时器运行控制位 当TR0(TR1)=0 停止定时器/计数器工作 当TR0(TR1)=1 启动定时器/计数器工作

IE0(IE1)——外中断请求标志位

IT0(IT1)——外中断请求信号方式控制位 当IT0(IT1)=1 脉冲方式(后沿负跳有效)

当IT0(IT1)=0 电平方式(低电平有效)此位由软件置1或清0。

TF0(TF1)——计数溢出标志位

当计数器产生计数溢出时,此位由硬件置1。当转向中断服务时,再有硬件自动清0。计数溢出的标志位的使用有两种情况:采用中断方式时,作中断请求标志位来使用;采用查询方式时,作查询状态位来使用。注意记忆方法,理解单词原形,就绝对不会把TF和TR搞混。TF的F也就是溢出Over Flow的F。TR的R就是运行Run。默认是0不运行,当然要置1才运行

在写单片机定时器程序时候,在程序开始出需要对定时器及中断寄存器做初始化设置,通常初始化过程如下:

对TMOD赋值,以确定T0和T1的工作方式;

计算初值,并将初值写入TH0,TL0或者TH1,TL1;

中断方式时,则对IE赋值,开放中断

使TR0或TR1置位,启动定时器/计数器定时或者计数。

//实现led灯一秒亮灭闪烁

void main()

{

TMOD=0x01;//设置定时器0为工作方式1(M1 M0为01)

TH0=(65536-45872)/256;//装初值11.0582晶振定时50ms数为45872

TL0=(65536-45872)%256;

EA=1;//开总中断

ET0=1;//开定时器0中断

TR0=1;//启动定时器0

while(1);//程序停止在这里等待中断发生

}

void T0_time() interrupt 1

{

TMOD=0x01;//重装初值

TH0=(65536-45872)/256;

num++;//num每加一次判断一次是否到20次

if(num==20)//如果到了20次,说明1秒时间到

{

num=0;//num清0重新计数

led=~led1;

}

}

入门必看!单片机中断以及定时器的理解

一、中断系统

1.1.中断的概念

什么是中断:CPU在处理某一事件A时,发生的另外某一事件B请求CPU去处理(产生了中断),随后CPU暂时中断当前正在执行的任务,去对事件B进行处理,CPU处理完事件B后再返回之前中断的位置继续执行原来的事件A,这一过程总称为中断。

1.2.中断流程示意图

使CPU中断的事件称中断源。中断源向CPU发出中断请求,CPU暂时中断原来执行的事件A转去做事件B。事件B处理完毕后继续返回原先中断的地方(该过程称中断返回,原先中断的地方为断点),继续执行原先的事件。

1.3.中断的优先级

1.4 中断的好处

(1):提高了CPU的效率

CPU是计算机的指挥中心,它与外围设备(如:按键,显示器等)通讯的方法有查询和中断2种

1:查询:无论外围i/o是否需要服务,CPU每隔一段时间都要依次查询一遍,这种查询的方法,CPU需要花费一些时间在做查询的服务工作

2:中断:在外围设备需要通讯服务时主动告诉CPU,CPU停下当前工作去处理中断程序,从而提高了CPU的工作效率。

(2):可以实现实时处理

外设任何时候都可能发出请求中断的信号,CPU接到请求后及时处理,以满足实时系统的需要

(3):可以及时处理故障

计算机系统运行过程中难免会出现故障,eg:电源中断,存储器出错,外围设备工作不正常等,这时可以通过中断系统向中断源的CPU发出请求,以便解决故障。

二、定时器的使用步骤

1.打开总中断:

EA(ENABLE ALL) = 1;

2.设置定时器工作方式:

TMOD寄存器:定时器/计数器模式控制寄存器

其中M1和M0是定时器工作方式的设置位,共可设置4种工作方式。

方式0(M1M0 = 00):13位定时/计数器

方式1(M1M0 = 01):16位定时/计数器 //通常采用方式1

方式2(M1M0 = 10):8位自动重装定时/计数器

方式3(M1M0 = 11):T0分为两个独立的8为定时/计数器;T1在此方式停止计数

3.定时器填装初值

填装初值要点:

①单片机晶振频率:12M,震荡周期为1/12us

②标准的51单片机为12T,即12个时钟周期, 12 x 1/12 us = 1us,即加一次1us。

例如:将定时器设置在工作方式1,初值设为10ms:

TMOD = 0x01;

TH0 = (65536 - 10000);//10000代表10000个1us

TL0 = (65536 - 10000);

4.打开定时器中断

ET0 = 1:ENABLE TIME0

ET1 = 1: ENABLE TIME1

5.打开定时器(开始计数)

TR0 = 1:打开定时器0

TR1 = 1:打开定时器1

6.写中断服务函数(ISR)

注意:中断服务函数不能有参数和返回值

定时器使用程序

注意:

1:定时器和中断都属于单片机的内部资源,在开发板上是没有芯片的,同时定时器的初始化程序一旦溢出,会自动去执行定时器中断子程序,而不需要我们自己去调用,这些都是由硬件直接控制的。

2:定时器计算的是固定脉冲,其定时时间是可以计算出来的。它比延时函数有更好的作用,能提高CPU 的效率,因为延时函数是需要耗费CPU去执行的,在此期间,CPU是不能执行其它功能的,而定时器是需要用到 的时候,CPU自动调用。

相关问答

单片机定时器中断 程序怎么写?

在单片机中,定时器中断程序通常需要先初始化定时器的计数值和工作模式,然后编写中断服务程序。在中断服务程序中,需要清除中断标志位、处理需要执行的操作,最...

51 单片机 中的 定时器中断 是怎么用的?

所以中断的使用:1.开全局中断51是EA=12.对应中断使能比如定时器1ET1=1、定时器0ET0=13.定时器工作方式配置:有三种方式双8位定时16位定时...

单片机 的T0 中断 是什么?

T0中断就是定时器中断,也就是Timer0,分内部外部,内部用单片机本身的晶振频率,外部给单片机P3.4一个脉冲信号作为T0的定时器的工作频率,单片机内部有两个定时...

C语言写 单片机 的时候,怎么写定时 中断 ?

//写了个测试程序,希望对你有帮助#include//写了个测试程序,希望对你有帮助 #include#defineucharunsignedchar ucharm=0,i=0;...

单片机 外部中断和 定时器中断 的区别和用法?

正如大家所说的,外部中断是与外接接触,当条件满足时,进入中断。但我要强调的是定时器中断定时中断可以用于自检测、扫描等等但不要忘记了,定时中断还有个...

单片机 定时/计数器和 中断 到底有什么用?

定时器用来计算时间,固定时间触发中断。计数器用来对引脚输入的信号下降沿进行计数。和中断相关,但不一定要开中断。可以单独用。定时器用来计算时间,固定...

51 单片机 定时器 的四种工作方式的各自定时范围?

工作方式013位计数模式最大范围0-8191工作方式116位计数模式最大范围0-65535工作方式28位自动重装计数模式0-255工作模式3(只有T0)TL0和TH0将被分割...

单片机 程序中TF0是什么意思? 定时器 T0溢出 中断 ?

定时器/计数器0的溢出中断标志位当T0从初值开始加一计数到产生溢出时,由硬件使TF0置1,直到CPU响应中断由硬件复位定时器/计数器0的溢出中断标志位当T0从初...

单片机 的外部 中断 仿真实验。在 单片机 P1口上接有8只LED。在外部 中断 0输入引脚(P3.2)接一只按钮开关K1?

中断处理函数感觉有些问题,for循环之前使用P1=0x0f;然后将for内的P1=0x0f;改为P1=~P1;同时for循环中应该需要调用延时函数Delay(10);这里的值看你自...

单片机 t0 中断 原理?

T0中断就是定时器中断,也就是Timer0,分内部外部,内部用单片机本身的晶振频率,外部给单片机P3.4一个脉冲信号作为T0的定时器的工作频率,单片机内部有两个定时...

猜你喜欢