打印

请教,帮我看看这个串口问题,好吗?

[复制链接]
1531|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
星星电灯|  楼主 | 2007-5-30 09:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教,帮我看看这个串口问题,好吗?

void ComInStr() interrupt 4 //串行口中断
{
  if(RI)
  {
       if (j>4)
          {
        j=0;    
        receive=1; //接收标志置位    
       }
    else
       {
             rece[j]=SBUF;
         j++;
           }
       RI=0;
  }
}



main()
{
while(1)
    {
       if(receive)
         {
            Sendtex();
            receive = 0;         
          }                  
     }
}
大哥:
您好!
我这个串行口中断,还不是很好,
因为,假设开始 发了 '111' 3 个字符
隔了一段又发 '11' 2 个字符,总共是 5个字符
那么 j = 5 ,eceive=1; //接收标志置位 ,
本来这样的情况是不符合要求的,

那要怎么处理啊,一般是设置多久如果还没有接收到
5 个字符,则 j 重新置 0 啊
这样的程序怎么写?

谢谢!

相关帖子

沙发
星星电灯|  楼主 | 2007-5-30 10:57 | 只看该作者

是这样吗?

是这样吗?
void ComInStr() interrupt 4 //串行口中断
{
  if(RI)
  {
       if (j>4)
          {
        j=0;    
        receive=1; //接收标志置位    
       }
    else
       {
          rece[j]=SBUF;
          j++;
if(j= = 1)
{
××××//这个地方写上打开定时中断的开关的语句
}
           }
       RI=0;
  }
}



void 定时中断程序() interrupt×× 
{
  J = 0;
}

谢谢!

使用特权

评论回复
板凳
infree| | 2007-5-30 11:47 | 只看该作者

需要自己实现一个软定时器

可以定义两个变量,一个用于计数,一个用于启停控制;
在1ms中断的服务程序中如果这个定时器启动了,就周期进行加1;
在主程序中如果看到这个定时器已启动,就不停查询计数值,直到这个计数值已大于2个字节的周期(根据串口波特率来算,ms单位,这个是比较严格的方法,也可以定义长一些),则对接收缓冲区进行清空(即j=0);

使用特权

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

本版积分规则

74

主题

121

帖子

1

粉丝