教你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;
}
}
单片机定时器0的使用
一:首先选择使用哪组寄存器?
问:8051单片机有哪些定时器?
答:8051单片机拥有3组定时器,分别是定时器0(T0) 定时器1(T1) 定时器2(T2)。
问:如何选择定时器?
答: 8051单片机定时器需要通过IE(中断允许控制器)进行设置,ET0,ET1 分别对应定时器0 定时器1
ET0,ET1 分别在IE寄存器的第1位和第3位 对应 IE = 0000 0010 IE = 0000 0100
二:选择定时器的工作方式
问:如何设置单片机的定时器是工作在定时模式,还是计数模式?
答:8051单片机的工作方式设定需要通过TMOD寄存器来设置,TMOD寄存器不可以通过位寻址。
TMOD寄存器的高4位用于设置定时器1
TMOD寄存器的第4位用于设置定时器0
定时器0 C/T TMOD的 第3位设置为0为定时模式,设置为1为计数模式 0000 0100
定时器1 C/T TMOD的 第6位设置为0为定时模式,设置为1为计数模式 0100 0000
三:选择定时器的方式选择功能
问:如何设置单片机定时器的工作方式选择功能
答:定时器的方式选择功能由TMOD寄存器来设定,不可以位寻址。
TMOD的第0位第1位 对应定时器0
TMOD的第4位第5位 对应定时器1
方式0 M1=0 M0=0 13位定时器/计数器
方式1 M1=0 M0=1 16位定时器/计数器
方式2 M1=1 MO=0 自动重载8位定时器/计数器
方式3 M1=1 M0=1 T0分为2个8位独立计数器,T1无方式3
相关问答
51单片机定时器0 的中断响应过程?8051单片机有5个中断源和两个中断优先级,高优先级的中断源可以中断低优先级的服务程序,反之不行。INT0>T0>INT1>T1>串口中断。8051没有专门的开中断和关中断....
TR0等于1什么意思?TR0是51单片机定时器T0的定时器启动位。TR0=1表示开启定时器(在EA打开的前提下)。EA是51单片机的总中断开关,所有中断都必须先使EA=1。51单片机中的定...
51单片机定时器 一毫秒怎么写?假设晶振为12MHz,不用中断时程序语句如下:TMOD=0x01;//定时器0工作方式1TH0=(65536-1000)/256;//装入初值TL0=(65536-1000)%256;TF...
在 51单片机 中, 定时器 t1停止计数的语句是?TR1=1;是启动计数的标志位,那TR1=0;就是停止计数了。C语言程序就这么写。汇编写法:SETBTR1;启动CLRTR1;停止TR1=1;是启动计数的标志位,那TR1=0;就是停止计...
单片机 定时 ET0=1什么意思,,要详解。。 - 懂得单片机定时ET0=1的意思是51单片机的定时器0允许中断。ET0是51系列单片机定时器0的中断允许开关,定时器中断是为了满足定时或计数溢出处理的需要而设...
问一下各位大神一个简单的 51单片机定时器 计数初值的问题设单...[最佳回答]周期为600us的等宽方波脉冲,那么高低电平持续时间就是300US,所以那里会乘以2。晶振为6MHz,则一个机器周期为2US,600US就是300个机器周期(8192-N)*2=...
利用 51单片机定时器 编写一个C语言程序,实现一个发光二极管定时亮、灭,要求亮一秒、灭一秒交替闪烁不?初始值为0,只只要启动定时器,定时器就开始工作,当计数溢出后,TF被置1,此时在程序中查询TF的状态,做相应的程序处理。一般建议用中断来做,查询方式会占用c...
c 51单片机 定时器 多长时间溢出?51单片机定时器溢出时间取决于两个因素,第一是定时器的时钟源频率,单片机可以配置这个时钟源为主频的1倍或者是1/12;第二个是定时器的初值,定时器是在初值的...
51单片机 怎样停止定时计数器,就是定时计数器完成了任务后不停下来,循环起来。怎么样停止 定时器 定时呢?51单片机中的定时器控制字中有两个控制位TR0、TR1,分别用于启动、停止定时器的计数。任何时刻,当TR0/TR1为1时,T0/T1定时器计数;当TR0/TR1为0时,T0/T1定时器...
51单片机定时器 怎么调开关时间?.51单片机定时器这么调开关时间:设置定时器的工作模式,共4种工作方式,两种模式(计数器/定时器)。比如:MOVTMOD,#01;设置定时器0位定时器模式,工作方式1。2...