精华内容
下载资源
问答
  • 2020-02-01 17:09:31

    中断系统原理

    何为中断?

    生活中的例子:
    生活中常见的例子,一个正在写寒假作业的孩子突然听到一阵敲门声,原来是父母下班回来了,孩子说:“等会,我来了”。于是,他记住当下页码放下作业去开门,然后回来再接着写作业。
    简单来说,在这个例子中,放下作业去开门就是“中断”。

    何为中断系统?

    中断系统原理:
    计算机在执行某程序时,发生了紧急事件或有特殊请求,CPU暂停某程序的执行,转而去处理上述事件或请求,处理完毕后再重新执行某程序的过程叫做中断。
    在单片机中,中断过程一般可分为四步:中断请求->中断响应->中断处理->中断返回。在上述例子中,“敲门声”是中断请求,“答应去开门”是中断响应,“把门打开”是中断处理,“接着写作业”是中断返回。
    中断系统结构示意图
    引起CPU中断的根源,称为中断源。中断源向CPU提出的中断请求。CPU暂时中断原来的事务A,转去处理事件B。对事件B处理完毕后,再回到原来被中断的地方(即断点),称为中断返回。实现上述中断功能的部件称为中断系统(中断机构)。
    51单片机允许5个中断源,2个外部中断源:INT0(外部中断0);INT1(外部中断1)和三个内部中断源。
    51单片机中断系统内部结构示意图
    对上图中的EA、EX0、EX1、INT0、INT1作说明。
    EA:CPU的总中断允许控制位,EA=1,CPU开放中断;EA=0,CPU屏蔽所有的中断申请。所以,各中断源首先受到EA的控制,其次受到各中断源自己的中断允许控制位控制。当所有的中断源都开放时,整个中断服务成立。
    EX0:外部中断0中断允许位。EX0=1,允许中断;EX0=0,屏蔽中断。
    EX1:外部中断1中断允许位。EX1=1,允许中断;EX1=0,屏蔽中断。
    INT0:由P3.2端口线引入,低电平或下降沿信号引发。当等于0时,P3.2引脚上的低电平可触发外部中断0;当等于1时,外部中断0为下降沿触发方式。
    INT1:由P3.3端口线引入,低电平或下降沿信号引发。当等于0时,P3.3引脚上的低电平可触发外部中断1;当等于1时,外部中断1为下降沿触发方式。
    触发方式为低电平时,只有低电平才能触发而且只能触发一次中断;当触发方式为下降沿时,只有下降沿才能引起触发而且只能触发一次中断。
    中断优先级:
    内部查询顺序: 在同时收到几个同一优先级的中断请求时,哪一个中断请求能优先得到响应,取决于内部的查询顺序。这相当于在同一优先级内,还同时存在另一辅助优先级结构:
    内部查询顺序
    外部中断处理函数——外部中断0和外部中断1
    void int0() interrupt 0 //中断处理函数,加关键字interrupt和入口号0
    {
    中断处理语句;
    }

    void int1() interrupt 2 //中断处理函数,加关键字interrupt和入口号2
    {
    中断处理语句;
    }

    外部中断1代码举例

    了解完中断原理后,我们来实际编写一个程序。
    我们用下降沿引起外部中断1的触发,实现led有规律地亮灭。亮灭的具体流程我已写在下面代码的注释中。独立键盘S3键用于实现提供给外部中断源的触发信号。

    #include <reg52.h>
    #define unchar unsigned char
    #define unint unsigned int
    unchar count;
    sbit S3_key = P3^1;
    sbit sign =  P3^7;  //实现下降沿,提供给外部中断1的信号,单片机上,此引脚要用杜邦线与外部中断1 P3.3相连。
    void delay(unint z)  //自定义的延迟函数
    {
    	unint x,y;
    	for(x=z; x>0;x--)
    		for(y=114;y>0;y--);
    }
    void int1_init()  // 预处理,打开中断允许控制位
    {
    	EA = 1;  //打开总中断
    	EX1 = 1;  // 打开外部中断1
    	IT1 = 1;  // 选择下降沿触发方式
    }
    void main()
    {
    	int1_init();
    	while(1)
    	{
    		if(S3_key == 0)  // 判断S3是否被按下
    		{
    			delay(15);  // 调用延迟函数,意为消除按下按键时的抖动
    			if(S3_key == 0)  // 再判断一次
    			{
    				sign = 1;
    				sign = 0;  // 制造下降沿
    				count += 1;
    			}
    			while(!S3_key);  // 如果一直按下不松手,则一直在此while循环里。实际效果为:按下一次后松手,才能变化一次。
    		}
    	}
    }
    void dealing() interrupt 2  // 外部中断1处理函数,可以写在主函数下面
    {
    	switch(count % 10)							 //10 11 12 13 14 15
    	{								  //            a  b  c  d  e  f
    		case(0):  P1 = 0xff;  break;  //1111 1111 
    		case(1):  P1 = 0xfe;  break;  //1111 1110
    		case(2):  P1 = 0xfd;  break;  //1111 1101
    		case(3):  P1 = 0xfb;  break;  //1111 1011
    		case(4):  P1 = 0xf7;  break;  //1111 0111
    		case(5):  P1 = 0xef;  break;  //1110 1111
    		case(6):  P1 = 0xdf;  break;  //1101 1111
    		case(7):  P1 = 0xbf;  break;  //1011 1111
    		case(8):  P1 = 0x7f;  break;  //0111 1111
    		case(9):  P1 = 0x00;  break;  //0000 0000
    	}
    }
    

    这里是用外部中断1为例,而外部中断0的使用方式和外部中断1相同。
    大家快去动手实现一下吧~~

    更多相关内容
  • 51单片机的外部中断有两种触发方式可选:电平触发和边沿触发。选择电平触发时,单片机在每个机器周期检查中断源口线,检测到低电平,即置位中断请求标志,向CPU请求中断。选择边沿触发方式时,单片机在上一个机器...
  • 基于STM32的外部中断程序范例DSP外部中断程序
  • 使用C51进行外部中断仿真,实现按键让数码管示数自增
  • STM32 外部中断实验.rar 工程中接入外部信号时候常用,特别和MCP2515等芯片联调时。
  • 51单片机的5大中断源:串行口中断、定时中断1、外部中断1、定时中断0、外部中断0;下面一起来学习一下
  • 已知单片机的 P0 口接了一位七段数码管,当无外部中断外部中断 0)时,数码 管按 a~g 段依次点亮,不断循环显示;当有外部中断(按钮被按下,P3.2 有下降沿电 压)时,数码管显示状态改为“8”亮灭闪烁显示,亮灭...
  • 利用软件循环查询方法编程实现:按下MSP430F5529LP板上的按键SI、S2分 别控制LED1、LED2点亮,再次按下时LED1、LED2熄灭。
  • DSP 外部中断

    2017-06-01 09:03:47
    DSP 外部中断
  • 本文首先介绍了中断技术的概念,接着论述了MCS-51的中断系统结构、相关寄存器及中断处理过程,依据MCS-51中断功能要求编制了Proteus仿真电路并设计了驱动程序,最后对本文的实验仿真效果进行了总结。
  • 花了整整两天时间终于算是基本把红外解码搞明白了,其实并不是很难,用了两天时间,说来惭愧啊,原因就是细节上的问题,不过最终总算找出问题来了。使用外部中断来解码,就先对外部中断进行配置吧
  • 西门子S7-1200 PLC外部中断(硬件中断)的使用方法介绍
  • 断断续续学习STM32一学期了,时间过的好快,现在对STM32F103系列单片机的中断嵌套及外部中断做一个总结,全当学习笔记。废话不多说,ARM公司的Cortex-m3 内核,支持256个中断,其中包含16个内核中断和240个外部中断...
  • 关于51单片机“外部中断触发方式”的经验总结。
  • 利用外部中断来实现按键控制LED灯的亮灭。 实验工具:MDK5,STM32F103ZET6开发板 使用固件库编程 LED灯引脚PD13,按键PE0 首先了解一下32的外部中断 STM32 的每个 IO 都可以作为外部中断的中断输入口,STM32F103 的...
  • STM8S003单片机上,用按键口做为外部中断触发,实现按键按下LED指示灯翻转效果。
  • UCOSIII系统下按键外部中断和串口2中断管理,按键按下改变LED灯状态,串口2将接收到的数据发送出去。
  • stm32f1实验5 外部中断实验stm32f1实验5 外部中断实验stm32f1实验5 外部中断实验stm32f1实验5 外部中断实验stm32f1实验5 外部中断实验stm32f1实验5 外部中断实验stm32f1实验5 外部中断实验stm32f1实验5 外部中断实验...
  • stm32的外部中断实现代码。按键中断和控制灯闪烁
  • STM32外部中断实验

    2018-11-14 10:54:47
    亲测可用,可以用来做STM32的外部中断,有问题可以联系或者在评论区评论
  • STM32 外部中断的使用

    2016-11-27 13:23:38
    基于 STM32 平台的外部中断使用,keil 4 平台编译,直接编译即可使用
  • 主要介绍了外部中断的使用方法,包括: 1 基本概念 2 GPIO外部中断 3 程序开发
  • STM32CubeMX Freertos 外部中断处理例程 使用STM32CubeMX 生成Freertos 外部中断处理例程
  • 外部中断实验报告

    2017-02-22 14:27:55
    外部中断实验报告
  • 外部中断配置

    千次阅读 2018-09-12 11:53:18
    1.明确要使哪个端口作为触发。(以PA0为例)  因为是PA0,所以应当打开外部中断线0. ...任一边沿触发均可进入中断。  EXTI-&gt;RTSR |= 1 &lt;&lt; 0;//上升沿触发  EXTI-&gt...

    1.明确要使哪个端口作为触发。(以PA0为例)

       因为是PA0,所以应当打开外部中断线0.

    代码如下:    EXTI->IMR |= 1 << 0;  //打开外部中断线0


    2.设置触发方式:上升沿出发和下降沿出发可一起设置。任一边沿触发均可进入中断。

        EXTI->RTSR |= 1 << 0;//上升沿触发

        EXTI->FTSR |= 1 << 0;//下降沿触发


    3.配置外部中断优先级

    Set_NVICPriority(EXTI0_IRQn,2,2);


    4.使能AFIO复用功能寄存器

        

    RCC->APB2ENR |=1<<0;

    前面我们已经打开了外部中断0,即我们用的是EXTI0,所以在AFIO_EXCR1中找。又因为我们要的是PA口,故给EXTI0[3...0]赋值0000.

    AFIO->EXTICR[0] &= ~(0x0F << (0 * 4));  ///先清零

    AFIO->EXTICR[0] |= 0x00<<4;         //选择PA口

    5.编写外部中断服务函数

     

    void  EXTI0_IRQHandler(void)

    {

    //

    }

    展开全文
  • 由于PIC16F 877单片机没有设置外部的中断优先级,提出了一种用74LS148优先权编码器来扩展PIC16F 877单片机的外部中断源。当PIC16F 877单片机外部有多个中断源中断请求时,74LS148优先权编码器首先对这些中断源进行...
  • 外部中断实验程序

    2015-02-09 08:28:34
    外部中断实验程序
  • 外部中断实验-按键控制(重点).rar
  • 设计一个外部中断触发流水灯系统:当外部中断来临时,启动流水灯,即从P2口的LED循环点亮。可以从protues中看到结果
  • 230-外部中断1(51单片机C语言实例Proteus仿真和代码)230-外部中断1(51单片机C语言实例Proteus仿真和代码)230-外部中断1(51单片机C语言实例Proteus仿真和代码)230-外部中断1(51单片机C语言实例Proteus仿真和代码)230-...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 204,771
精华内容 81,908
关键字:

外部中断什么意思