中断服务程序写法

上传人:cn****1 文档编号:564440968 上传时间:2022-09-18 格式:DOCX 页数:4 大小:12.84KB
返回 下载 相关 举报
中断服务程序写法_第1页
第1页 / 共4页
中断服务程序写法_第2页
第2页 / 共4页
中断服务程序写法_第3页
第3页 / 共4页
中断服务程序写法_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《中断服务程序写法》由会员分享,可在线阅读,更多相关《中断服务程序写法(4页珍藏版)》请在金锄头文库上搜索。

1、单片机中断服务函数写法总结广东阳西福达名苑梁智钧(电子工程师)一、在开始写中断函数之前,我们来一起回顾一下,单片机的中断系统。(1)中断源:中断请求信号的来源。(8051有3个内部中断源T0,T1,串行口, 2个外部中断源INTO, INT1 (这两个低电平有效。(2)中断响应与返回:CPU采集到中断请求信号,怎样转向特定的中断服务子程 序,并在执行完之后返回被中断程序继续执行。期间涉及到CPU响应中断的条件,现 场保护,现场恢复。(3)优先级控制:中断优先级的控制就形成了中断嵌套(8051允许有两级的中 断嵌套,优先权顺序为INTO, TO, INT1, T1,串行口),同一个优先级的中断,

2、还 存在优先权的高低。优先级是可以编程的,而优先权是固定的。80C51的原则是同优先级,先响应高优先权低优先级能被高优先级中断正 在进行的中断不能被同一级的中断请求或低优先级的中断请求中断。80C51的中断系统涉及到的中断控制有中断请求,中断允许,中断优先级控制(1)3个内部中断源T0, T1,串行口,2个外部中断源INT0, INT1(2)中断控制寄存器:定时和外中断控制寄存器TCON (包括T0、T1, INT0、 INT1),串行控制寄存器SCON,中断允许寄存器IE,中断优先级寄存器IP具体的是什么,包括哪些标志位,在这里不讲了,所有书上面都会讲。在这里我们讲下注意的事项(1) CPU

3、响应中断后,TF0 (T0中断标志位)和TF1由硬件自动清0。(2) CPU响应中断后,在边沿触发方式下,IEO (外部中断INTO请求标志位)和IE1由硬件自动清零;在电平触发方式下,不能自动清楚IE0和IE1。所以在中断 返回前必须撤出INTO和INT1引脚的低电平,否则就会出现一次中断被CPU多次响 应。(3)串口中断中,CPU响应中断后,TI (串行口发送中断请求标志位)和RI (接 收中断请求标志位)必须由软件清零。(4)单片机复位后,TCON,SCON给位清零。C51语言允许用户自己写中断服务子程序(中断函数)首先来了解程序的格式:void 函数名()interrupt m usi

4、ng n关键字interrupt m using n表示这是一个中断函数m为中断源的编号,有五个中断源,取值为0,1,2,3,4,中断编号会告诉编译器中断 程序的入口地址,执行该程序时,这个地址会传个程序计数器PC,于是CPU开始从 这里一条一条的执行程序指令。n为单片机工作寄存器组(又称通用寄存器组)编号,共四组,取值为0,1,2,3中断号中断源0外部中断01 定时器02 外部中断13 定时器1中断4 串行口中断这5个中断源的中断入口地址为:(在上一篇文章中讲到的ROM前43个存储单元就是他们,这40个地址用来存放中断处理程序的地址单元,每一个类中断的存储单元只 有8B,显然不是中断处理的程

5、序,而是存放着中断处理程序的真正地址)INTO: 0003H0TO:000BH1INT1: 0013H2T1:001BH3串口: 0023H4中断向量(中断入口地址)=中断号x8 +3前面m意思很清楚,不同的m值表示这个函数是针对不同的中断源,比如m为1是表示它是定时器0的中断函数,如 void time0 () interrupt 1那么后面的using n又是什么意思呢?在正在执行一个特定任务时,有更紧急的 事情需要CPU来处理,涉及到中断优先权。高优先权中断低优先权正在处理的程序, 所以最好给每个优先程序分配不同的寄存器组。CPU正在处理某个事件,突然另外一个事件需要处理,于是进入中断后

6、,而你不 想将现在执行的程序的各寄存器状态入栈,那么可以把这个中断程序放入另一个寄存 器组,如切换到1组,然后退出中断时,再切回到0组(原来的程序在0组)。为了更好的了解这里意思,你可以看看工作寄存器组的作用是什么。下面的注意事项转自网络上其他朋友的文章(整理下,重复的去掉了,写的非常好):(1) 中断函数不能进行参数传递(2) 中断函数没有返回值(3) 在任何情况下都不能直接调用中断函数(4) 中断函数使用浮点运算要保存浮点寄存器的状态。(5) 如果在中断函数中调用了其它函数,则被调用函数所使用的寄存器必须与中断函 数相同,被调函数最好设置为可重入的。(6) C51编译器对中断函数编译时会自

7、动在程序开始和结束处加上相应的内容,具体 如下:在程序开始处对ACC、B、DPH、DPL和PSW入栈,结束时出栈。中断函数 未加using n修饰符的,开始时还要将R0R1入栈,结束时出栈。如中断函数加using n修饰符,则在开始将PSW入栈后还要修改PSW中的工作寄存器组选择位。(7) C51编译器从绝对地址8m + 3处产生一个中断向量,其中m为中断号,也即 in te rrupt后面的数字。该向量包含一个到中断函数入口地址的绝对跳转。(8) 中断函数最好写在文件的尾部,并且禁止使用extern存储类型说明。防止其它 程序调用。(9) 在设计中断时,要注意的是哪些功能应该放在中断程序中,哪些功能应该放在主 程序中。一般来说中断服务程序应该做最少量的工作,这样做有很多好处。首先系统 对中断的反应面更宽了,有些系统如果丢失中断或对中断反应太慢将产生十分严重的 后果,这时有充足的时间等待中断是十分重要的。其次它可使中断服务程序的结构简 单,不容易出错。中断程序中放入的东西越多,他们之间越容易起冲突。简化中断服 务程序意味着软件中将有更多的代码段,但可把这些都放入主程序中。中断服务程序 的设计对系统的成败有至关重要的作用,要仔细考虑各中断之间的关系和每个中断执 行的时间,特别要注意那些对同一个数据进行操作的ISR.

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号