单片机:中断及定时器工作
2018-07-14 来源:eefocus
一、中断
1、中断的概念
CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断产生);
CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务);
待CPU将事件B处理完毕后,再回到原来事件A中断的地方继续处理事件A(中断返回),这一过程称为中断。
引起CPU中断的根源叫做中断源。
中断源向CPU的请求,叫做中断请求。
CPU暂时中断原来的事件A,转去处理事件B。对事件B处理完毕后,再回到原来被中断的地方(即断点),称为中断返回。
实现上述中断功能的部件称为中断系统(中断机构)
2、中断响应优先级及中断服务程序入口表
3、中断优点
分时操作。CPU可以分时为多个I/O设备服务,提高了计算机的利用率;
实时响应。CPU能够及时处理应用系统的随机事件,系统的实时性大大增强;
可靠性高。CPU具有处理设备故障及掉电等突发性事件能力,从而使系统可靠性提高。
4、中断系统的结构
(1)、P3.2中断引脚可由IT0(TCON.0)选择其为低电平有效还是下降沿有效。当CPU检测到P3.2引脚上出现有效的中断信号时,中断标志IE0(TCON.1)置1,向CPU申请中断。
当IT0=0时,为电平触发方式。
当IT0=1时,为边沿触发方式(下降沿有效)。
(2)、初始化程序:
void int_init1()
{
IT0 = 1; //中断0触发方式 1下降沿 0低电平
EA = 1; //中断使能
EX0 = 1; //外部中断0使能
}
(3)、中断服务程序:
void int0() interrupt 0
{
EX0 = 0;
bsp_ledOff();
EX0 = 1;
}
中断服务函数无需在主函数调用,满足中断执行条件自动调用
二、定时/计数器
1、基本结构
定时/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器组成。TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能;TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。
2、计数脉冲来源:
加1计数器输入的计数脉冲有两个来源,一个是由系统的时钟振荡器输出脉冲经12分频后送来;一个是T0或T1引脚输入的外部脉冲源。每来一个脉冲计数器加1,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使TCON中TF0或TF1置1,向CPU发出中断请求(定时/计数器中断允许时)。如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。
可见,由溢出时计数器的值减去计数初值才是加1计数器的计数值。
(1)设置为定时器模式时,加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。计数值N乘以机器周期就是定时时间t
(2)设置为计数器模式时,外部事件计数脉冲由T0或T1引脚输入到计数器。在每个机器周期的S5P2期间采样T0、T1引脚电平。当某周期采样到一高电平输入,而下一周期又采样到一低电平时,则计数器加1,更新的计数值在下一个机器周期的S3P1期间装入计数器。由于检测一个从1到0的下降沿需要2个机器周期,因此要求被采样的电平至少要维持一个机器周期。当晶振频率为12MHz时,最高计数频率不超过1/2MHz,即计数脉冲的周期要大于2 us。
3、定时/计数器的控制
80C51单片机定时/计数器的工作由两个特殊功能寄存器控制。TMOD用于设置其工作方式;TCON用于控制其启动和中断申请。
(1)、工作方式寄存器TMOD
工作方式寄存器TMOD用于设置定时/计数器的工作方式,低四位用于T0,高四位用于T1。其格式如下:
GATE:门控位。GATE=0时,只要用软件使TCON中的TR0或TR1为1,就可以启动定时/计数器工作;GATA=1时,要用软件使TR0或TR1为1,同时外部中断引脚或也为高电平时,才能启动定时/计数器工作。即此时定时器的启动多了一条件。
C/T定时/计数模式选择位。 0为定时模式;1为计数模式。
M1M0:工作方式设置位。 定时/计数器有四种工作方式,由M1M0进行设置。
4种工作方式:
方式0为13位计数,由TL0的低5位(高3位未用)和TH0的8位组成。TL0的低5位溢出时向TH0进位,TH0溢出时,置位TCON中的TF0标志,向CPU发出中断请求。
方式1的计数位数是16位,由TL0作为低8位、TH0作为高8位,组成了16位加1计数器 。
方式2为自动重装初值的8位计数方式。
方式3只适用于定时/计数器T0,定时器T1处于方式3时相当于TR1=0,停止计数。
常用方式1和方式2
(2)控制寄存器TCON
TCON的高4位用于控制定时/计数器的启动和中断申请。其格式如下:
TF1(TCON.7):T1溢出中断请求标志位。T1计数溢出时由硬件自动置TF1为1。CPU响应中断后TF1由硬件自动清0。T1工作时,CPU可随时查询TF1的状态。所以,TF1可用作查询测试的标志。TF1也可以用软件置1或清0,同硬件置1或清0的效果一样。
TR1(TCON.6):T1运行控制位。TR1置1时,T1开始工作;TR1置0时,T1停止工作。TR1由软件置1或清0。所以,用软件可控制定时/计数器的启动与停止。
TF0(TCON.5):其功能与TF1类同。
TR0(TCON.4):其功能与TR1类同。
4、定时器/计数器编程
(1)初始化程序
void bsp_timerinit(void)
{
TMOD |= 0x01; //采用定时器0方式1工作
TL0 = COUNT;
TH0 = COUNT>>8; //赋计数初值
ET0 = 1; //定时器0使能端
EA = 1; //总中断使能
TR0 = 1; //定时器0开始计数
}
(2)定时器中断服务程序
void ISR_timer1(void) interrupt 1
{
TL0 = COUNT;
TH0 =COUNT>>8; //重新赋计数初值(手动装入)
countt1++;
if (countt1 == 1000)
{
countt1 = 0;
LED = ~LED;
}
}
上一篇:单片机:矩阵键盘和LCD1602
下一篇:单片机:矩阵键盘和LCD1602