打印
[51单片机]

请教大家一个检测脉冲有无得问题啊?

[复制链接]
1415|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qjp1988113|  楼主 | 2014-3-24 08:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
设备正常能产生一个固定频率的脉冲~如果坏了,就只是低电平。而且坏了,要立刻检验出来,不然会损坏设备。如何用单片机检测呢?我的想法是这样的。。定时器设定时间是产生的脉冲频率时间的2倍。打开定时器,开始检测连接的引脚是否有脉冲进来~(实际上是测有没有高电平),如果有高电平,停止检测引脚,输出引脚状态变量为高。直到计数器到时间溢出,强制停止检测引脚,停止计数器。判断引脚状态变量,为高的话,不报警,定时器打开,继续计时循环。如果为低,报警,定时器处于关闭状态。。#include <reg51.h>

#define Uchar unsigned char
#define Uint  unsigned int
sbit aram_off=P1^0; //报警关
sbit light_in =P1^1;//信号输入
sbit aram     =P1^2;//报警

bit time_flag=0;//时间到标志
bit light_statu=0;//信号高低电平状态

void Init_Timer0();

void  main (void)
{       
    aram_off =1;
        light_in =1;
        aram         =0;
    Init_Timer0();

           while(1)
        {
                 while(!time_flag)
                         {
                          light_statu=0;
                          if(light_in==1)
                          light_statu=1;break;
                          
                     }
                          
                  if(light_statu==1)
                        {
                         aram=0;
                     time_flag=0;
                         TR0=1;
                         
                        }
                        else
                        {                                                     
                         aram=1;
                         if(aram_off==0)
                         aram=0;
                        }
                  
         }


       
       
}

void Init_Timer0(void)
{
        TMOD |= 0x01;          //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影

响                     
        TH0=0xff;              //给定初值,这里使用定时器最大值从0开始计数一直到65535溢出
        TL0=0x00;
        EA=1;            //总中断打开
        ET0=1;           //定时器中断打开
        TR0=1;           //定时器开关打开
}


void Timer0_isr(void) interrupt 1 using 1
{
        TH0=0xff;              //给定初值
        TL0=0x00;
        TR0=0;                         //定时器开关关闭
    time_flag=1;//

}



相关帖子

沙发
ayb_ice| | 2014-3-24 09:48 | 只看该作者
如果输出频率是100HZ,那么周期是10MS,高低各占5MS,间隔2.5MS采样一次输出,有变化计数器加1,20MS后判断计数器的值,正常应该为4,如果为0,一定是坏了,然后重新开始,

针对你这个具体的信号,更简单,坏了一定输出低电平,那么专门检测低电平即可,为高则清除计数器,为低则加一,计数器大于10MS/2.5MS=4次,则可以断定坏了

使用特权

评论回复
板凳
qjp1988113|  楼主 | 2014-3-27 15:42 | 只看该作者
没人给出满意答案么。为什么我仿真不能通过啊。这么简单的程序。

使用特权

评论回复
地板
xuyaqi| | 2014-3-27 15:58 | 只看该作者
将脉冲输出端通过二极管整流送入电容存储,设备正常时有一定电压,不正常时没有电压,用比较器检测即可。

使用特权

评论回复
5
ningling_21| | 2014-3-27 18:26 | 只看该作者
简单点,搞一个看门狗芯片,脉冲输入接到喂狗端,输出接到MCU检测,如果脉冲停止了就输出就是低电平,MCU只要检测到低电平就报警...

使用特权

评论回复
6
lu50211| | 2014-3-30 17:14 | 只看该作者
2楼是正解,这个是简单有效的方法。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

111

主题

627

帖子

2

粉丝