标题:
使用单片机外部中断遇到了一点问题,上电的时候无法检测外部中断低电压
[打印本页]
作者:
一生太多遗憾
时间:
2023-7-8 18:50
标题:
使用单片机外部中断遇到了一点问题,上电的时候无法检测外部中断低电压
各位大佬帮忙看看
使用的外部中断1;低电平触发
想要实现的功能是;1、上电时默认进入while(1)主程序(每秒闪2次)。
2、中断程序(每秒闪5次)。
3、如果检测到外部中断为低电平“执行外部中断程序”、如果外部中断为高电平“执行while(1)主程序”。注释;外部中断源是一个按键;当按键按下是接地触发外部中断。当松开按键为高电平是回到主程序。
4、上电时如果外部中断为低电平,则直接进入中断程序。注释;如果在上电前按下按键时。
现在的问题是;第1、和第2,第3步,都是实现了。“第4步,上电时如果外部中断为低电平,则直接进入中断程序。实现不了”
本人菜鸡!谢谢大家!
单片机代码如下;
#include <REGX51.H> //51头文件
sbit LED = P3^5; //引脚定义
sbit Key1 = P3^3; //引脚定义
//*********延时函数***********
void DELAY_MS(unsigned int a )
{
unsigned int i;
while (--a !=0)
{
for (i=0; i<=600; i++);
}
}
//*********主程序************
void main(void)
{
Key1 = 1; // key1初始化高电平
LED=0; //初始化led
EA=1; //开总中断
IT1=0; //低电平触发
EX1=1; //外部中断1允许
while(1)
{
LED=1; //LED亮
DELAY_MS(80); //延时
LED=0; //LED灭
DELAY_MS(100); //延时
LED=1; //LED亮
DELAY_MS(80); //延时
LED=0; //LED灭
DELAY_MS(1680); //延时
}
}
void intx(void) interrupt 0 //外部中断0
{
while(1)
{
if(Key1==0) //Key1低电平检测
DELAY_MS(10); //延时按键消抖
{
if(Key1==0) //再次“Key1”低电平检测
{
LED=1;
DELAY_MS(60);
LED=0;
DELAY_MS(60);
LED=1;
DELAY_MS(40);
LED=0;
DELAY_MS(40);
LED=1;
DELAY_MS(30);
LED=0;
DELAY_MS(30);
LED=1;
DELAY_MS(20);
LED=0;
DELAY_MS(520);
}
else
{
DELAY_MS(10);
return; //返回主程序
}
}
}
}
作者:
LaoYuTou
时间:
2023-7-9 08:29
确定实现了前3?初始化的是外部中断1,用的是外部中断0?
作者:
csmyldl
时间:
2023-7-9 08:47
进入中断后,在中断处理程序中要关闭外部中断允许,否则会一直发生中断(因为中断程序执行时间较长,包含了延时程序)
作者:
一生太多遗憾
时间:
2023-7-9 10:31
LaoYuTou 发表于 2023-7-9 08:29
确定实现了前3?初始化的是外部中断1,用的是外部中断0?
实现了,把void intx(void) interrupt 1 //外部中断
作者:
一生太多遗憾
时间:
2023-7-9 10:32
LaoYuTou 发表于 2023-7-9 08:29
确定实现了前3?初始化的是外部中断1,用的是外部中断0?
第四步实现步了
作者:
一生太多遗憾
时间:
2023-7-9 20:11
已解决。谢谢各位大佬!
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1