打印

c51中断函数的介绍 需要的请摘录

[复制链接]
2884|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
doublers|  楼主 | 2008-4-6 13:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C51编译器允许用c51创建中断服务程序,大家仅仅需要关心中断号和寄存器组的选择就可以了。编译器自动产生中断向量和程序的入栈及出栈代码。在函数声明时包括interrupt,将把所声明的函数定义为一个中断服务程序。另外,可以用using定义此中断服务程序所使用的寄存器组。

中断函数的定义
中断函数定义的格式为:
函数类型  函数名 interrupt n using n

其中:
Interrupt后面的n是中断号。
关键字using后面的n是所选择的寄存器组,取值范围是0-3.

定义中断函数时,using是一个选项,可以省略不用。如果不用则由编译器选择一个寄存器组作为绝对寄存器组。

8051的中断过程通过使用interrupt关键字和中断号来实现,中断号告诉编译器中断程序的入口地址。中断号对应着IE寄存器中的使能位,换句话说,IE寄存器中的0位对应着外部中断0,相应的外部中断0的中断号是0.
IE寄存器中的使能位与外部中断对应关系:

    中断号        中断源
0    外部中断0
1    定时器0
2    外部中断1
3    定时器1中断
4    串行口中断
5    定时器2中断


使用中断函数时要注意的问题:
1.    在设计中断时,要注意的是哪些功能应该放在中断程序中,哪些功能应该放在主程序中。一般来说中断服务程序应该做最少量的工作,这样做有很多好处。首先系统对中断的反应面更宽了,有些系统如果丢失中断或对中断反应太慢将产生十分严重的后果,这时有充足的时间等待中断是十分重要的。其次它可使中断服务程序的结构简单,不容易出错。
 中断程序中放入的东西越多,他们之间越容易起冲突。简化中断服务程序意味着软件中将有更多的代码段,但可把这些都放入主程序中。中断服务程序的设计对系统的成败有至关重要的作用,要仔细考虑各中断之间的关系和每个中断执行的时间,特别要注意那些对同一个数据进行操作的ISR.
2.    中断函数不能传递参数。
3.    中断函数没有返回值。
4.    中断函数调用其他函数,则要保证使用相同的寄存器组,否则出错。
5.    中断函数使用浮点运算要保存浮点寄存器的状态。

相关帖子

沙发
ayb_ice| | 2008-4-7 10:16 | 只看该作者

最后的5点不对

你这是老版本的C51问题了

使用特权

评论回复
板凳
doublers|  楼主 | 2008-4-7 19:38 | 只看该作者

呵呵

是么?谢谢纠正,现在是不是不再存在这样的注意事项了?

使用特权

评论回复
地板
SupermanTm| | 2008-4-7 19:56 | 只看该作者

我一贯用汇编做中断程序的

使用特权

评论回复
5
doublers|  楼主 | 2008-4-7 20:20 | 只看该作者

4楼兄弟是不是汇编和c一块用啊?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

37

帖子

0

粉丝