当前位置:文档之家› 一看就懂的单片机中断定时器

一看就懂的单片机中断定时器

80c51定时器
实现定时功能,比较方便的方法是利用单片机内部的定时器/计数器。也可以采用下面的三种方法
1 软件定时:软件定时不占用硬件资源,但是占用了cpu的利用率

采用时基电路定时:列采用555电路,外接必要的元器件(电阻和电容),即可构成硬件定时电路,但在硬件连接好以后,定时的范围不能由软件进行控制和修改,即不可编程

采用可编程的芯片定时:这种定时芯片的定时值及定时范围很容易用软件来确定和修改,此种芯片定功能强,使用灵活。在单片机的定时/计数器不够用时,可以考虑进行扩展。
定时/计数器的结构和工作原理
1.定时/计数器的实质是加一计数器(16位),由高8位和低8位两个寄存器组成,TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能,TCON是控制器,T1,T0的启动和停止以及设置溢出标志。

加一计数器输入的技术脉冲有两个来源,一个是由系统的时钟振荡器输出脉冲经过12分频后送来,一个是T0或者T1引脚舒服的外部脉冲源,每来一个脉冲计数器加一,当加到计数器为全1时,再输入一个脉冲就使计数器回零。且计数器的溢出使TCON中TF0或TF1置1,向cpu发出中断请求(定时/计数器中断允许时)。付过定时/计数器工作于定时模式,则表示时间已到,如果工作计数模式,则表示计数值已满
可见,由溢出世时计数器的值减去计数初值才是加1计数器的计数值

计数器值——计数初值=加1计数器的计数值

计数值就是计数多少个数
假如晶振是12
50*1/12*12 12是震荡周期 1/12是 1/12是晶振周期

12个分频就是12个震荡周期刚好是一个计时器周期

设置为定时模式时,加1计数器是对内部机器周期计数(1个机器周期等于12个震荡周期,即计数频率为晶振频率的1/12)。计数值N乘以机器周期Tcy就是定时时间t。

65535*1等于微妙
65535就是65毫秒

设置为计数器模式时,外部事件计数脉冲由T0或T1引脚输入到计数器。在每个机器周期的S5P2期间采样T0,T1引脚电平。当某周期采样到一高电平输入,而下一周期采样到一低电平时,则计数器加1,更新的计数值在下一个机器周期的S3P1期间装入计数器。由于检测一个从1到0的下降沿需要两个机器周期,因此晶振频率为12MHz时,最高计数频率不超过1/2MHz,即计数脉冲的周期要大于2us。

80c51单片机定时/计数器的工作由两个特殊功能其存期控制。TMOD用于设置工作方式;
一、工作方式寄存器TMOD用于设置定时/计数器的工作方式,低四位用于T0,高四位用于T1。其格式如下:

位 7 6 5 4 3 2

1 0
字节地址:89H GAT C/t M1 M0 GATE C/t M1 M0 TMOD
GATE:门控位。GATE=0时,只要
软件使TR0或TR1为1,同时
外部中断引脚或也为高电平,才
能启动定时/计数器工作。即此时
定时器的启动多了一条件。
C/T:定时/计数器模式选择位,
C/T=0为定时模式,C/T1为计数
模式

M1M0:工作方式置位,定时/计数器
有四种工作方式,由M1M0进行
设置。 外部中断引脚就是 P3^2
引脚

单片机核心就是中断,定时器
串口通信

定时器工作方式设置表
M1M0 工作方式 说明
00 方式0 13位定时/计数器
01 方式1 16位定时/计数器
10 方式2 8位自动重装定时/计数器
11 方式3 T0分成两个独立的8位定时/计数器,T1此方式停止计数

