单片机之系统中断

目录

中断系统

中断源

入口地址

中断允许IE寄存器

中断请求

外部中断

控制寄存器

触发方式

边沿触发

电平触发方式

定时/计数器中断

串行口中断

中断优先权控制

默认优先级控制

中断响应

中断响应的条件

中断响应过程

中断的结构图

外部中断案例

电路图

keil文件

中断系统

中断:由于内部或外部某种原因,CPU暂时中止其正在执行的程序,转去执行请求中断的哪个外设或事件的服务子程序,等处理完毕后再返回执行原来终止的程序,这一过程叫做中断。

中断源

前言:外部中断INT0和INT1分别对应外部引脚P3.2和P3.3输入,有两种触发方式:电平触发及跳变(边沿)触发。由特殊功能寄存器TCON来管理。

入口地址

中断允许IE寄存器

  • EA:中断允许总控位。EA=0,屏蔽所有中断请求;EA=1,开放中断。
  • ET2:定时器/计数器T2的溢出中断允许位。
  • ES:串行口中断允许位。
  • ET1:定时器/计数器T1的溢出中断允许位。
  • EX1:外部中断INT1的中断允许位。
  • ET0:定时器/计数器T0的溢出中断允许位。
  • EX0:外部中断INT0的中断允许位。

注意:

  • 以上标志,置1开放,置0关闭。 
  • 只要对应的中断允许没关,那么CPU正常执行程序过程中可以随时进行下一次对应中断

中断请求

前言:我们告诉CPU打开了中断允许标志位,那么我们就可以在程序运行过程中向CPU提出中断请求了;中断请求分为三种——外部中断、定时器中断、串口中断。

外部中断

控制寄存器

前言:控制寄存器主要用来设置外部中断的触发以及触发方式

  • IT0(IT1):外部中断0或1的触发方式控制位。IT0或IT1被设置为0,电平触发方式;IT0或IT1被设置为1,边沿触发方式。
  • IE0(IE1):外部中断0或1的中断请求标志位;当IE0/1=1时,有中断请求,否则没有(被触发后IE自动置1,触发结束自动清零)。

触发方式

  • 边沿触发方式:在边沿触发方式时,若第一个机器周期采样到P3.2或P3.3引脚为高电平,第二个机器周期采样到P3.2或P3.3引脚为低电平时,IE0或IE1置1,向CPU请求中断。CPU响应后能够由硬件自动将IE0或IE1清零(下降沿触发)
  • 电平触发方式:若P3.2或P3.3引脚为高电平,则IE0或IE1清零,若P3.2或P3.3引脚为低电平,则IE0或IE1置1,向CPU请求中断;CPU响应后不能够由硬件自动将IE0或IE1清零(低电平触发)
边沿触发
  • 上升沿:当电平从低电平变成高电平的过程称为上升沿
  • 下降沿:当电平从高电平变成低电平的过程称为下降沿 

注意:中断的边沿触发方式为下降沿。

电平触发方式

对于电平触发方式,只要P3.2或P3.3引脚为低电平,IE0或IE1就置1,请求中断,CPU响应后不能够由硬件自动将IE0或IE1清零。若在中断服务程序返回时,P3.2或P3.3引脚还为低电平,则又会中断,这样就会一次请求,中断多次的情况。为避免这种情况,只有在中断服务程序返回前撤销P3.2或P3.3的中断请求信号,即使P3.2或P3.3为高电平。通常由下图所示电路实现

定时/计数器中断

当定时/计数器T0或T1溢出时,由硬件置TF0或TF1为1,向CPU发送中断请求,当CPU响应中断后,将由硬件自动清除TF0或TF1。

串行口中断

MCS-51的串行口中断源对应两个中断标志位:串行口发送中断标志位TI和串行口接收中断标志位RI。无论哪个标志位为1都请求串行口中断,到底是发送中断TI还是接收中断RI,只有在中断服务程序中通过指令查询来判断。串行口中断响应后,不能由硬件自动清零,必须由软件对TI或RI清零。

