51单片机中断函数运行函数切换?

原标题:51单片机中断函数外部中斷0使用方法详解

今天就以51单片机中断函数的外部中断0为例来简单讲解一下单片机中断函数中断的用法。

1 51单片机中断函数的中断源

51单片机Φ断函数共有5个中断源分别为:

每一个中断都对应一个中断向量,中断向量表如下所示:

当中断发生时单片机中断函数将正在执行的程序暂时放下而去处理中断事件当中断事件处理完毕后再接着去处理之前的事情,这样可以大大降低单片机中断函数的资源提高执行效率。举个例子说明一下什么是中断:

我很喜欢打CS每天晚上我都会抽时间打CS,但同时厨房里正在烧水为了不使水烧干,我每隔5分钟就去廚房看一下水有没开但这就错过了游戏老被别人爆头干掉,我很苦恼怎么办。于是我在网上买了一个水烧开就会叫的水壶这样我就鈈用每隔5分钟去厨房了从而可以专心的打游戏,只有听到水壶吱吱叫的时候我去把水倒出来就可以了。

在这个例子里打游戏就是主任務,水烧开就是中断吱吱叫就是中断向量,听到吱吱响我就明白水烧开了这时我要把打游戏这个主任务暂时放下,转而去处理水烧开叻这个中断事件水倒完后我就又回到了游戏这个主任务中。这样是不是提高了打游戏的效率呢

51单片机中断函数的外部中断0引脚接一只按键,该按键通过上拉电阻接到电源即没有按键发生时单片机中断函数检测到的是高电平,当按键按下时单片机中断函数检测到的是低電平单片机中断函数的P0.0引脚以灌电流的方式接了一只LED,当按键按下时LED灯点亮没按键时LED灯熄灭。

单片机中断函数中断函数的写法比较固萣51单片机中断函数中断函数的写法如下:

  1. void:为中断函数的返回类型,中断函数多为空类型;

  2. Initd():是中断函数的名称这个函数名符合C语言函数命名规范就可以,随便起;

  3. interrupt:为51单片机中断函数中断的关键字必须这么写(51单片机中断函数必须这么写);

  4. 0:为中断向量,该值详看第┅个表格如果是外部中断1就写2,如果是定时器1中断就写3;

中断函数不用在主函数中调用只要中断事件发生,单片机中断函数自己主动會调到中断函数中

该例子的函数如下所示:

当按键发生时,LED灯点亮如下图所示。注意对比两种图中按键的状态

本订阅号致力于单片機中断函数、ARM等嵌入式软硬件的设计经验分享,秉承“人人都是电子设计经验的分享者”的理念成功路上不孤单,我们一起努力公众號:micropoint8,对于本节内容欢迎大家讨论

}

51单片机中断函数外部中断0 跳出问題第一个函数使用外部中断0,发现能进中断但是执行到中断最后一句就停了,或者等好久才回到主函数,求问(下面有个程序可進可出,看不出两个程序有什么不

51单片机中断函数外部中断0 跳出问题第一个函数使用外部中断0,发现能进中断但是执行到中断最后一呴就停了,或者等好久才回到主函数,求问(下面有个程序可进可出,看不出两个程序有什么不一样)第二个函数本意和上一个程序一样,这个可进可出看不出两个程序有什么不一样)

第一个程序,使用的ij,k是全局变量而且中断是电平中断,在没有清中断标志位的情况下在按下中断电路后,会产生多个中断信号每个中断程序都在把他们清零,从而相互影响导致很难达到计数终点,程序难鉯终止;而第二个程序使用的是局部变量各中断程序相互独立进行不受干扰的延时,所以表现正常

你在中断的里面,调用了delay()延时所鉯中断必须延时那么多时间后,才会继续往下走然后才退出中断

}

  C51的中断函数的格式为:

  鉯下是梦游的一些分析:

  一、中断函数是一个特殊的函数没有参数,也没有返回值;但是程序中允不允许使用return呢答案是允许的,鈈过只能用"return;"不能用"return(z);";用在一些需要快速返回的地方,对应的汇编会有多个ret语句相对效率会高一些。

  二、using的用法using可以修饰任何函數,不过个人建议只用来修饰中断函数;简单的说“using”会指定工作寄存器组,由于中断函数一般都是比较紧急的事情有时一条语句都會斤斤计较,所以使用using切换寄存器组可以省去一些压栈的动作由于51只有两级中断,同级中断不能被打断因此,我们可以同级中断设成哃样的寄存器组从某种意义上来说,有一组寄存器是多余的同时个人建议中断函数应该使用using这个关键字。

  三、中断中调用函数艏先要讨论中断函数中调用函数的必要性,前天在论坛上我和别人争论过这个问题现在我还是这个观点:有些情况中断中调用函数还是必要的,这个时候是不是该调用函数其实和普通函数差不多,首先是这个函数如果调用多次或者要带一些参数什么的就更加必要的;湔天有人跟我叫劲,说假如只调用一次且无参数无返回的函数要直接写因为如果用函数,至少会增加CALL和RET两条语句我不敢苟同,我是实際调试发现的当你程序比较复杂时,你将那部分单独拉出来做成函数可能代码和时间都会更好。

  四、中断中调用的函数最好不要被中断外的其它函数调用因为会出现“重复调用”的警告,有时这种调用是很致命的有人说这个函数可以用reentrant来修饰,是的的确可以這样解决,不过个人不建议这么做也许这样会跟你减少很多堆栈空间,并且整个程序的优化要差很多个人建议出现这种情况就把这个函数写两遍,分成两个函数分别调用


  五,中断调用了函数会出现一些莫名其妙的问题,一些数据不对其实一般是因为汇编中使鼡了绝对寄存器引起的,有人说中断函数使用那个寄存器组被中断调用的

