打印

F149的串口和PC的串口助手通信 接收不到的字符串啊

[复制链接]
1490|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
木子不二|  楼主 | 2013-12-5 10:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
木子不二|  楼主 | 2013-12-5 10:46 | 只看该作者
贴代码:
初始化
void UART0_Init(void)
{
  P3SEL |= BIT3+BIT4+BIT5;       //端口设置  P3.3/4/5 复用  
  U0CTL &= ~SWRST;               // 初始化UART0状态机
  U0CTL |= CHAR;                 //无校验 1位停止位 8位数据 无反馈 UART异步模式
  U0TCTL|= SSEL0;                //波特率时钟 ACLK
  U0BR0  = 0x03;                 //波特率 9600
  U0BR1  = 0x00;
  U0MCTL = 0x4A;
  IE1   |= URXIE0;              //使能接收中断允许
  ME1   |= URXE0 + UTXE0;       //接收,发送允许
  IFG1   = 0;                   //中断标志 清零
  _EINT();
}

#pragma vector = UART0RX_VECTOR   
__interrupt void usart0_rx (void)
{
//接收字符串
    if(k<16)
    {
      Rdata[k++] = U0RXBUF;
      if(k==16)k=0;   
    }
}
主函数:
void main(void)
{
  unsigned char num[3]={0,0,0},i=0,j=0;
  unsigned char *ptr;
  unsigned int  sum=0;
  WDTCTL = WDTPW + WDTHOLD;                 // Stop watchdog timer
   /*下面六行程序关闭所有的IO口*/
  P1DIR = 0XFF;P1OUT = 0XFF;
  P2DIR = 0XFF;P2OUT = 0XFF;
  P3DIR = 0XFF;P3OUT = 0XFF;
  P4DIR = 0XFF;P4OUT = 0XFF;
  P5DIR = 0XFF;P5OUT = 0XFF;
  P6DIR = 0XFF;P6OUT = 0XFF;
  Clock_Init();
  UART0_Init();
  while(1)
  {
    Display(U0RXBUF,1,2,0);  
    if(Rdata[k-1]!='\0')  //接收完毕
    {   
//    ptr  = Rdata;
//    while(*ptr!= '\0')
    while(j<16)
    {//提取字符   识别
      if(Rdata[j]=='c')          // 'c' =63 hex99  
      {
//        ptr++;
        j++;
        if(Rdata[j]=='h')    //  'h' =68 hex104  
        {  
          j++;
          //数字识别
         for(i=0;i<3;i++)
         {
          if(('0'<=Rdata[j])&&(Rdata[j]<='9'))  //chxxx 提取xxx数字
          {
            num = Rdata[j];
            i++;
          }
         }
          j++;
        }   
      }
    }
下面的先忽略  
  sum = ((unsigned int)num[1]-48)*10 +((unsigned int)num[2]-48);
    switch((int)num[0])
    {
   
      case 0x01:P2OUT &=~BIT7;Delay_Nus(1000*sum);break;      //收到数据CH0 00 打开通道7 不改变其他通道状态      
      case 0x02:P2OUT &=~BIT6;break;
      case 0x03:P2OUT &=~BIT5;break;
      case 0x04:P2OUT &=~BIT4;break;
      case 0x05:P2OUT &=~BIT3;break;
      case 0x06:P2OUT &=~BIT2;break;
      case 0x07:P2OUT &=~BIT1;break;
      case 0x08:P2OUT &=~BIT0;break;
      default :break;
    }
  }
  }
  //LPM3;                   //进入低功耗模式
}

使用特权

评论回复
板凳
dirtwillfly| | 2013-12-5 21:13 | 只看该作者
呵呵,刚看到你的问题就看到一个分享f149串口通讯的帖子。你可以参考下哦
https://bbs.21ic.com/icview-654800-1-1.html

使用特权

评论回复
地板
pmp| | 2013-12-5 21:59 | 只看该作者
波特率问题呢。

使用特权

评论回复
5
黄小俊| | 2013-12-6 18:47 | 只看该作者

使用特权

评论回复
6
木子不二|  楼主 | 2013-12-9 14:22 | 只看该作者
pmp 发表于 2013-12-5 21:59
波特率问题呢。

亲 可以接收到字符的哦 字符串怎么处理  不了解

使用特权

评论回复
7
木子不二|  楼主 | 2013-12-9 14:31 | 只看该作者
dirtwillfly 发表于 2013-12-5 21:13
呵呵,刚看到你的问题就看到一个分享f149串口通讯的帖子。你可以参考下哦
https://bbs.21ic.com/icview-6548 ...

还问下那个串口调试助手发送字符串是把字符串拆开一个一个发送,中断 单片机接收一个“a[rxcount++] = RXBUF0;//将接收到的数据存起来”然后再发送一个,中断,单片机再接收一个。。直到字符串发送完毕。
还是字符连续发送,连续这样的话中断只进一次么,还是怎么样。。。。

使用特权

评论回复
8
dirtwillfly| | 2013-12-9 20:50 | 只看该作者
木子不二 发表于 2013-12-9 14:31
还问下那个串口调试助手发送字符串是把字符串拆开一个一个发送,中断 单片机接收一个“a[rxcount++] = RX ...

一个一个发送

使用特权

评论回复
9
comeon201208| | 2013-12-12 00:16 | 只看该作者
dirtwillfly 发表于 2013-12-5 21:13
呵呵,刚看到你的问题就看到一个分享f149串口通讯的帖子。你可以参考下哦
https://bbs.21ic.com/icview-6548 ...

我也参考了的,谢谢分享

使用特权

评论回复
10
dirtwillfly| | 2013-12-14 12:10 | 只看该作者
楼主的问题解决了吗?:P

使用特权

评论回复
11
pmp| | 2013-12-22 12:22 | 只看该作者
木子不二 发表于 2013-12-9 14:22
亲 可以接收到字符的哦 字符串怎么处理  不了解

检测到中断。你直接读取寄存器,

使用特权

评论回复
12
pmp| | 2013-12-22 12:22 | 只看该作者
木子不二 发表于 2013-12-9 14:31
还问下那个串口调试助手发送字符串是把字符串拆开一个一个发送,中断 单片机接收一个“a[rxcount++] = RX ...

收到一个字,中断一次的。

使用特权

评论回复
13
pmp| | 2013-12-22 12:22 | 只看该作者
木子不二 发表于 2013-12-9 14:31
还问下那个串口调试助手发送字符串是把字符串拆开一个一个发送,中断 单片机接收一个“a[rxcount++] = RX ...

如果是等待收完,太浪费时间了!

使用特权

评论回复
14
trumpxp| | 2013-12-22 17:49 | 只看该作者
降低波特率   将字符传输的速率降下来   看看   会不会就解决了   

使用特权

评论回复
15
trumpxp| | 2013-12-22 17:50 | 只看该作者
话说  串口调试   有时候   确实感觉很头疼   

使用特权

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

本版积分规则

36

主题

306

帖子

6

粉丝