第一、单片机中断程序怎么编写?答:单片机的中断程序对应有相应的中断向量号,例如对于标准51单片机来说,一共有定时器0、1中断,串行通讯中断、外部中断0、1中断。对应的中断向量号分别如下:
外部中断0——0
外部中断1——2
定时器0中断——1
定时器1中断——3
串行中断——4
定时器2中断(52系列)——5
因此可以在头文件中定义中断向量号如下:
//Interrupts definiations
#define T0_INTERRUPT 1
#define T1_INTERRUPT 3
#define T2_INTERRUPT 5
#define INTERRUPT_EXTERNAL_0 0
#define INTERRUPT_EXTERNAL_1 2
在Keil C51中定义了关键字interrupt来定义中断函数,需要注意的是中断函数必需是无参数无返回值的。例如假设要定义定时器0中断函数,可以如下定义:
void Timer0_ISR(void) interrupt T0_INTERRUPT using 0
{
//定时器中断响应处理
}
注意using 0是可选的,即可要可不要。关于using的使用,论坛的embed写过专门的帖子:
using的使用。
二、中断函数怎么调用?答:很多初学者都认为中断函数是需要在主函数或其他函数中调用才能执行的,事实上,中断函数是由单片机自行完成调用的。即当有中断发生时,单片机的硬件会保存当前的程序指针(PC),之后自动跳转到中断程序入口执行中断函数代码,执行完之后在返回PC指向的程序地址继续运行之前的代码
文章评论(0条评论)
登录后参与讨论