?
一,51单片机的中断系统
51单片机中有5个中断源这里使用的是外部中断0:INT0。
上面是51单片机的中断系统结构,这决定了你的中断向量,也就是中断初始函数需要如何写,首先图中INT0?代表着外部的输入,我们需要让IT0,EX0,EA等于1。接下来是中断服务函数的书写
1,中断函数不能有返回值,且不能带参数。
2,中断函数名括号后面要加 interrupt 来表明这个是一个中断服务函数。?
3,interrupt后面要加中断号。
?如INT0的中断号为0。
二,代码部分
#include <reg52.h>
#include <intrins.h>
sbit L1=P0^0;
sbit L8=P0^7;
void Delay100ms() //@12.000MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 5;
j = 144;
k = 71;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void HC138()
{
P2=(P2&0x1f)|0x80;
}
void Working()
{ HC138();
L1=0;
Delay100ms();
L1=1;
Delay100ms();
}
void Ini_INT0()
{
IT0=1;
EX0=1;
EA=1;
}
unsigned char State=0;
void ServiceINT0() interrupt 0
{
State=1;
}
void LED()
{
if(State==1)
{
HC138();
L8=0;
Delay100ms();
Delay100ms();
Delay100ms();
Delay100ms();
Delay100ms();
L8=1;
}
State=0;
}
void Inisystem()
{
P2=(P2&0x1f)|0xa0;
P0=0x00;
HC138();
P0=0xff;
}
void main()
{
Inisystem();
Ini_INT0();
while(1)
{
Working();
LED();
}
}
?这个代码需要注意的地方是中断服务函数是中断后处理的程序,但是有一个需要注意的地方就是尽量不要让里面有过多的执行内容,所以我们这里采用了一个状态量的变化,把该执行的内容放在LED这个函数里面。
|