#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar bb;
uint n;
void init();
void main()//主函数
{
init();
while(1)
{
display(n);//显示函数就没放上来。
}
}
void init()//初始化函数
{
n=0;
bb=0;
EA=1;//开总中断
ET1=1;//定时器1中断允许
TMOD=0x11;//T1为16位定时模式
TH1=0;//装定时器1初值
TL1=0;
IT1=1;//外部中断1下降沿触发方式
EX1=1;//开外部中断1
}
void int1() interrupt 2//外部中断1中断函数
{
if (bb==0)//一次测量开始
{
EX1=0;//关外部中断1
TR1=1;//开定时器1
bb=1;
}
else//一次测量结束
{
EX1=0;
n=3535;
TR1=0;//定时器1停止
bb=0;
}
}
void time1() interrupt 3//定时器1中断函数
{
n++;//定时器1溢出一次n++
if (n==30)//11.0592MHz晶振,溢出30次大约为2.13333秒。
{
EX1=1;//开外部中断1
}
}
/*---------------
为什么运行的情况是:给INT1下降沿,n的值一直++ 到30 然后突然变成3535.
我只是在程序一开始时给了INT1一个下降沿,怎么在n++到30,程序自己跳到 中断函数?,而不是等我再一次中断,n才变成3553?
求助,感谢!------------*/
我需要在外部再有中断的时候才能将 3535赋值给 n。。。 但为什么MCU不听话。。。