初识51单片机-定时器&中断

一、前置知识

  1.可位寻址和不可位寻址寄存器:通俗来讲,就是可位寻址可以单独给定寄存器中的某一位高或者低电平,而不可位寻址只能同时给八位赋值
  2.逻辑与或赋值法:逻辑与赋值:可以将固定位置0而不影响其他位;逻辑或赋值:可以将固定位置1而不影响其他位
  3.特殊声明通俗讲就是将某个寄存器或者寄存器的某一位换一个名称,便于阅读和功能编写
  4.sfr:特殊功能寄存器声明,声明寄存器,例sfr P0 = 0X81或sfr LED = P0
  5.sbit:特殊位寄存器,针对可位寻址的寄存器,声明寄存器的某一位,例sbit SER = P3^4

二、中断系统

2.1 中断基本知识

  1.中断系统是为使得CPU具有对外界紧急事件的实时处理能力而设置的
  2.中断存在优先级,传统51单片机只有2个优先级,在程序运行时,高优先级打断低优先级,再回到低优先级去处理
  3.传统51单片机有5个中断请求源,分别是外部中断0和1(INT0和INT1)、定时器中断0和1和串口(UART)中断
 如下图所示为带有中断系统的程序运行流程图

Alt   下面给出各个中断的中断号,中断号类似于函数定义,可以在里面定义所需要的工作内容

void Int0_Routine(void)			interrupt 0;		//外部中断0
void Int1_Routine(void)			interrupt 2;		//外部中断1
void Timer0_Routine(void)		interrupt 1;		//定时器中断0
void Timer1_Routine(void)		interrupt 3;		//定时器中断1
void UART_Routine(void)			interrupt 4;		//串口中断
不同型号的单片机中断个数,优先级,中断号都是不一样的,需要自行查找用户手册

 下面给出中断系统具体的电路图(以传统51单片机为例)

在这里插入图片描述

  以T0中断为例子,当TF0收到中断标志位以后,进入中断系统,通过打开ET0、EA和优先级寄存器PT0中断开关以后,就完成中断的配置

2.2 中断寄存器

  下面给出中断寄存器表格

在这里插入图片描述  从中断电路原理图可以看出来,对于中断寄存器,目前只需要考虑IE,IP寄存器即可

2.2.1 中断允许寄存器IE(可位寻址)

在这里插入图片描述EA:CPU的总中断允许控制位,EA=1时,CPU开放中断,EA=0时,CPU屏蔽中断
ET2:定时器/计数器T2的中断允许位。ET2=1,允许T2中断,ET2=0,禁止T2中断
ES:串口中断允许位,ES=1,允许中断
ET1:定时/计数器1中断允许位,ET1=1,允许中断
EX1:外部中断1中断允许位,EX1=1,允许中断
ET0:定时/计数器0中断允许位,ET0=1,允许中断
EX0:外部中断0中断允许位,EX0=1,允许中断

  所以本次在配置中断寄存器时,只需要给定使能EA=1,ET0=1

2.2.2 中断优先级控制寄存器低IP(可位寻址)

在这里插入图片描述  目前只使用了定时器0中断,所以优先级不需要配置,只需要给定PT0=0

三、定时器

  1.51单片机的定时器属于单片机的内部资源,其电路的连接和运转都在单片机的内部完成,不同于LED、按键、LCD1602等都是属于外设
  2.定时器作用:
   用于计时系统,实现软件计时,或者使程序每隔一固定时间完成一项操作;
   代替长时间的Delay(尽量避免在main中出现Delay),提高CPU的运行效率和处理速度
  3.51系列单片机定时器个数:2个(T0和T1)
  如下图所示为定时器工作原理框图:

Alt
  定时器就相当于一个闹钟,根据时钟的输出信号,每隔一个固定时间,计数单元加1,当计数单元加到阈值时,计数单元就会向中断系统申请中断,从而去执行中断函数中的内容。

3.1 定时器工作模式

  51系列单片机的T0和T1均有四种工作模式:
  模式0:13位定时器/计数器
  模式1:16位定时器/计数器(常用)
  模式2:8位自动重装模式
  模式3:两个8位计数器
  由于模式1在平时最常用,只讨论模式1的工作原理,如下图所示为51单片机T0工作在模式1下的工作原理图:

在这里插入图片描述

  从上图中可以看出,T0模式1的工作主要分为三块,分别是时钟信号,计数系统和中断系统

3.1.1 时钟信号

Alt
  SYSclk作为系统时钟(定时器),即晶振周期,不同开发板晶振不一致,频率主要是12MHZ和11.0592MHZ;T0 Pin作为外部引脚时钟(计数器);两者都可以提供时钟脉冲
  计数速率为12T和6T模式(以频率12MHZ为例,选中12T模式,则12MHZ被分频成1MHZ,即1s内重复振动了一百万次,周期=1/频率,得到周期为1us,则1us出现一个脉冲)
  C/T非给0是定时器,给1为计数器
  所以时钟信号的产生过程是系统时钟先通过分频,然后通过定时和计数选择门

