标题:
为什么这个单片机中断函数不能正常运行呢?
[打印本页]
作者:
朱丽
时间:
2022-4-1 11:31
标题:
为什么这个单片机中断函数不能正常运行呢?
求各位大佬帮忙看看
当temp的值为20时,灯没灭,其中硬件线路是正确的。
void int_0() interrupt 0 //外部中断0
{
key1_count++; //按键1全局变量
while(key1_count==3)key1_count=1;
if(key1_count==2)
{
if(temp < 10 && HC_SR501) //temp为变量;HC_SR501为开关变量,值为0或1。
{
led1 = 0; //灯亮
flag[0]='1'; //灯亮灭状态值,1灯是亮着的,0灯是灭的
}
else
{
led1 = 1; //灯灭
flag[0]='0';
}
}
}
作者:
zhxiufan
时间:
2022-4-1 13:37
while(key1_count==3)key1_count=1;这个地方应该用if而不是while
作者:
yzwzfyz
时间:
2022-4-1 15:15
哪么,正常是长什么样子呢?
作者:
略略略来啦
时间:
2022-4-1 15:19
楼上说的没毛病,这里需要将while换成if判断语句,否则函数会在key1_count等于3的时候进入死循环
作者:
朱丽
时间:
2022-4-1 17:35
感谢各位大佬的解答,当前问题已解决,解决思路:因为用的的外部中断来开关灯,所以需要给单片机两次低电平的输入,而原来的函数只有一次低电平的输入,所以只能进行一次中断处理,能亮就不能灭;解决代码为:
void Led()
{
if(key1_count==2)
{
if(temp < 10 && HC_SR501)
{
led1 = 0;
flag[0]='1';
}
else
{
led1 = 1;
flag[0]='0';
}
}
}
void int_0() interrupt 0
{
key1_count++;
while(key1_count==3)key1_count=1;
}
作者:
创造生活
时间:
2022-4-3 16:40
if(temp < 10 && HC_SR501) 这个判断语句你得明白什么意思!这个判断语句判断的是什么!它是把两个表达式进行逻辑与运算,一个表达式是temp<10,一个是HC_SR501,,运算结果为1,(也就是temp必须小于10,HC_SR501必须为1)才能执行IF语句,LED才能亮
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1