精华内容
下载资源
问答
  • 2019-11-13 00:10:15

    最近做一个小车项目,为了实现高效准确的测距,我使用定时器和外部中断写了一个测距的模块,分享给大家参看,如果有不对的地方,请留言批评指正。
    代码分享:

    #include <FlexiTimer2.h>
    int Ul_trigPin = 7, Ul_echoPin = 2;     // 定义超声波的引脚
    long Ul_duration;                       // 测到的距离
    unsigned long Ul_starttime;             // 超声波测距的启动时间
    int Ul_startflag = 0;                  // 超声波测距的启动标志位
    /**
     * 定时器2的中断子程序,用于超声波延时20ms
     */
    void timer2()
    {
      FlexiTimer2::stop();
      digitalWrite(Ul_trigPin, LOW);
      Ul_starttime = micros();  
    }
    /**
     * 外部中断2的延时子程序,用于超声波回波接收,接Echo
     */
    void interrupt_0(){
      Ul_duration = (micros() - Ul_starttime-2240) / 59;   // 需要减去trig和echo变化之间的延迟2240us  time/2/1000 * 34cm/ms
      Ul_startflag = 0;
    }
    void setup()
    {
      Serial.begin(38400);   // 设定串口的波特率
      FlexiTimer2::set(20, 1.0/1000, timer2); // 初始化定时器2
      pinMode(Ul_trigPin, OUTPUT);
      pinMode(Ul_echoPin, INPUT);
      digitalWrite( Ul_trigPin , LOW );
      // 初始化外部中断0
      attachInterrupt(0, interrupt_0, FALLING);  //interrupt为你中断通道编号,function为中断函数,mode为中断触发模式
    }
    
    void loop()
    {
      if (Ul_startflag == 0){   //启动测距
        Ul_startflag = 1;
        digitalWrite(Ul_trigPin, LOW);
        delayMicroseconds(2);
        digitalWrite(Ul_trigPin, HIGH);
        FlexiTimer2::start();
        Serial.print("message");
        Serial.print(Ul_duration	);
        Serial.println();
      } 
    }
    

    执行此代码可以不断获取超声波测距的信息,并通过串口发送。
    更多关于Arduino的外部中断请查看

    更多相关内容
  •  本例利用PIC16F877的RB端口中断设计一个抢答器,该抢答器可供不多于4个参赛队或者个人的抢答比赛场合使用。  每个参赛队的座位前安装1只抢答按钮开关和1个信号灯。主持人的座位前安装1只复原按钮开关、1只蜂呜器...
  • 红外遥控循迹超声波避障跟随光电码盘计数测速五个中断智能小车 * 通过红外遥控,控制小车的方向,通过循迹前进,通过超声波跟随。通过光电码盘计数测速,把52的五个中断用上了。。。
  • 使用STM32的定时器与外部中断配合实现超声波模块的测距功能。 这里总体说一说此程序比较理想的执行情况: (1)超声波被调用初始化函数,定时器被设定为可中断,并且定时器开始计数; (2)计数到溢出,触发定时器...
  • 在本例采用了模块化的编程方法,程序的规划、编写、拼装、调试、修改、  程序流程如图1~图7所示。  图1 主程序流程  图2 中断服务子程序流程  图3 低发音子程序流程  图4 高发音子程序流程 ...
  • 使用中断实现超声波传感器的测距,能够大大减少时间的占用!
  • 超声波模块中断

    2019-03-26 10:30:49
    简单来说就是单片机控制超声波发射模块发出一系列超声波,遇到障碍物反弹回来,被超声波接收模块接收到,然后计算这段时间(声音在空气传播的速度为340m/s),通过计算,得出距离,这就是基本的思路。
  • 本文主要总结了一些关于stm32按键中断的知识,一起来学习一下
  • 雅马哈公司宣布开发出据称是世界上第一款无限幅数码IC放大器YDA144,它可防止高水准输出时的失真和令人不安的声音中断。作为一款身历数码放大器,它的尺寸仅2mm×2mm×1mm,相对说来没有什麽热量。YDA144适合通过...
  • 用定时器A的中断实现LED灯闪烁。
  • 基于STM32的扫雷小车4路超声波测距中断外部中断
  • 石秀民老师作业
  • 每按一下按键(外部 0 中断 P3.2),8 个 LED 从下向上流水 1 次。 电路图: 代码: #include<reg51.h> #include<intrins.h> void delay(unsigned int m) { unsigned int i; for(;m>0;m--) { ...

    了解什么是中断

    好,今天我来给大家讲一下我们什么是中断以及如何去运用外部中断源。
    首先,我们学习单片机的时候,一定听说过学会中断才是单片机的入门。因为中断系统大大提高了单片机对随机事件的实时处理能力,并且提高了单片机的工作效率。

    当然,中断这个概念对初学者会有点难以理解,这里我们举一个例子,比如我在家里看书,这时候有快递员送货上门我听到敲门声,那我肯定是先暂停看书先去开了门,然后取完快递后,再继续回去开始看书。
    这里过程我们可以分析为:
    1.在家里看书是我当前执行的主程序
    2.听到敲门声是中断申请
    3.暂停看书去开了门,并且取完快递是单片机对中断的响应和处理
    4.回去开始看书是中断结束返回继续执行被打断的主程序

    这样分析大家是否对中断有一个初步的认识,就是打断正在执行的程序去做中断的程序,做完了再回来继续做原来的程序。

    中断有哪些以及该怎么设置

    那我们知道了中断的概念后,我们要去实现中断该怎么做呢?
    首先,你要明白用单片机的哪个中断源,其次你要怎么实现这个中断,要设置哪些参数。
    这里我们介绍一下对于51单片机的话中断源只有五个,分别为
    在这里插入图片描述
    总体上可分为外部中断源(外部中断0和外部中断1)和内部中断源(定时器0、定时器1和串行口中断),相对于其他单片机如stm32来说,其中断源更多和中断体系更加复杂,所以建议大家先把51这五个中断源弄明白了,后面遇到的其他复杂中断都是从这些基础上过来的。

    知道了有哪些中断源后我们就可以根据自己的需要来选择自己想要用的中断源,比如我想要当系统中的某个输入信号变为低电平时候或者出现下降沿时候执行中断,那我用到外部中断源,那我就选择外部中断0或者外部中断1。

    而当我想设计计时多久就来一个其他程序执行,那我就要用到内部中断源里面的定时器0和定时器1,一般用到计时或者计算脉冲边沿数量等等的采用定时器来做中断源。

    当我想要用pc或者其他无线传输发送过来的命令来使单片机产生中断的话,我们就可以使用串口中断,比如当我接收到特定的字符时候就执行中断。

    现在我们知道了中断是什么,以及我也知道了中断源有哪些可以用,并且我也知道了我要用的是哪个中断源。那现在就是该怎么设置使我实现中断。这里告诉大家,我们要实现中断控制就要去设置中断相关的寄存器。设置好了我们才能使用中断。而相对于的寄存器有哪些呢?
    这里我们先列出
    1.定时控制寄存器TCON
    在这里插入图片描述

    2.串行控制寄存器SCON
    在这里插入图片描述

    3.中断屏蔽寄存器IE
    在这里插入图片描述

    4.中断优先级寄存器IP(IP寄存器这里下面例子没用到,所以只列出相关位)
    在这里插入图片描述

    一共有四个,这里我们先不深入将这四个中断寄存器,而是先给大家一个概念先,等后面大家熟悉了,大家就明白这四个寄存器的作用。
    或许到了这里有些小伙伴会问,我知道要用这四个寄存器来设置相应中断,但是我该怎么设置呢?要设置哪些呢?我当时学的时候也是这样的,学了一遍也不懂,直到我看到了这张中断控制系统图。
    在这里插入图片描述
    我们从图中可以很明显的看出当我们要用什么中断的时候,要去设置哪些寄存器位。当年,我就是看到这张图使我一下子明白了该如何去设置相应的中断。这里我们举一个例子带大家了解中断该如何去设置以及使用。

    中断案例分析

    我们这里举例外部中断源的外部中断0使用,定时器的后期我会再出一期给大家讲解。
    首先,Proteus 仿真要求:8 个 LED 一直闪烁;每按一下按键(外部 0 中断 P3.2),8
    个 LED 从下向上流水 1 次。

    我们可以从上图的中断控制系统可以看到,要使用外部中断0,首先我们要设置IT0,而IT0我们从寄存器TCON可以得出IT0是设置中断触发的,IT0=1为下降沿触发;IT0=0为低电平触发。这里我选择下降沿触发所以IT0=1。

    然后IE0是中断标志这里我们不做设置。再后面的EX0是在寄存器IE里面的,而寄存器IE是用来设置相应的中断允许和禁用,所以这里EX0是外部中断0的中断允许位,EX0=1是允许中断;EX0=0是禁止中断。所以这里我们要使EX0=1允许中断
    而开启相应中断后我们还要开启总中断就是使EA=1,我们可以从图中看出每一个中断源都有一个EA中断开发。也就是说无论什么中断源,你开启了自己的中断还要去开启总中断。这一定要记得哦。

    最后的PX0设置中断优先我们就不设置了。因为这边也就用到了一个中断。
    总结就是使{IT0=1;EX0=1;EA=1;},放在主程序里。

      IT0=1;
      EX0=1;
      EA=1;
    

    然后中断寄存器设置好了,我们要开始写中断函数,中断函数这里需要写一个中断的标志interrupt 0。interrrupt我们都知道是中断的意思,而后面的0是指外部中断0(也就是说明我这个中断函数是执行哪个中断的意思)。这里拓展一下相应的中断对于的数字。这里提示一下如果使用的是其他中断,修改完寄存器值还要修改相应的中断函数后面指定的中断数。
    在这里插入图片描述

    void int0() interrupt 0  
    {
    
    }
    

    然后我们在编写中断的程序,这里是每按一下按键(外部 0 中断 P3.2),8个 LED 从下向上流水 1 次
    ,所以这里我们程序这样编写。

    void int0() interrupt 0
    {
      unsigned char i,temp=0x7f;
      for(i=0;i<8;i++ )
     {
      P1 = temp ;
      delay(100);
      temp=_cror_(temp,1); 
     }
    }
    

    这样我们就设置好了外部中断0的设置,而这里还有一点就是因为你是外部中断源,信号是有单片机外部给的,所以你的信号输入要接到单片机外部中断0的那个IO口,也就是P3.2口,单片机的五个中断源的IO口都在P3口上,大家要记住哦。

    中断的程序介绍就到这里,程序放在下面供大家参考。

    电路图如下 :
    在这里插入图片描述

    程序代码:

    #include<reg51.h>
    #include<intrins.h>  //含左移函数
    void delay(unsigned int m)
    {
      unsigned int i;
      for(;m>0;m--)
      {
       for(i=540;i>0;i--) {;}
      }
    }
    
    void int0() interrupt 0  //中断函数
    {
      unsigned char i,temp=0x7f;
      for(i=0;i<8;i++ )  
     {
      P1 = temp ;
      delay(100);
      temp=_cror_(temp,1);   //右移一位
     }
    }
    
    
    void main()
    {
      IT0=1;     //中断初始化
      EX0=1;
      EA=1;
      while(1)
      {
      P1=0xff;     //八个LED闪烁
      delay(100);
      P1=~P1;
      delay(100);
      }		 
    }
    
    
    

    好了,今天我们介绍了中断以及讲解了一个外部中断的例子,下次我来分享一个定时中断的例子,给大家讲解一下什么是定时中断以及其使用。

    本人水平有限,上述信息仅供参考,如有错误和不妥之处,请多多指教。
    另外创作不易,请勿抄袭,如果有帮助到大家的话希望大家可以点个赞,谢谢~

    展开全文
  • 单片机C语言实例--314-用计数器T1的中断控制蜂鸣器发出1KHz音频.zip
  • 设置文件连接到其各自的设备,并产生蜂鸣以测试通信端口,并以双打为例进行编码使用的常规连接命令。 还有另一个脚本Polaris_exit_debug.m,用于在程序中断且设备保持运行的情况下停止Polaris设备的执行。 他们...
  • 在前面九篇博文,我们认识到了一些基于IO口输入与输出的基础电子器件使用: 8051单片机实战分析(以STC89C52RC为例) | 01 - 点亮一个LED 8051单片机实战分析(以STC89C52RC为例) | 02 - LED延时约5s闪烁 8051...

    1 中断的概念

    中断是为使单片机具有对外部或者内部随机发生的事件实时处理而设置的。

    把自己想象成单片机的CPU,你正在打王者荣耀,但是突然快递小哥给你打电话让你去拿快递(被打断心情很不爽。。。),于是你停下游戏去拿快递了。快递小哥的电话就是中断信号,告诉你有其他的事情需要先去做,然后你去拿快递就相当于中断之后要去处理的事情。

    2 中断源

    顾名思义,中断源就是产生中断的来源,在前面讲述中断的概念中,中断源就是“电话”!这就是外部世界在“干扰”你,让你不得不去处理,在单片机中抽象为“外部中断”。

    除了外部中断,当然也有“内部中断”,例如,你家正在煲汤,你给自己设置一个每相隔半个小时就去看一下煲汤的情况,其余时间你都在学习,这个“中断”就相当于有了一个“定时器”,每次半小时一到达,你就得去一下厨房,没错,这个就是“定时器中断”。

    当然,除此之外,8051单片机还有一个串行口中断。这个在之后实战中,我们会认识到它的原理!

    8051单片机有五个中断源:

    • INT0——外部中断0
    • INT1——外部中断1
    • T0——定时器/计数器0中断
    • T1——定时器/计数器1中断
    • TI/RI——串行口中断

    这里需要注意:定时器和中断不是一回事,定时器是单片机模块的一个资源,确确实实存在的一个模块,而中断,是单片机的一种运行机制。 很多人会误以为定时器和中断是一个东西,只有定时器才会触发中断,其实根据前面的介绍,中断有很多来源。

    3 中断优先级

    在这里我们继续举例子,比如我正在看电视,这个时候来电话了,我要进入接电话的“中断”程序当中去,就在接电话的同时,听到了水烧开的声音,水烧开的“中断”也发生了,我们就必须要放下手上的电话,先把煤气关掉,然后再回来听电话,最后听完了电话再看电视,这里就产生了一个优先级的问题。

    还有一种情况,我们在看电视的时候,这个时候听到水开的声音,水开的“中断”发生了,我们要进入关煤气的“中断”程序当中,而在关煤气的同时,电话声音响了,而这个时候,我们的处理方式是先把煤气关闭,再去接听电话,最后再看电视。

    从这两个过程中,我们可以得到一个结论,就是最紧急的事情,一旦发生后,我们不管当时处在哪个“程序”当中,我们必须先去处理最最紧急的事情,处理完毕后再去解决其它事情。在我们的单片机程序当中有时候也是这样的,有一般紧急的中断,有特别紧急的中断,这取决于具体的系统设计,这就涉及到中断优先级和中断嵌套的概念。

    以下表格中最右边是8051几个优先级的情况:

    中断优先级有两种,一种是抢占优先级,一种是固有优先级,关于这块这里理解一下它们的概念即可,实战中用到之时再去分析!

    抢占优先级:

    当进入低优先级中断中执行时,如又发生了高优先级的中断,则立刻进入高优先级中断执行,处理完高优先级级中断后,再返回处理低优先级中断,这个过程就叫做中断嵌套,也称为抢占

    所以抢占优先级的概念就是,优先级高的中断可以打断优先级低的中断的执行,从而形成嵌套。当然反过来,优先级低的中断是不能打断优先级高的中断的。

    固有优先级

    那么既然有抢占优先级,自然就也有非抢占优先级了,也称为固有优先级。在上面的表格中的最后一列给出的就是固有优先级,请注意,在中断优先级的编号中,一般都是数字越小优先级越高。从表中可以看到一共有 1~5 共 5 级的优先级,这里的优先级与抢占优先级的一个不同点就是,它不具有抢占的特性,也就是说即使在低优先级中断执行过程中又发生了高优先级的中断,那么这个高优先级的中断也只能等到低优先级中断执行完后才能得到响应。

    展开全文
  • 本实验采用中断方式打开PLL,。添加蜂鸣器用于指示PLL锁定。当PLL锁定成功后,蜂鸣器蜂鸣一。实验程序如下所示,我是在IAR下面进行的调试,出现了两个警告,但不影响程序的运行。
  • 51单片机点亮LED和使用定时器中断控制蜂鸣器发声

    千次阅读 多人点赞 2020-05-05 12:09:47
    //打开定时器0中断允许 EA=1; //打开总中断 TF0=0; //溢出位清零 TR0=1; //打开定时器 } void Timer0() interrupt 1 { uchar count; TH0=0x3c; //给定时器赋初值 TL0=0xb0; count++; //计时变量加 if(count==10)//...

      初学51单片机第一个实验一般都是以点亮LED灯开始,以下是使用Proteus仿真软件的实验效果。
      实验需要仿真仪器:
      示波器、LED、电压表、蜂鸣器、AT89C51

    实验电路图:

    在这里插入图片描述

    实验代码:

    #include <reg52.h>
    #define uchar unsigned char
    #define uint unsigned int
    uint i = 0;
    sbit buzzer = P2^1;
    sbit led=P2^0;		 //将单片机的P2.0端口定义为led
    
    void delay(uint i)
    {
    	while(i--);	
    }
    
    //定时器T0初始化
    void Timer0init()
    {   //设置T0
        TMOD|=0X01; //选择为定时器0模式,工作方式1,仅用TR0打开启动
        TH0=0x0F8;	//给定时器赋初值,定时0.5ms  
        TL0=0x30;	 
        ET0=1;      //打开定时器0中断允许 
        EA=1;       //打开总中断
        TF0=0;      //溢出位清零 
        TR0=1;      //打开定时器	
    }
    void Timer0() interrupt 1
    {
    		uchar count;
        TH0=0x3c;	//给定时器赋初值
        TL0=0xb0;
    		count++;	//计时变量加
    		if(count==10)//定时器定时是50ms,此处计数10次,正好是500ms
    		{
    			buzzer = ~buzzer;
    			delay(10);
    			count = 0;
    			TR0 = 0;
    		}
    		TR0 = 1;
        
    }
    
    
    void main(void)
    {   
    		Timer0init();   //定时器T0初始化 	
        while(1)
    	{
    		led=1;
    		delay(50000); //大约延时450ms
    		led=0;
    		delay(50000); //大约延时450ms	
    	}		 
    }
    

    效果截图:

    在这里插入图片描述
    从示波器可以看出,这次中断产生的PWM效果并不是太好。

    展开全文
  • CPU中断

    万次阅读 2019-08-31 21:03:36
    CPU共256个中断类型型号: 0~31:对应于异常和非屏蔽中断,不使用中断控制器; 32~47:分配给可屏蔽中断,由I/O设备引起的中断,这其中就包含可由两个8259A级联响应的15个; 48~255:用来标识软中断; CPU...
  • 描述什么是单片机嵌套中断所谓“中断”是处理事件的一个“过程”,这一过程一般是由计算机内部或外部某件紧急事件引起并向主机发出请求处理的信号,主机在允许的情况下响应请求,暂停正在执行的程序,保存好“断点”...
  • 电子-超声波测距外部中断.zip,单片机/嵌入式STM32-F0/F1/F2
  • 中断是指计算机运行过程,出现某些意外情况需要计算机处理时,技能能自动暂停正在运行的程序并转入处理新情况的程序,处理完毕后又返回原先被暂停的程序继续运行的功能。 举一个生活例子来说明:小明在厨房干活,...
  • stm32 使用中断方式实现超声波测距

    千次阅读 2019-11-23 16:35:43
    超声波测距模块源代码 /************************************* ...外部中断 EXTI_Line6; 使用方法:总是调用 Hcsr04GetLength(); 每调用一次就会启动一次测距; 取三次的平均值保存到 全局变量 ultr...
  • 51单片机中断

    千次阅读 2021-08-25 20:23:55
    再回到原来被 断的地方,继续原来的工作,这样的过程称为中断。 2.51单片机的中断源:外部中断0、定时计数器中断0、外部中断1、定时计数器中断1、串口中断。 3.与中断相关的寄存器:IE(中断允许控制寄存器)、TCON...
  • 51单片机入门——定时器与外部中断

    千次阅读 2022-01-04 19:32:33
    时钟周期:时钟周期 T 是时序最小的时间单位,具体计算方法就是 1 / 时钟源频率,一般情况下单片机的晶振都是 11.0592 MHz 的,对于这个单片机系统来说时钟周期就是 1 / 11059200 秒。 机器周期:我们的单片机完成...
  • Arduino 定时器中断 外部中断

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

    千次阅读 2020-12-29 10:02:15
    本发明实施例涉及通信技术领域,尤其涉及一种PCIe中断方法和系统。...基于引脚的PCI中断也就是INTx中断,经常在个设备间共享,内核必须调用与该中断相关的每一个中断处理函数,效率比较低。当...
  • STM32L4系列 串口通信 空闲中断+DMA 实现任意长度的数据接收 包含两种方式 1:不用在主函数调用DMA接收函数(推荐,非常实用) 2:许多教程的写法,需要在主函数调用判断空闲中断状态再调用DMA接收函数
  • 基于STM32的超声波测距(外部中断+定时器)

    千次阅读 多人点赞 2020-10-09 10:21:28
    基于STM32的超声波测距(外部中断+定时器) 首先说明一下我使用的硬件: stm32f103c8t6最小系统、0.96寸OLED、超声波模块HC-SR04。 再就是程序设计的一个思路: 超声波模块的使用说明已经指出,给TRIG引脚一个不少于10...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 41,253
精华内容 16,501
关键字:

中断的中是几声