标题:
C51 简单的程序求教,为何会执行两次中断?
[打印本页]
作者:
张小帅1126
时间:
2018-10-27 17:27
标题:
C51 简单的程序求教,为何会执行两次中断?
以下程序的目的是遥控门锁程序,就是我按下按键触发下降沿中断后 执行电动机“正转1秒”,“延时1秒”,“反转1秒”程序如下:
可实验发现,每次中断都执行两个回合以上动作,甚至有时3个回合。
STC15F408as 型单片机。
#include "STC15W4K.H" // 包含 "STC15W4K.H"寄存器定义头文件
sbit P1_4=P1^4; //指示灯
sbit djoff = P1^0; //电机关信号
sbit djon = P1^1; //电机开信号
void delay1S(void) // 22.1184
{
unsigned char i,j,k;
for(i=85;i>0;i--) //注意后面没分号
for(j=40;j>0;j--) //注意后面没分号
for(k=255;k>0;k--); //注意后面有分号
}
void main()
{
// INT0 = 1;
IT0=1; // 设置为下降沿触发
EX0=1; // 开外部中断0
EA=1; // 开总中断
P1_4 = 0;
while(1)
{
if(P1_4 == 1)
{
djoff = 0; //电机正转
delay1S(); //延时一秒
djoff = 1; //电机正转停
delay1S(); //延时一秒
djon = 0; //电机反转
delay1S(); //延时一秒
djon = 1; //电机反转停
delay1S();
delay1S();
delay1S();
P1_4 = 0; //指示灯
EA=1; //开总中断
}
}
}
void EXT0(void) interrupt 0
{
EA=0; //关总中断
P1_4 = 1; //进入中断指示灯
}
作者:
HC6800-ES-V2.0
时间:
2018-10-28 07:29
按键要消抖!!!!!!!!!!
外部中断程序执行时间长,则可以不用消抖,或消抖时间不长。
看我的:
void Int0(void) interrupt 0//外部中断0的中断服务函数
{
Delay10ms(25);
IE0=0;
(中断执行的内容)
Delay10ms(25);
IE0=0;
}
作者:
angmall
时间:
2018-10-28 13:53
硬件消抖试一下呢? 用104电容去抖动,相关电路很多,试一下
作者:
祥子陈
时间:
2018-10-28 19:19
这种动作没必要非用中断吧,直接判断不是更好,还可以自由增加软件延时.
作者:
yzwzfyz
时间:
2018-10-29 09:25
按了一次是你的认知,实际是多少次你说了不算,取决于按钮金属片实际接触、弹开的次数!
作者:
张小帅1126
时间:
2018-10-30 11:20
谢谢大家!
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1