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. 第一次和第二次输出为什么会不一样?

谢谢!



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。