精华内容
下载资源
问答
  • 外部中断

    2020-11-20 12:41:42
    文章目录外部中断硬件控制外部中断矢量外部中断控制寄存器外部中断控制位软件控制外部中断0初始化方法外部中断1初始化方法外部中断程序框架示例P3.2口脉冲输入计数 硬件控制 外部中断矢量 中断源名称 中断源地址...

    外部中断

    硬件控制

    外部中断矢量

    中断源名称 中断源地址RAM 中断矢量ROM
    INT0 P3.2 (0B2H) 0003H
    INT1 P3.3 (0B3H) 0013H

    外部中断控制寄存器

    地址 A8H AFH AAH A8H
    名称 IE EA EX1 EX0
    地址 B8H BAH B8H
    名称 IP PX1 PX0
    地址 88H 8BH 8AH 89H 88H
    名称 TCON IE1 IT1 IE0 IT0

    外部中断控制位

    位地址 名称 作用
    AFH EA 总中断允许位。EA=1,开中总中断。即允许cpu中断。
    88H IT0 外部中断0触发方式选择位。IT0=1,电平触发,IT0=0,下降沿触发
    8AH IT1 外部中断1触发方式选择位。IT1=1,电平触发,IT1=0,下降沿触发
    89H IE0 外部中断0中断请求标志位。由中断源置1,在cpu处理中断后自动清零。
    8BH IE1 外部中断1中断请求标志位。由中断源置1,在cpu处理中断后自动清零。
    A8H EX0 外部中断0允许位。EX0=1,开中断,即允许cpu处理外部中断0
    AAH EX1 外部中断1允许位。EX1=1,开中断,即允许cpu处理外部中断1
    B8H PX0 外部中断0优先级选择位,PX0=1,高优先级。
    BAH PX1 外部中断1优先级选择位,PX1=1,高优先级。

    软件控制

    外部中断0初始化方法

    ; 外部中断0初始化程序
    ;谨慎使用低电平触发方式,cpu清零IE失效,IE只由中断源电平决定。
    ; 低优先级电平触发方式
    INT0initb:	;操作控制位
    SETB EA	
    SETB EX0
    RET
    
    INT0init:	;操作字节
    ORL IE, #81H
    RET
    
    ; 低优先级电平触发方式单开
    INT0inits:	;single open 单开
    MOV IE, #81H
    RET
    
    ; 高优先级电平触发方式
    INT0initp:	;p 高优先级
    ;SETB EA
    ;SETB EX0
    ;SETB PX0
    ORL IE, #81H
    ORL IP, #01H
    RET
    
    ; 高优先级电平触发方式单开
    INT0initps:	;single open 单开
    MOV IE, #81H
    MOV IP, #01H
    RET
    
    ; 低优先级下降沿触发方式
    INT0initf:	   ; PLF 下降沿 failling edge
    ;SETB EA
    ;SETB EX0
    ;SETB IT0
    ORL IE, #81H
    ORL TCON, #01H
    RET
    
    ; 低优先级下降沿触发方式单开
    INT0initfs:	;single open 单开
    MOV IE, #81H
    MOV TCON, #01H
    RET
    
    ; 高优先级下降沿触发方式
    INT0initpf:	;p 高优先级
    ;SETB EA
    ;SETB EX0
    ;SETB PX0
    ;SETB IT0
    ORL IE, #81H
    ORL IP, #01H
    ORL TCON, #01H
    RET
    
    ; 高优先级下降沿触发方式单开
    INT0initpfs:	;single open 单开
    MOV IE, #81H
    MOV IP, #01H
    MOV TCON, #01H
    RET
    

    外部中断1初始化方法

    ; 外部中断1初始化程序
    ; 低优先级电平触发方式
    INT1init:
    ;SETB EA
    ;SETB EX1
    ORL IE, #84H
    RET
    
    ; 低优先级电平触发方式单开
    INT1inits:	;single open 单开
    MOV IE, #84H
    RET
    
    ; 高优先级电平触发方式
    INT1initp:	;p 高优先级
    ;SETB EA
    ;SETB EX1
    ;SETB PX1
    ORL IE, #84H
    ORL IP, #04H
    RET
    
    ; 高优先级电平触发方式单开
    INT1initps:	;single open 单开
    MOV IE, #84H
    MOV IP, #04H
    RET
    
    ; 低优先级下降沿触发方式
    INT0initf:	   ; PLF 下降沿 failling edge
    ;SETB EA
    ;SETB EX1
    ;SETB IT1
    ORL IE, #84H
    ORL TCON, #04H
    RET
    
    ; 低优先级下降沿触发方式单开
    INT0initfs:	;single open 单开
    MOV IE, #84H
    MOV TCON, #04H
    RET
    
    ; 高优先级下降沿触发方式
    INT0initpf:	;p 高优先级
    ;SETB EA
    ;SETB EX1
    ;SETB PX1
    ;SETB IT1
    ORL IE, #84H
    ORL IP, #04H
    ORL TCON, #04H
    RET
    
    ; 高优先级下降沿触发方式单开
    INT0initpfs:	;single open 单开
    MOV IE, #84H
    MOV IP, #04H
    MOV TCON, #04H
    RET
    

    外部中断程序框架

    ;外部中断0入口地址
    ORG 0003H
    LJMP INT0PRO	;中断跳转使用LJMP
    
    ;外部中断1入口地址
    ORG 0013H
    LJMP INT1PRO	;中断跳转使用LJMP
    
    
    ;外部中断0程序
    INT0PRO:
    CLR EA	   ;保护现场
    PUSH ACC
    PUSH 02H  ; 保护R2
    PUSH PSW
    ;...
    SETB EA
    
    ;...		;中断程序
    
    CLR EA		;恢复现场
    ;...
    POP PSW
    POP 02H
    POP ACC
    SETB EA
    RETI			;中断返回使用RETI
    
    ;外部中断0调用子程序
    INT0PROs:		; subroutine 子程序
    CLR EA	   ;保护现场
    PUSH ACC
    PUSH 02H  ; 保护R2
    PUSH PSW
    ;...
    SETB EA
    
    LCALL SRT0		;调用子程序
    
    CLR EA		;恢复现场
    ;...
    POP PSW
    POP 02H
    POP ACC
    SETB EA
    RETI			;中断返回使用RETI
    
    SRT0:
    
    
    ;外部中断1程序
    INT1PRO:
    CLR EA	   ;保护现场
    PUSH ACC
    PUSH 02H  ; 保护R2
    PUSH PSW
    ;...
    SETB EA
    
    ;...		;中断程序
    
    CLR EA		;恢复现场
    ;...
    POP PSW
    POP 02H
    POP ACC
    SETB EA
    RETI			;中断返回使用RETI
    
    ;外部中断1调用子程序
    INT1PROs:		; subroutine 子程序
    CLR EA	   ;保护现场
    PUSH ACC
    PUSH 02H  ; 保护R2
    PUSH PSW
    ;...
    SETB EA
    
    LCALL SRT1		;调用子程序
    
    CLR EA		;恢复现场
    ;...
    POP PSW
    POP 02H
    POP ACC
    SETB EA
    RETI			;中断返回使用RETI
    
    SRT1:
    

    示例

    P3.2口脉冲输入计数

    ORG 0000H
    LCALL MAIN
    
    ;外部中断0入口地址
    ORG 0003H
    LJMP INT0PROs	;中断跳转使用LJMP
    
    MAIN:
    MOV R2, #0H		   ;R2 计数
    LCALL INT0initf
    MOV A, #14H		   ;用A和C演示保护、恢复现场
    SETB C			 
    SJMP $
    
    ; 初始化:低优先级下降沿触发方式
    INT0initf:	   ; PLF 下降沿 failling edge
    ;SETB EA
    ;SETB EX0
    ;SETB IT0
    ORL IE, #81H
    ORL TCON, #01H
    RET
    
    ;外部中断0
    INT0PROs:		; subroutine 子程序
    CLR EA	   ;保护现场
    PUSH ACC
    PUSH PSW
    SETB EA
    
    LCALL SRT0		;调用中断子程序
    
    CLR EA		;恢复现场
    POP PSW
    POP ACC
    SETB EA
    RETI
    
    ;中断程序
    SRT0:
    INC R2			;R2计算脉冲数目
    CLR C			;中断程序中修改A、C
    MOV A, #0H
    RET
    
    END
    
    展开全文
  • 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中断允...

    51单片机的中断系统结构

    中断允许控制

    CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制的。

    EX0(IE.0),外部中断0允许位;

    ET0(IE.1),定时/计数器T0中断允许位;

    EX1(IE.2),外部中断0允许位;

    ET1(IE.3),定时/计数器T1中断允许位;

    ES(IE.4),串行口中断允许位;

    EA (IE.7), CPU中断允许(总允许)位。

    中断请求标志

    1、TCON的中断标志

    IT0(TCON.0),外部中断0触发方式控制位。

            当IT0=0时,为电平触发方式。

            当IT0=1时,为边沿触发方式(下降沿有效)。

    IE0(TCON.1),外部中断0中断请求标志位。

    IT1(TCON.2),外部中断1触发方式控制位。

    IE1(TCON.3),外部中断1中断请求标志位。

    TF0(TCON.5),定时/计数器T0溢出中断请求标志位。

    TF1(TCON.7),定时/计数器T1溢出中断请求标志位。      

     

    中断源

     

    中断响应条件

     中断源有中断请求;

    n此中断源的中断允许位为1;

     CPU开中断(即EA=1)。

    以上三条同时满足时,CPU才有可能响应中断

     

     

     

    
    #include "reg51.h"   
    #include "intrins.h"
    typedef unsigned char u8;
    typedef unsigned int u16;
    
    
    sbit k1=P3^3;	 
    sbit led=P2^0;	
    void delay(u16 i)
    {
    	while (i--);
    } 
    
    //外部中断0条件
    void Int0Init()
    {
    	IT0 = 1;	//设置外部中断的触发方式为下降沿触发。
    	EX0 = 1;	//开启外部中断0
    	EA = 1;		//中断总开关
    }
    
    //外部中断1条件
    void Int1Init()
    {
    	IT1 = 1;	//设置外部中断1的触发方式为下降沿触发。
    	EX1 = 1;	//开启外部中断1
    	EA = 1;		//中断总开关
    }
    
    void main()
    {
    	Int1Init();
    	while(1);
    }
    void Int0()	   interrupt 0
    {
    	  delay(1000);
    	  if(k1 == 0)
    	  {
    	  	led= ~led;
    	  }
    }
    
    void Int1()	   interrupt 2
    {
    	  delay(1000);
    	  if(k1 == 0)
    	  {
    	  	led= ~led;
    	  }
    }
    

     

    proteus 8 电路原理图,k3接p32,k4接p33。p32默认高电平,按下k3后,电平拉低,产生下降沿,触发中断0。同样k4按下,触发为中断1。

     

    #include "reg51.h"   
    #include "intrins.h"
    typedef unsigned char u8;
    typedef unsigned int u16;
    
    sbit k3=P3^2;
    sbit k4=P3^3;	 
    sbit led=P2^0;	
    void delay(u16 i)
    {
    	while (i--);
    } 
    
    //外部中断0条件
    void Int0Init()
    {
    	IT0 = 1;	//设置外部中断的触发方式为下降沿触发。
    	EX0 = 1;	//开启外部中断0
    	EA = 1;		//中断总开关
    }
    
    //外部中断1条件
    void Int1Init()
    {
    	IT1 = 1;	//设置外部中断1的触发方式为下降沿触发。
    	EX1 = 1;	//开启外部中断1
    	EA = 1;		//中断总开关
    }
    
    void main()
    {
    	Int0Init();
    	while(1);
    }
    void Int0()	   interrupt 0
    {
    	  delay(1000);
    	  if(k3 == 0)
    	  {
    	  	led= ~led;
    	  }
    }
    
    void Int1()	   interrupt 2
    {
    	  delay(1000);
    	  if(k4 == 0)
    	  {
    	  	led= ~led;
    	  }
    }

     

    展开全文
  • 设置中断优先级寄存器,当有外部中断0请求中断时,中断程序执行发光二极管程序,在此过程中,外部中断1也有中断请求,外部中断0的中断程序将被中断去执行外部中断1的中断程序(数码管加1显示程序)。 #include<...

    设置中断优先级寄存器,当有外部中断0请求中断时,中断程序执行发光二极管程序,在此过程中,外部中断1也有中断请求,外部中断0的中断程序将被中断去执行外部中断1的中断程序(数码管加1显示程序)。

    #include<reg51.h>
    #define uchar unsigned char;
    sbit key1=P3^2;
    sbit key2=P3^3;
    unsigned int i;
    uchar led[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
    uchar tube[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

    void delay1s(unsigned char time)
    {
    unsigned int i,j,k;
    for(i=0;i<time;i++)
    for(j=0;j<1000;j++)
    for(k=0;k<144;k++);
    }

    int main(void)
    {
    IT0=1;
    IT1=1;
    EA=1;
    EX0=1;
    EX1=1;
    PX0=1;
    PX1=0;
    while(1);
    }
    void int1(void) interrupt 0
    {
    while(!key1);
    for(i=0;i<10;i++)
    {
    P1=0x00;
    P2=tube[i];
    delay1s(1);
    }
    }
    void int2(void) interrupt 2
    {
    while(!key2);
    for(i=0;i<8;i++)
    {

    	P0=led[i];
    	delay1s(1);
    }
    

    }
    视频:
    https://www.bilibili.com/video/BV1jK411u7JH/

    展开全文
  • 外部中断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;
    
    }
    展开全文
  • DSP 外部中断

    2017-06-01 09:03:47
    DSP 外部中断
  • DSP时钟 gpio 外部中断 定时器中断 DSP时钟 gpio 外部中断 定时器中断
  • 用C编程,设置两个外部中断(INT0和INT1)按键,优先级IP=0x04,即把外部中断1设置为高级优先级,外部中断0为低级优先级,使外部中断1嵌套在外部中断0中。 要求:中断触发方式为下降沿触发,按键有消抖功能 仿真 ...
  • 利用外部中断来实现按键控制LED灯的亮灭。 实验工具:MDK5,STM32F103ZET6开发板 使用固件库编程 LED灯引脚PD13,按键PE0 首先了解一下32的外部中断 STM32 的每个 IO 都可以作为外部中断的中断输入口,STM32F103 的...
  • stm32f103基于正点原子待机唤起实验写的停机唤起实验。 按键KEY0(PB0)按下,触发中断,进入停机模式;按键KEY1(PB1)按下,触发外部中断,从停机模式唤醒;
  • STM32系统学习——EXTI(外部中断

    万次阅读 多人点赞 2018-05-11 14:12:11
    EXTI(External interrupt/event controller)—外部中断/事件控制器,管理了控制器的 20个中断/事件线。每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的检测。EXTI 可以实现对每个...
  • 外部中断和定时器中断

    万次阅读 多人点赞 2018-11-20 13:53:27
    8.外部中断实现代码 9.定时器/计数器中断工作原理 10.定时器/计数器定时值的计算 11.定时器/计数器实现代码 1.什么是中断 中断就是指CPU正在执行一项任务A,然后突然停止任务A去执行任务B,执行完任务B再回来...
  • stm32外部中断

    2021-04-05 20:58:25
    stm32外部中断外部中断叙述外部中断框图外部中断通用IO口的映射关系IO口外部中断在中断向量表STM32 NVIC 中断优先级管理NVIC中断优先级分组中断管理方法抢占优先级和响应优先级的区别中断优先级函数中断优先级设置...
  • (1)上升沿触发外部中断 (2)下降沿触发外部中断 (3)边沿触发外部中断 (4)上升沿触发外部事件 (5)下降沿触发外部事件 (6)边沿触发外部事件 2.CubeMX生成的代码: /** Configure pins as * EXTI */ void ...
  • 外部中断实验

    2020-12-06 15:54:37
    外部中断概述 1、 STM32的每个IO都可以作为外部中断输入。 2、 STM32的中断控制器支持19个外部中断/事件请求: 线0~15:对应外部IO口的输入中断。 线16:连接到PVD输出。 线17:连接到RTC闹钟事件。 线18:连接到...
  • STM32外部中断详解

    2020-08-11 07:53:36
    ARM Coetex-M3内核共支持256个中断,其中16个内部中断,240个外部中断和可编程的256级中断优先级的设置。STM32目前支持的中断共84个(16个内部+68个外部),还有16级可编程的中断优先级的设置,仅使用中断优先级设置...
  • 外部中断0 > 定时/计数器0 > 外部中断1 > 定时/计数器1 > 串行中断; 但这种优先级只是逻辑上的优先级,当同时有几种中断到达时,高优先级中断会先得到服务。这种优先级实际上是中断同时到达的情况下,谁先得到服务...
  • S3C6410外部中断 中断在嵌入式里面是很常见的一个功能了。通过这个功能,可以让CPU减轻很多负担,不用不断的查询设备的状态。提高了CPU的效率。 中断的过程如下:   中断源检测中断信号产生,然后将中断信号发送给...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,197
精华内容 4,478
关键字:

外部中断