界说中止服务函数
函数类型 函数名 (形式参数) interrupt n [using n]
中止号 中止源 中止向量
0 外部中止0 0003H
1 定时器/计数器0 000BH
2 外部中止1 0013H
3 定时器/计数器1 001BH
4 串行口 0023H
interrupt 关键字是不行短少的,由它告知编译器该函数是中止服务函数,并由后边的
n 指明所运用的中止号。n 的取值规模为0-31,但详细的中止号要取决于芯片的类型,像
AT89C51 实际上就运用0-4 号中止。每个中止号都对应一个中止向量,详细地址为8n+3,
中止源呼应后处理器会跳转到中止向量地点的地址履行程序,编译器会在这地址上发生一个
无条件跳转句子,转到中止服务函数地点的地址履行程序。下表是51 芯片的中止向量和中
断号。
楼上qmt现已大致给你介绍清楚了中止函数的界说,值得提出的是,中止函数类型void,阐明中止函数是不能有返回值的,这点要清晰,所以不要妄图让中止函数给你个返回值。还有,函数名后边括弧内是没有参数的。。。这点也需求留意,中止函数不能传递参数。
interrupt 后边的点是中止号。要点我给你解说下using。
这是C51编译器扩展的关键字。用来挑选80c51单片机中不同的寄存器组,你也知道R0-R7总共有4组,那么using 后边的数字也便是0-3规模里的一个数了。假如不需求using的话,编译器会主动挑选一组寄存器作为肯定寄存器拜访的。
using对代码是有必定的影响的。
给你说个简略的比如,你能够想下,
假如界说
void time0() interrupt 1 using 1
假定,咱们又在中止里调用了一个delay();这个delay是起延时效果。
那么,咱们就需求保证咱们运用的寄存器组是同一组,不然,就会呈现紊乱。
这样说你能理解么?
所以,我主张你,不必要时不要运用using。不过,你能够试下这个关键字。
祝你学习顺畅。
LX efenwu:
简略来说,51有4组通用寄存器,R0~R7,咱们在运用的时分,历来就没有指明用的是哪个R0,编译器就会主动选一组通用寄存器作为肯定地址拜访。在c语言中,咱们写一个函数,例如延时函数,里边用的变量,反汇编之后便是在运用R0-R7,那么你能确认你运用的是哪一组寄存器吗?
所以说,运用using能挑选运用的寄存器组,但一起在“切换”时要特别当心。你在中止程序里调用其他程序就会呈现寄存器组切换问题。。
其实using还有其他的留意当地,由于运用费事,我历来不必这个关键字。这也便是我为什么不引荐楼主用using。编译器会自己挑选一组嘛。
所以只需这样界说一个中止函数就行了:
void FuncName() interrupt lvl
其间lvl便是中止的优先级序号。