控制寄存器TCON
TCON的低四位用于控制外部中断,
已在前面介绍。TCON的高四位用于控制
定时器/计数器的启动和中断申请,其格
式如下:
位 7 6 5 4 3 2 1 0
字节地址:88H TF1 TR1 TF0 TR0 TCON
TF1:T1溢出中断请求标志位。T1计数溢
出时由硬件自动TF为1。cpu响应中断后
TF1由硬件自动清0。T1工作时,cpu可随
查询TF1的状态。所以,TF1可用作查询
测试的标志。TF1也可以用软件置1或者
0,同硬件置1或者清0效果一样。
TR1(TCON.6):T1运行控制位,TR1置
1时,T1开始工作:TR1置0时,T1停止
工作,TR1由软件置0或者1,所以,用
软件可以控制定时/计数器的启动和停止

TF0(TCON.5):T0溢出中断请求标志位,
其功能与TF1类同
TR0(TCON.4):T0运行控制位,其功能
与TR1类同

方式1
方式1的计数位数是16位,由TL0作为低
8位,TH0作为高8位。组成了16位加1
计数器。

计数个数与计数初值的关系为:
X=2^16—N 最大值65535

高八位和低八位的关系
低八位TL0 1 1 1 1 1 1 1 1 如果低八位超过了256之后就进1给高八位,然后到66635之后清零
高八位TH0 1 1 1 1 1 1 1 1

TH0=(65536—50000)/256 等于十六进制 3CB0 超过256的装在高八位中 50000就是50毫秒 就是需要定时的时间
TL0=(65536—50000)%256 不超过256的装在低八位中
TH0 ,TL0是寄存器

要计算60毫秒的就 TH0=(65536-60000)/256
TL0=(65536-60000)%256
定时/计数器应用举例子
初始化程序应用完成如下工作:
对TMOD赋值,以确定T0和T1或
TH1的工作方式。
计算初值,并将其写入TH0,TL0或
TH1,TL1.
中断方式时,则对IE赋值,开放中断。
使IR0或TR1置位,启动定时/计数器
或计数。


51单片机有5个中断先介绍三个中断先
外部中断有下降沿

和跳变沿

触发沿方式
EA=1; //打开总中断,无论用什么中断都必须打开总中断
EX0=1;//打开外部中断


void exter0() interrupt 0 //中断函数,无论用什么中断都要这个函数,0表示工作方式0,有0到5

........................................... //中断函数,进入中断函数执行中断函数,中断函数有点像c语言的函数调用


跳变沿方式

EA=1;//打开总中断,无论用什么中断方式是什么都必须打开总中断
EX0=1;//打开外部中断,使用外部中断时候必须打开外部中断
IT0=1;//跳变沿触发方式

void main()

................................................//主函数


void exter0() interrupt 0 //中断函数,无论用什么中断都要这个函数,0表示工作方式0,有0到5

........................................... //中断函数,进入中断函数执行中断函数,中断函数有点像c语言的函数调用


中断定时器
使用中断定时器的时候 必须要打开总中断,打开定时器中断, 设置定时器0为工作方式1,启动定时器,定时器有定时器0和1两种方式,然后计算计数时间
中断定时器有两个寄存器TH0和TL0。计算时间放在两个寄存器中一共16位,分别为高八位,和低八位

分别为TH0 1 1 1 1 1 1 1 1 TL0 1 1 1 1 1 1 1 1
当TL0寄存器存入数据超过255的时候就进1到TH0;
不超过255的时候就存入到TL0中所以TH0=65536/256去整,TL0=65536%256求余;
公式为TH0=(65536-要定时多少时间)/256;
TL0=(65536-要定时多少时间)%256;


TH0=(65536-50000)/256;
TL0=(65536-50000)%256;


定时器0
EA=1; //打开总中断
TMOD=0x01; //设置定时器0为工作方式1
ET0=1; //打开定时器0
TR0=1; //启动定时器0
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;

void main()

................................//主函数


void time0() interrupt 1 //中断函数,工作方式为1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
}


定时器1
EA=1; //打开总中断
TMOD=0x01; //设置定时器0为工作方式1
ET1=1; //打开定时器1
TR1=1; //启动定时器1
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;

void main()

................................//主函数


void time0() interrupt 3 //中断函数,工作方式为3
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
}












相关主题
文本预览
相关文档 最新文档