单片机c语言函数中断函数(中断服务程序)

单片机c语言函数中断函数(中断服务程序)

ID:8823517

大小:17.47 KB

页数:2页

时间:2018-04-08

单片机c语言函数中断函数(中断服务程序)_第1页
单片机c语言函数中断函数(中断服务程序)_第2页
资源描述:

《单片机c语言函数中断函数(中断服务程序)》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、单片机_C语言函数_中断函数(中断服务程序)     在开始写中断函数之前,我们来一起回顾一下,单片机的中断系统。     中断的意思(学习过微机原理与接口技术的同学,没学过单片机,也应该知道),我们在这里就不讲了,首先来回忆下中断系统涉及到哪些问题。    (1)中断源:中断请求信号的来源。(8051有3个内部中断源T0,T1,串行口,2个外部中断源INT0,INT1(这两个低电平有效,上面的那个横杠不知道怎么加上去))    (2)中断响应与返回:CPU采集到中断请求信号,怎样转向特定的中断服务子程序,并在执行完之后返回被中断程序继续执行。期间涉及到CPU响应中

2、断的条件,现场保护,现场恢复。    (3)优先级控制:中断优先级的控制就形成了中断嵌套(8051允许有两级的中断嵌套,优先权顺序为INT0,T0,INT1,T1,串行口),同一个优先级的中断,还存在优先权的高低。优先级是可以编程的,而优先权是固定的。     80C51的原则是①同优先级,先响应高优先权②低优先级能被高优先级中断③正在进行的中断不能被同一级的中断请求或低优先级的中断请求中断。     80C51的中断系统涉及到的中断控制有中断请求,中断允许,中断优先级控制    (1)3个内部中断源T0,T1,串行口,2个外部中断源INT0,INT1    (2)

3、中断控制寄存器:定时和外中断控制寄存器TCON(包括T0、T1,INT0、INT1),串行控制寄存器SCON,中断允许寄存器IE,中断优先级寄存器IP     具体的是什么,包括哪些标志位,在这里不讲了,所有书上面都会讲。     在这里我们讲下注意的事项     (1)CPU响应中断后,TF0(T0中断标志位)和TF1由硬件自动清0。     (2)CPU响应中断后,在边沿触发方式下,IE0(外部中断INT0请求标志位)和IE1由硬件自动清零;在电平触发方式下,不能自动清楚IE0和IE1。所以在中断返回前必须撤出INT0和INT1引脚的低电平,否则就会出现一次中断

4、被CPU多次响应。     (3)串口中断中,CPU响应中断后,TI(串行口发送中断请求标志位)和RI(接收中断请求标志位)必须由软件清零。     (4)单片机复位后,TCON,SCON给位清零。C51语言允许用户自己写中断服务子程序(中断函数)首先来了解程序的格式:void函数名()interruptm[usingn] {}关键字 interruptm[usingn] 表示这是一个中断函数m为中断源的编号,有五个中断源,取值为0,1,2,3,4,中断编号会告诉编译器中断程序的入口地址,执行该程序时,这个地址会传个程序计数器PC,于是CPU开始从这里一条一条的执行

5、程序指令。n为单片机工作寄存器组(又称通用寄存器组)编号,共四组,取值为0,1,2,3中断号中断源0       外部中断01       定时器02       外部中断13       定时器1中断4       串行口中断这5个中断源的中断入口地址为:(在上一篇文章中讲到的ROM前43个存储单元就是他们,这40个地址用来存放中断处理程序的地址单元,每一个类中断的存储单元只有8B,显然不是中断处理的程序,而是存放着中断处理程序的真正地址)INT0:0003H   0T0:   000BH   1INT1:0013H   2T1:  001BH    3串口:00

6、23H   4中断向量(中断入口地址)=中断号x8+3     前面m意思很清楚,不同的m值表示这个函数是针对不同的中断源,比如m为1是表示它是定时器0的中断函数,如voidtime0()interrupt1{}     那么后面的usingn又是什么意思呢?在正在执行一个特定任务时,有更紧急的事情需要CPU来处理,涉及到中断优先权。高优先权中断低优先权正在处理的程序,所以最好给每个优先程序分配不同的寄存器组。     CPU正在处理某个事件,突然另外一个事件需要处理,于是进入中断后,而你不想将现在执行的程序的各寄存器状态入栈,那么可以把这个中断程序放入另一个寄存器

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

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。