如何让接收数据缓存同时接收两个字节

2019-03-24 14:27发布

#include<msp430x16x.h>
void UARTSnd(unsigned char dat);
void UART_init();
void clock_int();
unsigned long LastRcvData;
unsigned char GLength;
unsigned char RcvIndex;
unsigned char GLengthHigh,GLengthLow;
//********************时钟初始化*******************//
void clock_int()

    unsigned int i;
    P5DIR|=0x70;
    P5SEL|=0x70;                               //P5.4 MCLK输出,P5.5 SMCLK输出,P5.6 ACLK输出4KHZ
   
    BCSCTL1 |= ~XT2OFF+XTS;                               //XT2和LFXT1全部打开
    do
    {
        IFG1 &= ~OFIFG;                                // 清除振荡器失效标志
        for (i = 0xFF; i > 0; i--);                    // 稳定时间
    }
    while ((IFG1 & OFIFG)!=0);                            // 若振荡器失效标志存在
     BCSCTL2 |=SELM1+SELM0+SELS+DIVS_3;                // SMCLK = XT2/8 = 1MHz,MCLK=LFXT1=32.768KHZ
   
}   //********************波特率初始化*******************//
void UART_init()
{
 // UCTL0|=SWRST;                                  //这之后才能对串口模块其它寄存器做修改
 
  UTCTL0=SSEL1;                                 //UCLK=SMCLK=1MHZ
  UBR00=0x68;
  UBR10=0x00;                                   //在1000000HZ下进行9600波特率的通信
  UMCTL0=0x01;                                  //波特率分频因子   UCTL0=CHAR;                                   //8位字符长度
 
 
 // UCTL0&=~SWRST;                                  //使能USART,这之后发送模块才能工作
 
  ME1|=URXE0+UTXE0;                              //允许USART0 TXD/RXD
  IE1|=URXIE0;                             //使能接收中断
 
  P3SEL|=0x30;                                   //p3.4,5用作USART0 TXD/RXD
  P3DIR|=0x10;                                   //p3.4输出  
 
 
  
} #pragma vector=UART0RX_VECTOR
__interrupt void usart0_rx(void)
{
  //while(!(IFG1&UTXIFG0));                              //TX or RX?   while((IFG1 & UTXIFG0)==0);                     //USART0接收缓存有数据吗,UTXIFG0发送中断标志,TX缓存空闲否?
  //TXBUF0=RXBUF0;                                 //读出接收到的数据
  //IFG1|=~URXIFG0; 
  LastRcvData=RXBUF0;                              //输入缓存器转换成字符
  if(RcvIndex==0)
   
  {
    GLengthHigh=LastRcvData;
    RcvIndex++;
   
  }
  
 else if(RcvIndex==1)
        {
          GLengthLow=LastRcvData;
          RcvIndex=0;
        }
 
   
}  
//********************发超声波脉冲*******************// void MeterLenByUART()
{      
       
     
       
        TXBUF0=0x55;            //向缓冲区写入字符
       
        while((UTCTL1&0x01)==0);//正在传输数据或发送
                                //缓冲器UTXBUF有数据循环
                                //跳出则发送移位寄存器和UTXBUF为空
                                //查询等待一次发送完毕
                                      
       
 //UARTSnd(0X55);
        //串口模式下只需要在Trig/TX 管脚输入0X55(波特率9600),
        //系统便可发出8 个40KHZ 的超声波脉冲,然后检测回波信号。
       //当检测到回波信号后,模块还要进行温度值的测量,然后根据
        //当前温度对测距结果进行校正,将校正后的结果通过Echo/RX管脚输出
}
 
 
 
//********************主函数*******************//
void main(void)
{             WDTCTL=WDTPW+WDTHOLD;
         
 clock_int();
 UART_init();
 
 _EINT();                  //通用中断允许
 
 while(1)
 {   
               unsigned long PreLength;
               MeterLenByUART();
               
             
                  PreLength=GLengthHigh;
                  PreLength<<=8;
                  PreLength+=GLengthLow;
              
 
  }
}
串口发送0x55波特率,超声波测距模块返回2个字节的数据,如何将两个字节都接收到而不是仅有一个低字节的返回值,向各位前辈请教喽~本人是刚刚学习430有什么表达不清楚或者不对的地方请各位能否尽量帮小女子指点一二 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
9条回答
wstt
2019-03-25 10:35
我其实一直想找这篇文章来着http://bbs.eeworld.com.cn/thread-309735-1-1.html

一周热门 更多>

相关问题

    相关文章