51单片机外部中断问题请教!

单片机型号是STC12C5A60S2,

现在我在软件上设置P3.3(准双向口 置1 )口为外部低电平中断. 当我将P3.3口悬空时软件运行正常 而当我直接用一根杜邦线一头插上P3.3口一头悬空 这时单片机就会进入中断 而且是不稳定的断断序序进入退出!
我本打算将IO通过导线与GND相连.

初步怀疑是IO口弱上拉能力太弱导致接上导线(这时导线是否就像一支待充电的电瓶)的一瞬间被拉低此时IO成为输入口泄掉电流后IO又恢复高电平给导线充电 这样反复循环导致的

如果我上面的怀疑成立那请问下 是将IO置为强上拉然后通过限流电阻串连接地 还是有其它什么好办法求指导!!

void counter(void) interrupt 0
{
EX0=0;
te:
if(P3_2==1)
{ delay1ms(20);
if(P3_2==1)
{
EX0=1;
return;
}
delay1ms(20);
}
goto te;

}
上面说错了是P3.2口

估计是干扰造成的,一般设置成为下降沿触发比较好,若设置为电平触发需保证中断响应后,中断信号应及时搞撤消,防止一次操作,多次进入中断
具体你的中断程序,不知有什么意义,我看逻辑也有点乱,低电平触发后,关中断,若低电平已撤消,高电平来到,则延时20ms后开中断退出,  若高电平显现后又在20ms内消失,则再延时20ms后,进入反复检测的死循环中, 若低电平未撤消,则也进入反复检测的死循环中,其作用大概就是低电平程序停止,直到出现可靠的高电平后恢复运行,倒不如直接检测低电平,低电平进入中断,然后反复检测是否还是低电平,若一直是低电平,就执行延时,偶尔出现的干扰高电平会被过滤掉,若真正出现高电平,则自动退出 这样程序更简单更容易控制
void counter(void) interrupt 0
{
while(P3_2==0)
 {
   delay1ms(20);//延时长则抗高电平干扰能力强
 }

程序抗低电平干扰能力比较弱,但根据你的意图:要可靠的高电平主程序才恢复运行
那么,换名话说,偶尔出现的低电平也会也会使主程序暂时中断,然后自动恢复,也应该是合理的了追问

嗯 中断逻辑就是这样的 当低电平出现时就一直死循环判断是否有可靠的高电平 如果有了 就退出中断

追答

若想防止低电平干扰,是接上拉电阻
 防止高电平干扰, 是接下拉电阻
 高输入阻抗端子极易受干扰

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-03-09
1.51外部中断0函数执行时,又来了个外部中断0信号,那这个中断函数是继续执行还是重新执行? 答:不会执行。只有更高级别的中断出现时,才会停止执行当前中断程序,转而执行新中断。对于同一级或低一级的中断申请...
相似回答