微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > stc12c5a60s2的外部中断 为什么会执行两次外部中断函数?

stc12c5a60s2的外部中断 为什么会执行两次外部中断函数?

时间:10-02 整理:3721RD 点击:
stc12c5a60s2的外部中断 为什么会执行两次外部中断函数?
void Int0_interrupt() interrupt 0
{
    LED = ~LED;
    while(Direction_Middle == 0);
}

当外部中断触发,LED翻转。等待Direction_Middle == 1时,不是应该跳出中断函数吗?
而现实情况是等到Direction_Middle == 1后,LED再次翻转。这不就是外部中断一次,执行了两次外部中断函数?
测试程序
#include "stc12c5a60s2.h"
sbit LED = P2^3;
sbit KEY2 = P2^0;
void main()
{
        IT0 = 1;
        EX0 = 1;
        EA = 1;
        LED = 1;
        while(1);
}
void INTO_interrupt(void) interrupt 0
{
        LED = ~LED;
        while(KEY2 == 1);
}
现象:按下KEY1触发外部中断,灯翻转。按下KEY2,灯也跟着翻转,这是为什么?而且有时有翻转有时没有。

你需要确定是你所说的情况进了两次中断,还是你的中断触发信号有两次,需要看你的电路还有中断的设置

只启用了外部中断0和1,可以确定只触发了其中一个,也可以确定只触发了一次。所以就是奇了怪。

自顶

你使用外部中断,中断函数里面都不需要while了

我做智能小车,外部中断函数中的while是为了使小车转到一定的位置。所以需要使用while

那那个while也没意义

转弯;
while(转到一定位置);
退出外部中断。
这个while就是这个意思

按键需要消抖处理。不消抖容易误触

应该是按键的抖动问题,应该在软件上进行消抖。多次进入了中断,因为速度非常快所以你觉得错了。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top