msp430串口接收字符串的问题

楼主
msp430串口接收字符串的问题
程序如下:

#include  <msp430x14x.h>

#define DRE_out     P3DIR |= BIT3     //连接485芯片的DE,RE端口的IO设置为输出状态
#define DE          P3OUT |= BIT3     //设置485芯片处于发送状态
#define RE          P3OUT &= ~BIT3    //设置485芯片处于接收状态
typedef unsigned char uchar;

unsigned char string[8] ;
 

void Set_UART1(void);
void PutString0(uchar *ptr);
void Send1Char(uchar sendchar);
void PutString(uchar *ptr);


/****************主函数****************/
void main(void)
{
    unsigned int i;
   
    WDTCTL = WDTPW + WDTHOLD;                 //关闭看门狗
    P6DIR |= BIT2;P6OUT |= BIT2;              //关闭电平转换
    DRE_out;
    RE;
    Set_UART1();
    _EINT();
 
 
    while (1)
    {
     
     if((string[0] == 'A')&&(string[6] == 'a'))  //LET MCU A DO.
     
         {
             DE;    
            
             for(i=0;i<3000;i++);
             PutString0("a12.5522.33e");
             for(i=0;i<800;i++);
            
             RE;
             LPM3;
         
         }
     
      }
     
     
   
}
/*******************************************
函数名称:Set_UART1
功    能:设置MCU的UART1对应的寄存器
参    数:无
返回值  :无
********************************************/
void Set_UART1(void)
{
    P3SEL |= 0xC0;                            //将P3.6,P3.7选做UART1的通信端口
   
    ME2 |= UTXE1 + URXE1;                     //使能USART1的TXD和RXD
    UCTL1 |= CHAR;                            //选择8-bit字符
    UTCTL1 |= SSEL0;                          //驱动时钟选择ACLK
    UBR01 = 0x03;                             //波特率9600
    UBR11 = 0x00;
    UMCTL1 = 0x4a;                            //调整
    UCTL1 &= ~SWRST;                          //初始化UART状态机
    IE2 |= URXIE1 ;            // 中断允许寄存器设置,接收中断允许
   
}


//串口接收中断,退出LPM3模式.
#pragma vector=USART1RX_VECTOR
__interrupt void usart1_rx (void)
{
   
    static uchar rxcount = 0;
     LPM3_EXIT;  
     string[rxcount++] = RXBUF1;
     rxcount = rxcount%8; //0~7 loop
     
 
}
/*******************************************
函数名称:Send1Char
功    能:向PC机发送一个字符
参    数:sendchar--要发送的字符
返回值  :无
********************************************/
void Send1Char(uchar sendchar)
{
      while (!(IFG2 & UTXIFG1));    //等待发送寄存器为空        
      TXBUF1 = sendchar;
   
}
/*******************************************
函数名称:PutSting0
功    能:向PC机发送字符串,无换行
参    数:ptr--指向发送字符串的指针
返回值  :无
********************************************/
void PutString0(uchar *ptr)
{
      while(*ptr != '\0')
      {
            Send1Char(*ptr++);                     // 发送数据
      }
}
要实现的功能是先接收到一个字符串指令放在数组中,只要第0个和第6个字符分别为‘A’和‘a’,则发回一个字符串。。。程序功能没问题,但是每当执行了8次之后就需要再发送6~8次指令才会响应。应该是每发送一次指令,就执行一次发回字符串的功能的,请问出现这样的情况是什么原因?
1楼
你要考虑你的指令要连续发送出来给单片机时,单片机是否能够在极短的时间内响到你连接字节数据。为了确保字节间的有效响应,你要以在发指令时每发一个字节时加适当中延时然后再发下一字节。
2楼
[QUOTE][B]下面引用由[U]DC[/U]发表的内容:[/B]

你要考虑你的指令要连续发送出来给单片机时,单片机是否能够在极短的时间内响到你连接字节数据。为了确保字节间的有效响应,你要以在发指令时每发一个字节时加适当中延时然后再发下一字节。[/QUOTE]


我是用串口调试助手发的字符串呀,怎么才能每发一个字节,延时后再发下一字节呢?
3楼
不懂VC或VB的,找个朋友帮帮忙写个工具...或用串口调试一个一个字符发给MCU...。
4楼
已解决这个问题
#pragma vector=USART1RX_VECTOR
__interrupt void usart1_rx (void)
{
   static uchar rxcount = 0;
     LPM3_EXIT;
     if(RXBUF1 == 'e')
     {
       RX_flag =1;
       rxcount = 0;  
     }
     else
     {
       string[rxcount++] = RXBUF1;
     }  
}

电脑版 Page created in 0.0625 seconds width 2 queries.