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


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

相关文章

    以灌电流的方式接了一只LED,当按键按下时LED灯点亮,没按键时LED灯熄灭。 4中断的软件实现 单片机中断函数的写法比较固定,51单片机中断函数的写法如下: void Initd() interrupt......
    使用此头文件是没有问题的,你会有疑问,主函数怎么写成 了umain,是不是笔误,不是的,它就是这样,当然这需要一些其他的操作;在此先略过。 4、3中生成的hex使用一个小工具,可以生成可作为仿真的.in;.in会被......
    程序就不能被执行到)。3、执行中断处理程序。4、中断返回:执行完中断指令后,就从中断处返回到主程序,继续执行。究竟单片机是怎么样找到中断程序所在位置,又怎么返回的呢?我们稍后再谈。   MCS-51单片机中断......
    51单片机中中断函数与一般函数的调用区别?;中断函数的调用过程类似于一般函数调用,区别在于何时调用一般函数在程序中是事先安排好的;而何时调用中断函数事先却无法确定,因为中断......
    数的和能否利用51单片机实现呢?一起来看看下图: add函数接收了三个参数a、b、c而没有d,是不是不能传递参数d呢?先来看看官方文档的解释: Cx51编译器最多在MCU寄存器中传递三个函数参数。由于......
    环中的其他逻辑         // ...     } } 这其中,void ExternalInterrupt_Service () interrupt 0 一行是51单片机中断服务函数,已经由半导体厂家设计完毕,我们......
    51单片机与计算机进行通信的实现方法;51单片机与计算机通信 首先我们先来了解一下51单片机与计算机进行通信的实现方法。先来看一个实现这个功能的基本电路。 图中的P1就是......
    /758372.html 6.STC89C52RC单片机定时器示例代码2:   问:在中断函数里为什么要重新赋初值呢?TH0 = XX,TL0 =XX? 因为进入中断,其值减为0,如果......
    C51单片机中断函数的修饰方法;interruptm修饰符 C51中断函数必须通过该修饰符进行修饰。在C51程序设计中,当函数定义时用了interruptm修饰符,系统编译时把对应函数转化为中断函数......
    的调用和嵌套。   1.3 中断函数设计   与顺序设计的程序不同,51系列单片机还需考虑中断函数的设计。51单片机的中断有外部中断、定时器中断、串口中断等。中断程序在中断......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>