×
嵌入式 > 技术百科 > 详情

Launchpad的温度测量及串口发送

发布时间:2022-05-25 发布时间:
|

 1 #include  "msp430g2553.h"

 2 

 3 void sendChar(unsigned char c)

 4 {

 5   while(!(IFG2&UCA0TXIFG));

 6   UCA0TXBUF=c;

 7 }

 8 

 9 void sendStr(unsigned char *s)

10 {

11       while(*s!='\0')

12       {

13               sendChar(*s);

14               s++;

15       }

16 }

17 

18 void main(void)

19 

20 {

21 

22 unsigned char i;

23 unsigned char temp;

24 unsigned long tempAverage;

25 unsigned long tempMeasured[8];

26 

27 WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT

28 

29  BCSCTL1 = CALBC1_1MHZ;                    // Set DCO

30  DCOCTL = CALDCO_1MHZ;

31  BCSCTL2 &= ~(DIVS_3);

32 

33 

34  P1SEL = BIT1 + BIT2 ;                     // P1.1 = RXD, P1.2=TXD

35  P1SEL2 = BIT1 + BIT2 ;                     // P1.1 = RXD, P1.2=TXD

36 

37  UCA0CTL1 |= UCSSEL_2;                     // SMCLK

38  UCA0BR0 = 104;                            // 1MHz 9600

39  UCA0BR1 = 0;                              // 1MHz 9600

40  UCA0MCTL = UCBRS0;                        // Modulation UCBRSx = 1

41  UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**

42 

43  //IE2 |= UCA0RXIE;   // Enable USCI_A0 RX interrupt

44  

45   ADC10CTL1 = INCH_10 + ADC10DIV_3;         // Temp Sensor ADC10CLK/4     选择内部温度传感器通道,4分频

46   ADC10CTL0 = SREF_1 + ADC10SHT_3 + REFON + ADC10ON ;

47   __delay_cycles(1000);                     // Wait for ADC Ref to settle 

48   ADC10CTL0 |= ENC + ADC10SC;

49   

50  _EINT();

51  

52 sendStr("\n======== LaunchPad 温度计=======\n");

53 

54 //__bis_SR_register(LPM0_bits + GIE);       // Enter LPM0, interrupts enabled

55 

56 

57  while(1)

58  {

59     if(i>7)

60     {

61             tempAverage=0;

62             for(;i>0;i--)

63                 tempAverage+=tempMeasured[i-1];

64             tempAverage >>= 3;

65             temp=(unsigned char)( ((tempAverage - 630) * 761) / 1024 );

66                         sendStr("\n 华氏温度:");

67             sendChar(temp%100/10+48);

68             sendChar(temp%10+48);

69                         sendStr("  |   摄氏温度:");                        

70                         temp=(temp-32)*5/9; 

71             sendChar(temp%100/10+48);

72             sendChar(temp%10+48);

73             sendChar('\n');

74 

75     }

76     else

77     {

78          ADC10CTL0 |= ENC + ADC10SC;             // Sampling and conversion start   抽样及转换

79          tempMeasured[i]=ADC10MEM;

80          i++;

81     }

82 

83  __delay_cycles(100000);

84 

85 

86  }

87 }

88 

89 //  Echo back RXed character, confirm TX buffer is ready first

90 /*

91 #pragma vector=USCIAB0RX_VECTOR

92 __interrupt void USCI0RX_ISR(void)

93 {

94  while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?

95  UCA0TXBUF = UCA0RXBUF;                    // TX -> RXed character

96 }

97 

98 */

 


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
分布式光纤温度传感器(DTS)系统的应用