找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1373|回复: 5
打印 上一主题 下一主题
收起左侧

为什么这个单片机中断函数不能正常运行呢?

[复制链接]
跳转到指定楼层
楼主
ID:954171 发表于 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';
                        }
                }        
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:121859 发表于 2022-4-1 13:37 | 只看该作者
while(key1_count==3)key1_count=1;这个地方应该用if而不是while
回复

使用道具 举报

板凳
ID:123289 发表于 2022-4-1 15:15 | 只看该作者
哪么,正常是长什么样子呢?
回复

使用道具 举报

地板
ID:318982 发表于 2022-4-1 15:19 | 只看该作者
楼上说的没毛病,这里需要将while换成if判断语句,否则函数会在key1_count等于3的时候进入死循环
回复

使用道具 举报

5#
ID:954171 发表于 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;       
}
回复

使用道具 举报

6#
ID:881715 发表于 2022-4-3 16:40 | 只看该作者
if(temp < 10 && HC_SR501) 这个判断语句你得明白什么意思!这个判断语句判断的是什么!它是把两个表达式进行逻辑与运算,一个表达式是temp<10,一个是HC_SR501,,运算结果为1,(也就是temp必须小于10,HC_SR501必须为1)才能执行IF语句,LED才能亮
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表