精华内容
下载资源
问答
  • 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 外部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;
    
    }
    展开全文
  • 外部中断01及67,经过调试,可以直接运行。三个程序都在,希望对大家有用。
  • 8051外部中断1解析

    千次阅读 2019-07-23 10:41:21
    程序实现的功能: 在实验板上左下方有一...(外部中断1外部中断0在处理上类似, 红色的部分不同之处) 中断处理程序标号: 外部中断0 -----------> 0 定时器0中断 -----------> 1 外部中断1 -----------&...

    程序实现的功能:

    在实验板上左下方有一个黑色的独立按键(K4), 当我们按下它时, D1(LED灯)的状态就会取反.

    (外部中断1和外部中断0在处理上类似, 红色的部分为不同之处)

    中断处理程序标号:

    外部中断0          ----------->  0

    定时器0中断       ----------->  1

    外部中断1          ----------->   2

    定时器1中断      ----------->   3

    串口中断            ----------->   4

    独立按键电路原理图(K4对应P33):

    程序源代码:

    #include <STC89C5xRC.H>

    void delay()//获得1ms延时
    {
        TH0 = 0xFC;
        TL0 = 0x18;//65536 - 1000 = 64536 = FC18H
        TR0 = 1;//开启定时器0
        while(TF0 == 0);//等待定时器0计数溢出
        TF0 = 0;
        TR0 = 0;//暂停定时器0
    }

    void EX_INT0() interrupt 2//外部中断1处理函数
    {
        delay();//1ms延时消抖
        if(P33 == 0)
        {
            P20 = ~ P20;//D1电平翻转
        }
    }

    int main()
    {
        TMOD = 0x01;//设置定时器0的工作模式
        TR0 = 0;
        TF0 = 0;
        P20 = 0;//开发板上D1亮

        EA = 1;//中断总开关打开
        EX1 = 1;//外部中断1开关打开
        IT1 = 1;//边沿触发
        //IT0 = 0 -> 低电平触发中断,  IT0 = 1 -> 边沿触发中断
        while(1)
        {
            ;
        }
        return 0;
    }

     

    展开全文
  • 用C编程,设置两个外部中断(INT0和INT1)按键,优先级IP=0x04,即把外部中断1设置高级优先级,外部中断0低级优先级,使外部中断1嵌套在外部中断0中。 要求:中断触发方式下降沿触发,按键有消抖功能 仿真 ...

    问题

    用C编程,设置两个外部中断(INT0和INT1)按键,优先级IP=0x04,即把外部中断1设置为高级优先级,外部中断0为低级优先级,使外部中断1嵌套在外部中断0中。
    要求:中断触发方式为下降沿触发,按键有消抖功能

    仿真

    在这里插入图片描述

    代码

    #include <reg51.h>
    #define uchar unsigned char
    
    void delay(uchar c) { //延时c毫秒
    		uchar a, b;
    		for (; c > 0; c--) 
    		for (b = 142; b > 0; b--) 
    		for (a = 2; a > 0; a--);
    }
    
    void INT_0() interrupt 0 { //外部中断0
    		EX0=0; //关闭外部中断0,防止在执行过程中再次发生中断
    		delay(20); //消除抖动
    		EX0=1; //打开外部中断0
    		while(1) { //led向下循环点亮,表示正在执行外部中断0服务程序
    				P1 = 0xfe; delay(200);
    				P1 = 0xfd; delay(200);
    				P1 = 0xfb; delay(200);
    				P1 = 0xf7; delay(200);
    				P1 = 0xef; delay(200);
    				P1 = 0xdf; delay(200);
    				P1 = 0xbf; delay(200);
    				P1 = 0x7f; delay(200);
    		}
    }
    
    void INT_1() interrupt 2 { //ÍⲿÖжÏ1
    		EX1=0;
    		delay(20);
    		EX1=1; 
    		P1 = 0x00; delay(200); //led全部点亮,闪烁3次,表示正在执行外部中1服务程序
    		P1 = 0xFF; delay(200);
    		P1 = 0x00; delay(200);
    		P1 = 0xFF; delay(200);
    		P1 = 0x00; delay(200);
    }
    
    void main() {
    		P1 = 0xFF;
    		EA = 1;  //打开总中断
    		EX0 = 1; //打开外部中断0
    		IP = 0x04; //设置外部中断1为高级优先级
    		IT0 = 1; //设置触发方式为下降沿触发
    		EX1 = 1; //打开外部中断1
    		IT1 = 1; 
    		while(1);//死循环
    }
    
    展开全文
  • 外部中断

    千次阅读 2020-03-01 17:28:35
    文章目录一.外部中断输入引脚二....外部中断1(INT1):P3.3口的附加功能 当引脚上出现有效的中断信号时,就有中断标志置1,向CPU申请中断。 二.外部中断相关寄存器 1.中断允许寄存器(IE) EA:CPU开启中断...
  • 外部中断0和外部中断1

    千次阅读 2016-03-11 23:01:56
    源程序: #include #define LED P1 void delay(int x);...void light1(int x); void main() {  IE=0x85;  IP=0x04;  TCON=0x05;  LED=0xff;  while(1)  {   delay(500);  LED=~LED;  } } void
  • 题目:通过外部中断0,触发一个延时过程,假定延时时间为1秒,延时期间可以点亮一个LED或让蜂鸣器发出声音。已知单片机晶振频率6 .00MHz。 提示:可以使用定时器中断,也可以不使用定时器中断。如果使用定时器中断...
  • Arduino 定时器中断 外部中断

    万次阅读 多人点赞 2019-04-09 17:29:31
    但如果此时发生了某一件事件B请求CPU迅速去处理(中断发生),CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务),待CPU将事件B处理完毕后,再回到原来被中断的地方继续执行程序(中断返回),这一过程成...
  • 外部中断EXTI

    千次阅读 2016-09-12 16:50:15
    前置技能: 按键输入-GPIO输入一,STM32中断介绍相比简单的51单片机,STM32的每个IO口都可以作为外部中断输入STM32中断控制器支持19个外部中断/事件请求: 线0-15:外部IO口输入中断 线16:连接到PVD输出 线17:连接到...
  • stm32f103基于正点原子待机唤起实验写的停机唤起实验。 按键KEY0(PB0)按下,触发中断,进入停机模式;按键KEY1(PB1)按下,触发外部中断,从停机模式唤醒;
  • 外部中断和定时器中断

    万次阅读 多人点赞 2018-11-20 13:53:27
    8.外部中断实现代码 9.定时器/计数器中断工作原理 10.定时器/计数器定时值的计算 11.定时器/计数器实现代码 1.什么是中断 中断就是指CPU正在执行一项任务A,然后突然停止任务A去执行任务B,执行完任务B再回来...
  • DSP时钟 gpio 外部中断 定时器中断 DSP时钟 gpio 外部中断 定时器中断
  • 外部中断实例,在STM32的IAR开发环境下的外部中断实例
  • 重要声明: 以下代码有粘贴 截取他人劳动成果的成分 如有...它能使CPU在运行过程中对外部事件发出的中断请求及时地进行处理,处理完成后又立即返回断点,继续进行CPU原来的工作。引起中断的原因或者说发出中断请求的
  • 程序功能外部8个高电平有效的中断触发源共用外部中断0作为中断触发端口,通过P2口查询中断,进入相应的中断服务程序,根据中断查询结果对有效的中断请求进行处理,优先顺序P2.0~P2.7联接的相应中断源。
  • 一.外部中断 STM32F4的每个IO都可以作为外部中断的中断输入口,这点也是STM32F4...STM32F407的22个外部中断为: EXTI线0~15:对应外部IO口的输入中断。 EXTI线16:连接到PVD输出。 EXTI线17:连接到RTC闹钟事件。
  • 单片机外部中断—中断嵌套

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

    千次阅读 2015-12-14 11:45:50
    1、什么是外部中断 外部中断即通过外部电平或上下降沿触发所产生的中断 2、寄存器介绍 ...IT为外部中断触发方式选择寄存器,1为边沿触发,0为电平触发; 3、程序设计 使用外部中断零设计电路,使单片机
  • UCOSIII系统下按键外部中断和串口2中断管理,按键按下改变LED灯状态,串口2将接收到的数据发送出去。
  • 51单片机外部中断例程 51单片机外部中断例程 51单片机外部中断例程 51单片机外部中断例 51单片机外部中断例程程
  • 51单片机外部中断

    千次阅读 2014-10-02 14:54:32
    其中外部中断分别是INT0与INT1,关联IO口P3.2 P3.3 使用这两个中断的步骤如下 1. 配置中断类型 IT-X 为1代表对应IO口下降沿中断0代表对应IO口低电平中断 注意低电平中断进入之后如果IO口不取消低电平,...
  • 中断学习之外部中断,多个外部中断的使用
  • DSP28335外部中断配置过程

    千次阅读 2019-04-15 21:59:24
    7个可屏蔽中断源和1个不可屏蔽外部中断源 GPIO0-31可选的中断源XINT1(可屏蔽中断),XINT2和XNMI(不可屏蔽中断) GPIO32-GPIO63可选的中断源XINT3-7 外部中断的触发方式可选上升沿或下降沿触发 **外部中断外设和...
  • 单片机外部中断方式精确测频率,误差1HZ
  • CC2530外部中断

    千次阅读 2015-12-16 21:34:27
    Zigbeee 单片机 外部中断 操作
  • STM32外部中断

    千次阅读 2014-05-23 09:44:34
    STM32 外部中断配置 STM32 外部中断1配置中断 1、 分配中断向量表: /* Set the Vector Table base location at 0x20000000 */ NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); 2、 设置中断优先级: ...
  • 我用stm32外接了一个imu模组,imu每产生一个数据就会通过int管脚给32一个外部中断信号(200hz),但测试发现stm32会不断地进入中断函数,一秒钟进入上万次的那种,后来才发现原来是电平不匹配导致的,stm32电压3.3V...
  • 外部中断和内部中断

    千次阅读 2014-12-18 15:07:50
    外部中断是指外部有中断源时执行相应的中断程序,主要是指INT0,INT1,通讯中断;内部中断主要是指定时器/计数器中断,装栈溢出后置位相关特殊寄存器来执行中断; 举一个例子,外部中断:你在吃饭,这时候电话响了,你...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 182,012
精华内容 72,804
关键字:

外部中断1的中断号为