精华内容
下载资源
问答
  • 51单片机的外部中断有两种触发方式可选:电平触发和边沿触发。选择电平触发时,单片机在每个机器周期检查中断源口线,检测到低电平,即置位中断请求标志,向CPU请求中断。选择边沿触发方式时,单片机在上一个机器...
  • STM32的外部中断与I/O的对应关系,一看便明了,很清晰。
  • 51单片机外部中断0实例详解

    千次阅读 2021-05-22 03:49:54
    151单片机的中断源51单片机共有5个中断源,分别为:外部中断0定时器0中断外部中断1定时器1中断串口中断每一个中断都对应一个中断向量,中断向量表如下所示:2什么是中断事件当中断发生时单片机将正在执行的程序暂时...

    今天就以51单片机的外部中断0为例,来简单讲解一下单片机中断的用法。

    1 51单片机的中断源

    51单片机共有5个中断源,分别为:外部中断0

    定时器0中断

    外部中断1

    定时器1中断

    串口中断

    每一个中断都对应一个中断向量,中断向量表如下所示:

    a6cdb607f79bfc891f89a65b8e2b9fdf.png

    2 什么是中断事件

    当中断发生时单片机将正在执行的程序暂时放下而去处理中断事件,当中断事件处理完毕后再接着去处理之前的事情,这样可以大大降低单片机的资源,提高执行效率。举个例子说明一下什么是中断:

    我很喜欢打CS,每天晚上我都会抽时间打CS,但同时厨房里正在烧水,为了不使水烧干,我每隔5分钟就去厨房看一下水有没开,但这就错过了游戏老被别人爆头干掉,我很苦恼,怎么办。于是我在网上买了一个水烧开就会叫的水壶,这样我就不用每隔5分钟去厨房了从而可以专心的打游戏,只有听到水壶吱吱叫的时候,我去把水倒出来就可以了。

    在这个例子里,打游戏就是主任务,水烧开就是中断,吱吱叫就是中断向量,听到吱吱响我就明白水烧开了,这时我要把打游戏这个主任务暂时放下,转而去处理水烧开了这个中断事件,水倒完后我就又回到了游戏这个主任务中。这样是不是提高了打游戏的效率呢?

    3 中断的硬件实现

    51单片机的外部中断0引脚接一只按键,该按键通过上拉电阻接到电源,即没有按键发生时单片机检测到的是高电平,当按键按下时单片机检测到的是低电平。单片机的P0.0引脚以灌电流的方式接了一只LED,当按键按下时LED灯点亮,没按键时LED灯熄灭。

    c990411e38221a3a6d325ceac62b476f.png

    4 中断的软件实现

    单片机中断函数的写法比较固定,51单片机中断函数的写法如下:

    void Initd() interrupt 0

    其中:void:为中断函数的返回类型,中断函数多为空类型;

    Initd():是中断函数的名称,这个函数名符合C语言函数命名规范就可以,随便起;

    interrupt:为51单片机中断的关键字,必须这么写(51单片机必须这么写);

    0:为中断向量,该值详看第一个表格,如果是外部中断1就写2,如果是定时器1中断就写3;

    中断函数不用在主函数中调用,只要中断事件发生,单片机自己主动会调到中断函数中。

    该例子的函数如下所示:

    386c4eae8860bcd9d1a9301c4c1328fe.png

    5仿真实现

    当按键发生时,LED灯点亮,如下图所示。注意对比两种图中按键的状态。

    58afbe67600f0ea8626252b3926890ac.png

    展开全文
  • 利用外部中断来实现按键控制LED灯的亮灭。 实验工具:MDK5,STM32F103ZET6开发板 使用固件库编程 LED灯引脚PD13,按键PE0 首先了解一下32的外部中断 STM32 的每个 IO 都可以作为外部中断的中断输入口,STM32F103 的...
  • 外部中断0 外部0中断触发:(P3.2口触发;P3.2触发;P3.2触发) 若IT0=0,则为低电平触发 若IT0=1,则为下降沿触发 外部中断0初始化: 初始化方法一: void Init_INT0() { IT0=1;//设置外部中断0;下降沿触发 EX0=...

    中断

    在这里插入图片描述

    TMOD:定时器/计数器工作方式寄存器

    TCON:定时器/计数器控制寄存器

    在这里插入图片描述

    IE:中断允许控制寄存器

    在这里插入图片描述

    IP:中断优先级控制寄存器

    外部中断0

    外部0中断触发:(P3.2口触发;P3.2触发;P3.2触发

    若IT0=0,则为低电平触发

    若IT0=1,则为下降沿触发

    外部中断0初始化:

    初始化方法一:

    void Init_INT0()
    {
     IT0=1;//设置外部中断0;下降沿触发 
     EX0=1;//开启外部中断0; 
     EA=1;//开启中断总开关 
     } 
    
    
    初始

    化方法二:

    void Init_INT0()
    { 
     TCON=TCON|0x01;//0000 0001->0x01相当IT0=1;设置下降沿触发中断
     IE=0x81;//1000 0001->0X81;
         //第一个1是EA=1;即中断总开关
         //第二个1是EX0=1;即中断分支开关
    }
    
    
    外部0

    中断子函数:

    void RSI_INT0() interrupt 0
    {
     P0=~P0;//当触发中P0口的LED取反 
    }

    主函数:

    void main()
    {
     P0=0xff;//灯全熄灭
     Init_INT0();//初始化外部中断0
     while(1);
    }
    
    
     

    外部中断1:

    外部1中断触发:(P3.3口触发;P3.3触发;P3.3触发

    若IT1=0,则为低电平触发

    若IT1=1,则为下降沿触发

    外部中断1初始化:

    方法一:

    void Init_INT1()
    {
     IT1=1;//设置外部中断1;下降沿触发 
     EX1=1;//开启外部中断1; 
     EA=1;//开启中断总开关 
     } 
    
    
     

    方法二:

    void Init_INT1()
    { 
    // IT1=1;//设置下降沿触发
    // EX1=1;//外部中断1的分支开关
    // EA=1;//中断总开关
      
      TCON=TCON|0x04;//0000 0100->0x04相当IT1=1;设置下降沿触发
      IE=0x84;//IE=1000 0100->0x84
         //第一个1相当EA=1;第二个1相当EX1=1
    }
    
    
     
    
    外部1

    中断子函数:

    void ISR_Int1() interrupt 2
    {
      P0=~P0;//取反 
    }

    主函数:(P3.3给了下降沿,软件触发)

    void main()
    {
     P0=0xff;//熄灭所有的灯
     Init_INT1();//外部中断1初始化
     while(1){
      Int1=1;
      Int1=0;//P3.3由1->0;下降沿触发
     }
    }

    该主函数可进行Dobug,查看函数的走向。

    例题:(中断嵌套)

    利用外部中断0,进行3次流水灯;

    利用外部中断1,进行3次闪耀;

    且外部中断1的优先级高于外部中断1。

    不进行中断时LED灯处于熄灭状态。

    #include <reg51.h>
    
     
    
    //延时程序
    
    void delay()
    
    {
    
           int i,j;
    
           for(i=0;i<10;i++)
    
            for(j=0;j<3000;j++);    
    
    }
    
    //外部中断0和1初始化
    
    void Init_INT01()
    
    {      
    
           TCON=TCON|0x05;//0000
    0101->0x01相当IT0=1,IT1=1;设置下降沿触发中断
    
           IE=0x85;//1000 0101->0X85;
    
                                       //第一个1是EA=1;即中断总开关
    
                                       //第二个1是EX1=1;即中断1分支开关
    
                   //第二个1是EX0=1;即中断0分支开关
    
           IP=IP|0x04;//设置外部中断1优先级高于外部中断0
    
    }
    
     
    
    //LED右移程序
    
    void lelf(unsigned int n)
    
    {
    
           unsigned int i,j;
    
           for(i=0;i<n;i++)
    
           {
    
                  for(j=0;j<8;j++)
    
                  {
    
                         P0=~(0x80>>j);
    
                         delay();
    
                  }
    
           }
    
           P0=0xff;
    
    }
    
     
    
    //闪耀程序
    
    void flash(unsigned int n)
    
    {
    
           unsigned int i;
    
           for(i=0;i<n;i++)
    
           {
    
                  P0=~P0;
    
                  delay();
    
           }
    
    }
    
    void main()
    
    {
    
           Init_INT01();
    
           while(1);
    
    }
    
    //外部中断0子程序
    
    void out_INT0() interrupt 0
    
    {
    
           lelf(3);
    
           
    
    }
    
    //外部中断1子程序
    
    void out_INT1() interrupt 2
    
    {
    
           flash(4);
    
    }

    定时器0中断:

    中断触发:

    定时/计数时间到触发中断

    定时/计数原理:

    脉冲下降沿,定时器/计数的值加 1

    初始化程序:
    //定时器/计数器0初始化

    void tminer0_Init()
    {
     TMOD&=0XFC;//选择定时模式C/T=0;计数模式C/T=1;
     TMOD|=0x01;//选择定时器0;工作模式1,16位定时/计数
     TH0=0xFF;  //装初值
     TL0=0xFE;  //定时1us
     ET0=1;     //定时器0开关
     EA=1;      //中断总开关
     TR0=1;     //启动定时器0
    }

    中断子程序:

    //定时器中断0子程序
    void time0() interrupt 1
    {
     TH0=0xFF;//重新装初值
     TL0=0xFE;//定时1us
     P0=~P0;
    }

    主程序:

    void main()
    {
     tminer0_Init();
     while(1);
    }
     

    定时器1中断:

    #include
    <reg51.h>
    //定时器/计数器1初始化
    
    void
    tminer1_Init()
    
    {
    
           TMOD&=0XCF;//选择定时模式C/T=0;计数模式C/T=1;
    
           TMOD|=0x10;//选择定时器1;工作模式1,16位定时/计数
    
           TH1=0xFF;//装初值
    
           TL1=0xFE;//定时1us
    
           ET1=1;//定时器1开关
    
           EA=1;//中断总开关
    
           TR1=1;//启动定时器1
    
    }
    
    void
    main()
    
    {
    
           tminer1_Init();
    
           while(1);
    
    }
    
    //定时器中断1子程序
    
    void
    time0() interrupt 3
    
    {
    
           TH1=0xFF;//重新装初值
    
           TL1=0xFE;//定时1us
    
           P0=~P0;
    
    }
    展开全文
  • 事件是中断的触发源,开放了对应中断屏蔽位,则事件可以触发相应的中断。 事件还是其它一些操作的触发源,比如DMA,还有TIM中影子寄存器的传递与更新;而中断是不能触发这些操作的,所以要把事件与中断区分开。
  • LPC1768微处理器包括4个外部中断,分别是EINT0、EINT1、EINT2、EINT3对应的引脚分别是P2.10~P2.13,这几个引脚也可以作为通用IO口使用。名个外部中断可以设置成低电平/高电平或上升沿/下降沿有效,它们还有一个功能...
  • stm8 外部中断 源代码

    2020-03-20 22:09:23
    stm8 外部中断 程序源代码 只需要改一下对应的io口数字就可以使用,适合学习如何编写外部中断程序。
  • 实验11:外部中断0

    2020-03-05 21:11:06
    实验11:外部中断0 /************************************************************************************** * 外部中断0实验 * 实现现象:下载程序后按下K3按键可以对D1小灯状态取反。 注意事项...

    实验11:外部中断0

    这里要知道51单片机只有P3.2和P3.3引脚的低电平或下降沿信号中断。

    注意51单片机一共支持5个中断源,其中2个外部中断源,3个内部中断源
    (1)外部中断0,由INT0(P3.2引脚)输入。
    (2)外部中断1,由INT1(P3.3引脚)输入。
    (3)定时/计数器0溢出中断(T0)请求。
    (4)定时/计数器0溢出中断(T1)请求。
    (5)串行口发送/接收中断请求。

    1、设置中断触发方式,即IT0=1或0,IT1=1或0
    当IT0=0时,为电平触发方式。
    当IT0=1时,为边沿触发方式(下降沿有效)。

    2、开对应的外部中断,即EX0=1或EX1=1;
    外部中断0允许位或外部中断1允许位。

    3、开总中断,即EA=1;

    4、等待外部设备产生中断请求,即通过P3.2,P.3.3口连接外部设备产生中断

    5、中断响应,执行中断服务函数

    /**************************************************************************************
    *		              外部中断0实验												  *
    实现现象:下载程序后按下K3按键可以对D1小灯状态取反。
    注意事项:无。																				  
    ***************************************************************************************/
    
    #include "reg52.h"			 //此文件中定义了单片机的一些特殊功能寄存器
    
    typedef unsigned int u16;	  //对数据类型进行声明定义
    typedef unsigned char u8;
    
    sbit k3=P3^2;  //定义按键K3
    sbit led=P2^0;	 //定义P20口是led
    
    /*******************************************************************************
    * 函 数 名         : delay
    * 函数功能		   : 延时函数,i=1时,大约延时10us
    *******************************************************************************/
    void delay(u16 i)
    {
    	while(i--);	
    }
    
    /*******************************************************************************
    * 函 数 名         : Int1Init()
    * 函数功能		   : 设置外部中断1
    * 输    入         : 无
    * 输    出         : 无
    *******************************************************************************/
    void Int0Init()
    {
    	//设置INT0
    	IT0=1;//跳变沿出发方式(下降沿),当0时,为电平触发方式。
    	EX0=1;//打开INT0的中断允许。	确认是中断0而非中断1.
    	EA=1;//打开总中断“开关”	
    }
    
    /*******************************************************************************
    * 函 数 名       : main
    * 函数功能		 : 主函数
    * 输    入       : 无
    * 输    出    	 : 无
    *******************************************************************************/
    void main()
    {	
    	Int0Init();  //	设置外部中断0
    	while(1);		
    }
    
    /*******************************************************************************
    * 函 数 名         : duan0()	
    * 函数功能		   : 外部中断0的中断函数
    * 输    入         : 无
    * 输    出         : 无
    *******************************************************************************/
    
    void duan0()	interrupt 0		//外部中断0的中断函数
    {
    	delay(1000);	 //延时消抖
    	if(k3==0)
    	{
    		led=~led;
    	}
    }
    
    
    展开全文
  • STM32外部中断与各通道对应关系

    万次阅读 2018-07-12 14:02:46
    一:外部中断使用配置过程:(1)配置时钟信号(2)引脚属性(3)NVIC配置(4)外部中断配置二:STM32外部中断与各通道对应关系

    EXTI0_IRQn的值,其实就是EXTI0中断向量在中断向量表中的位置(STM32技术参考手册中断向量表position栏中的数值)

    一:外部中断使用配置过程:

    (1)配置时钟信号
    (2)引脚属性
    (3)NVIC配置

    (4)外部中断配置

    二:配置步骤

    步骤如下: 
    1.系统初始化,如系统时钟初始化,使之进入72MHZ主频;程序启动时已调用SystemInit()函数将主频改为72MHZ。
    2.GPIO配置,务必注意打开GPIO时钟时,一定打开AFIO时钟。 在使用引脚的重映射功能和外部中断时需要使用AFIO时钟。
    3.EXTI配置,在这里配置需要选择哪个引脚作为中断引脚。 

    //定义一个EXTI初始化结构体
    EXTI_InitTypeDef EXTI_InitStructure; 
    //设置中断线:EXTIL_Line1为中断线1
    EXTI_InitStructure.EXTI_Line = EXTI_Line1; 
    //模式
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; 


    模式:这里有两个模式:(1)中断模式,(2)事件,具体区别如下:
    “事件:是表示检测有一某件触发事件发生了。中断:有某个事件发生并产生中断,并跳转到对应的中断处理程序中。事件可以触发中断,也可以不触发中断有可能被更优先的中断屏蔽,事件不会事件本质上就是一个触发信号,是用来触发特定的外设模块或核心本身(唤醒).事件只是一个触发信号(脉冲),而中断则是一个固定的电平信号”


    //设置中断触发方式(3种)

     EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;

     EXTI_Trigger_Falling:设置输入线路下降沿为中断请求
     EXTI_Trigger_Rising:设置输入线路上升沿为中断请求
      EXTI_Trigger_Rising_Falling:设置输入线路上升沿和下降沿为中断请求

     //定义选择中断线的新状态
     EXTI_InitStructure.EXTI_LineCmd=ENABLE;

     //根据EXTI_InitStructure中指定的参数初始化外设EXTI寄存器
     EXTI_Init(&EXTI_InitStructure);


     4.NVIC配置,这也是比单片机多出来的部分,我们必须把NVIC中对应的通道使能,并且设置优先级别。


     5.编写中断函数

     void EXTI2_IRQHandler(void)

    三:STM32外部中断与各通道对应关系

    例子 1:

    exit.c文件
    
    #include "exti.h"
    #include "delay.h"
    extern int isr_flag ;
    
    void EXTIX_Init(void)
    {
     
    	EXTI_InitTypeDef EXTI_InitStructure;
    	NVIC_InitTypeDef NVIC_InitStructure;
            GPIO_InitTypeDef GPIO_InitStructure;
     
     	//时钟配置
     	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO,ENABLE);
    
     	//IO配置
    	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0;
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; 
     	GPIO_Init(GPIOE, &GPIO_InitStructure);
    	GPIO_SetBits(GPIOE,GPIO_Pin_0);	
    
    	//EXTI
      	GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource0);
      	EXTI_InitStructure.EXTI_Line=EXTI_Line0;	
      	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;	
      	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
      	EXTI_InitStructure.EXTI_LineCmd = ENABLE;
      	EXTI_Init(&EXTI_InitStructure);	 	
    
      	//NVIC
            NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;			       
      	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;	
      	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;					
      	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;								
      	NVIC_Init(&NVIC_InitStructure);
    }
    
    
    void EXTI0_IRQHandler(void)
    {
    	delay_ms(1);   
    	if(EXTI_GetITStatus(EXTI_Line0)!=RESET)
    	{
               isr_flag = 1;
    	   EXTI_ClearITPendingBit(EXTI_Line0);  
    	}	
    }
    

    例子2:

    #include "exti.h"
    #include "led.h"
    #include "key.h"
    #include "delay.h"
    #include "usart.h"
    #include "beep.h" 
    //外部中断0服务程序
    void EXTIX_Init(void)
    {
     
        EXTI_InitTypeDef EXTI_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;
    
        //初始化KEY0-->GPIOA.13,KEY1-->GPIOA.15  上拉输入
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO,ENABLE);//使能PORTA,PORTE时钟
    
    //IO初始化
        GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;    //PE2~4
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;                       //设置成上拉输入
        GPIO_Init(GPIOE, &GPIO_InitStructure);                              //初始化GPIOE2,3,4
        //初始化 WK_UP-->GPIOA.0   下拉输入
        GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;                       //PA0设置成输入,默认下拉   
        GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.0
    
    
    //EXTI
           //GPIOE.2 中断线以及中断初始化配置   下降沿触发
      	GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2);
      	EXTI_InitStructure.EXTI_Line=EXTI_Line2;	               //KEY2
      	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;	
      	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
      	EXTI_InitStructure.EXTI_LineCmd = ENABLE;
      	EXTI_Init(&EXTI_InitStructure);	 	                    //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器
    
           //GPIOE.3	  中断线以及中断初始化配置 下降沿触发 //KEY1
      	GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource3);
      	EXTI_InitStructure.EXTI_Line=EXTI_Line3;
      	EXTI_Init(&EXTI_InitStructure);	  	                     //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器
    
           //GPIOE.4	  中断线以及中断初始化配置  下降沿触发	    //KEY0
      	GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource4);
      	EXTI_InitStructure.EXTI_Line=EXTI_Line4;
      	EXTI_Init(&EXTI_InitStructure);	  	                     //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器
    
    
           //GPIOA.0	  中断线以及中断初始化配置 上升沿触发 PA0  WK_UP
     	GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0); 
     	EXTI_InitStructure.EXTI_Line=EXTI_Line0;
      	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
      	EXTI_Init(&EXTI_InitStructure);		                   //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器
    
    //NVIC
      	NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;		//使能按键WK_UP所在的外部中断通道
      	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;	//抢占优先级2, 
      	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;		//子优先级3
      	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			//使能外部中断通道
      	NVIC_Init(&NVIC_InitStructure); 
    
            NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;		//使能按键KEY2所在的外部中断通道
      	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;	//抢占优先级2, 
      	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;		//子优先级2
      	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			//使能外部中断通道
      	NVIC_Init(&NVIC_InitStructure);
    
    
      	NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;		//使能按键KEY1所在的外部中断通道
      	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;	//抢占优先级2 
      	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;		//子优先级1 
      	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;		        //使能外部中断通道
      	NVIC_Init(&NVIC_InitStructure);  	                        //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器
    
    	  NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;		//使能按键KEY0所在的外部中断通道
      	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;	//抢占优先级2 
      	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;		//子优先级0 
      	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			//使能外部中断通道
      	NVIC_Init(&NVIC_InitStructure);  	                        //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器
     
    }
    
    //外部中断0服务程序 
    void EXTI0_IRQHandler(void)
    {
    	delay_ms(10);//消抖
    	if(KEY3==1)	 	 //WK_UP按键
    	{				 
    		BEEP=!BEEP;	
    	}
    	EXTI_ClearITPendingBit(EXTI_Line0); //清除LINE0上的中断标志位  
    }
     
    //外部中断2服务程序
    void EXTI2_IRQHandler(void)
    {
    	delay_ms(10);     //消抖
    	if(KEY2==0)	  //按键KEY2
    	{
    		LED0=!LED0;
    	}		 
    	EXTI_ClearITPendingBit(EXTI_Line2);  //清除LINE2上的中断标志位  
    }
    //外部中断3服务程序
    void EXTI3_IRQHandler(void)
    {
    	delay_ms(10);    //消抖
    	if(KEY1==0)	 //按键KEY1
    	{				 
    		LED1=!LED1;
    	}		 
    	EXTI_ClearITPendingBit(EXTI_Line3);  //清除LINE3上的中断标志位  
    }
    
    void EXTI4_IRQHandler(void)
    {
    	delay_ms(10);     //消抖
    	if(KEY0==0)	 //按键KEY0
    	{
    		LED0=!LED0;
    		LED1=!LED1; 
    	}		 
    	EXTI_ClearITPendingBit(EXTI_Line4);  //清除LINE4上的中断标志位  
    }
     
    

    展开全文
  • 中断优先级寄存器IPPS——串行口中断优先级控制位PT1——定时器/计数器1中断优先级控制位PX1——外部中断1中断优先级控制位PT0——定时器/计数器0中断优先级控制位PX0——外部中断0中断优先级控制
  • 1、外部中断0:INT0,其对应的引脚为P3^2。 #include "reg52.h" typedef unsigned int u16; typedef unsigned char u8; sbit k3=P3^2; //定义按键K3,外部中断0触发I/O口 sbit led=P2^0; //定义P20...
  • Cortex-M0系列 ~ 外部中断

    千次阅读 2018-08-16 16:31:52
    STM32的每个I/O都可以作为外部中断的中断输入口,每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。这里使用的外部中断来检测按键,下面是相关配置代码~ void EXTIX_Init() { GPIO_InitTypeDef GPIO...
  • EXTI(External interrupt/event controller)—外部中断/事件控制器,管理了控制器的 20个中断/事件线。每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的检测。EXTI 可以实现对每个...
  • 51单片机——外部中断

    千次阅读 2021-04-16 12:35:06
    一、外部中断 1.1 中断 关于中断的概念在上一篇博客中已经提到了。(传送门:51单片机入门教程(5)——定时器中断) 中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并...
  • C51程序 #include<reg51.h>//头文件 #include<...sbit led=P1^0;//输出端-led sbit break1=P3^2;//输出端-led //延时函数 void delay_ms(uint ms)// 延时子程序 1000ms = 1s { uint a,b; for(a
  • 一.外部中断 STM32F4的每个IO都可以作为外部中断的中断输入口,这点也是STM32F4的强大之处。...EXTI线0~15:对应外部IO口的输入中断。 EXTI线16:连接到PVD输出。 EXTI线17:连接到RTC闹钟事件。
  • 89C51单片机之外部中断0、1控制LED

    千次阅读 2020-03-22 18:37:06
    89C51单片机之外部中断0、1控制LED 1.proteus仿真图 2.keli代码 #include <reg51.h> sbit led1=P0^0; sbit led2=P1^0;...//外部中断0控制程序 ...//外部中断1控制程序 void INT1test() interrupt ...
  • 外部中断 外部中断一般是由计算机外设发出的中断请指求,如:键盘中断、打印机中断、定时器中断等。外部中断一般指io高低电平来触发并响应io中断函数 定时器中断 定时器中断是指计数器在晶振的震荡下一直加数一直...
  • Proteus仿真:外部中断应用实例

    千次阅读 2021-02-25 20:42:35
    因仿真库中无74LS348仿真元件,仿真电路使用74HC148和74HC245模拟74LS348,8路外部中断输入全部为低有效,对应的中断发生时,使用printf函数从串口输出“extended interput x happened”,x为对应的中断编号。...
  • 实验:使用独立按键K3控制LED亮灭,K3连接外部中断0 接线说明: 1,单片机–>led&交通灯模块 P20–>D1 2,单片机–>独立按键模块 P32–>K3 代码: #include"reg52.h" typedef unsigned int u16; ...
  • 8051外部中断1解析

    千次阅读 2019-07-23 10:41:21
    程序实现的功能: 在实验板上左下方有一...(外部中断1和外部中断0在处理上类似, 红色的部分为不同之处) 中断处理程序标号: 外部中断0 -----------> 0 定时器0中断 -----------> 1 外部中断1 -----------&...
  • ESP32外部中断原理&实战 阅读建议:   有一定Cortex-m架构知识基础。 外部中断原理 外部中断实战 首先配置GPIO   ESP-IDF提供了一个结构体方便对其进行初始化,结构体如下: typedef struct { uint64_t ...
  • STM32F4外部中断入口和外部中断线

    千次阅读 2017-05-15 16:50:01
    STM32F4的每个IO都可以作为外部中断的中断输入口,这点也是STM32F4的强大之处。...EXTI线0~15:对应外部IO口的输入中断。 EXTI线16:连接到PVD输出。 EXTI线17:连接到RTC闹钟事件。 EXTI线18:连
  • 51单片机中断号对应中断类型

    千次阅读 2019-08-07 08:36:08
    中断源 默认中断级别 外部中断0 INT0 最高 interrupt 0 定时器0中断 T0 ...
  • 目录一、实验要求二、分析(一)数码管(二...2、掌握外部中断的中断初始化和中断服务函数的程序编写方法,编程实现实现数码管上显示外部中断计数。 【实验内容】 1、用Proteus绘制硬件原理图,并设置元件参数; 2、用
  • 51单片机之——外部中断0(INT0)

    万次阅读 多人点赞 2016-08-27 18:09:32
    换而言之,我们配置寄存器,便是给寄存器中赋予一定的值,而这些值又要与我们的目的想对应,这样它便会有相应的作用。 例如,芯片的资料规定,当给芯片的 A 寄存器赋“0x11”时,它会出现 B 现象;赋
  • STM32 中断原理及外部中断的实现

    千次阅读 2021-01-18 15:39:09
    CM3支持256个中断,16个内核中断,240个外部中断,256级可编程中断设置。 STM32使用了其中一部分,16个内核中断,107系列有68个可屏蔽中断(103系列只有60个),16级可编程的中断优先级。 中断寄存器: ISER[8],...
  • stm32外部中断

    千次阅读 2019-08-26 17:12:15
    外部中断与内部中断(例如定时器产生中断,串口接收中断等)不同的是:外部中断由外部条件触发,比如按键触发。 STM32的每个IO都可以作为外部中断输入。 STM32的中断控制器支持19个外部中断/事件请求: 线0~15:对应...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 100,124
精华内容 40,049
关键字:

外部中断0对应的中断号