3.1.2 计数系统

Alt
  工作模式1为16位定时/计数器,TH0作为高8位,TL0作为低8位,共同组成16位二进制数,阈值为65535。时钟每来一个脉冲,计数系统加1,TL0的8位溢出向TH0进位,TH0计数溢出(达到阈值)指向标志位(TF0),最终转向中断服务函数
  当GATE=0时,如TR0=1,则定时器计数,TR0=0时,定时器不计数,由TR0控制定时器是否计数;当GATE=1时,允许外部输入INT0控制T0 (具体与非门可见数电相关基础知识点)

3.1.3 中断系统

Alt
  计数达到阈值时,来到TF0标志位后进入中断函数,中断系统内容见上一小节

3.2 定时器寄存器

  下图给出T0/1的寄存器表格

在这里插入图片描述

3.2.1 定时器控制寄存器TCON(可位寻址)

在这里插入图片描述TF1:T1溢出标志,最高位溢出时,由硬件置1,响应中断时,由硬件置0
TR1:T1的运行控制位,由软件置1和0。GATE=0,TR1=1时,允许T1计数;TR1=0时,禁止T1计数
TF0:T0溢出标志,最高位溢出时,由硬件置1,响应中断时,由硬件置0
TR0:T0的运行控制位,由软件置1和0。GATE=0,TR0=1时,允许T0计数;TR0=0时,禁止T0计数
IE1:外部中断1请求源,IE1=1,外部中断向CPU请求中断,响应时,硬件置0
IT1:外部中断1触发方式控制位,IT1=0时,低电平触发
IE0:外部中断0请求源,IE0=1,外部中断向CPU请求中断,响应时,硬件置0
IT0:外部中断0触发方式控制位,IT0=0时,低电平触发

  所以在TCON寄存器里,如果要使用定时器0,则需要配置使能TR0=1,溢出位默认给TF0=0

3.2.2 定时器模式寄存器TMOD(不可位寻址)

在这里插入图片描述

GATE:GATE=0,TR0/1=1时,允许T0/1开始计数(TR0/1单独控制)
C/T非:置1计数,置0定时
M1/M0:00(13位定时/计数器)01(16位定时/计数器)10(8位自动重载)11(定时器0/1无效)

  TMOD作为不可位寻址,需要给定时器1的相关位置0,GATE给0,TR0单独控制定时器0,模式选择16位定时/计数器,则M1/M0给01,最终TMOD配置为0000 0001

四、程序编写

4.1 定时器0初始化

  1.51系列单片机依靠配置寄存器从而实现硬件的相关操作,所以首先要配置定时0和中断系统的寄存器
  2.由第二三节可得,本文配置寄存器的步骤主要是:定时器0寄存器配置(TCON和TMOD)—中断寄存器配置(IE和IP)
 下面给出定时器0初始化函数

#include <REGX52.H>

/*
函数功能:定时器0初始化
*/
void Timer0_Init()		//11.0592MHZ
{
	//配置定时器0寄存器
	TMOD &= 0xF0;		
	TMOD |= 0x01;		//配置定时器模式0000 0001
	TL0 = 0x66;		//低八位
	TH0 = 0xFC;		//高八位  总64535,即1000us进一次中断
	TF0 = 0;		//溢出标志位默认给0
	TR0 = 1;		//运行控制位给1运行	
	//配置中断寄存器
	ET0 = 1;		//定时器0允许中断
	EA = 1;		//总中断允许
	PT0 = 0;		//优先级配置
}

  从上述代码中可以看出,首先配置了T0的相关寄存器TMOD(不可位寻址)和TCON(可位寻址)的TF0和TR0,给出初始值,从而确定好多长时间进一次中断。然后配置中断寄存器,打开中断使能和优先级配置

4.2 中断服务函数

  1.写好定时器初始化函数时,在上电运行后,程序会自动根据设定的时间间隔进入中断服务函数,从而达到“固定时间内完成某一项工作”,如果存在高低优先级,则会先完成高优先级的任务,再完成低优先级的任务,最终再返回程序中断点
 下面给出中断服务函数基本格式,这里以定时器0中断为标准

void Timer0_Routine()  interrupt 1
{
	TL0 = 0X66;
	TH0 = 0XFC;		//重新给定初始值,以便下一次按时进入中断服务函数
	/*
	其他功能主体部分
	*/
}

五、总结

  本次学习的内容是定时器和中断两大块内容,这是51单片机的重难点,了解了定时器和中断二者之间的关系,学会了如何对定时器和中断的寄存器相关配置,并且可以利用定时器和中断去完成一些需要重复的任务,不再依赖于循环延时函数。

  • 23
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值