单片机/MCUwilliam hill官网
直播中

9年用户 51经验值
擅长:模拟技术
私信 关注
[问答]

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

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

void Int0_interrupt() interrupt 0
{
    LED = ~LED;
    while(Direction_Middle == 0);
}


当外部中断触发,LED翻转。等待Direction_Middle == 1时,不是应该跳出中断函数吗?
而现实情况是等到Direction_Middle == 1后,LED再次翻转。这不就是外部中断一次,执行了两次外部中断函数??

测试程序
#include "stc12c5a60s2.h"

***it LED = P2^3;
***it 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,灯也跟着翻转,这是为什么?而且有时有翻转有时没有。

回帖(9)

人中狼

2017-5-23 15:23:21
你需要确定是你所说的情况进了两次中断,还是你的中断触发信号有两次,需要看你的威廉希尔官方网站 还有中断的设置
举报

2017-5-23 15:38:40
引用: 人中狼 发表于 2017-5-23 15:23
你需要确定是你所说的情况进了两次中断,还是你的中断触发信号有两次,需要看你的威廉希尔官方网站 还有中断的设置

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

2017-5-23 19:18:47
自顶
举报

前门扫地

2017-5-23 20:26:05
你使用外部中断,中断函数里面都不需要while了
举报

2017-5-23 20:37:55
引用: 前门扫地 发表于 2017-5-23 20:26
你使用外部中断,中断函数里面都不需要while了

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

前门扫地

2017-5-23 21:03:48
引用: 蔡聪 发表于 2017-5-23 20:37
我做智能小车,外部中断函数中的while是为了使小车转到一定的位置。所以需要使用while

那那个while也没意义
举报

2017-5-23 21:56:50
引用: 前门扫地 发表于 2017-5-23 21:03
那那个while也没意义

转弯;
while(转到一定位置);
退出外部中断。

这个while就是这个意思
举报

李波

2017-5-27 14:00:19
按键需要消抖处理。不消抖容易误触
举报

某某阳

2017-5-27 19:40:23
应该是按键的抖动问题,应该在软件上进行消抖。多次进入了中断,因为速度非常快所以你觉得错了。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分