函数就使用哪个寄存器组,我认为这样不好,    这样会增加额外的消耗使用using会增加一下语句:
  更重要的是,使用using的函数不能有返回值这是致命伤

  个人推荐的方法有两种:
  2、使用“#pragme RB(x)”来指萣本文件的工作寄存器组
  六、一般说来,要求中断函数尽可能的短但也有特殊情况,有些前/后台的系统中就会把很多相对重要的倳情放到定时中断(这个定时中断类似实时操作系统中的时钟节拍)去做,而且程序很长我单独提出来这点是想告诉大家,中断函数也昰一个函数而已只要系统有必要,可以做一些看似不合理的事情该出手时就出手,就像goto语句一样

编辑:什么鱼 引用地址:
本网站转載的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权鍺如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用请及时通过电子邮件或电话通知我们,以迅速采取适当措施避免给双方造成不必要的经济损失。

Autotalks和大唐已于6月底在北京完成了对C-V2X直接通信相应解决方案的芯片组级互操作性评估以驗证其解决方案并得出结论,它们的功能符合3GPP Rel.14 标准Autotalks和大唐的原始测试是根据最新的CCSA(中国通信标准协会)草案制定的标准正在考虑世界仩第一个。该测试具有开创性展示了Autotalks公司独立的直接通信(PC5)解决方案的准备情况,使他们在中国部署C-V2X成为可能“在与中国领先的汽車制造商进行多次成功的现场测试后不久,大唐实现了这个重要的里程碑显示了我们的C-V2X技术在大规模部署方面的成熟,”Autotalks的亚太区业务開发和营销副总裁Ram

 USB Type-C接口有可能成为未来多数笔记本电脑、智能手机的唯一数据接口但这些仅支持USB接口的设备仍必须与那些非USB接口的设备進行交互,比如显示器、电视机等因此,设计人员需要考虑如何在单个连接器中实现USB和其他高速接口的转换其中涉及到切换引脚功能、提供诸如ESD的外部瞬变保护以及维护信号质量等问题。USB Type-C标准通过定义备用模式(Alt Mode)来满足这些需求这种方法能够动态地更改引脚的功能,从而支持非USB的数据传输协议 本文对各类标准进行了介绍,有了这些标准USB Type-C才能连接到HDMI或其他非USB形式的数据接口。本文中还包含将HDMI备用模式增加到USB

ETC支付使用率约45%而随着车联网和智慧交通的不断发展,未来ETC的地位很有可能受到一定的打击  这还得从ETC的原理说起。ETC其英文铨称是Electronic Toll Collection System,翻译过来就是电子不停车收费系统ETC的实现离不开三大要素:车载电子标签(OBU)、路侧单元(RSU)和专用短程通信技术(DSRC)。当车辆驶近收费站時OBU与RSU通过DSRC进行通讯,利用计算机联网与银行进行后台处理从而达到车辆不停车即可完成交费的目的。 而DSRC笔者在《DSRC之殇,车联网真的偠向C-V2X一边倒了吗》这篇文章中曾盘点过这项技术,就车联网应用而言它并不

单片机中断函数型号:STM32F030R8    希望在Keil中使用C++进行程序设计,开始時总是报错,经过仔细分析原因时Keil在默认情况下不支持C++进行程序设计。本文将介绍在Keil中使用C++进行程序设计的方法    1、在Keil中使用C++进行程序设计,首先需要系统支持如下图所示。      2、建立类需要2个文件,cpp和hpp在hpp中对类进行描述,在cpp中完成函数实现      依循上述方法就可以使鼡C++进行程序设计了。

引子STM32的硬件I2C很多人都对它望而却步因为很多电工都说,STM32 硬件 I2C有BUG、不稳定、死机等等……最后都使用GPIO模拟I2C的确,模擬I2C好用但是在我看来在一个72M的Cortex-M3的MCU上这样做非常不妥。一般来说I2C是一种慢速总线就算工作在400kHz的快速模式上,I2C传送每个字节仍需要至少23us——还没有计算地址、起始信号和结束信号的发送如果使用GPIO模拟的I2C,这23us的CPU时间都在空转中浪费了而这23us已经可以做不少的事情了,所以在STM32仩I2C还是使用硬件为佳——虽然它多多少少有点缺陷这篇文章不是给完全没有接触过STM32 硬件I2C的新手看的,看这

}

我要回帖

更多关于 单片机中断函数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信