中断优先权控制

  • PT2:定时器/计数器T2的中断优先级控制位,只用于52子系列
  • PS:串行口中断优先级控制位
  • PT1:定时器/计数器T1的中断优先级控制位
  • PX1:外部中断INT1的中断优先级控制位
  • PT0:定时器/计数器T0的中断优先级控制位
  • PX0:外部中断INT0的中断优先级控制位

注意:以上控制位,置1为高优先级,清零为低优先级

默认优先级控制

注意:

  • 标志位置1的中断源都提前,提前的这些中断源也按自然优先级排序,其他没提前的也按自然优先级排序
  • 通过中断优先级寄存器IP改变中断源的优先级顺序可以实现两个方面的功能:改变系统中断源的优先级顺序和实现二级中断嵌套
  • 正在进行的中断过程不能被新的同级或低优先级的中断请求所中断,一直到该中断服务程序的结束,返回了主程序且执行了主程序的一条指令后,CPU才响应新的中断请求
  • 正在进行的低优先级中断服务程序能被高优先级的中断请求所中断,实现两级中断嵌套
  • 中断嵌套:CPU刚好在响应一个低优先级的中断还没结束,但此时来了一个高优先级的中断提出中断请求,那么CPU就会暂停低优先级的中断服务转而执行高优先级中断服务(同时他会记住低优先级中断的断点)。
  • CPU同时接收几个中断请求时,首先响应优先级最高的中断请求。

中断响应

前言:单片机提供了中断的功能,那么他就会在中断请求标志位置1的时候判断当前是否满足立刻响应的条件(若只有1个中断那么他就立刻响应了)响应中断就是去执行中断服务程序,它在去执行中断服务程序前会先做一个工作——保存当前的断点(中断不确定在哪条语句被打断的)然后根据中断号进入对应的中断服务程序;中断服务程序执行到最后,所有中断需要执行的内容完成了,进行中断返回(CPU将断点的地址从堆栈弹出赋值给PC),后CPU继续执行原来操作。

保存断点的方式:把将要执行的程序语句所存储的地址压入堆栈,中断返回的时候再将该语句弹出堆栈。

中断响应的条件

  • 无同级或高级中断正在处理
  • 现行指令执行到最后一个机器周期且已经结束
  • 若现行指令为RETI或访问IE,IP指令时,执行完该指令且紧随其后的另一条指令也已经执行完毕

中断响应过程

  • 根据中断请求源的优先级高低,对相应的优先级状态触发器置1
  • 保护断点,即把程序计数器PC的内容压入堆栈保存
  • 清内部硬件可清除的中断请求标志位(IE0、IE1、TF0、TF1)
  • 把被相应的中断服务程序入口地址送入PC,从而转入相应的中断服务程序中执行

中断的结构图

理解:拿外部中断0举例——首先IT0为触发方式,有下降沿和低电平两种触发方式,触发了中断就开始进行中断请求IE0,若想要中断请求成功则需要看中断允许位EX0和总中断EA,若两种开关都闭合,则看PX0,也就是中断0的优先级进而决定是否要执行该中断。

外部中断案例

需求:通过按键来进行外部中断,每进行一次外部中断,数码管中的值就会加一。

电路图

keil文件

#include "reg51.h"
sbit ex=P3^2;
unsigned char s[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
unsigned char num=0;
#外部中断初始化
void initex()
{
	IT0=1; //外部中断触发方式,边沿触发
	EX0=1; //打开外部中断0
	EA=1; //开启总中断
	ex=1; //置高电平
}
void display()
{
	P2=s[num];
	if(num==10){
	num=0;
	}
}
void main()
{
	initex();
	while(1)
	{
	display();
	}
}
#没通过按键按一次后就会跳到中断函数的服务内
void ex_isr() interrupt 0
{
	num++;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值