精华内容
下载资源
问答
  • 一、实验目的 熟悉金属探测器的原理; 外部中断的使用; OLED屏幕的使用; 二、器材 stc8a8k自制核心板; 金属接近传感器;...图中,这个传感器的电源是10-30V,但是经过...用下降沿触发外部中断P32,当开启了下降沿触发

    一、实验目的
    熟悉金属探测器的原理;
    外部中断的使用;
    OLED屏幕的使用;
    二、器材
    stc8a8k自制核心板;
    金属接近传感器;
    OLED屏幕;
    三、原理
    金属接近传感器,用的是这种。也可以买其他的,原理差不多
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    图中,这个传感器的电源是10-30V,但是经过测试,5V也能用,不过检测距离等有所变小。、 注意,应该把金属应该在这个圆形的下方。这个是感觉的地方。

    当没有金属在下面,那么就是5V,当有金属在下面,就是0.5V,从5v—0.5v,发生下降沿。用下降沿触发外部中断P32,当开启了下降沿触发模式,P32引脚接收到下降沿信号,那么在中断服务函数里面,进行相关设置。

    在这里插入图片描述

    代码:

    #include <stc8a8k.h>
    #include <oled.h>
    unsigned char metalflag=0;
    void delay1ms(unsigned int tms)		//@11.0592MHz
    {
    	unsigned char i, j;
    	unsigned int k;
      for(k=tms;k>0;k--)
    	{	
    		i = 15;
    		j = 90;
    		do
    		{
    			while (--j);
    		} while (--i);
    	}
    }
    //P32中断0的中断服务函数
    void INT0_Isr() interrupt 0 using 1
    {
        metalflag=1;           //将标记位置1,主程序查询这个变量是不是变化
    }
    void main()
    {
       IT0 = 1;               //使能INT0下降沿中断
       EX0 = 1;                //使能INT0中断
       EA = 1;
    	 OLED_Init();
    	 OLED_ShowString(0,0,"oou");	
    	 while (1)
    	 {
    			if(metalflag==1)
    			{
    				 EX0 = 0;    
     //检测到,就关闭中断,进行设置,不然可能会不断进入中断 
    				 OLED_ShowString(0,0,"yyw");	
    //显示,蜂鸣器,LED灯亮灭亮灭,执行对应动作;
    				 delay1ms(5000);
    				 EX0 = 1;  //用完,就打开中断,给下次检测用
    				 metalflag=0;//给下次检测用
    			}
    			else 
    				 OLED_ShowString(0,0,"oou");	
    		}
    }
    
    展开全文
  • 51单片机基础例程
  • 外部中断可以分为电平触发和边缘触发两种,那么这两种中断有什么区别,我们今天讲解下 1什么是中断 CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生); CPU暂时中断当前的工作,转去处理...

    外部中断可以分为电平触发和边缘触发两种,那么这两种中断有什么区别,我们今天讲解下

    1什么是中断

    CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生);
    CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务);
    待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断。

    通俗点说:你正在家里做家务,突然有人来找你,打断了你的进程,在你们交谈完之后,你就又回去继续进行你的家务活,这其中被打断的过程,就叫做中断,而在中断结束之后,你则会继续进行本来应该做的事情

     

    高低电平触发:

     

    低电平触发:

    低电平触发中断顾名思义,就是检测到引脚为低电平就触发,从而进入中断函数中处理这个中断,并且在高或低电平保持的时间内持续触发,假设是低电平触发,只要引脚为低电平时间内中断一直有效,那么就会一直进入中断,直到电平变化为高电平

    高电平触发:

    则是 检测为高电平就触发,其余与低电平触发相同

    注意事项:

    1.电平触发中断,如果在电平没有恢复之前就退出中断程序,那么会在退出后又再次进入中断。只要不退出是不会重复触发的。

    也就是重复触发只有在退出中断后才会再次触发,不用担心这次还没进行完,中断已经重新触发的情况

    2.低电平触发是即时的,当外部中断信号撤消时,中断申请信号随之消失。如果在外部中断信号申请期间,CPU来不及响应此中断,那么有可能这次中断申请就漏掉了。也就是说假设低/高电平的时间很短。CPU没来得及相应,那么这次的电平中断申请就可能不会检测到

    3.如果想要电平触发中断也只进行一次,通常的做法是在中断退出前关闭中断,等后面需要的时候再打开

    边沿触发:

    这里要先了解下:

    从低电平到高电平,  叫做上升
    从高电平到低电平, 叫做下降

    ·上升沿触发

    数字电平从低电平(数字“0”)变为高电平(数字“1”)的那一瞬间叫作上升沿。 上升沿触发是当信号有上升沿时的开关动作,当电位由低变高而触发输出变化的就叫上升沿触发。也就是当测到的信号电位是从低到高也就是上升时就触发,叫做上升沿触发。

    ·下降沿触发

    数字电路中,数字电平从高电平(数字“1”)变为低电平(数字“0”)的那一瞬间叫作下降沿。 [1]  下降沿触发是当信号有下降沿时的开关动作,当电位由高变低而触发输出变化的就叫下降沿触发。也就是当测到的信号电位是从高到低也就是下降时就触发,叫做下降沿触发。

    那么我们可以很好的理解两种触发:

    上升沿触发 就是当电压从低变高时触发中断
    下降沿触发 就是当电压从高变低时触发中断

     

    当然,上升沿与下降沿检测的是电平变化的一瞬间,就会产生中断,这个时间是us级别的,但是如果中断引脚检测到一直保持低/高电平,则无法产生下次中断,也就是中断只会触发一次,只有在下次电平发生变化时才会重新触发中断

    注意事项:

    1 边沿触发就是单片机在上一次机器周期内,检测到中断引脚口为高电平,这一次机器周期内检测到为低电平,则会申请产生中断,所以为us级别

    2 下降沿触发是锁存中断信号的,由D触发器记忆,意即:即使当时CPU来不及响应中断,外部中断信号撤消后,由于D触发器的记忆作用,消失的中断信号仍然有效,直到中断被响应并进入中断ISR,记忆的中断信号才会由硬件清除。 这也是为什么边沿触发只能触发一次的原因

    3.对于单片机的中断引脚,如果你另一端接的是VCC 则需要设置成上升沿或者高电平触发 如果你接的是GND 就可以设置成下降沿或者低电平触发

    区别:

    我们可以理解,电平触发在你一直按着按键的时候会一直进入中断,边沿触发则是只会触发一次,再次按下才会重新触发,这就给我们不同的应用功能提供了选择,使得我们可以在不同个工作下选择适合的模式,边沿触发适用于对对时间要求高的,比如中断中有计数之类的(GATE门控位置1时),而电平触发则适合报警装置,

     

    51单片机的具体讲解与实现:

    在51中,为了方便区分两种方式,用IT0/IT1,将低电平触发和下降沿触发这两种方式转化成对应的信号:IT0/IT1的高电平和低电平

    ,IT0/IT1高电平则为下降沿触发,IT0/IT1低电平则为低电平触发

      IT0=1;//跳变沿出发方式(下降沿)

      IT0=0;//电平触发

    而在有中断触发之后,是否允许进行该中断,则对应的转换为 EX0 EX1的高低电平来实现  

    EX0 EX1为高电平则允许中断,EX0 EX1为低电平则不允许中断

      EX1=1;//打开INT1的中断允许

      EX1=0;//关闭INT1的中断允许

    而我们的外部中断,定时器中断,串口中断,等等,都只是中断的一个分支,在打开分支之后,相对应的要打开“总闸” EA

    EA的作用相当于一个”总闸“,而EX0 EX1只是支线上的一个开关 ,再打开分支开关之后,需要打开总开关,才能够进行中断

    简单来说 ,EA等于告诉单片机是否可以进行中断这个操作,而EX0 EX1等于是否允许外部触发中断进行, 

    EA=1;//打开总中断  

    EA=0;//关闭总中断  

    在允许中断操作进行之后,如果有好几个中断应该怎么怎么办呢,如果谁也不服谁,都抢着说我先,那么MCU估计没两天就罢工告竭了,这时候便需要设置中断优先级,告诉每个中断谁应该先,谁应该后,大家礼尚往来,系统才能正常工作  当然在51中有着一个默认的优先级,依次是:外中断0,定时器0,外中断1,定时器1,串口   有多个中断时,会先进行前面的中断

    void函数名()    interrupt 2 using 工作组        //外部中断1的中断函数 

    {

      //吧啦吧啦代码

    }

    interrupt后面跟的数字代表使用哪一个中断通道,
    0 外部中断0 
    1 定时器0 
    2 外部中断1 
    3 定时器1 
    4 串行中断

    工作组一般不用设置,在程序编译时会自动分配

    这样子外部触发中断的配置就配置好了,其他的中断配置和它都是类似的,同学们学会这个51的中断基本就可以举一反三,有一个更好的认识

    低电平触发:

    在51中:低电平触发是当管脚INTO/INT1(P3.2/P3,3)为低电平时,被单片机检测到后,就认为有中断请求,EX0/EX1置高电平,向CPU发出中断请求;则进入中断

    下降沿触发:

    边沿触发就是当管脚INTO/INT1有由高电平变低电平的过程时,就认为有中断请求,EX0/EX1置高电平,向CPU发出中断请求,进入中断。

     

     

                                                                 

    展开全文
  • 51单片机基础例程
  • 外部中断之上升沿触发程序

    千次阅读 2012-11-28 17:04:04
    由于外部中断只有下降沿触发,因此我想通过一个三极管来实现上升沿触发。这个是可以的,但是还有一个问题,每次一上电就会产生一个上升沿,造成误动作。因此用的时候要特别注意!!!!!!!!!!!!!! #...

                   由于外部中断只有下降沿触发,因此我想通过一个三极管来实现上升沿触发。这个是可以的,但是还有一个问题,每次一上电就会产生一个上升沿,造成误动作。因此用的时候要特别注意!!!!!!!!!!!!!!

    #include<reg52.h>
    #define uchar unsigned char
    #define uint unsigned int

    sbit kz=P1^0;
    sbit key=P1^1;
    sbit led1=P1^4;
    sbit led2=P1^5;

    void delay(uint x)
    {
     uint i;
     uchar j;
     for(i=0;i<x;i++)
      for(j=0;j<110;j++);
    }

    void INT_init (void){
     EA = 1; //中断总开关
     //EX1 = 1; //允许外部中断1中断   
     EX0 = 1; //允许外部中断0中断
     //IT1 = 1; //1:下沿触发  0:低电平触发
     IT0 = 1; //1:下沿触发  0:低电平触发
    }


    void main()
    {
     INT_init ();
     while(1)
     {
      if(key==0)
      {
       delay(10) ;
       if(key==0)
       {
        led2=0;
        while(!key);
        delay(50);
        kz=0;
        kz=1;
       }
      }
     }
    }

    void INT_0 (void) interrupt 0  using 2
    {
     led2=1;
     P2=0x55;
     delay(500);
     P2=0xaa;
     delay(500);
     P2=0x55;
     delay(500);
     P2=0xaa;
     delay(500);
     


     


    展开全文
  • STC15单片机外部中断上升沿触发的解决办法

    STC15系列单片机的外部中断0(INT0)和外部中断1(INT1)的触发有两种方式,上升沿和下降沿均可触发方式和仅下降沿触发方式。在实际应用中,有时候需要上升沿触发。这时有两种方案可以解决。
    1.将触发方式设置成仅下降沿触发。当外部电路产生一个上升沿时,通过硬件电路加一个三极管进行反向变成下降沿。
    2.这种方法不需要改变硬件电路。将触发方式设置成上升沿和下降沿均可触发方式。外部中断产生一个上升沿时,进入中断服务函数,这时在中断服务函数里做进一步处理,检测当前INT0的电平状态。如果是高电平,则判断为上升沿。如果是低电平,则判断为是下降沿。
    注意(很重要!): 进入中断服务函数后,一定要延时几个毫秒再去做电平检测。因为不管是上升沿还是下降沿,都不可能是在一个瞬间完成的,中间会经历一个从高(低)到低(高)的过程。
    如果进入中断服务函数就立刻检测,可能当时电平还没有达到满足高或低电平的默认电压值或者处于高和低之间的临界电压状态,很可能出现误判的现象。这样做的目的是让跳变后的电平达到稳定状态再检测,说白了就是一个去抖动的过程。
    下面把初始化和中断服务函数的代码贴出来:

    void Initial_INT0(void)
    {
            INT0=0;
            IT0=0;      // 设置成上升沿和下降沿均触发
            EX0=1;      //使能INT0中断
            EA=0;
    }
    
    void exint0() interrupt 0  //外部中断入口
    {
            delay_ms(50);       //延时消抖
            if(INT0==1)     //如果检测到INT0=1,则判断为上升沿
            {
                    led=0;
                    delay_ms(500);
                    led=1;
            }                                 
            else
                led=1;
    }

    在实际做东西的过程中遇到的一个小问题,希望对你有帮助。

    展开全文
  • 问题 用C编程,使外部中断每发生一...要求:中断触发方式为下降沿触发方式,按键有消除抖动功能。 代码 #include &lt;reg51.h&gt; #define uint unsigned int #define uchar unsigned char uchar code tabl...
  • 如果是下降沿触发,当从高至低电平转变时,触发产生;低电平保持多久都只产生一次。所以,边沿触发适合与以负脉冲形式输入的外部中断请求。  如果是低电平触发,那么在低电平时间内中断一直有效;因此如果在电平...
  • 问题:引脚设置为外部中断上升沿触发,中断触发了,但都debug读不到io口电平的变化 1、初始化gpio引脚 void GPIO_Init(void) {  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;  GPIO_InitStructure.GPIO_Mode...
  • 1.中断有电平和边沿两种,电平就是某种电平(高或者低电平)时触发中断,边沿触发市指从高电平向低电平,或者低电平到高电平跳变时触发 2.如果串口先后接收到4个char型数据,分别设a,b,c,d,则转换int型...
  • 如果是下降沿触发,当从高至低电平转变时,触发产生;低电平保持多久都只产生一次。所以,边沿触发适合与以负脉冲形式输入的外部中断请求。  如果是低电平触发,那么在低电平时间内中断一直有效;因此如果在电平...
  • 下降沿触发与电平触发的区别

    千次阅读 2015-04-20 12:20:50
    下降沿触发是锁存中断信号的,由D触发器记忆,意即:即使当时CPU来不及响应中断,外部中断信号撤消后,由于D触发器的记忆作用,消失的中断信号仍然有效,直到中断被响应并进入中断ISR,记忆的中断信号才会由硬件清除...
  • 若IT0=1,则为下降沿触发 外部中断0初始化: 初始化方法一: void Init_INT0() { IT0=1;//设置外部中断0;下降沿触发 EX0=1;//开启外部中断0; EA=1;//开启中断总开关 } 初始 化方法二: void
  • 本文详细介绍了52单片机中的6个中断源和单片机端口的关系以及中断请求源和中断优先级寄存器的讲解及边沿触发程序知识。
  • 51单片机之外部中断应用实例(电平触发、边沿触发)

    万次阅读 多人点赞 2019-05-15 15:10:32
    硬件:STC89C52RC 开发工具:Keil uVision4 前言:8051是一款很经典的、历史悠久的单片机,作为一款入门级的...下面详细讲述外部中断功能的使用。 外部中断:单片机提供的系统紧急事件的输入控制。事件触发的方式...
  • STM8L_6_EXIT: 1.User:工程及main文件 2.Hardware:EXIT,CLK,LED,Delay 3.STM8L15x_StdPeriph_Driver:STM8自带库...5.Function: 外部中断上升沿触发,翻转LED /** *****************************************...
  • 下降沿触发和电平触发区别

    千次阅读 2012-09-30 17:24:50
    如果是下降沿触发,当从高至低电平转变时,触发产生;低电平保持多久都只产生一次。所以,边沿触发适合与以负脉冲形式输入的外部中断请求。 如果是低电平触发,那么在低电平时间内中断一直有效;因此如果在电平...
  • STM32外部中断触发

    千次阅读 2020-10-21 16:50:49
    最近在做一个关于USB PD快充的项目,在使用外部中断的时候遇到了一个奇怪的问题,一使能中断就直接触发外部中断,进去了中断服务函数。 引脚配置是高电平,上拉;也量了引脚的电平,是一个持续的高电平,并没有...
  • EXTI外部中断简介相关寄存器外部中断/事件控制器框图 简介 EXTI (External interrupt/event controller),也就是外部中断/事件控制器,用于单片机对外部事件做出一定的反应,如利用EXTI外部中断来检测按键是否按下。...
  • 用C编程,设置两个外部中断(INT0和INT1)按键,优先级IP=0x04,即把外部中断1设置高级优先级,外部中断0低级优先级,使外部中断1嵌套在外部中断0中。 要求:中断触发方式为下降沿触发,按键有消抖功能 仿真 ...
  • 使用P3.2外部中断下降沿触发, 对NEC红外编码方案进行解码。单片机晶振12M 22pf匹配电容测试遥控器淘宝购买, 淘宝输入 ‘红外遥控器’ 即可, 不到2元一个。 单片机用的是 STC 的 12C5A60S2, 使用串口下载烧录...
  • C51单片机外部中断触发方式

    千次阅读 2020-06-23 15:30:25
    1. 电平触发方式 ○ CPU采样外部中断引脚电平 ...2. 下降沿触发方式 ○ CPU采样外部中断的引脚电平 ○ 如果上一个机器周期电平高,下一个机器周期电平低,则硬件置1(IE=1) ○ 等待CPU响应中断 ○ CPU.
  • ;引脚P3.3/INT1外部中断 ;外部中断1程序跳转 ORG 0013H LJMP INT1_PROGRAM ...调用外部中断1的初始化程序 ...外部中断1初始化程序 ...外部中断1请求源标志。...中断触发方式为下降沿触发,CLR IT1为低电平触...
  • Port A口的5个引脚:PA[6:2] Port B口的8个引脚:PB[7:0] Port C口的8个引脚:PC[7:0] Port D口的7个引脚:PD[6:0] Port E口的8个引脚: PE[7:0] PD7时最高优先级的中断源TLI. ...11:上升沿下降沿触发 ...
  • 1)上升沿触发外部中断 (2)下降沿触发外部中断 (3)边沿触发外部中断 (4)上升沿触发外部事件 (5)下降沿触发外部事件 (6)边沿触发外部事件 2.CubeMX生成的代码: /** Configure pins as * EXTI */ void ...
  • 关于51单片机外部中断触发方式

    万次阅读 2016-01-25 11:47:55
    51单片机的外部中断,分为低电平触发下降沿触发。在单片机内部,分别由控制位 IT0 和 IT1 来控制。复位时,IT0/1 0,即默认低电平触发。一般来说,外设第一次向单片机申请外部中断时,单片机使用那种触发...
  • STM32外部中断无法触发的问题

    千次阅读 2015-06-23 17:57:23
    很多教程在讲解外部中断时,基本上都将接受外部中断的GPIO设置浮空输入,即GPIO_Mode_IN_FLOATING,这样的话对应的GPIO会是低电平状态,如果外部不加上拉电阻的话,STM32无法响应外部的下降沿中断。为了简化硬件...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,054
精华内容 5,221
关键字:

外部中断1为下降沿触发