欢迎来到天天文库
浏览记录
ID:38152919
大小:116.67 KB
页数:3页
时间:2019-05-27
《C51的中断函数》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、C51的中断函数C51编译器允许用C51创建中断服务程序。仅仅需要关心中断号与寄存器组的选择就可以了。编译器自动产生中断向量与程序的入栈及出栈代码。在函数声明时包括interrupt,将把所声明的函数定义为一个中断服务程序。另外,可以用using定义此中断服务程序所使用的寄存器组。(关于51单片机的中断系统可以阅读相关章节)在介绍中断函数的定义之前,先来介绍一个51单片机的通用工作寄存器区:00H~1FH单元共32个字节,是4个通用工作寄存器区,每个区含8个寄存器,编号为R0~R7。在专用寄存器PSW(程序状态字)中由RS0、RS1来确定采用哪一个工作寄存
2、器区。若程序中并不需要4组工作寄存器,那么剩下的工作寄存器区所对应的单元也可以作一般的数据缓冲器使用。(1)中断函数的定义:中断函数定义的格式为:函数类型函数名interruptnusingn其中:1.interrupt后面的n是中断号。2.关键字using后面的n是所选择的寄存器组,取值范围是0~3。(这里所说的0~3号寄存器组就是上面所述的4个通用工作寄存器区)定义中断函数中,using是一个选项,可以省略不用。如果不用using选项,则由编译器选择一个寄存器组作为绝对寄存器组。51单片机的中断过程通过使用interrupt关键字与中断号来实现,中断号
3、告诉编译器中断程序的入口地址。中断号对应着IE寄存器中的全能位,换句话说,IE寄存器中的0位对应着外部中断0,相应的外部中断0的中断号是0。(关于IE寄存器的详细内容请参加相关章节)IE寄存器中的全能位与外部中断对应关系如下表:IE寄存器中的使能位与C51中的中断号中断源0外部中断01定时器0溢出2外部中断13定时器1溢出4串行口中断5定时器2溢出以下是两个中断函数的例子,分别是串口与定时器0中断:voidsio_int()interrupt4using3{//中断处理程序}voidtimer0(void)interrupt1{//中断处理程序}以上只是简
4、单的例子,完整详细的对中断系统的讲解请见专门的章节。使用中断函数时要注意的几个问题:1)在设计中断地,要注意的是哪些功能应该放在中断程序中,哪些功能应该放在主程序中。一般来说中断服务程序应该做最少量的荼,这样做有很多好处。首先系统对中断的反应面更宽了,有些系统如果丢失中断或对中断反应太慢将产生十分严重的后果。这时有充足的时间等待中断是十分重要的。其次它可使中断服务程序的结构简单,不容易出错。2)中断函数不能传递参数。3)中断函数没有返回值。4)中断函数调用其他函数,则要保证使用相同的寄存器组,否则出错。5)中断函数使用浮点运算要保存浮点寄存器的状态。(2)
5、C51的库函数C51的开发环境提供了很多短小精悍的函数,可以很方便地使用。如:#include#include/*此程序用以说明C51库函数的使用*/voidmain(){floatx=2.00,y;y=cos(x);//调用数学库中的余弦函数while(1);}在本书后面的章节中有结C51库函数的详细介绍,敬请翻阅。
此文档下载收益归作者所有