产品概述

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

小编 2024-11-25 产品概述 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自动调用。

相关问答

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

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

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

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

单片机 常用的三种定时方法 - 懂得

程序延时,定时中断,定时查询.

单片机 C语言 定时器 怎么调用-ZOL问答

单片机中通过中断的方式来调用定时器。具体的调用方式可以参考通过如下程序:程序功能:利用定时器进行定时,实现每秒中led闪烁一次#includesbitled...

简述89c51 单片机中断 多概念?

51单片机有5个中断,分别是外部中断0、定时器中断0、外部中断1、定时器中断1、串口中断。51单片机有5个中断,分别是外部中断0、定时器中断0、外部中断1、定时...

单片机 如何把 定时器 延时写成delay延时那样在主程序里随便调用?

你可以在调用函数时启动定时器,并通过中断服务函数判断中断次数是否达到,达到的话就置一个标志位,然后主函数中while判断,不过这太浪费系统资源了,有什么用...

stm32 单片机 不进 中断 怎么精确定时?

采用查询计时器计数器的方式可实现精确定时。采用查询计时器计数器的方式可实现精确定时。

单片机 为什么把显示函数放在 定时器中断 里面就不会更新显示了?

单片机把显示函数放在定时器中断里面会导致显示不更新。单片机的定时器中断是按照一定的时间间隔触发的,当显示函数放在定时器中断里面时,每次定时器中断触发...

8051 单片机 如何设置 中断 优先级?

8051单片机中断优先级可以通过IP寄存器进行设置。IP寄存器的高3位分别表示外部中断0、外部中断1和定时器中断的优先级,其中高位表示优先级高。可以通过设置IP...

单片机 常用的三种定时方法 - XgWOfNq2 的回答 - 懂得

程序延时,定时中断,定时查询.

猜你喜欢