打印
[疑难问答]

求高手赐教串口中断接收字符串的C程序

[复制链接]
4020|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
suoma|  楼主 | 2010-5-9 21:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近我在弄一个项目,其中需要一个串口通信的,但是我写的程序不用中断接收的时候可以接收字符串,但用中断后,我发觉自己不知道怎样去写接收一个字符串的代码。而且也忘了咋判断它是否接收完毕!!我的本意是要通过串口发送一个串到PC机,然后PC机正确接收后会返回“OK”两个字符。就是接收“OK”这个串口中断接收子程序不会写,哪位高手能帮帮忙呀!!!


一下是我写的串口中断接收函数,谁能够帮我改一下,我想要一个接收多个字符但不确定且在一个范围内的代码。主要是我不知道如何判断是否接收字符串完毕,所以在通过LCD屏幕显示的时候总是不知如何下手。

//------------串口中断接收----------------
void uart_interrupt() interrupt 4
{
  ES = 0;
         
  if(RI)
  {
   RI = 0;
   InStr[InStrLoc] = SBUF;
   InStrLoc++;
     
  }
  else
   TI = 0;
  ES = 1;  //允许串口中断

  return;
}

//---------------------------------------
//主函数
//-----------------------------------------  
void main()
{
int i;
lcd_disp0();
init_serialcomm(); //串口初始化
clrbit=1;   //置清屏标志位

LCD_clear();   //清屏
putnstr(InStr, sizeof(InStr)/sizeof(char));
for(i=0;i<MAXLEN;i++)
  InStr='\0';
  
while(1)
{

  delayx1ms(500);
  if(InStrLoc >= MAXLEN)
  {

   for(i=0;i<MAXLEN;i++)
   {
    LCD_write_char(InStr);
   }
   putnstr(InStr, sizeof(InStr)/sizeof(char));
   InStr[0] == '\0';
   InStrLoc = 0;
  }

}
}


沙发
yidou| | 2010-5-9 22:36 | 只看该作者
怎样去写一个字符串的代码,偶也不知道

使用特权

评论回复
板凳
David_ming| | 2010-5-9 23:19 | 只看该作者
还是接收一个确认字符比较省事,两个麻烦点
volatile sbit OK = 0;
void Receive(void)interrupt xx using 1
{
      static sbit i = 0;
      if(RI)
      {
            if(!i)
            {
                  if(SBUF == 'O')i = 1;
             }
             else
            {
                  if(SBUF == 'K') OK = 1;//OK由主程序清零
                   i = 0;  //即使错了也置零
             }
       else
       {
        }
}

使用特权

评论回复
地板
sz_n053| | 2010-5-10 07:06 | 只看该作者
本帖最后由 sz_n053 于 2010-5-10 07:11 编辑

使用特权

评论回复
5
David_ming| | 2010-5-10 10:09 | 只看该作者
貌似RI得手工清除吧,上面的程序还要清除一下下RI

使用特权

评论回复
6
ypj005| | 2010-5-10 11:10 | 只看该作者
老51肯定要清:lol

使用特权

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

本版积分规则

82

主题

714

帖子

5

粉丝