单片机外部中断0和外部中断1

int0() interrupt 0 using 0
{

time1++;

}
time0() interrupt 3 using 2{

}
int1() interrupt 2 using 1{
time2++;
}
void main()
{
time1=0,time2=0;//外部中断个数清零
TMOD=0X10;//定时器T0方式1
EA=1;//CPU开中断
ET1=1;//允许定时器T0开中断
EX0=1;EX1=1;
TR1=1;//启动T0
IT0=0;//低电平触发
IT1=0;//低电平触发

while(1)
{ if(time1<10)
{ time1=0;
EW_FREE_SN_FREE();
}else if(time1<20)
{ time1=0;
EW_FREE_SN_NOR();
}
}
}
为什么当中断次数11时,程序 EW_FREE_SN_FREE();执行完后停住了;

不知你 time2 是否有用
EW_FREE_SN_FREE();执行一次要多长时间?若时间很短的话,有可能一直执行下去,因你不断地把 time1清0,time1<10永远满足 若时间较长的话,执行一次 EW_FREE_SN_FREE()后发现 不仅time1>10 而且 time1>20, 所以EW_FREE_SN_NOR()执行不了,但你说的中断次数为11,再次偱环 到else if(time1<20)时 EW_FREE_SN_NOR()应该可执行1次
EW_FREE_SN_NOR()执行时间不超过10次中断的话,又回到 if(time1<10)而执行 EW_FREE_SN_FREE(); 这也许是你想要和结果

若EW_FREE_SN_NOR()执行时间超过10次不超过20次中断的话,程序在此此反复执行

若EW_FREE_SN_NOR()执行时间超过20次中断的话,程序跑飞,两条语句都不执行,我也不知当time1溢出后它会不会回来
 若EW_FREE_SN_FREE()和EW_FREE_SN_NOR()两条语句占用时间不是定值的话,执行情况就更复杂了追问

EW_FREE_SN_FREE()是26+26=54s

EW_FREE_SN_NOR()是26+52=78s
要怎么修改啊

追答

我不知中断一次是多少S?假设是5S 的话
去掉第1个time1=0
while(1)
{ if(time110)&&(time1>25))
{
 time1=0;
EW_FREE_SN_NOR();
}
}
这样实际成了顺序执行,要if语句已无作用
while(time1<26)
{
  EW_FREE_SN_FREE();
  EW_FREE_SN_NOR();
  time1=0;
}
不知你程序其它部分,单看这部分推测的,用了那么多中断, 不知冲突否?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-04-21
你想要的结果是不是应该要把While(1)中的第一个Time1=0去掉。
相似回答