产品选型

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

小编 2024-11-24 产品选型 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;

}

}

单片机入门-C51语言采用定时器中断方法获取1秒精准定时解说

视频教程:

视频

单片机接通电源后将循环执行我们编制好的程序(一般称为主程序),当有外部设备或内部部件要求CPU为其服务时,计算机将被迫“中断”主程序的执行,并记录下暂停处程序地址(断点地址),然后转去为外部设备服务,即执行中断服务程序;在中断程序执行完毕后自动返回被迫中断主程序的地址,继续执行原主程序 一个单片机系统可能有多个中断源,而单片机CPU在某一时刻只能响应一个中断源的中断请求,当多个中断源同时向CPU发出中断请求时,则必须按照“优先级别”进行排队,CPU首先选定其中中断级别高的中断源为其服务,然后按排队顺序逐一服务,完毕后返回断点地址,继续执行主程序。

AT89C51具有五个中断源,分为内部中断源和外部中断源。外部中断源有两个,通常指由外部设备发出中断请求信号,从P3.2和P3.3 引脚输入单片机,用电平或边沿触发两种方式申请中断。 内部中断源有三个,两个定时器/计数器(T0,T1)中断源和一个串行口中断源,T0和T1的中断申请是在它们计数从全“1”变为全“0”溢出时自动向中断系统提出的。

本文采用定时器中断的方法先产生50毫秒的信号,计数20次得到1秒的时钟信号,作为后续电子钟设计的基础。

采用中断法的定时器/计数器的运用总结如下:

1。计算计数初值:

计数值=定时的时间/机器周期 50ms/1us=50000

初值X=最大计数值M-计数值; 65536-50000=15536 (0x3cb0)

2.TMOD寄存器的设置:

GATE C/T M1 M0 GATE C/T M1 M0

0 0 0 0 0 0 0 1 (0x01)

3.TCON寄存器的设置:

主要关注TR1/TR0 TR0=1

4.打开中断(含定时器中断和总中断)

5.中断服务函数的编程

相关问答

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

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

51单片机定时器 0的 中断 编号为多少?

51单片机定时器0的中断编号为1。在编写单片机程序时,我们可以使用定时器0来计算时间间隔、延时等操作。当定时器0计数到设定值时,就会触发定时器0中断,此时CPU...

51单片机中断 如何关闭?

51的串口中断,接收和发送是共用一个中断向量的,没法单独关闭。一般在中断服务函数中检测TI标志并及时清零就可以了。1、在中断服务程序里,关闭中断允许标志当...

单片机 中断 和定时怎么延时?

以上函数被调用一次,就延时10ms,多次调用可以达到任意更大的时间要求。!但是,在延时时,就其它什么事也做不了了,就是干等啊!2.硬件延时利用定时器/...3.操...

利用 51单片机定时器 编写一个C语言 程序 ,实现一个发光二极管定时亮、灭,要求亮一秒、灭一秒交替闪烁不?

初始值为0,只只要启动定时器,定时器就开始工作,当计数溢出后,TF被置1,此时在程序中查询TF的状态,做相应的程序处理。一般建议用中断来做,查询方式会占用c...

单片机定时器 1的 中断 函数】作业帮

[最佳回答]voidT0_init(void){TMOD=0X10;//定时器1ET1=0;//打开定时器1中断EA=1;//打开总中断TR1=0;//启动定时器1TH1=0xxx;//算吧TL1=...

一个关于 单片机 的定时 中断 的问题.有这样一句话:假设时钟频率...

[最佳回答]51单片机在内部要对晶振12MHZ,所以12M晶振除以12就是1M,即1秒钟有1M个时钟周期,每个时钟周期就是10^-6秒,即1us.TH0和TL0分别为定时器T0的高八位和...

51单片机 的蜂鸣器肿么关闭 求 程序段 -ZOL问答

#includesbitspeaker=P1^0;voiddelay(unsignedcharx){unsigned...拿音阶当索引,把定时器的设置值列成...

8051单片机的 定时器 0的 中断程序 入口地址为?

000bH如:ORG0000HAJMPSTARTORG000bH;T0中断地址入口AJMPINT_T0;转到真正的处理程序处ORG30H51...000bH如:...

定时器 单片机 程序 的运行过程 - yn4Wk5LPWx 的回答 - 懂得

我觉得是这样的,单片机的定时器,它的计数过程是相当于电脑里面一个后台运行的东东一样。在计数时单片机同时在执行其他程序,计数周期就是单片机的一...

猜你喜欢