/****************************************
以下程序测试外部中断, 主程序循环控制LED
快速闪烁,外部中断使LED慢闪三次。
但是每次触发外部中断,LED不是慢闪三次,
而是慢闪六次! 不知为什么?请指教,谢谢!
****************************************/
#include "STC12C5Ax.h"
sbit WBZD = P3^2; //将外中断定义为P3.2引脚
sbit LEDF = P1^3; //控制LED发光二极管
//// 全局变量定义
unsigned int TimeJG; //间隔 控制闪烁频率
void delay(unsigned int n) //延时 n 毫秒
{
unsigned int x,y;
for(x=n;x>0;x--)
for(y=110;y>0;y--);
}
void Int0(void) interrupt 0 //外中断处理
{
EX0 = 0; //关闭外中断0,不再接收二次中断
//慢闪三次
LEDF = 0;
delay(2000); //延时 n 毫秒
LEDF = 1;
delay(2000); //延时 n 毫秒
LEDF = 0;
delay(2000); //延时 n 毫秒
LEDF = 1;
delay(2000); //延时 n 毫秒
LEDF = 0;
delay(2000); //延时 n 毫秒
LEDF = 1;
delay(6000); //延时 n 毫秒
EX0=1 ; //开外中断0
}
void main() //主函数
{
EA=1; //开启总中断
EX0=1; //开外中断0
IT0=1; //外中断下降沿触发
while(1)
{
if(TimeJG++ == 0 ) //
{
TimeJG = 30000; //间隔 控制闪烁频率
LEDF = ~LEDF; //翻转 发光二极管闪烁
}
}
}
|