10.2 外部中断源的C51程序设计

8051单片机提供了两个外部中断源,figure_0295_0134figure_0295_0135,下面分别进行介绍。

figure_0295_0136中断,外部中断0请求,占用P3.2引脚,其中断请求号为0。

figure_0295_0137中断,外部中断1请求,占用P3.3引脚,其中断请求号为2。

这里举例讲解外部中断的C51程序设计。假设外部中断0和外部中断1均为下降沿触发,当外部中断0发生的时候,P0端口的电平反向;当外部中断1发生的时候,P1端口的电平反向。如果采用C51语言进行程序设计,其程序示例如下。


include<reg51.h>//头文件

void ISR0(void)interrupt 0//外部中断0服务例程

{

P0=~P0;//P0端口反相

}

void ISR1(void)interrupt 2//外部中断1服务例程

{

P1=~P1;//P1端口反相

}

void main(void)//主函数

{

P0=0x00;

P1=0xFF;

IP=0x05;//外部中断0和外部中断1设置为高优先级

IT0=1;//外部中断0为下降沿触发

IT1=1;//外部中断1为下降沿触发

EX0=1;//开EX0中断

EX1=1;//开EX1中断

EA=1;

while(1)//主循环

{

}

}


该程序可以在KeilµVision3集成开发环境中执行。在该程序中,分别定义了外部中断0的服务例程为ISR0,外部中断1的服务例程为ISR1。在主函数中,首先初始化P0端口和P1端口;然后将外部中断0和外部中断1设置为高优先级,并设置为下降沿触发方式;最后打开相应的中断,并将EA赋值为1打开总中断。在主循环中不进行任何操作,CPU等待外部中断的发生。

figure_0296_0138(P3.2引脚)和口和P1端口反向。figure_0296_0139(P3.3引脚)有负跳变时,将触发相应的外部中断,分别置P0端口和P1端口反向。