搜索
bottom↓
回复: 5

我要疯了 串口通信中 如何判断接收到的换行符

[复制链接]

出0入0汤圆

发表于 2011-1-20 22:41:30 | 显示全部楼层 |阅读模式
我使用的是M32L 发送接收都正常 唯独无法判断这个万恶的换行符 0x0d 13 \n

SIGNAL(SIG_UART_RECV)
{
    UCSRB&=~(1<<RXCIE);//先关接收中断
    buff[buff_index++] = UDR;
       
    if (buff[buff_index - 1] == '\n')
    {
         buff_end = 1;
    }
    UCSRB|=(1<<RXCIE);//重开接收中断
}

if (buff[buff_index - 1] == 0x0d) 这样不行 判断不出来
if (buff[buff_index - 1] == 13)   这样也不行
if (buff[buff_index - 1] == '\n') 这样时 使用串口大师发送回车可以判断出来 但是我想用16进制模式 发送0x0d并判断

万恶啊 谁能指点我下啊 谢谢了

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

 楼主| 发表于 2011-1-21 00:31:29 | 显示全部楼层
问题解决 非常郁闷的原因 原来是通讯使用的数据位7 接收时最高位被置1了 导致部分数据接收错误。。。。。

出0入0汤圆

发表于 2011-1-21 00:32:36 | 显示全部楼层
搭车同求,我用的keil c51在发送回车换行符(\13\10)时串口助手收到的是(\11\08),不能换行,我改发送(\15\12)就好了,一直不明所以

出0入18汤圆

发表于 2011-1-21 10:41:54 | 显示全部楼层
不要疯呀

出0入0汤圆

发表于 2011-1-21 10:51:22 | 显示全部楼层
//  功能:通过UART接收字符串,回显,退格<Backspace>修改,回车<Enter>结束
//  参数:*s保存接收数据的缓冲区,只接收可打印字符(ASCII码32~127)
//        size是缓冲区*s的总长度,要求size >= 2(包括末尾'\0',建议用sizeof()来获取)
//  返回:接收到的有效字符数目
int uartGets(eUART_ch_t uartCh, cmdstr* pcmdstruct)
{
    char c,size;
        char* pchar;
   // pcmdstruct->str[0] = '\0';
        size=sizeof(pcmdstruct->str);
    if (size < 2) return(0);
    size--;
    //pcmdstring->UartProStart=0;
  //for (;;)
   
      if(  UARTReadByte(uartCh,&c)==0) //3???                                    //  接收1个字符
          {
            //Uart1_Printf("get %c\r\n",c);
            UARTWriteByte(uartCh,c);
                }//  回显输入的字符
      else
              {
              // Uart1_Printf("timer out\r\n");
         return 0;
           }
                 
        if (c == '\b')                                   //  遇退格<Backspace>修改
        {
            if (pcmdstruct->num > 0)
            {   
                            pcmdstruct->num--;
                (pcmdstruct->str[pcmdstruct->num]) = '\0';
                Uart1_Printf(" \b");                            //  显示空格和退格<Backspace>
            }
        }

        if (c == '\r')                                      //  遇回车<Enter>结束
        {
            Uart1_Printf("\r\n");                               //  显示回车换行<CR><LF>
            pcmdstruct->UartProStart=1;
                        pcmdstruct->num=0;
            
        }

        if (pcmdstruct->num < size)                                       //  如果小于长度限制
        {
            if (isprint_char(c))                                 //  如果接收到的是可打印字符
            {   
                 //Uart_Printf("\r\nprint_ok!\r\n");
                 (pcmdstruct->str[pcmdstruct->num]) = c;                                 //  保存接收到的字符到缓冲区
                                 pcmdstruct->num++;
                                 pcmdstruct->str[pcmdstruct->num] = '\0';
            }
        }
   

    return(pcmdstruct->num);                                              //  返回接收到的有效字符数目
}

出0入0汤圆

发表于 2013-8-19 17:13:20 | 显示全部楼层
mARK   正好用到这个  
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 16:55

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表