51单片机中断笔记

2023-01-11  

一、中断的概念

对于单片机中断,可以简单理解为在看电视的过程中,突然蹦出一个广告,广告过了在继续播放之前的节目。CPU在处理事件A时,发生了另一事件B,请求CPU迅速去处理(中断发生),CPU中断当前的工作,转去处理事件B(中断响应和中断服务),待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回)。


二、基本中断源

1.51单片机中的5个重要中断

单片机的应用与开发,实际上就是通过单片机的三个重要外设,即外部中断、定时器/计数器和串口来实现对寄存器的操作。

三、中断结构图


四、特殊功能寄存器

IE :中断控制寄存器

IP :中断优先级寄存器

TCON :中断状态标志寄器

TMOD :定时/计数器模式控制寄存器

THx 、TLx : 定时器的计数初值寄存器

SCON : 串口控制寄存器

SBUF : 串行接口收发数据缓冲器


1.中断允许控制寄存器(IE)

EA:中断总开关

EA=1,CPU开放中断

EA=0,CPU屏蔽所有中断申请

ELVD:低压检测中断允许位

ELVD=1,允许低压检测中断

ELVD=0,禁止低压检测中断

EADC:ADC中断允许位

EADC=1,允许ADC中断

EADC=0,禁止ADC中断

ES:串行口1中断允许位

ES=1,允许串行口1中断

ES=0,禁止串行口1中断

ET1:定时/计数器T1的溢出中断允许位

ET1=1,允许T1中断

ET1=0,禁止T1中断

EX1:外部中断1中断允许位

EX1=1,允许外部中断1中断

EX1=0,禁止外部中断1中断

ET0:定时/计数器T0的溢出中断允许位

ET0=1,允许T0中断

ET0=0,禁止T0中断

EX0:外部中断0中断允许位

EX0=1,允许外部中断0中断

EX0=0,禁止外部中断0中断


2.中断优先级控制寄存器IP

单片机内的CPU在工作时,如果一个中断源向它发出中断请求信号,它就会产生中断;如果同时有两个或两个以上的中断源发出中断请求信号,CPU会先接受优先级较高的中断源请求,然后再接受优先级较低的中断源请求。中断优先级控制寄存器如下:


PT1:定时器1中断优先级控制位

PT1=1,定时器1中断为最高优先级

PT1=0,定时器1中断为最低优先级

PX1:外部中断1优先级控制位

PX1=1,外部中断1为最高优先级

PX1=0,外部中断1为最低优先级

PT0:定时器1中断优先级控制位

PT0=1,定时器0中断为最高优先级

PT0=0,定时器0中断为最低优先级

PX0:外部中断0优先级控制位

PX0=1,外部中断0为最高优先级

PX0=0,外部中断0为最低优先级

3.TCON:定时器/计数器控制寄存器

TF1:T1溢出中断标志

TF1=1,TF1计数器溢出

TF1=0,TF1计数器未溢出

TR1:定时器1运行控制位

TR1=1,启动定时器

TR1=0,关闭定时器

TF0:T0溢出中断标志

TF0=1,TF0计数器溢出

TF0=0,TF10计数器未溢出

TR0:定时器0运行控制位

TR0=1,启动定时器

TR0=0,关闭定时器

IE1:外部中断1中断请求标志位

IT1:外部中断1触发方式选择位

IT1=1,下降沿触发

IT1=0,低电平触发

IE0:外部中断0中断请求标志位

IT0:外部中断0触发方式选择位

IT0=1,下降沿触发

IT0=0,低电平触发


4.SCON:串口控制寄存器

SM0、SM1:串口工作模式选择位

SM2:多机通信控制位

REN:串行接收允许位

TB8:发送数据的第9位(奇偶校验位)

RB8:接收数据的第9位(奇偶校验位)

TI:发送完成中断标志位

发送完数据后由硬件置1,进入中断程序后需手动软件清0

RI:接收完成中断标志位

接收完数据后由硬件置1,进入中断程序后需手动软件清0

补充:

因为11.0592MHz能够准确地划分成时钟频率,与UART(通用异步接收器/发送器)量常见的波特率相关。特别是较高的波特率(19600,19200),不管多么古怪的值,这些晶振都是准确,常被使用的。用11.0592晶振的原因是51单片机的定时器导致的,用51单片机的定时器做波特率发生器时,如果用11.0592MHz的晶振,根据公式算下来需要定时器设置的值都是整数;如果用12MHz晶振,则波特率都是有偏差的。比如9600,用定时器取0XFD,实际波特率10000,一般波特率偏差在4%左右都是可以的,所以也还能用STC90C516晶振12M波特率9600,倍数时误差率6.99%,不倍数时误差率8.51%,数据肯定会出错。这也就是串口通信时大家喜欢用11.0592MHz晶振的原因,在波特率倍速时,最高可达到57600,误差率0.00%。用12MHz,最高也就4800,而且有0.16%误差率,但在允许范围,所以没多大影响。

