MSP430F149串口输入字符串

2019-07-15 16:48发布

本帖最后由 xmuac 于 2014-9-14 12:05 编辑

串口中断服务程序内容如下:
#pragma vector=UART0RX_VECTOR
__interrupt void UART0_RX_ISR(void)
{
  if(key==1)      //输入字符串1
  {
    LED8= 0X01;   //灭最末端一个灯,用来指示该中断的执行情况
    number[count1]=U0RXBUF;  
    count1++;
    if(count1==8) key=0xff;
  }
  if(key==2)   //输入字符串2
  {
    LED8=0x02;   //灭倒数第二个灯
    lifetime[count2]=U0RXBUF;
    count2++;
    if(count2==8) key=0xff;
  }
  if(key==3)    //输入字符串3
  {
    LED8=0x04;    //灭倒数第三个灯
    colour[count3]=U0RXBUF;
    count3++;
    if(count3==8) key=0xff;
  }
}
其中的key是按键的值,测试中能正确获得。
程序中还有一个10毫秒的定时中断,用来实现定期的字符串输出(从串口输出)
对应的主程序如下:
void main(void){   
     WDT_Init();                         //看门狗设置
     Clock_Init();                       //系统时钟设置
     UART_Init();                        //串口设置初始化
     Port_init();
     TIMERA_Init();
     delay_ms(10);
     _EINT();                            //开中断
     while(1)                            //无限循环
     {
         Key_Scan();     //用来选择输入哪个字符串(用来获得key的值)
         if(Time%40==0)   //定时器,40秒为一个周期,输出下面的东西。
        {
           Flag=1;
           Time=1;
         }
         while(Flag)
         {
             Flag=0;
             Print_Str("ID:");
             Print_Str(number);  //字符串1
             Send_Byte(' ');
             Print_Str("number:");
             Print_Str(lifetime);  //字符串2
             Send_Byte(' ');
             Print_Str("colour:");
             Print_Str(colour);         //字符串3
             Send_Byte(' ');
      }
  }
}
我的操作步骤及现象:
按下按键S1,得到正确的现象,接着输入字符串1,点击发送,亮灯现象也正确。按下按键S2,亮灯现象正确,接着在串口调试助手中输入字符串2,点击发送,此时没能得到正确的亮灯现象。接着按下S3,亮灯现象正确,接着在串口调试助手中输入字符串3,点击发送,此时也没能得到正确的亮灯现象。等到规定的时间到来(40s),从串口打印出以串数字,同时亮起了输入字符串3时该有的现象(延迟了),打印出的内容如下所示:
D:chenshen
number:
colour:green

我的问题:
1.连续输入时,为什么第二、第三个字符串的发送得不到正确的亮灯现象(保证LED没有坏)?
2.打印出的内容中,第二个字符串没有对应的东西,应该是第二个字符串没有被正确输入保存,这会是什么原因?
3.第一行的输出应该是ID:chenshen,为什么显示的是D:chenshen. 少了一个字母I.
4.第二次输出(第二个40s)时,就不会出现问题3. 第一次和第二次输出为什么会不一样?

谢谢!



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
阿信509
1楼-- · 2019-07-15 19:58
你的三个计数,如count3==8都要收到8个字符吗?
还有你的三个count初始化都清0了吗,而且应该在收到8个数字后也要清0.要不下次再接收肯定又不对了
然后,你的3个字符串能在40秒内完成吗?要是完不了到时候输出字符串的时候肯定有问题了
xmuac
2楼-- · 2019-07-15 23:09
阿信509 发表于 2014-9-14 13:19
你的三个计数,如count3==8都要收到8个字符吗?
还有你的三个count初始化都清0了吗,而且应该在收到8个数字 ...

谢谢!
1. 我设置的三个数组,每个数组最多能接收8个字符,少于是可以的;
2. 我在Key_Scan()里面有对count1/2/3进行清零,即如果按下按键,这3个计数符就被赋值为0;
3. 三个字符串的输入能在40s内完成。

我的方法是:
比如给字符串2输入一串数字:123456789。在串口调试助手中敲入123456789,然后按下按键S2,对应的灯亮,再点击串口调试助手上的发送,对应的灯也正常亮起,这时保存的字符串就是12345678。
重复上面的步骤数组1和数组3写入字符串1和字符串3,点击发送时灯不能正确显示(其实是没有改变前面的亮灯情况),所以最后也不能被正确的输出(输出为空)
linjiashengl
3楼-- · 2019-07-16 00:15
 精彩回答 2  元偷偷看……
xmuac
4楼-- · 2019-07-16 02:29
linjiashengl 发表于 2014-9-15 12:26
感觉你给个完整的代码或许会更好

谢谢!
是串口调试助手的原因。
换了个串口调试助手就好了。
chentw0102
5楼-- · 2019-07-16 06:11
中国国民性演变历程
  1. 中国国民性演变历程
复制代码

一周热门 更多>