设备正常能产生一个固定频率的脉冲~如果坏了,就只是低电平。而且坏了,要立刻检验出来,不然会损坏设备。如何用单片机检测呢?我的想法是这样的。。定时器设定时间是产生的脉冲频率时间的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;//
}
|