5.PCON:电源控制寄存器

SMOD:波特率选择位

SMOD=1,方式1、2、3的波特率加倍

SMOD0: 帧错误检测有效控制位

SMOD0=0时,与SCON寄存器中的SM0/FE位一起指定串行口的工作方式

6.TCON:中断状态标志寄存器

TF1:T1溢出中断标志

T1允许计数以后,从初始值开始计数,当产生溢出时由硬件将TF1置1,直到CPU响应中断时,才由硬件清“0”。

TR1:定时器T1的启动位

当GATE=0,TR1=1时就允许T1定时,TR1=0时禁止T1定时。若GATE=1,则当TR=1且INT1输入高电平时,才允许T1开始定时。

TF0:T0溢出中断标志

T0允许计数以后,从初始值开始计数,当产生溢出时由硬件将TF0置1,直到CPU响应中断时,才由硬件清“0”。

TR0:定时器T0的启动位

当GATE=0,TR0=1时就允许T0定时,TR0=0时禁止T8定时。若GATE=1,则当TR0=1且INT0输入高电平时,才允许T0开始定时。

7.TMOD:定时器/计数器工作模式寄存器

GATE:门控位

置1时只有INT1/0脚为高电平及TR1/0控制位置1时才可以打开定时器/计数器。

C/T~:为0作为定时器,为1作为计数器

M1M0:定时器/计数器工作模式选择位

8.AUXR:辅助寄存器

T(0/1/2)x12:定时器(0/1/2)速度控制位

为0:定时器是传统8051速度,12T

为1:定时器是传统8051速度的12倍,1T

UART_M0x6:串口1模式0的通信速度设置位

为0:串口1模式0是传统8051单片机串口速度,12T

为1:串口1模式0是传统8051单片机串口速度的6倍,2T

T2R:定时器2允许控制位。为1时,允许定时器工作

T2_C/~T:控制定时器2作为定时器还是计数器。为0作为定时器为1用作计数器。

注意:如果串口1/串口2用T2作为波特率发生器,则由T1x12决定串口1/串口2是12T还是1T

EXTRAM:内部/外部RAM存取控制位

0,允许使用逻辑上在片外、物理上在片内的扩展RAM

1,禁止使用逻辑上在片外、物理上在片内的扩展RAM

SIST2:串口1(UART1)选择定时器2作波特率发生器的控制位

为0:选择定时器1作为串口1(UART1)的波特率发生器;

为1:选择定时器2作为串口1(UART1)的波特率发生器,此时定时器1得到释放,可以作为独立定时器使用

五、定时器/计数器

1.计数:

计数是指对外部事件进行计数,外部事件的发生以输入脉冲的形式表示,因此计数功能的实质就是对外部脉冲进行计数,在单片机中对应引脚T0和T1两个脉冲输入端。外部输入的脉冲在负跳变时有效(即外部脉冲由1变化到0),计数器加1。

2.定时:

定时器是通过计数器的计数来实现的,不过定时器的计数脉冲来自单片机的内部,因此定时器的实质是对内部脉冲的计数

补充:

根据单片机晶振,所选TMOD的的工作方式,所要定的时间,来确定TH0和TL0所要赋予的初值(以12MHz晶振,工作方式1,16位计数器为例,设所定时间为Xus(16为计数器最大数65536,即65536us,若所定时间大于65535,则要用if语句控制,现假设X<65535))

①时钟周期的时间:t=1/12MHz=1/12 (us)

②机器周期的时间:T=12*1/12=1 us

③因为每经过一个机器周期计数器+1,所以,计数器+1,经过的时间为 1 us。


若所定时间为X,则要求经过Xus,中断响应,又因为16位计数器要全部置1(即达到65535+1)后,中断才会响应,所以,初值=(65536-X),将初值转化为16进制码,分别赋给TH0和TL0


例如:所定时间5ms,则:

初值=(65536-5000)=60536=EC78

TH0=0XEC;

TL0=0X78;


写程序时另一种TH0/TL0赋值方法

TH0=(65536-5000)/256

TL0=(65536-5000)%256


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。