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();执行完后停住了;
单片机外部中断0和外部中断1
答案:2 悬赏:0
解决时间 2021-12-12 17:13
- 提问者网友:你在我眼中是最帅
- 2021-12-12 04:27
最佳答案
- 二级知识专家网友:萌萌哒小可爱
- 2021-12-12 06:05
不知你 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();执行一次要多长时间?若时间很短的话,有可能一直执行下去,因你不断地把 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()两条语句占用时间不是定值的话,执行情况就更复杂了
全部回答
- 1楼网友:许你一世温柔
- 2021-12-12 07:22
你想要的结果是不是应该要把While(1)中的第一个Time1=0去掉。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