您现在的位置是:首页 > 智能机电

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

智慧创新站 2025-03-21【智能机电】270人已围观

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

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

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

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(设置定时器模式)

00方式013位计数器TMOD=0x00

01方式116位计数器TMOD=0x01

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

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

TCON:定时器/计数器控制寄存器(TIMER/COUNTERCONTROLREGISTER)

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也就是溢出OverFlow的F。TR的R就是运行Run。默认是0不运行,当然要置1才运行

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

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

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

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

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

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

voidmain()

{

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

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

TL0=(65536-45872)%256;

EA=1;//开总中断

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

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

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

}

voidT0_time()interrupt1

{

TMOD=0x01;//重装初值

TH0=(65536-45872)/256;

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

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

{

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

led=~led1;

}

}

很赞哦!(99)