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

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

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

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

函数体

}

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

表 80C51单片机中断源编号

编号

中断源

入口地址

编号

中断源

入口地址

0

外部中断0

0003H

3

定时/计数器1

001BH

1

定时/计数器0

000BH

4

串行口中断

0023H

2

外部中断1

0013H

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

C51参考程序如下:

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

相关阅读

电工师傅的绝活——常用工具和仪表大全,强烈建议收藏

电工刀的功能与应用 电工刀是电工常用的线缆加工工具。图2-1为电工刀的功能与应用。 【图2-1 电工刀的功能与应用】 剥线钳的功能与应用 在电工布线操作中,常使用剥线钳剥除线缆...
2023-06-16
电工师傅的绝活——常用工具和仪表大全,强烈建议收藏

电气五防指什么?

电气 五防,通常指的是高压开关柜的“五防”或者变配电 室的“五防一通”。 高压开关柜的五防为: 1、防止带负荷分、合隔离开关。(断路器 、负荷开关、接触器 合闸状态不能操作...
2023-03-21

1度电能做什么?kW和kWh的区别,你真的清楚吗?

看到这个题目,可能很多人会想“这有什么嘛,不就是装机容量和发电量的单位?” 且慢,这个问题不止这么简单。很多电气专业的学生或者从事相关工作的人也经常分不清kW和kWh,理...
2023-06-11

场效应管和二极管防反接电路设计

场效应管防反接电路其功能和二极管防反接电路一样,其目的都是防止电源的正负输入端接反而导致负载电路烧毁等意外情况发生。场效应管防反接电路相比二极管防反接电路最大的优...
2023-06-10
场效应管和二极管防反接电路设计

猪队友一字之差,老电工被坑惨了!

电工,和电打交道的工种,显而易见,风险重重,所以做电工的都知道在工作中一定要再三小心,以免赔了夫人又折兵,俗话说:常在河边走哪有不湿鞋,不管大家再怎么小心,但遇到...
2023-06-27
猪队友一字之差,老电工被坑惨了!

热销商品

12V星空顶筒灯嵌入式阳台卧室客厅氛围迷你呼吸小射灯满天星天花

12V星空顶筒灯是一款专为营造浪漫氛围而设计的迷你嵌入式射灯,适用于阳台、卧室、客厅等空间。采用低功耗LED光源,安全节能,光线柔和均匀,支持呼吸模式与满天星效果,可...
¥ 7.65

公牛官方旗舰店开关插座空调16A插座五孔10A面板暗装多孔G12白灰

公牛官方旗舰店提供一系列高质量的开关插座和空调配件。这款16A插座五孔面板采用暗装设计,适用于多种安装环境,如墙面、天花板等。它具有10A的电流容量,可以满足家庭...
¥ 5.55

电位器旋钮电流调节螺帽直流逆变电焊机二保焊送丝机通用旋钮B102

电位器旋钮电流调节螺帽适用于直流逆变电焊机和二保焊送丝机,是一款通用的旋钮B102。该旋钮采用优质材料制造,具有耐磨损、耐高温、耐腐蚀等特点,能够长时间稳定运行...
¥ 0.7

喜美诺排插插座面板多孔排插家用宿舍接线板插排国标线板延长线

喜美诺排插,一款精心设计的多孔插座面板,专为家庭和宿舍环境而造。它不仅提供便捷的接线体验,更符合国标安全标准,确保使用过程中的安全与稳定。这款排插采用高质量材...
¥ 11.9

O型圈氟橡胶圆条丁腈胶硅胶垫片防水O三元乙丙EPDM密封件骨架油封

O型圈、氟橡胶圆条、丁腈胶、硅胶垫片、三元乙丙(EPDM)密封件及骨架油封是广泛应用于机械、汽车、航空航天及建筑等领域的关键密封元件。氟橡胶耐高温、耐腐蚀,适用...
¥ 1

网站栏目