MSP430F147无线温度接收

Code:
  1. //===========================================================================//
  2. //北京理工大学珠海学院徐方鑫//
  3. //[email protected]//
  4. //2011.3.31//
  5. //===========================================================================//
  6. #include<msp430x14x.h>
  7. #defineucharunsignedchar
  8. #defineuintunsignedint
  9. uchardN[6];//要显示的6位温度数字
  10. ucharscandata[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  11. 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//数码管七段码;0--f
  12. ucharcnt=0;//数码管位选变量
  13. ucharThermometer[1];//温度全局变量
  14. intThermometer_1;
  15. voidinit_clock(void);//时钟模块初始化
  16. voidinit_watchdog(void);//看门狗初始化
  17. voidinit_codeDisplay(void);//数码管初始化
  18. voidinit_sci(void);//串口初始化
  19. /*******************************************
  20. 函数名称:init_all
  21. 功能:总初始化
  22. 参数:无
  23. 返回值:无
  24. ********************************************/
  25. voidinit_all(void)
  26. {
  27. WDTCTL=WDTPW+WDTHOLD;//禁止看门狗
  28. init_clock();//总线时钟初始化-MSP430为锁频环
  29. init_watchdog();//看门狗模块初始化
  30. init_sci();//串口初始化
  31. init_codeDisplay();//数码管初始化
  32. }
  33. /****************主函数****************/
  34. voidmain(void)
  35. {
  36. init_all();//主初始化程序
  37. while(1);//后台等待
  38. }
  39. /*******************************************
  40. 函数名称:init_clock
  41. 功能:系统时钟初始化
  42. 参数:无
  43. 返回值:无
  44. ********************************************/
  45. voidinit_clock(void)
  46. {
  47. uchari;
  48. /*------选择系统主时钟为8MHz-------*/
  49. BCSCTL1&=~XT2OFF;//打开XT2高频晶体振荡器
  50. do
  51. {
  52. IFG1&=~OFIFG;//清除晶振失败标志
  53. for(i=0xFF;i>0;i--);//等待8MHz晶体起振
  54. }
  55. while((IFG1&OFIFG));//晶振失效标志仍然存在?
  56. BCSCTL2|=SELM_2+SELS;//MCLK和SMCLK选择高频晶振
  57. }
  58. /*******************************************
  59. 函数名称:init_watchdog
  60. 功能:看门狗初始化
  61. 参数:无
  62. 返回值:无
  63. ********************************************/
  64. voidinit_watchdog(void)
  65. {
  66. //设置看门狗定时器,初始化控制数码管的IO
  67. WDTCTL=WDT_ADLY_1_9;
  68. IE1|=WDTIE;
  69. //计数时钟选择SMLK=8MHz,1/8分频后为1MHz
  70. TACTL|=TASSEL_2+ID_3;
  71. //打开全局中断
  72. _EINT();
  73. }
  74. /*******************************************
  75. 函数名称:init_sci
  76. 功能:串口初始化
  77. 参数:无
  78. 返回值:无
  79. ********************************************/
  80. voidinit_sci(void)
  81. {
  82. P3SEL|=0x30;//P3.4,5=USART0TXD/RXD
  83. ME1|=UTXE0+URXE0;//EnableUSART0TXD/RXD
  84. UCTL0|=CHAR;//8-bitcharacter
  85. UTCTL0|=SSEL1;//UCLK=SMCLK
  86. /*8M/9600=833833=0x03410.000*8=0*/
  87. UBR00=0x41;
  88. UBR10=0x03;
  89. UMCTL0=0x00;
  90. /*UBR00=0x45;//8MHz115200
  91. UBR10=0x00;//8MHz115200
  92. UMCTL0=0x00;*///8MHz115200modulation
  93. UCTL0&=~SWRST;//InitializeUSARTstatemachine
  94. IE1|=URXIE0;//EnableUSART0RXinterrupt
  95. _BIS_SR(GIE);//EnterLPM0w/interrupt
  96. }
  97. /*******************************************
  98. 函数名称:init_codeDisplay
  99. 功能:数码管显示初始化
  100. 参数:无
  101. 返回值:无
  102. ********************************************/
  103. voidinit_codeDisplay(void)
  104. {
  105. P4DIR=0xff;
  106. P5DIR=0xff;
  107. P4OUT=0x00;
  108. P5OUT=0xff;
  109. }
  110. /*******************************************
  111. 函数名称:watchdog_timer
  112. 功能:看门狗定时器中断服务函数,进行数码
  113. 管动态扫描
  114. 参数:无
  115. 返回值:无
  116. ********************************************/
  117. #pragmavector=WDT_VECTOR
  118. __interruptvoidwatchdog_timer(void)
  119. {
  120. P5OUT=0xff;
  121. Thermometer_1=Thermometer[0]*3;
  122. switch(cnt)
  123. {
  124. case0:P5OUT&=~BIT1;P4OUT=~scandata[Thermometer_1/100];break;
  125. case1:P5OUT&=~BIT2;P4OUT=~scandata[Thermometer_1%100/10];P4OUT&=~0x80;break;
  126. case2:P5OUT&=~BIT3;P4OUT=~scandata[Thermometer_1%10];break;
  127. }
  128. cnt++;
  129. if(cnt==5)cnt=0;
  130. }
  131. #pragmavector=USART0RX_VECTOR
  132. __interruptvoidusart0_rx(void)
  133. {
  134. while(!(IFG1&UTXIFG0));//USART0TXbufferready?
  135. Thermometer[0]=RXBUF0;//RXBUF0toTXBUF0
  136. TXBUF0=Thermometer[0];
  137. //TXBUF0=Thermometer[i];
  138. //Send_data(Thermometer);
  139. //if(i==5)i=0;
  140. }

你可能感兴趣的:(SP)