pogulu 发表于 2012-8-30 19:31:08

串口查询接受,请问超时判断怎么做?求思路!

大虾们好!!
如题,串口查询接收下,超时判断怎么做?谢谢!!

linucos 发表于 2012-8-30 19:50:09

用timer0控制变量,查询的时候检测下?

shenrongze 发表于 2012-8-30 20:07:24

我一直都是这样的..
i = 10000;
while((!RI) || i--);

不知道有没有更好的方法

pogulu 发表于 2012-8-30 20:07:46

linucos 发表于 2012-8-30 19:50 static/image/common/back.gif
用timer0控制变量,查询的时候检测下?

问题是查询的时候,程序一直在等待(RI==1)啊,如果不等于1,就一直卡在这儿。。。

while(RI==0);

linucos 发表于 2012-8-30 20:10:17

pogulu 发表于 2012-8-30 20:07 static/image/common/back.gif
问题是查询的时候,程序一直在等待(RI==1)啊,如果不等于1,就一直卡在这儿。。。

while(RI==0); ...

while(RI == 0 && count < 1000);
count超时了,自然退出了呗!
timer里计数,准确应该行!

pogulu 发表于 2012-8-30 20:10:48

shenrongze 发表于 2012-8-30 20:07 static/image/common/back.gif
我一直都是这样的..
i = 10000;
while((!RI) || i--);


好办法,我试试,这就能解燃眉之急了,谢谢!

pogulu 发表于 2012-8-30 20:18:41

linucos 发表于 2012-8-30 20:10 static/image/common/back.gif
while(RI == 0 && count < 1000);
count超时了,自然退出了呗!
timer里计数,准确应该行! ...

谢谢,我试试!!

shenrongze 发表于 2012-8-30 20:47:36

pogulu 发表于 2012-8-30 20:10 static/image/common/back.gif
好办法,我试试,这就能解燃眉之急了,谢谢!

弄错了~~.是
i = 10000;
while((!RI) && i--);

pogulu 发表于 2012-8-30 21:45:33

linucos 发表于 2012-8-30 20:10 static/image/common/back.gif
while(RI == 0 && count < 1000);
count超时了,自然退出了呗!
timer里计数,准确应该行! ...

有一个问题,这时候程序不再死,但是查询接受不到串口数据了!

pogulu 发表于 2012-8-30 22:16:06

shenrongze 发表于 2012-8-30 20:47 static/image/common/back.gif
弄错了~~.是
i = 10000;
while((!RI) && i--);

是的,我发现了~
先在我查询到一个发送一个,其中也做了缓存,可是现在全成了乱码了,比较郁闷,不过不会一直等待在查询状态里了

linucos 发表于 2012-8-30 22:47:44

pogulu 发表于 2012-8-30 21:45 static/image/common/back.gif
有一个问题,这时候程序不再死,但是查询接受不到串口数据了!

查询接收的,直接判断RI==1就成吧,成立就是有数据了呗?
不需要while吧!

pogulu 发表于 2012-8-31 08:38:51

linucos 发表于 2012-8-30 22:47 static/image/common/back.gif
查询接收的,直接判断RI==1就成吧,成立就是有数据了呗?
不需要while吧! ...

我在想会不会是我延时时间做的不对,现在还没用定时器来做

bihan163 发表于 2012-8-31 08:55:34

楼主查询法,还能处理其他任务么?这两天我也在弄这个串口通信,想接受多字符,然后再进行处理

linucos 发表于 2012-8-31 10:26:05

pogulu 发表于 2012-8-31 08:38 static/image/common/back.gif
我在想会不会是我延时时间做的不对,现在还没用定时器来做

嗯,还是上代码看看!有查询应该也没事!

pogulu 发表于 2012-8-31 10:50:42

i=200;
while(RI == 0 && i--);

这种方式下,怎么接收不到串口数据呢?奇怪

pogulu 发表于 2012-8-31 13:30:59

本帖最后由 pogulu 于 2012-8-31 15:00 编辑

linucos 发表于 2012-8-31 10:26 static/image/common/back.gif
嗯,还是上代码看看!有查询应该也没事!

问:现在的问题是串口2收从来没有收到过数据,示波器看到是有数据的,但是每次都会超时错误了。直接进入if(m==0)这个条件里面。答:是因为时间设置的太小,改大就好了。
现在正常了,代码留下来给别人参考。




#define rev_delay 0x190   
      m=rev_delay;
      for(j=0;j<AALEN;)
       {
      while((S2RI == 0) &&m )    //串口2接收,查询,并超时判断
         {
         
               if(S2RI == 1)      //如果串口2接收到数据,重装超时计数,跳出while循环,进行后续数据处理
               {
                   m=rev_delay;
                   break;
               }
               else if(m==0)         //如果超时,则进入超时处理
                   {
                     break;
                  }

            if((m%10)==0)               //打印调试信息
            SendResponse(m,1,buf);//打印调试信息

            m--;
          }
      

          if(m==0)
            {
                m=rev_delay;
                SendResponse(0xE0,1,buf); //超时出错返回
                return;
            }

          TempAA = S2BUF;//读缓冲 一个数据,紧接着发送到串口1中发送
       S2CON&=0xFE;         //清接收S2RI标志位
            j++;

         SBUF = TempAA;      //放入串口1发送缓冲
       while(TI==0);   //等待发送标志位置1 ,等待串口1发送完成
         TI=0;    //清串口1发送标志
         
   }

xidao 发表于 2014-9-13 14:43:47

最后的程序写的有参考价值,谢谢

ruanxianwu 发表于 2014-9-13 15:02:18


最后的程序写的有参考价值,谢谢
页: [1]
查看完整版本: 串口查询接受,请问超时判断怎么做?求思路!