[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

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

 

你可能感兴趣的:(HP)