OKKK 发表于 2012-12-26 22:20:08

求高人指点:如何判断管脚50ms一直都是高(低)电平?

本帖最后由 OKKK 于 2012-12-26 23:47 编辑

RT
        while(!port_int0)
             {
        delay_ms(50);
       while(!port_int0)
        {
        //
        }
                       
             }   
就不可以,求方法!!   
另外:已经查看相关资料,51好像很难判断这个。因为外部中断只有下跳和低电平。求高手指点迷津!!!感激不尽。                                       


OKKK 发表于 2012-12-26 22:25:26

补充:比如40ms高电平 2ms低电平 再8ms高电平 就可以通过上面的程序

error_dan 发表于 2012-12-26 22:35:59

用定时器和外部中断,定时器配置为50ms后中断,外部中断启动并清0定时器。等定时器自己进中断了就是满足50ms是X电平的条件,最小分辨率为外部中断的触发条件,如果用边沿触发就更准。

OKKK 发表于 2012-12-26 22:43:18

error_dan 发表于 2012-12-26 22:35 static/image/common/back.gif
用定时器和外部中断,定时器配置为50ms后中断,外部中断启动并清0定时器。等定时器自己进中断了就是满足50m ...

不是很清楚 :51只有下跳的int,怎么判断高电平?

OKKK 发表于 2012-12-26 22:48:04

error_dan
能给个例不?

summarize 发表于 2012-12-27 07:14:47

每1ms检测一次,连续50次为高电平则OK, 期间只要有一次或以上为低电平则视为失败,检测时间间隔根据应用系统调整,比如中断方式时可以改为每100us检测一次。。。

tcw_xny 发表于 2012-12-27 08:15:36

OKKK 发表于 2012-12-26 22:48 static/image/common/back.gif
error_dan
能给个例不?

反正是测试,加个反相器行不行?

Tliang 发表于 2012-12-27 08:43:38

下降沿中断,定时器计时不中断。
IO中断,等待计时到或IO跳变。
判断计时是否溢出或未到时间IO即跳变、

TH0 = 0X3C;
TL0 = 0XB0;
TR0= 1;
TF0 = 0
while((!TF0) && (!P3_2));
TR0 = 0;
if(TF0 && P3_2)            //定时溢出且IO已经变高
else if(TF0)                     //时间到IO未变高
else                               //IO变高,时间未到。
可以将TH0和TL0的值读出判断在一定范围内的IO变高为有效。
if(((TH0 << 8) | TL0 > 60000) && P3_2)

error_dan 发表于 2012-12-27 19:40:18

OKKK 发表于 2012-12-26 22:48 static/image/common/back.gif
error_dan
能给个例不?

木有例程哦,都给你说了这么详细了,自己写一个吧。。。

OKKK 发表于 2012-12-27 22:58:35

Tliang 发表于 2012-12-27 08:43 static/image/common/back.gif
下降沿中断,定时器计时不中断。
IO中断,等待计时到或IO跳变。
判断计时是否溢出或未到时间IO即跳变、


Tliang
谢谢! 明天回公司试试

lmt50211 发表于 2012-12-28 09:17:39

本帖最后由 lmt50211 于 2012-12-28 09:24 编辑

给一个简单的程序,你参考一下。没有试过,不知道程序有没有错误,大概思路应该没错,现在是在中断中检测,当然也可以在主循环中检测。


sbit input=P1^1;//输入引脚
sbit output=P1^2;//输出引脚
bit bit_1ms;//1ms标志
unsigned char highcnt;//高电平记数


void main()
{
   init();//初始化
    while(1)
    {
         if(bit_1ms)//1ms执行一次其它任务
      {
             bit_1ms=0;
          }
   }
}


void t1ms(void) interrput 1 using 0//1ms中断一次
{
   bit_1ms=1;
    if(input)//在中断中检测,具有很很好的实时
    {
          if(++highcnt>=50)//检测高电平1ms*50=50ms
         {
               highcnt=0;
                output=!output;//输出提示
      }
    }
   else//出现低电平则清高电平记数
{
         highcnt=0;
   }
}

吴绍昂 发表于 2012-12-28 09:33:52

给两个变量:time_f,pin_f.
高电平pin_f为1,低电平pin_f为0。满足50毫秒循环时time_f为1,不满足时time_f为0.
从这两个变量状态可以满足楼主要求!
页: [1]
查看完整版本: 求高人指点:如何判断管脚50ms一直都是高(低)电平?