单片机中断应用的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语言编程

相关阅读

变频器的主要故障原因及预防措施

1、外部的电磁感应干扰 如果变频器 周围存在干扰源,它们将通过辐射或电源 线侵入变频器的内部,引起控制回路误动作,造成工作不正常或停机,严重时甚至损坏变频器。提高变频器...
2023-03-21

钳位二极管保护电路图 TVS钳位二极管保护原理详解

一、什么是钳位二极管 钳位二极管其实就是TVS 管,也就是瞬态抑制二极管的简称(Transient Voltage Suppressor)。它是在稳压二极管的基础上发展而来的,是一种二极管形式的新型高效能保...
2023-08-18
钳位二极管保护电路图 TVS钳位二极管保护原理详解

钳形电流表

  钳形表又称钳形电流表,是一种测量电气线路电流大小的仪表。与电流表和万用表相比,钳形表的优点是在测电流时不需要断开电路。钳形表可分为指针式钳形表和数字式钳形表两...
2023-06-27
钳形电流表

三相稳压器如何维护(稳压器怎么保养和维护)

维护" alt="稳压器维护"/> 稳压器作为电力设备,通常不需要过多的维护,但是定期的简单保养有助于延长其使用寿命和保持其稳定性能。三相稳压器 的维护对于确保其长期有效运行至关...
2023-11-04
三相稳压器如何维护(稳压器怎么保养和维护)

装修房子最怕就是返工,资深30年老师傅教你水电验收四步走!

水电验收是指工程上的上下水管道的验收和电气及电器的验收。水电工程的施工质量是否过关,关系着日后的居住安全,所以在验收的过程中一定要打起十二分的精神,对多处细节进行...
2023-06-11
装修房子最怕就是返工,资深30年老师傅教你水电验收四步走!

热销商品

聚氨酯优力胶牛筋垫片PU垫片缓冲垫圆形密封垫圈减震垫O型垫 加工

聚氨酯优力胶(PU)牛筋垫片是一种高性能弹性密封减震元件,采用优质聚氨酯材料精密加工而成。具有优异的耐磨性、抗撕裂性、耐油性和耐老化性能,适用于高负荷、高频振动...
5

扎丝,葡萄扎丝、扎丝绑丝、铁丝扎带、电镀锌铁丝扎线、捆扎铁丝

扎丝是一种广泛应用于农业、园艺、建筑和包装等领域的金属绑扎材料,常见类型包括葡萄扎丝、扎丝绑丝、铁丝扎带、电镀锌铁丝扎线和捆扎铁丝等。其中,葡萄扎丝专为葡...
9.3

内六角扳手高硬度加长球头六棱六方扳手3456781012mm平头小空间

内六角扳手高硬度加长球头六棱六方扳手,专为狭小空间作业设计,提供3、4、5、6、7、8、10、12mm多种规格,满足不同需求。采用优质合金钢材质,经热处理工艺,硬度高、耐磨...
2.55

橡胶包边条u型骨架密封条机械钣金桥架防割手装饰护口保护条卡条

橡胶包边条U型骨架密封条是一种广泛应用于机械、钣金、桥架等金属边缘的安全防护配件。其采用优质橡胶材质,内嵌U型钢骨架,兼具柔韧性与结构强度,可牢固卡装在金属板...
1.28

O型圈密封圈丁睛胶圈油封氟胶硅胶圈高压耐磨橡胶超大O型胶圈大全

O型圈密封圈是一种广泛应用于机械、液压、气动及管道系统中的关键密封元件。本产品涵盖丁腈胶(NBR)、氟橡胶(FKM)、硅胶(VMQ)等多种材质,具备优异的耐油、耐高温、耐腐蚀...
1

网站栏目