大家帮忙看看我的红外对射电路,输出信号接单片机中断口

2019-07-15 19:55发布

我的光电对射电路是这么设计的,如图所示!我把这个电路的信号输出端(J1-2脚)接在了stc89c52单片机的外部中断口1口,可是每当出现一个物体遮挡过去之后,单片机的外部中断1服务函数执行了好几次,我设置的外部中断是单片机下降沿触发!我的服务函数里面没有加去抖延迟,因为中断函数里面不想出现那些延迟什么的函数,影响单片机运行的整体效率!各位大神们有什么好的建议?能有什么办法用硬件去掉这个电路电平变化的过程产生的抖动?或者程序上怎么修改比较好,希望得到帮助!谢谢! 光电.jpg
下面是我的外部中断函数:
void tuiqiu() interrupt 2             //检测上升沿触发,快进快
{  
//假如没有加延迟去抖,下面的函数会被执行多次,中断里不加延迟!       

        if(score_over>0)           
        {
                if(T10s_flag==1)         //到了十秒的时间,说明电机要开始反转了
                {
                        count=201;                //从第二个十秒开始
                }
                else
                count=0;                    
                if(score_over>0)   
                {                                       
                        uart_senddata(m+5);                //发送地址位
                        m++;
                        if(m==13)
                        m=0;
                        score_over--;       
                        if(score_over==0)
                        {
                                djz=0;                                 //停止电机
                                djf=0;
                                TR2=0;                            //关定时器2
                                T10s_flag=0;                        //10秒标志位清零
                                count=0;                         //10秒计数值清零
                                m=0;
                        }       
                }
        }
}



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
Jack315
1楼-- · 2019-07-15 21:40
如果是信号有“抖动”就应该采用去抖动措施。但不管采取什么去抖动措施,本质都是低通滤波,一定会有延迟。和LZ的要求不符,无解哈。。。
qq729101414
2楼-- · 2019-07-15 22:44
如果楼主确定不是干扰是抖动的话  可以在中断服务程序开始关闭中断 在退出服务程序的时候在开启中断 强制执行一次,
不过在执行中断程序的时候再触发就没能响应了。
Keil_ㄨ_亻訁仰
3楼-- · 2019-07-16 02:37
 精彩回答 2  元偷偷看……
Keil_ㄨ_亻訁仰
4楼-- · 2019-07-16 06:19
qq729101414 发表于 2014-5-3 13:17
如果楼主确定不是干扰是抖动的话  可以在中断服务程序开始关闭中断 在退出服务程序的时候在开启中断 强制执 ...

这个方法也不行,这个中断服务函数执行的时间是很短的,在有东西挡住红外对射的时候,就有可能产生抖动的,而当外部中断服务函数已经执行完毕了,他却还在抖动,因此再次触发,照成结果出错。
qq729101414
5楼-- · 2019-07-16 10:31
Keil_ㄨ_亻訁仰 发表于 2014-5-4 08:51
这个方法也不行,这个中断服务函数执行的时间是很短的,在有东西挡住红外对射的时候,就有可能产生抖动的 ...

你这是干扰吧。。。。具体不知道啥东西
小武哥
6楼-- · 2019-07-16 16:29
你可以对延时用一个中断,如果你的中断足够用的话

一周热门 更多>