精华内容
下载资源
问答
  • 51单片机中断号对应的中断类型

    千次阅读 2019-08-07 08:36:08
    中断源 默认中断级别 外部中断0 INT0 最高 interrupt 0 定时器0中断 T0 ...

     

                      中断源                        默认中断级别  
         外部中断0          INT0                               最高 interrupt 0 
         定时器0中断      T0                                  1 interrupt 1 
         外部中断1          INT1                                  2 interrupt 2 
         定时器1中断      T1                                  3 interrupt 3 
         串口中断           TX/RX                                  4 interrupt 4
      

    与中断系统相关的特殊寄存器:

    中断寄存器就是用于存贮中断状态的,包含是否启用中断或者是否发生中断。

    1)中断允许控制寄存器(IE)------------------ 控制各中断的开放和屏蔽

    2)中断优先级控制寄存器(IP)----------------设置各中断的优先级

    3)定时器/计数器控制寄存器(TCON)------定时器和外部中断的控制

    4)串行口控制寄存器(SCON)----------------串行中断的控制

     

    中断类型分为三类:

    1)T0、T1是2个定时器/计数器中断,由片内定时器提供;

    2)INT0、INT1是2个外部中断,由引脚P3.2和P3.2提供;

    3)RX、TX为串行口中断所用,由片内串口提供。

    串口初始化

    void uart_init(void)
    {
        T2CON=0x30;  //用定时器2做串口0的波特率发生器
        RCAP2H=(65536-22118400/baud_rate/32)/256;  
        RCAP2L=(65536-22118400/baud_rate/32)%256;
        SCON=0x50;   //串口0工作在模式3  M0=1 SM1=1  在11位异步收发模式  接收允许
        TR2=1;  //开启定时器2
        ES=0;   //关闭串口中断
        EA=1;   //打开总中断
    }
    
    void UART0(void) interrupt 4
    {
        ...
    }

    11.0592M晶振下    baut=f/{32*[65536-(RCAP2H,RCAP2L)]}
    fee0--1200   ff70--2400  ffb8--4800  ffdc---9600  ffee--19200   fff7--38400   fffa--57600  fffd--115200


    22.1184M晶振下
    fdc0--1200  fee0--2400  ff70--4800  ffb8---9600  ffdc---19200  ffee--38400  fff4--57600  fffa--115200

    定时器初始化

    void Timer_init(void)  //定时器0定时10ms
    {
        TMOD|=0x01;      //T0定时   16位   TR0控制
        TH0=0xb8;
        TL0=0x00;
        TR0=1;     //开启定时器
        ET0=1;     //T0中断开
        EA=1;      //打开总中断
    }
    
    void time_0(void) interrupt 1
    {
        TL0=0x00;
        TH0=0xb8;
    }  

    定时器计算方法:

    22118400M/12=1843200     每秒1843200次

    10ms=0.01s  =  18432次

    65536-18432=  47104 = B800

     

     

    展开全文
  • 一 概述 STM32芯片有16个外部中断源,EXTI0-...EXTI0对应每个端口组0引脚,也就是说 EXTI0连接引脚为PA0-PG0。以此类推,EXTI1、EXTI2、EXTI3、EXTI4分别对应每个端口组1、2、3、4引脚。 而EXTI5-EXTI9为...

    一 概述
    STM32芯片有16个外部中断源,EXTI0-EXTI15,分别对应着七个中断服务函数,其中有五个EXTI0,EXTI1,EXTI2,EXTI3,EXTI4是专用的,其余为共用。
    EXTI0对应每个端口组的0号引脚,也就是说 EXTI0的连接引脚为PA0-PG0。以此类推,EXTI1、EXTI2、EXTI3、EXTI4分别对应每个端口组的1、2、3、4号引脚。
    而EXTI5-EXTI9为5-9端口共用,而EXTI10-EXTI15为10-15端口共用。具体的表示如图所示:
    在这里插入图片描述
    外部中断触发条件有:上升沿触发,下降沿触发,双边沿触发。注意不能配置成高电平低电平触发。
    二 设计步骤
    基于STM32CubeMX的外部中断设计步骤:
    【1】在STM32CubeMX中指定引脚,配置中断初始化参数。
    选择GPIO引脚的功能,设置中断信号触发条件,使能NVIC对应的中断通道。
    【2】重写该I/O引脚对应的中断回调函数。
    三 具体操作
    例:将PC13引脚设置成外部中断,下降沿触发,在终端服务函数中,翻转PB9引脚的电平信号。

    1. 首先配置时钟和系统选项
      在这里插入图片描述
      在这里插入图片描述

    2. 我采用的是ST-LINKV2仿真器,所以我选用了serial wire串行线路。同时在硬件上要将单片机最小系统的BOOT0和BOOT1都置为0。

    3. 同时如图所示配置中断,输出引脚:在这里插入图片描述

    4. 将引脚参数,中断参数配置完成:
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      其余关于STM32CubeMX项目建立等其他操作不再赘述。如图所示:
      在这里插入图片描述
      在这里插入图片描述

    四 代码执行

    1. 在keil工程文件里会发现一个stm32f1xx_it.c文件,里面保存的就是中断的一些代码。
      在main文件里将会看到 MX_GPIO_Init();,里面包含外部中断的初始化。
    void MX_GPIO_Init(void)
    {
    
      GPIO_InitTypeDef GPIO_InitStruct = {0};
    
      /* GPIO Ports Clock Enable */
      __HAL_RCC_GPIOC_CLK_ENABLE();
      __HAL_RCC_GPIOD_CLK_ENABLE();
      __HAL_RCC_GPIOA_CLK_ENABLE();
      __HAL_RCC_GPIOB_CLK_ENABLE();
    
      /*Configure GPIO pin Output Level */
      HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_RESET);
    	//设置PB9为输出
      /*Configure 配置 GPIO pin : PC13 */
      GPIO_InitStruct.Pin = GPIO_PIN_13;
      GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
      GPIO_InitStruct.Pull = GPIO_PULLUP;
      HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
    
      /*Configure 配置 GPIO pin : PB9 */
      GPIO_InitStruct.Pin = GPIO_PIN_9;
      GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
      GPIO_InitStruct.Pull = GPIO_PULLUP;
      GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
      HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
    
      /* EXTI interrupt init*/
      HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0, 0);
      HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
    	//中断初始化
    }
    
    1. 接下来我们重写该I/O引脚对应的中断回调函数:
    void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
    {
    	if(GPIO_Pin==GPIO_PIN_13)
    	{
    		HAL_GPIO_TogglePin(GPIOB ,GPIO_PIN_9);
    	}
    	
    }
    
    

    运行,即可看到效果。
    注:
    本笔记为欧浩源老师STM32课程的一些梳理,对应的视频为:
    https://www.bilibili.com/video/av87017878?p=4

    展开全文
  • 外部中断配置过程

    多人点赞 2020-06-22 00:47:04
    开启所有外部中断源管脚对应的GPIO时钟和AFIO时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOx|RCC_APB2Periph_AFIO, ENABLE) 定义GPIO初始化结构变量, GPIO_InitTypeDef GPIO_InitStructure; 赋值结构变量...

    ①初始化GPIO;
    ②初始化NVIC;;
    ③初始化EXTI
    ④编写中断服务函数。

    ①初始化GPIO

    1. 开启所有外部中断源管脚对应的GPIO时钟和AFIO时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOx|RCC_APB2Periph_AFIO, ENABLE)
    
    1. 定义GPIO初始化结构变量,
    GPIO_InitTypeDef GPIO_InitStructure;
    
    1. 赋值结构变量各成员
    GPIO_InitStructure.GPIO_Pin=管脚号0~15 ; .mode= GPIO_Mode_IN_FLOATING(浮空输入);
    
    1. 调用GPIO初始化函数:GPIO_Init(& GPIO_InitStructure);
    2. 如果有多个中断源,重复步骤3~4。

    ②初始化NVIC;

    1. 设置优先级分组
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_n);
    
    1. 定义NVIC初始化结构变量,并赋值结构变量各成员
    NVIC_InitTypeDef NVIC_InitStructure;
    NVIC_InitStructure.NVIC_IRQChannel =中断号;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =抢占优先级;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority =子优先级;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    
    1. 调用NVIC初始化函数。
    NVIC_Init(&NVIC_InitStructure);
    
    1. 如果有多个中断源,重复步骤2~3

    ③初始化EXTI

    1. 定义EXTI初始化结构变量 EXTI_InitTypeDef EXTI_InitStructure;
    2. 选择EXTI的信号源,设置外部中断配置寄存器AFIO_EXTICR相关位
    GPIO_EXTILineConfig()
    
    1. 赋值结构变量各成员
    EXTI_InitStructure.EXTI_Line =信号源
    EXTI_InitStructure.EXTI_Mode =中断模式
    EXTI_InitStructure.EXTI_Trigger =触发方式
    
    1. 调用EXTI初始化函数
    EXTI_Init(&EXTI_InitStructure);
    

    如果有多个外部中断源,重复步骤2~4.

    ④编写中断服务函数。

    • 在启动文件startup_stm32f10x_hd.s 中我们预先为每个中断都写了一个中断服务函数,只是这些中断函数都是为空,为的只是初始化中断向量表。实际的中断服务函数都需要我们重新编写,为了方便管理,可以把中断服务函数统一写在stm32f10x_it.c 这个库文件中。
    • 关于中断服务函数的函数名必须跟启动文件里面预先设置的一样,如果写错,系统就在中断向量表中找不到中断服务函数的入口,直接跳转到启动文件里面预先写好的空函数,并且在里面无限循环,实现不了中断。
    • 对每个中断号编写中断服务函数,对于EXTI9-5 和EXTI15-10,多个中断源公用同一个中断号时,可以在中断服务函数中判断具体是哪一个中断源被触发,然后根据中断源编制相应的响应程序。
    void EXTIx_IRQHandler(void); void EXTI9_5_IRQHandler(void)
    • 重要提醒,中断服务函数中,为确保确实产生了中断请求,通常需要检查一下状态标识位确认确实产生了该中断。同时,为避免一次中断请求执行多次中断服务程序,中断服务程序最后需要清除该中断标识位。例如:

    if(EXTI_GetITStatus(KEY3_INT_EXTI_LINE) != RESET) //确保是否产生了EXTI Line中断
    {EXTI_ClearITPendingBit(KEY3_INT_EXTI_LINE); //清除中断标志位
    }
    
    展开全文
  • 【蓝桥杯单片机组】外部中断

    千次阅读 2017-02-20 10:08:18
    需要操作寄存器TCON: ITx EXx 编程步骤: (1)选触发方式 (2)开外部中断 (3)开总中断 ...外部中断引脚如上图,对应独立按键S5 S4,外部中断号0(EX0)/2(EX1) 附:init.c void cls_

    需要操作的寄存器TCON: ITx EXx

    编程步骤:

    (1)选触发方式

    (2)开外部中断

    (3)开总中断

    	 IT0=1; //IT0=1,下降沿触发外部中断0,IT0=0边沿触发
    	 EX0=1;//使用外部中断0
    	 EA=1;




    外部中断引脚如上图,对应独立按键S5 S4,外部中断号:0(EX0)/2(EX1)


    附:init.c

    void cls_buzz(void)
    {
    	P2 = (P2&0x1F|0xA0);
    	P0 = 0x00;
    	P2 &= 0x1F;
    }
    void ex0_init()
    {
    	 IT0=1; //IT0=1,下降沿触发外部中断0,IT0=0边沿触发
    	 EX0=1;//使用外部中断0
    	 EA=1;
    }

    main.c

    #include <reg52.h>
    #include "init.h"
    sbit L1=P0^0;
    int main(){
    	cls_buzz();
    	ex0_init();
    	while(1){}
    }
    
    void Ex_int0() interrupt 0 //外部中断优先级最高
    {
    	P2=((P2&0x1f)|0x80);
    	L1=~L1;
    	P2=(P2&0x1f);
    }




    展开全文
  • CC2530之外部中断

    千次阅读 2018-02-02 13:01:19
    在本次学习中,主要通过外部中断来控制LED亮灭。 首先,先查看相关电路图。由图可知,当CC2530端口1的0号引脚输出低电平时,LED1将被点亮,当按键S1按下时,端口0的1引脚将为低电平,抬起时为高电平。在接下来...
  • 最基本的中断外部高低电平中断 中断源:中断号60,PIO中断, 选择有中断输入功能的GPIO口作为中断输入 ...#define D12 PI13设置PI12、PI13脚的功能为EINT功能(对应不同的中断编号)#define PI12_13_SELECT_MASK (0
  • 若我以同样的初始化方式在CPU1中进行串口初始化,此时,CPU1无法响应中断,在查阅了相关资料之后,发现若要使中断生效,则需要将指定的中断号map到对应的CPU,关键函数调用:XScuGic_InterruptMa...
  • OK6410裸机程序(三)——外部中断

    千次阅读 2013-03-24 14:17:08
    OK6410裸机程序(三)——外部中断    s3c6410具有187个多功能I/O端口,其实...每个中断引脚,都有相对应的中断号,如(GPN0 = Ext.Interrupt[0]).  这里给大家分一下:  EINT0 GPN0--->GPN15 GPL8--->GPL1
  • 中断

    2017-08-09 15:37:53
    为了区别不同的中断,引入了中断号,单片机的中断号对应的中断类型如下: 中断号 中断源 中断向量 复位 0000H 0------------外部中断0-------------------------0003H 1-----------定时器中断0-------------------...
  • 两个外中断的应用

    2015-03-04 10:28:38
    两个外中断应用 中断服务函数格式 函数类型 函数名(形参)interrupt n using n ...关键字interruot 后面n 是中断好 对应8051 中断号 0~4   n 中断源 中断向量 (8*n +3) 0 外部中断 0003h 1 定时器0
  • 中断的概念,就不再累赘了。反正就是中断来的时候,停下手中的活,先忙中断事情,然后在回来继续干。就好像正在家里洗碗,突然门铃响了,有快递送来(中断...外部中断有外部中断0 和 外部中断1 对应的中断号分别为 0 和
  • M0内核PLC11C14的中断和其他arm产品的中断不一样,PLC11C14芯片手册上说有32个中断0-31,其中27中断保留,0-11共十二个是静态的中断向量,有外部引脚P0端口的, P0_0到P0_11,一一对应,12中断由P1_0对应。PLC...
  • 单片机中断系统

    2017-10-08 21:38:12
    今天查阅相关资料,基本了解了51单片机中断系统的相关知识 一、51单片机的中断系统规模:5个中断...外部中断0 INT0 (P3.2) 定时/计数器0 T0 (P3.4) 外部中断1 INT1 (P3.3) 定时/计数器1 T1 (P3.5) 串行口 ——
  • 中断中断描述符表

    2020-03-03 20:39:06
    1.中断 外部硬件中断:从处理器外部的中断信号,通过两个信号线...INTEL处理器允许256(0~255)个中断,8259负责提供其中15个,但中断号不固定;8259内部有8位中断屏蔽寄存器(IMR),对应8个中断输入引脚;8259有...
  • IDT,Interrupt Descriptor Table,中断描述符表是CPU用来处理中断...CPU执行中断指令时,会去IDT表中查找对应的中断服务程序(interrupt service routine ,ISR)。ISR(为了表述方便用ISR n表示n中断的处理程序...
  • 中断简介Linux0.11使用Intel i386芯片共有256个中断,表现为中断号0~255.其中前0~31号中断已经由Intel预定义,其余中断号为可编程中断。32~47号分别对应linux16个硬件中断信号(包括时钟、键盘、软盘等)。0x80...
  • STM32 中断实验

    2020-06-17 21:58:28
    STM32支持19个外部中断请求,也即有19根中断线来响应 线 0~15:对应外部 IO 口输入中断。 这16根线每根对应7个IO口,从A~G,号码与线号对应,但每次只能连接到一个IO口上 线 16:连接到 PVD 输出。 补充 PVD = ...
  • 中断和异常

    2013-09-29 09:41:44
    如向量号0对应着IDT表中第一个门描述符。 3、软中断指令“INT n”和“INTO”也归类于异常而不称为中断。(CPU外部的中断,CPU内部叫异常) 异常分为3类:故障&amp; 陷阱 &amp; 中止...
  • 子中断组划分是根据设置它们...上一章节我们分析28个外部中断即第0外部中断与总中断的对应关系是: 总中断号 中断源组 中断源成员描述 对应总中断控制器 0 INT_EINT0 外部中断的EINT0~EINT
  • 外部中断的情况复杂一些,因为需要建立硬件中断与向量之间的对应关系。外部中断分为不可屏蔽中断(NMI)和可屏蔽中断两种,分别由CPU两根引脚NMI和INTR来接收。如下图所示: 可屏蔽中断与CPU关系是通过对可...
  • 51中断函数编写注意事项

    千次阅读 2010-09-25 16:09:00
    51中断函数学习笔记 释疑:void Timer0() interrupt 1 using 1 Timer0 是函数名,随便取  interrupt xx using y   跟在interrupt 后面xx 值得是中断号,就是说这个函数对应第...
  • STM32EXTI小实验

    千次阅读 2015-12-16 15:55:36
     所有GPIO口的0号引脚对应EXTI0中断线,类似的PA1~PG1对应EXTI1中断线。 中断服务函数  中断服务函数名必须与启动文件startup_stm32F10x_hd.s的中断向量表定义一致  中断线0~4对应EXTI0_IRQHan
  • interrupt 1 using 1

    2014-04-07 17:10:00
    释疑:void Timer0() interrupt 1 using 1 Timer0 是函数名,随便取 ...跟在interrupt 后面xx 值得是中断号,就是说这个函数对应第几个中断端口,一般在51中 0 外部中断0 1 定时器0 2 外部中断1 3...
  • HT32F52352学习笔记之三

    千次阅读 2019-01-28 02:07:24
    这个外部中断有15个中断号,即EXTI0-15,还是很多的。初始化过程中需要配置EXTI 来源选择寄存器 0 – ESSR0或是EXTI 来源选择寄存器 1– ESSR1选择中断来源。这个是一一对应的关系,比如选着了GPIOA的引脚4,那么就...
  • interrupt using

    千次阅读 2008-11-21 15:41:00
    interrupt 表示中断优先级,using表示所用工作寄存器组。interrupt x using y 跟在interrupt 后面xx 值得是中断号,就是说这个函数对应第几个中断端口,一般在51中 0 外部中断0 1 定时器0 2 外部中断
  • void timer(void) interrupt x using x

    千次阅读 2011-05-18 16:13:00
    interrupt x using y 跟在interrupt 后面xx 值得是中断号,就是说这个函数对应第几个中断端口,一般在51中 0 外部中断0 1 定时器0 2 外部中断1 3 定时器1 4 串行中断 其它根据相应得单片机有...
  • 一种量程,测量结果通过浮点数运算模块将信号周期转换成对应的频率值,再将 结果送去显示。这样无论采用何种方式,只要完成一次测量即可,频率计自动开 始下一个测量循环,因此该频率计具有连续测量的功能,同时实现量程...
  • ADC809运用及电路

    2010-08-06 20:41:33
    允许外部中断1中断 MOV DPTR, #0FEF8H ;D/A转换器地址 LOOP: MOVX @DPTR, A ;启动A/D转换 HERE: SJMP HERE ;等待中断 中断服务程序: DJZ R2, ADEND   MOVX A, @DPTR ;数据采样 MOVX @R0, A ;存数 INC ...
  • 9. 8086/8088在当前指令执行完且IF=1情况下可以响应一个外部INTR中断请求。( ) 10. 8086被复位后,寄存器Flag、IP、CS内容分别是0000 、0001 、FFFFH。 ( ) 四、汇编程序(共20分) 1. 试分析下面程序段完成...

空空如也

空空如也

1 2 3
收藏数 47
精华内容 18
关键字:

外部中断0对应的中断号