MSP430F147无线温度接收

来源:互联网 发布:f35知乎 编辑:程序博客网 时间:2024/05/01 05:38

 

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

 

原创粉丝点击