单片机中断应用的C语言编程

时间:2023-03-11作者:佚名

C51编译器支持在C源程序中直接开发中断程序,从而减轻了采用汇编语言编写中断服务程序的繁琐程度。为了满足在C语言源程序中直接编写中断服务程序的需要,C51编译器对函数的定义进行了扩展,增加了一个扩展关键词interrupt。他是函数定义式的一个选项,加上这个选项即可以将一个函数定义成中断服务函数。定义中断服务函数的语法格式如下:

返回值类型 函数名( interrupt m [using n]
{

函数体

}

关键词interrupt后面的m是中断号,m的取值为031的正整数,编译器从8m 3处产生中断向量,具体的中断号m和中断向量取决于80C5180C51中断源编号见表80C51单片机可以在片内RAM中使用4个不同的工作寄存器组,每个寄存器组中包含8个寄存器(R0R7)。C51编译器扩展了一个关键字using,专门用来选择不同的工作寄存器组。using

80C51单片机中断源编号

编号

中断源

入口地址

编号

中断源

入口地址

0

外部中断0

0003H

3

定时/计数器1

001BH

1

定时/计数器0

000BH

4

串行口中断

0023H

2

外部中断1

0013H

后面的n是一个03的常整数,分别选中4个不同的工作寄存器组。在定义一个函数时,using是一个选项,如果不用该选项,则由编译器自动选择一个寄存器组访问。需要注意的是,关键字usinginterrupt的后面都不允许跟带运算符的表达式。

关键字using对函数目标代码的影响如下:

在函数的入口处将当前工作寄存器组保护到堆栈中,指定的工作寄存器内容不会改变;函数退出之前将被保护的工作寄存器组从堆栈中恢复。

使用关键字using在函数中确定一个工作寄存器组时必须小心,要保证任何寄存器组的切换都在控制之下,否则将产生不确定的函数结果。另外还要注意,带using属性的函数原则上不能返回bit类型的值,并且关键字using不允许用于外部函数。

关键字interrupt也不允许用于外部函数,它对中断函数目标代码的影响如下:

在进入中断函数时,特殊功能寄存器ACCBDPHDPLPSW将被保存入栈,如果不使用using进行工作寄存器组的切换,则将中断函数中所用到的全部工作寄存器都入栈保护,在函数退出之前恢复,中断函数由RETI指令结束。

编写80C51单片机中断函数时应遵循以下原则:

中断函数不能进行参数传递,如果中断函数中包含任何参数声明,都将导致编译出错。

中断函数没有返回值,如果企图定义一个返回值,将得到不正确的结果。因此建议在定义中断函数时将其定义为void类型,以明确说明没有返回值。

在任何情况下,都不能直接调用中断函数,否则会产生编译错误。因为中断函数的退出是由80C51单片机指令RETI完成的,RETI指令影响80C51单片机硬件中断系统。如果在没有实际中断请求的情况下直接调用中断函数,则RETI指令的操作结果会产生一个致命的错误。

如果在中断函数中调用了其他函数,则被调用函数所使用的寄存器组必须与中断函数相同。用户必须保证按要求使用相同的寄存器组,否则会产生不正确的结果,这一点必须注意。如果定义中断函数时没有使用using选项,则由编译器自动选择一个寄存器组。另外,由于中断的产生不可预测,中断函数对其他函数的调用可能形成递归调用,需要时可将被中断函数所调用的其他函数定义成再入函数。

C51编译器从绝对地址8m3处产生一个中断向量,其中m为中断号。该向量包含一个到中断函数入口地址的绝对跳转。

下面给出一个中断编程实例。

C语言编写例6-4的程序

分析:假设中断源ABCD都没有中断,皆为高电平;若有一个产生中断,通过四或门在INT1引脚产生低电平,因为在主程序中已开放了中断,所以就会执行中断服务程序把flag设置为1,主程序判断flag=1,就会根据P1的低位来判断哪一位为低,即哪一个中断源产生中断。

C51参考程序如下:

单片机中断应用的C语言编程

相关阅读

变频器工作原理

变频器 是把工频电源 (50Hz或60Hz)变换成各种频率的交流电源,以实现电机的变速运行的设备,其中控制电路完成对主电路的控制,整流电路将交流电变换成直流电,直流中间电路对整流...
2023-03-21

为德国弱电布线图点赞?是时候让你们看看中国布线的真正技术了!

前段时间,德国工程师完美的弱电布线图火爆了朋友圈,大家看后纷纷点赞。为此,我们有幸又看到了很多中国工程师的布线图。这些图是这样子的...... 来一下德国布线图,就来几张吧...
2023-06-11

石油化工外表体系的防雷措施

本文介绍了石油化工外表体系的防雷措施、防雷方法,石油化工外表体系采取的防雷办法分为接闪与均压二种,石油化工外表体系的接地的两种办法:浮地、多点接地,下面具体来看下...
2024-03-18

开关电源拓扑计算公式

01 Buck变换器的功率器件设计公式 (1)Buck 变换器的电路图: (2)Buck 变换器的主要稳态规格: (3)功率器件的稳态应力: 有源开关 S: 无源开关 D: 上述公式是稳态工作时,功率器...
2023-04-29
开关电源拓扑计算公式

快速掌握接触器的选型与使用,果断收藏!

【免费下载】 PLC软件下载_PLC软件安装教程_PLC手册下载_PLC案例下载! 【免费学习】 变频器精品课程_西门子PLC精品教程_三菱PLC精品教程! 电工朋友们应该都知道接触器,那你完全了解...
2023-06-27

热销商品

FEITA 镊子碳纤维合成塑料防静电无尘净化塑胶手动工具镊子93302

FEITA镊子93302采用高强度碳纤维合成塑料材质,兼具轻量化与耐用性,适用于精密操作场景。其独特的防静电设计有效避免静电对电子元件的损害,广泛应用于半导体、光学、...
1.2

江南国标rvv铜芯电缆软线3 4多芯平方rvvp护套信号屏蔽线线缆电线

江南国标rvv铜芯电缆软线34多芯平方rvvp护套信号屏蔽线线缆电线,是一种高性能的电缆产品,适用于各种信号传输和控制场合。该电缆采用优质铜芯,具有优良的导电性能和...
1.96

内六角扳手套装单个内六方螺丝刀进口S2款加长特长平头内6角2.5mm

这款进口S2材质内六角扳手套装,专为精密机械维修与装配设计,采用高品质S2合金钢制造,具备卓越的硬度、耐磨性与抗扭强度,有效防止使用过程中断裂或变形。套装中包含2....
1.4

橡胶条U型防撞包边条橡胶卡条玻璃嵌条配电箱机柜u型条密封条封王

橡胶条U型防撞包边条是一种多功能密封与防护配件,广泛应用于配电箱、机柜、玻璃门窗及各类设备边缘。采用优质橡胶材质,具备优异的弹性、耐老化、防水防尘和抗冲击...
0.8

10副装护目镜打磨劳保防飞溅男女骑行机械实验防风沙灰尘防护眼镜

这款10副装护目镜专为多场景防护设计,适用于打磨、机械加工、实验操作、骑行及户外作业等环境。采用高透光防雾镜片,有效抵御飞溅物、风沙、灰尘及化学液体喷溅,保障...
19.8

网站栏目