中断系统学习

本文详细介绍了单片机中断系统的工作原理,包括中断的触发机制(外部和内部中断源)、中断处理流程,以及中断在提高计算机利用效率、实时性和可靠性方面的作用。同时强调了中断处理程序应避免使用延时函数以保持系统的实时性。
摘要由CSDN通过智能技术生成

含义

中断是指CPU对系统发生某个时间做出的一种反应。(是外部设备向处理器发起的请求事件)

中断发生后,CPU 不会立即执行响应,而是在当前指令执行完以后转入“ 中断处理流程 ”。此时 CPU 会跳转到中断处理程序去处理这个中断,处理完毕后再回到原来位置的下一个位置

单片机处理中断过程图

中断类型

在我们考虑中断结构之前,我们先来看看有什么东西可以触发中断。单片机统计起来总共有5个中断源,包括2个外部中断和3个内部中断。

首先是外部的输入;AT89C51芯片有两个引脚(P3.2)、(P3.3),这两个引脚是中断输入的引脚,当从该引脚输入的外部的信号发生某种特定的变化时就会触发中断。而这种特殊的变化是低电平或则下降沿,至于是哪一种则是由TCON特殊寄存器里面的ITx决定。

其次是内部的中断触发;内部的中断触发有定时器Tx两个和串行IO口中断一个。其中定时器中断则是定时器计数溢出后引起的,而串行IO口中断则是完成字符的传输后引起的。

引起 CPU 中断的根源称为中断源。中断源向 CPU 提出中断请求,CPU 暂时中断原来的事务 A,转去处理事件 B,对事件 B 处理完毕后,再回到原来被中断的地方(即断点),称为中断返回。实现上述中断功能的部件称为中断系统(中断机构)。

当中央处理机 CPU 正在处理某件事的时候外界发生了紧急事件请求,要求CPU 暂停当前的工作,转而去处理这个紧急事件,处理完以后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断。实现这种功能的部件称为中断系统,请示 CPU 中断的请求源称为中断源。微型机的中断系统一般允许多个中断源,当几个中断源同时向 CPU 请求中断,要求为它服务的时候,这就存在CPU 优先响应哪一个中断源请求的问题。通常根据中断源的轻重缓急排队,优先处理最紧急事件的中断请求源,即规定每一个中断源有一个优先级别。CPU 总是先响应优先级别最高的中断请求。

​ 当 CPU 正在处理一个中断源请求的时候(执行相应的中断服务程序),发生了另外一个优先级比它还高的中断源请求。如果 CPU 能够暂停对原来中断源的服务程序,转而去处理优先级更高的中断请求源,处理完以后,再回到原低级中断服务程序,这样的过程称为中断嵌套。这样的中断系统称为多级中断系统,没有中断嵌套功能的中断系统称为单级中断系统。

随着计算机技术的应用,人们发现中断技术不仅解决了快速主机与慢速 I/O设备的数据传送问题,而且还具有如下优点:

①分时操作。CPU 可以分时为多个 I/O 设备服务,提高了计算机的利用率;

②实时响应。CPU 能够及时处理应用系统的随机事件,系统的实时性大大增强;

③可靠性高。CPU 具有处理设备故障及掉电等突发性事件能力,从而使系统可靠性提高。

中断处理程序要少用延时的原因

中断处理的要求是即时处理,尽快退出。如果在中断中使用延时函数或者使用IO阻塞函数,会影响到系统的实时性。如果下次中断来临,延时或者阻塞还没结束,那么就永远在中断里死循环了。

因此,对于中断处理程序的要求是:

短小精悍,不要处理过多任务

不使用延时函数或者IO阻塞的函数

实例代码以及注释

#include <reg52.h>
#define duan P0
#define uchar unsigned char

void delay(unsigned int xms) {
    unsigned int i, j;
    for(i = xms; i > 0; i--)
        for(j = 112; j > 0; j--);
}

sbit wei1 = P2^4;
sbit wei2 = P2^5;
sbit wei3 = P2^6;
sbit wei4 = P2^7;

uchar code sz[17] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 
					0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 
					0x39, 0x5e, 0x79, 0x71, 0x00};


void int0_handler() interrupt 0 
{
    unsigned char num1 = 4;
    unsigned char num2 = 1;
    unsigned char num3 = 6;

    duan = sz[num1];
    wei1 = 0;
    wei2 = 1;
    wei3 = 0;
    wei4 = 0;
    delay(100);
    
    duan = sz[num2];
    wei1 = 0;
    wei2 = 0;
wei3 = 1;
wei4 = 0;
    delay(100);

   duan = sz[num3];
    wei1 = 0;
    wei2 = 0;
    wei3 = 0;
    wei4 = 1;
    delay(100);
}

void main() 
{
    
    IT0 = 1;
    EX0 = 1;
    EA = 1;
    while(1)
		{      } 
    
}

参考文章

————————————————

CSDN博主「竹烟淮雨」的原创文章

原文链接:单片机学习 11-中断系统(定时器中断+外部中断)_单片机中断系统_竹烟淮雨的博客-CSDN博客

CSDN博主「仲夏夜之梦~」的原创文章

原文链接:【中断机制】什么是中断?使用中断的原因、注意事项-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值