精华内容
下载资源
问答
  • 所以,边沿触发适合与以负脉冲形式输入的外部中断请求。  如果是低电平触发,那么在低电平时间内中断一直有效;因此如果在电平没有恢复之前中断程序就已经执行完成从而退出,那么会在退出后又再次进入中断;但只要...

    如果是下降沿触发,当从高至低电平转变时,触发产生;低电平保持多久都只产生一次。所以,边沿触发适合与以负脉冲形式输入的外部中断请求。

         如果是低电平触发,那么在低电平时间内中断一直有效;因此如果在电平没有恢复之前中断程序就已经执行完成从而退出,那么会在退出后又再次进入中断;但只要中断没有退出是不会重复触发的。所以,电平触发方式适合于外部中断以低电平输入而且中断服务能清除外部中断源的情况(实际中通常采用这样的做法:在中断退出前关闭中断,等后面恰当时机再打开)。

         解释二:电平触发方式是按照电平的高或者低来触发,所以用的时候,必须在发生触发事件后立即将电平拉到非触发电平上,如果不这样做的话,会导致程序一直在触发事件程序入口处,而不会执行其他地方的程序。所以一般比较少用。
         边沿触发方式是按照(上或下)边沿触发事件,由于触发的条件是边沿(上或下),所以即使在触发事件后,保存原来的电平都没有关系,不会一直在触发的,一般都用这种方式。

         脉冲触发有两种:边沿触发和电平触发
        边沿触发分上升沿触发和下降沿触发,简单说就是电平变化那一瞬间进行触发。
         电平触发也有高电平触发、低电平触发,一般都是低电平触发。如果是低电平触发,那么在低电平时间内中断一直有效。
         如果在电平没有恢复之前就退出中断程序,那么会在退出后又再次进入中断。只要不退出是不会重复触发的。


    展开全文
  • 所以,边沿触发适合与以负脉冲形式输入的外部中断请求。  如果是低电平触发,那么在低电平时间内中断一直有效;因此如果在电平没有恢复之前中断程序就已经执行完成从而退出,那么会在退出后又再次进入中断;但...

    如果是下降沿触发,当从高至低电平转变时,触发产生;低电平保持多久都只产生一次。所以,边沿触发适合与以负脉冲形式输入的外部中断请求。

        如果是低电平触发,那么在低电平时间内中断一直有效;因此如果在电平没有恢复之前中断程序就已经执行完成从而退出,那么会在退出后又再次进入中断;但只要中断没有退出是不会重复触发的。所以,电平触发方式适合于外部中断以低电平输入而且中断服务能清除外部中断源的情况(实际中通常采用这样的做法:在中断退出前关闭中断,等后面恰当时机再打开)。

        解释二:电平触发方式是按照电平的高或者低来触发,所以用的时候,必须在发生触发事件后立即将电平拉到非触发电平上,如果不这样做的话,会导致程序一直在触发事件程序入口处,而不会执行其他地方的程序。所以一般比较少用。
        边沿触发方式是按照(上或下)边沿触发事件,由于触发的条件是边沿(上或下),所以即使在触发事件后,保存原来的电平都没有关系,不会一直在触发的,一般都用这种方式。

        脉冲触发有两种:边沿触发和电平触发
        边沿触发分上升沿触发和下降沿触发,简单说就是电平变化那一瞬间进行触发。
        电平触发也有高电平触发、低电平触发,一般都是低电平触发。如果是低电平触发,那么在低电平时间内中断一直有效。
        如果在电平没有恢复之前就退出中断程序,那么会在退出后又再次进入中断。只要不退出是不会重复触发的。

    展开全文
  • 51单片机之外部中断应用实例(电平触发、边沿触发)

    万次阅读 多人点赞 2019-05-15 15:10:32
    硬件:STC89C52RC 开发工具:Keil uVision4 前言:8051是一款很经典的、历史悠久的单片机,作为一款入门级的单片机8051受到很多初学者的欢迎。89c52是8051系列的成员之一,拥有8K字节程序存储空间...事件触发方式...
    • 硬件:STC89C52RC
    • 开发工具:Keil uVision4

    前言:8051是一款很经典的、历史悠久的单片机,作为一款入门级的单片机8051受到很多初学者的欢迎。89c52是8051系列的成员之一,拥有8K字节程序存储空间,512字节随机数据存储空间;I/O口控制端口、中断功能、定时器及串行接口。下面详细讲述外部中断功能的使用。

    外部中断:单片机提供的系统紧急事件的输入控制。事件触发的方式包括输入信号的下降沿触发、低电平触发。当触发中断后,单片机会跳到某一个固定的地址去执行中断服务程序。

    外部中断信号由INT0、INT1引脚传送进来,如图所示:

    有关中断处理的相关控制寄存器如下:

    • 计时计数器控制寄存器 TCON
    • 中断允许控制寄存器 IE
    • 中断优先权寄存器 IP

    寄存器并不算多,配置起来也不复杂。先对各个寄存器进行说明:

    TCON寄存器:

    “T”开头的是计数/定时器相关位,“I”开头的是外部中断相关位,我们需要看的是后者:

    IE寄存器:

    IP寄存器:

    CPU接到中断信号发生时会停止当前的工作跳转到中断服务程序。那么当CPU同时接到多个中断信号时,该怎么选择?当CPU正在中断函数时又接受到另一个中断信号,该怎么处理?

    关于中断的优先级有一下原则:
    1、CPU同时接收到几个中断时,首先响应优先级最高的中断请求,低优先的进入队列等待;
    2、正在进行的中断过程不能被新的同级或低优先级的中断请求所中断;
    3、正在进行的低优先级中断服务,能被高优先级中断请求中断;

    那么,IP寄存器的某一中断配置为1就成为高优先级。每一个中断在IP里面只占一位配置位(IP.x=0或OP.x=1),也就是说系统里只存在两种优先级,要么是高优先级,要么是低优先级。

    如果,任何中断都不配置IP寄存器的优先级,也等同于系统上电时,默认的优先级顺序如下:

    外部中断0 > 定时/计数器0 > 外部中断1 > 定时/计数器1 > 串行中断

    关于外部中断的寄存器已经了解清楚了,接下来看代码设计:

    外部中断0(下降沿触发)

    /*-----------------------------------------------
      功能:外部中断0边沿触发
      现象:首先将P3.2口通过上拉电阻接到电源,保证在空闲时P3.2处于高电平;
           当外部中断信号输出口P3.2接到GND时,产生了一个下降沿信号,接到P0.0
           口的LED灯反转;若此后P3.2持续接到GND,LED只反转一次,这与电平触发
           有区别。
    ------------------------------------------------*/
    
    #include<reg52.h> 
    
    sbit LED=P0^0; //定义LED端口
    
    void DelayMs(unsigned char t)     //大致延时1mS
    {
     unsigned short T=500;
     while(t--)
     {
         while(--T);
     }
    }
    void INT0_init(void) //外部中断0初始化
    {
      LED=1;       //LED口初始值
      EA=1;          //全局中断开
      EX0=1;         //外部中断0开
      IT0=1;         //边沿触发
    }
    
    main()
    {
      INT0_init();
      while(1){
         //主循环
      }
    }
    
    //中断服务程序  interrupt 0 指明是外部中断0的中断函数
    /*
    interrupt 0  指明是外部中断0;
    interrupt 1  指明是定时器中断0; 
    interrupt 2  指明是外部中断1;
    interrupt 3  指明是定时器中断1;
    interrupt 4  指明是串行口中断;
    */
    void ISR_Key(void) interrupt 0 using 1
    {
     if(!INT0){
        DelayMs(10);       //防抖动
        if(!INT0){         
         LED=!LED;         //按下触发一次,LED取反一次
        }
     }
    }
    

    外部中断0(电平触发)

    /*-----------------------------------------------
      功能:外部中断0电平触发
      现象:首先将P3.2口通过上拉电阻接到电源,保证在空闲时P3.2处于高电平;
           当外部中断信号输出口P3.2接到GND时,产生了一个低电平信号,接到P0.0
           口的LED灯反转;若此后P3.2持续接到GND,LED会反复反转,这与边沿触
           发有区别。
    ------------------------------------------------*/
    
    #include<reg52.h> 
    
    sbit LED=P0^0; //定义LED端口
    
    void DelayMs(unsigned char t)     //大致延时1mS
    {
     unsigned short T=500;
     while(t--)
     {
         while(--T);
     }
    }
    void INT0_init(void) //外部中断0初始化
    {
      LED=1;       //LED口初始值
      EA=1;          //全局中断开
      EX0=1;         //外部中断0开
      IT0=0;         //电平触发
    }
    
    main()
    {
      INT0_init();
      while(1){
         //主循环
      }
    }
    
    //中断服务程序  interrupt 0 指明是外部中断0的中断函数
    /*
    interrupt 0  指明是外部中断0;
    interrupt 1  指明是定时器中断0; 
    interrupt 2  指明是外部中断1;
    interrupt 3  指明是定时器中断1;
    interrupt 4  指明是串行口中断;
    */
    void ISR_Key(void) interrupt 0 using 1
    {
      if(!INT0){
        DelayMs(20);       //防抖动
        if(!INT0){         
         LED=!LED;         //按下触发一次,LED取反一次
        }
     }
    }

    外部中断1(下降沿触发)

    /*-----------------------------------------------
      功能:外部中断1边沿触发
      现象:首先将P3.3口通过上拉电阻接到电源,保证在空闲时P3.3处于高电平;
           当外部中断信号输出口P3.3接到GND时,产生了一个下降沿信号,接到P0.0
           口的LED灯反转;若此后P3.3持续接到GND,LED只反转一次,这与电平触发
           有区别。
    ------------------------------------------------*/
    
    #include<reg52.h> 
    
    sbit LED=P0^0; //定义LED端口
    void DelayMs(unsigned char t)     //大致延时1mS
    {
     unsigned short T=500;
     while(t--)
     {
         while(--T);
     }
    }
    void INT1_init(void) //外部中断0初始化
    {
      LED=1;       //LED口初始值
      EA=1;          //全局中断开
      EX1=1;         //外部中断1开
      IT1=1;         //边沿触发
    }
    
    main()
    {
      INT1_init();
      while(1){
         //主循环
      }
    }
    
    /*
    interrupt 0  指明是外部中断0;
    interrupt 1  指明是定时器中断0; 
    interrupt 2  指明是外部中断1;
    interrupt 3  指明是定时器中断1;
    interrupt 4  指明是串行口中断;
    */
    void ISR_Key(void) interrupt 2 using 1
    {
     if(!INT1){
        DelayMs(10);       //防抖动
        if(!INT1){         
         LED=!LED;         //按下触发一次,LED取反一次
        }
     }
    }
    
    #endif

    外部中断1(电平触发)

    /*-----------------------------------------------
      功能:外部中断1电平触发
      现象:首先将P3.3口通过上拉电阻接到电源,保证在空闲时P3.3处于高电平;
           当外部中断信号输出口P3.3接到GND时,产生了一个低电平信号,接到P0.0
           口的LED灯反转;若此后P3.3持续接到GND,LED会反复反转,这与边沿触
           发有区别。
    ------------------------------------------------*/
    
    #include<reg52.h> 
    
    sbit LED=P0^0; //定义LED端口
    void DelayMs(unsigned char t)     //大致延时1mS
    {
     unsigned short T=500;
     while(t--)
     {
         while(--T);
     }
    }
    void INT1_init(void) //外部中断1初始化
    {
      LED=1;       //LED口初始值
      EA=1;          //全局中断开
      EX1=1;         //外部中断1开
      IT1=0;         //电平触发
    }
    
    main()
    {
      INT1_init();
      while(1){
         //主循环
      }
    }
    
    /*
    interrupt 0  指明是外部中断0;
    interrupt 1  指明是定时器中断0; 
    interrupt 2  指明是外部中断1;
    interrupt 3  指明是定时器中断1;
    interrupt 4  指明是串行口中断;
    */
    void ISR_Key(void) interrupt 2 using 1
    {
     if(!INT1){
        DelayMs(10);       //防抖动
        if(!INT1){         
         LED=!LED;         //按下触发一次,LED取反一次
        }
     }
    }
    

    以上四种模式,代码都是大同小异,比较一下就知道哪些是关键点了。

    注意点:

    • 上面的程序已经是测试过没有问题的,如果出现led不反转,那么检测一下电路,有一些集成了很多元件的开发板里面电路复杂,几个外围元件可能共用一个IO口,容易被干扰,以至于达不到想要的效果。最好还是买一个最小系统的单片机,所有IO独立出来。
    • 在选择“电平触发”模式下,因为低电平的持续时间比较长(虽然只是按一下,对于单片机来说已经持续很长),会出现反复进入中断,导致LED不会反转,解决方法就是在进入第一次中断后,先把该中断关闭掉并且用while循环,直到中断信号引脚退出低电平状态再打开中断并退出while循环,这么做缺点就是会阻塞在中断里面,可能导致主函数里面的程序不能及时运行。
    • 上面的代码比较简单,需要根据实验出现的问题进一步优化。
    • 外部中断还可以应用到检测波形的周期、占空比、频率以及红外接收处理,有兴趣可以试一下。

    仅供参考,错误之处以及不足之处还望多多指教。

    展开全文
  • 关于51单片机外部中断触发方式

    万次阅读 2016-01-25 11:47:55
    51单片机有两外部中断申请输入端:INT0 和 INT1。51单片机的外部中断,分为低电平触发和下降沿触发。在单片机内部,分别由控制位 IT0 和 IT1 来控制。复位时,IT0/1 都为 0,即默认为低电平触发。一般来说,外设第...

    51单片机有两个外部中断申请输入端:INT0 和 INT1。
    51单片机的外部中断,分为低电平触发和下降沿触发。在单片机内部,分别由控制位 IT0 和 IT1 来控制。
    复位时,IT0/1 都为 0,即默认为低电平触发。

    一般来说,外设第一次向单片机申请外部中断时,单片机使用那种触发方式,并无什么差别。
    但是,返回主程序后,如果外部申请信号仍然是低电平,就有区别了。

    在采用低电平触发时,单片机执行了一条主程序的指令后,就会又重新进入中断程序。

    而采用下降沿触发时,即使 INT0/1 引脚仍然是低电平,单片机也不会重新进入中断程序。
    如果外设想要申请第二次中断,必须是先恢复高电平,重新再送来一次下降沿才行。

    那么,为了避免仅仅来了一次申请,就产生多次中断的现象,还是应该采用下降沿触发中断的方式。

    如果非要使用低电平触发呢,那必须在退出前,反复的检测中断输入端的电平。
    只有当外设撤消了中断申请之后,再退出中断程序,这才能避免多次的重新中断。

    到底应该采用那种触发方式,这个确实是应该根据外设的特点来选取。
    但是在多数场合,采用下降沿触发方式,还是比较适用的。
    即在复位后,应该先执行:

      SETB  IT0
      SETB  IT1

    有人在百度知道,提出了一个问题,希望能显示出低电平触发和下降沿触发的区别。

    题目的基本内容如下。

    ;单片机汇编程序题:要求一定是汇编

    ;AT89C51中P3.2接开关1,P3.3接开关2。
    ;当开关1, 2全都断开时运行主程序,P1口的8个LED从P1.0~P1.7逐个点亮并反复循环。
    ;当开关1闭合时进入中断服务程序P2口的8个LED闪烁6次。
    ;开关2起到对开关1触发方式进行选择的作用:
    ;第一次闭合开关2时开关1为下降沿触发且P0.0连接的LED点亮;
    ;第二次闭合开关2时开关1为低电平触发且P0.0连接的LED熄灭。
    ;求一个用汇编语言编写的完整程序。

    根据上述题目要求,做而论道画出了PROTEUS仿真实验电路如下:

    关于51单片机外部中断的触发方式 - 非著名博主 - 电子信息角落
    插图链接:http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/album/item/5124b017b8d9d81122a4e95d.html

    ;下列程序,可以满足要求。
            ORG   0000H
            LJMP  MAIN
            ORG   0003H
            LJMP  X0_INT
            ORG   0013H
            LJMP  X1_INT
    ;------------------------------------
    MAIN:
            SETB  IT1
            MOV   SP, #60H
            MOV   IE, #85H
            MOV   A,  #254
    M_LOOP:
            MOV   P1, A
            RL    A
            CALL  DL_500MS
            SJMP  M_LOOP
    ;------------------------------------
    X0_INT:
            PUSH  PSW
            SETB  RS1
            MOV   R4, #12
    SH_6:
            XRL   P2, #255
            CALL  DL_500MS
            DJNZ  R4, SH_6
            POP   PSW
            RETI
    ;------------------------------------
    X1_INT:
            CPL   IT0
            CPL   P0.0
            RETI
    ;-------------------------------延时子程序
    DL_500MS:
            MOV   R5, #9      ;1T
    DL1:    MOV   R6, #128    ;1T
    DL2:    MOV   R7, #215    ;1T
            NOP               ;1T
    DL3:    DJNZ  R7, DL3     ;2T   2 * 215 = 430 T
            DJNZ  R6, DL2     ;2T   [1+1+430+2] * 128 = 55552 T
            DJNZ  R5, DL1     ;2T   [1+55552+2] * 9 = 499995 T
            RET               ;2T   1 + 499995 + 2 = 499998 T
    ;------------------------------------
    END

    ;===============================================
    原题网址:http://zhidao.baidu.com/question/270426318.html
    提问者对于答案的评价:谢了,采用你的答案
    ;===============================================

    展开全文
  • 51单片机的外部中断有两种触发方式可选:电平触发和边沿触发。选择电平触发时,单片机在每个机器周期检查中断源口线,检测到低电平,即置位中断请求标志,向CPU请求中断。选择边沿触发方式时,单片机在上一个机器...
  • 外部中断可以分为电平触发和边缘触发两种,那么这两种中断什么区别,我们今天讲解下 1什么是中断 CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生); CPU暂时中断当前的工作,转去处理...
  • 51单片机的外部中断有两种触发方式可选:电平触发和边沿触发。选择电平触发时,单片机在每个机器周期检查中断源口线,检测到低电平,即置位中断请求标志,向CPU请求中断。选择边沿触发方式时,单片机在上一个机器...
  • 51单片机的外部中断有两种模式:电平触发模式和跳变沿触发模式  第一,选择电平触发时,单片机在每个机器周期检查中断源口线,检测到低电平,即置位中断请求标志,向CPU请求中断。第二,选择边沿触发方式时,...
  • 关于中断触发方式的选择

    千次阅读 2013-04-23 13:10:18
    中断一般有两种触发方式可选:电平触发和边沿触发。 选择电平触发时,单片机在每个机器周期检查中断源口线,检测到低电平,即置位中断请求标志,向CPU请求中断。 选择边沿触发方式时,单片机在连续的时钟周期检测...
  • AT89C51单片机外部中断

    千次阅读 2020-11-27 22:12:30
    中断方式有两种,分别为电平方式和脉冲方式。 中断请求有0和1。中断总允许为EA=1, IE0:外部中断请求0标志位; IT0:外部中断0触发方式设置位,IT0=1下降沿触发,IT0=0低电平触发; IE1:外部中断请求1标志位; IT1...
  • 51 中断系统 外部中断0 外部中断1

    万次阅读 多人点赞 2019-06-14 22:26:11
    EX0(IE.0),外部中断0允许位; ET0(IE.1),定时/计数器T0中断允许位; EX1(IE.2),外部中断0允许位; ET1(IE.3),定时/计数器T1中断允许位; ES(IE.4),串行口中断允许位; EA (IE.7), CPU中断允...
  • STM32 外部中断

    2014-10-09 21:23:44
    一:触发方式 STM32 的外部中断是通过边沿来触发的,不支持电平触发; 二:外部中断分组 STM32 的每一个GPIO都能配置成一个外部中断触发源,STM32 通过根据引脚的序号不同将众多中断触发源...
  • Atmage16中断学习—外部中断

    千次阅读 2014-01-29 15:54:42
    外部中断常用的触发方式有两种:电平触发、边沿触发。 什么是电平触发?什么是边沿触发? 电平触发其实就是依靠时钟脉冲的高电平或者低电平来引发中断的触发方式。 边沿触发则是依靠时钟脉冲的高低电平变化过程来...
  • Arduino 定时器中断 外部中断

    万次阅读 2019-04-09 17:29:31
    但如果此时发生了某一件事件B请求CPU迅速去处理(中断发生),CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务),待CPU将事件B处理完毕后,再回到原来被中断的地方继续执行程序(中断返回),这一过程成...
  • 中断请求中断请求级 中断是异步过程调用,简而言之就是打断当前CPU正在执行的任务转而去执行另一个任务 windows在初始化时,为每中断安装了一个中断处理例程---ISR(intterupt service routine),它们储存在...
  • 重要声明: 以下代码粘贴 截取他人劳动成果的成分 如...它能使CPU在运行过程中对外部事件发出的中断请求及时地进行处理,处理完成后又立即返回断点,继续进行CPU原来的工作。引起中断的原因或者说发出中断请求
  • STM32的中断控制器支持19个外部中断/事件请求: 线0~15:对应外部IO口的输入中断。 线16:连接到PVD输出。 线17:连接到RTC闹钟事件。 线18:连接到USB唤醒事件。 每个外部中断线可以独立的配置触发方式(上升...
  • 51中断系统 一.中断 1.中断允许控制寄存器IE 2.TCON的中断标志 ...1.外部中断请求 见中断源,即P3.2或P3.3引脚低电平或下降沿型号可以触发中断。一般使用下降沿信号触发中断,也就是在按下独立按键...
  • 89C51中断系统介绍(外部中断

    千次阅读 2020-05-03 16:49:42
    1)、外部中断 2)、定时器中断 3)、串口中断 1、中断的概念 中断触发后,CPU会从主函数调到中断函数中。 外部中断1: 低电平触发:P3.2是0 下降沿触发:p3.2电平:1变为0则触发外部中断2同1...
  • 外部中断和定时器中断

    万次阅读 多人点赞 2018-11-20 13:53:27
    8.外部中断实现代码 9.定时器/计数器中断工作原理 10.定时器/计数器定时值的计算 11.定时器/计数器实现代码 1.什么是中断 中断就是指CPU正在执行一项任务A,然后突然停止任务A去执行任务B,执行完任务B再回来...
  • 使用EXTI(External Interrupt)外部中断方式, 通过中断服务函数对GPIO口进行控制, 使得LED灯可以进行亮灭翻转.
  • 外部中断实验

    2019-04-12 17:23:33
    外部中断是单片机实时地处理外部事件的一内部机制。当某种外部事件发生时,单片机的中断系统将迫使CPU暂停正在执行的程序,转而去进行中断事件的处理;中断处理完毕后.又返回被中断的程序处,继续执行下去。 比如...
  • S3C2440A中的中断控制器接受来自60个中断源的请求。...当从内部外设和外部中断请求引脚收到多个中断请求时,中断控制器在仲裁步骤后请求ARM920T内核的FIQ或IRQ。 仲裁步骤由硬件优先级逻辑决定并且写入结果到
  • STM32外部中断总结

    千次阅读 2012-11-29 15:49:52
    STM32外部中断总结 作者:JCY 该文章是学习了STM32后所写,是对STM32的小小的理解。在文中若错误指出请指正,不胜...对于外部中断只用了16个外部触发输入线。每一个外部输入线都能够被独立的屏蔽,pending regist
  • STM32F103同时配置外部中断

    千次阅读 2020-03-28 19:17:59
    EXTI外部中断简介 EXTI—外部中断/事件控制器,管理了控制器的 19个中断/事件线。每个中断/事件线都对应一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的检测。EXTI 可以实现对每个中断/事件线进行单独...
  • 单片机外部中断—中断嵌套

    千次阅读 2020-03-26 16:33:46
    外部中断0 > 定时/计数器0 > 外部中断1 > 定时/计数器1 > 串行中断; 但这种优先级只是逻辑上的优先级,当同时中断到达时,高优先级中断会先得到服务。这种优先级实际上是中断同时到达的情况下,谁先得到服务...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 23,337
精华内容 9,334
关键字:

外部中断请求有两种触发方式