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

返回值类型 函数名( )interrupt m [using n]<?XML:NAMESPACE PREFIX = O />

{

函数体

}

关键词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语言程序 中断函数示例,单片机中断应用的C语言编程 -解决方案-华强电子网相关推荐

  1. 单片机看门狗c语言,单片机看门狗程序 -解决方案-华强电子网

    *此程序实现单片机"看门狗"WDT的功能*/ #include"p18f458.h" unsignedlongi; /*系统初始化子程序*/ voidiniti ...

  2. 单片微型计算机简称单片机是指集成,什么是单片微型计算机 -解决方案-华强电子网...

    单片微型计算机(Single Chip Microcomputer),简称单片机,是指集成在一块芯片上的计算机,它具有集成度高.体积小.功能强.使用灵活.价格低廉.稳定可靠等独特的优点,因而广泛应用于 ...

  3. c语言程序 中断函数示例,单片机_C语言函数_中断函数(中断服务程序)

    c语言中的中断函数注意事项 单片机_C语言函数_中断函数(中断服务程序) 在开始写中断函数之前,我们来一起回顾一下,单片机的中断系统. 中断的意思(学习过微机原理与接口技术的同学,没学过单片机,也应该 ...

  4. c语言程序 5ms 延时,计算机单片机延时方法电脑c语言.docx

    计算机单片机延时方法电脑C 语言 您需要登录后才可以回帖登录| 注册发布 单片机是一种集成电路芯片,是采用超大规模集成电路技术把 具有数据处理能力的中央处理器CPU.随机存储器RAM.只读存储器 RO ...

  5. 电子时钟单片机c语言程序,一款51单片机电子钟制作(C语言)

    //主程序/ void main()//主程序开始 { chushi();//初始化 while(1)//大循环 { if(g!=1)//如果g不等于1,就执行下一句,否则跳过下一句 disy(fen ...

  6. at89c52串口通信c语言程序,AT89C52DEMO 基于51单片机的(89C51/52)C语言源码例程 - 下载 - 搜珍网...

    例程与源码/12864带字库测试程序/12864 例程与源码/12864带字库测试程序/12864.hex 例程与源码/12864带字库测试程序/12864.lnp 例程与源码/12864带字库测试程 ...

  7. c语言ax2bxc0,c语言程序用函数怎么输出ax2bxc=0?用C语言编号一个程序, 爱问知识人...

    解一元二次方程a x2 b x c = 0,a.b.c由键盘输入. 分析:对系数a.b.c考虑以下情形 1) 若a = 0: ① b 0,则x=-c/b : ② b = 0, 则:① c = 0, 则 ...

  8. 51单片机C语言程序100例分析(1)IO+C语言+头文件

    51单片机C语言程序100例分析(1)IO+C语言+头文件 \\\插播一条:文章末尾有惊喜哟~///  P1=0xfe;//P1=11111110B,即P1.0输出低电平} 分析:通过这短短的几行代码 ...

  9. 在c语言中 函数的作用是什么,C语言程序中函数的定义

    C语言程序中函数的定义 C语言的函数问题是困扰很多学者的问题的,c程序中什么是函数呢?下面啦小编为大家精心推荐的c程序中函数的定义,希望能够对您有所帮助. C语言读书笔记--函数 先来看看函数的一般形 ...

  10. 打豆豆游戏c语言编程,C语言程序打豆豆(函数版)分享!

    [项目] 设计一个程序,能重复地在显示下面的信息: 根据用户输入的选项,输出一句提示性的话语(将来会对应实现某个功能).输入0,则退出. 要求将各功能定义专门的函数. 参考解答: #include # ...

最新文章

  1. jeecgboot前端开发_一款基于代码生成器的Java快速开发平台【jeecg-boot】
  2. mysql left join 空值_MYSQL Left Join如何选择NULL值?
  3. android中判断sim卡状态和读取联系人资料的方法
  4. 分数转小数C语言,这是把小数转换成分数的程序,可是输入0.6666无限循环
  5. pip/conda导出 requirements.txt 注意事项
  6. LeetCode 1176. 健身计划评估(滑动窗口)
  7. 容器编排技术 -- Kubernetes kubectl annotate 命令详解
  8. 一个简单的Eclipse调试Debug流程(四)
  9. 在频域上,随机接入前导占用()个资源块对应的带宽
  10. 如何去除360浏览器“网页走丢了”页面广告
  11. 估计理论(1):最小方差无偏估计(第2章)
  12. 原生js追加html代码,原生js动态添加元素
  13. FAT文件系统简明教程
  14. OSI七层模式简单通俗理解
  15. 调查上网行为管理软件(或设备)
  16. Python数据分析与挖掘实战第三章笔记之贡献度分析代码
  17. 图解splay / splay模板 / p3369
  18. 计算机科学与技术高校毕业生要求,计算机科学与技术 毕业要求(2020)
  19. android官方模拟器下载安装,网易MuMu模拟器
  20. 判断设备访问类型是PC端还是WAP端

热门文章

  1. word2007打印在什么地方
  2. LM2596DC -DC模块测试记录
  3. “大数据杀熟”将被明令禁止:亚马逊才是大数据杀熟算法的鼻祖
  4. CSS3实现缺角矩形,缺角边框以及折角矩形
  5. 怎么用计算机打游戏视频,如何录制电脑上正在玩的游戏视频
  6. 加拿大高中课程计算机科学,加拿大高中课程
  7. Laravel文档阅读笔记-How to deploy Laravel 8 project on Cpanel shared hosting
  8. 计算机软件如何助力科研,研究生必备科研绘图软件,助力科学研究
  9. 多通道振弦传感器VTN416采集仪应用工程项目安全监测实用性强
  10. 办公环境大改造 澳洲健康食品激活生活每一天 VTN品牌俱乐部把关你的品质生活