1。单片机有个中断入口地址,产生中断后CPU自动从中断向量取得入口地址,然后从这个地址执行程序 。如果你用汇编写代码,你会发现main函数其实也是一个中断函数,是个复位中断,和其它中断不同处是main没有返回。要执行中断里面的代码必须让程序指针指到中断里的代码,一是通过触发中断,二是手动改变PC指针(汇编直接用jmp指令跳转.C由于编译器的限制比较难实现,可以嵌入汇编实现)(void)interrupt n(using m)函数是个中断函数,当这个中断产生后,CPU就会通过中断向量找到这个函数的地址(中断入口),然后执行此函数,结束后返回主函数。8051的中断系统包括5个中断源,并提供两个优先级,允许用户对中断源进行独立控制和中断优先级设置
2。8051支持的5个中断源分别为外部中断0、定时器0溢出中断、外部中断1、定时器1溢出中断和串口中断。对应的中断号为0、1、2、3、4;寄存器有4个工作组可以切换,为0-3; C51中,中断服务程序是以中断函数的方式来时实现的。中断函数格式如下:void 函数名() interrupt 中断号 using 工作组{ 中断服务程序内容;}
3。中断的函数名师自己定义的,但是必须在后面加入关键字“interrupt x”,其中“x”是中断向量的编号(中断向量号对应的中断查看任何一本讲解51的书),主函数中不需要写什么语句来跳转到中断函数,因为你定义好中断向量号时,就是定义好了中断的入口地址,因为单片机响应中断是在执行程序的过程中,每个周期都会扫描中断标志位,来判断执行什么中断,比如定时器的定时到了,那么硬件就会自动将对应定时中断标志置为1,此时CPU扫描到这个中断标志为1时,就会自动跳到你定义好的中断函数执行。