[LaunchPad] 超声波模块测试

  1 #include  "msp430g2553.h"
  2 #include  "stdio.h"
  3 
  4 
  5 unsigned char RxFlag;
  6 unsigned char Byte_H;
  7 unsigned char Byte_L;
  8 unsigned int Dist; 
  9 unsigned int DistData[8];
 10 unsigned int DistAverage;
 11 
 12 
 13 int putchar(int ch)
 14 {
 15   while(!(IFG2&UCA0TXIFG));
 16    UCA0TXBUF=ch;
 17    return ch;
 18 }
 19 
 20 
 21  void sendChar(unsigned char c)
 22  {
 23    while(!(IFG2&UCA0TXIFG));
 24    UCA0TXBUF=c;
 25  }
 26 
 27  void sendStr(unsigned char *s)
 28  {
 29        while(*s!='\0')
 30        {
 31                sendChar(*s);
 32                s++;
 33        }
 34  }
 35  
 36  void main(void)
 37  
 38  {
 39    
 40  unsigned char i;
 41    
 42  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
 43  
 44   BCSCTL1 = CALBC1_1MHZ;                    // Set DCO
 45   DCOCTL = CALDCO_1MHZ;
 46   BCSCTL2 &= ~(DIVS_3);
 47  
 48  
 49   P1SEL = BIT1 + BIT2 ;                     // P1.1 = RXD, P1.2=TXD
 50   P1SEL2 = BIT1 + BIT2 ;                     // P1.1 = RXD, P1.2=TXD
 51  
 52   UCA0CTL1 |= UCSSEL_2;                     // SMCLK
 53   UCA0BR0 = 104;                            // 1MHz 9600
 54   UCA0BR1 = 0;                              // 1MHz 9600
 55   UCA0MCTL = UCBRS0;                        // Modulation   UCBRSx = 1
 56   UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
 57  
 58   IE2 |= UCA0RXIE;   // Enable USCI_A0 RX interrupt
 59   
 60   
 61   RxFlag=0; 
 62 
 63   _EINT();
 64   
 65  
 66  printf("\n%s\n","========超声波模块测试=========");
 67 
 68  //__bis_SR_register(LPM0_bits + GIE);       // Enter LPM0, interrupts enabled
 69  
 70  
 71   while(1)
 72   {
 73    for(i=0;i<8;i++)
 74    {
 75      sendChar(0x55); 
 76      __delay_cycles(1000);
 77      DistData[i]=Dist;
 78    }
 79    for(i=0;i<8;i++)
 80      
 81    DistAverage += DistData[i];
 82    DistAverage = DistAverage >> 3;
 83    
 84   __delay_cycles(1200000);
 85  if(RxFlag == 0)
 86    
 87    printf("\n距离: %d  mm\n\n",DistAverage); 
 88  
 89   }
 90   
 91   
 92  }
 93  
 94  //  Echo back RXed character, confirm TX buffer is ready first
 95  
 96  #pragma vector=USCIAB0RX_VECTOR
 97  __interrupt void USCI0RX_ISR(void)
 98  {
 99 
100  while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?
101  
102   if(RxFlag == 0)
103   {
104     Byte_H=UCA0RXBUF;
105     RxFlag=1;
106   }
107   else
108   { 
109       Byte_L=UCA0RXBUF;
110       Dist=Byte_H*256+Byte_L;
111       RxFlag = 0;
112   }
113  }
114  

超声波使用串口通讯,与PC串口通讯共用RXD,TXD引脚,MSP430每隔一段时间,向串口发送0x55,在PC机上显示字符‘U’,发送8次,取平均值,在PC机上会看到

UUUUUUUU
距离: 3170  mm

可以知道程序是正确的,下面的工作加入超声波的测温功能,或进一步使用电平触发测量,并加入低功耗

 

posted @ 2012-08-24 10:19  sky1991  阅读(379)  评论(0编辑  收藏  举报