MSP430F147无线温度接收

发布者:anluran最新更新时间:2017-09-09 来源: eefocus关键字:MSP430F147  无线温度接收 手机看文章 扫描二维码
随时随地手机看文章
  1. //===========================================================================//  

  2. //                    北京理工大学珠海学院 徐方鑫                            //  

  3. //                           280599580@qq.com                                //  

  4. //                            2011.3.31                                      //  

  5. //===========================================================================//  

  6. #include    

  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. }  


关键字:MSP430F147  无线温度接收 引用地址:MSP430F147无线温度接收

上一篇:MSP430F5438无线温度发送
下一篇:怎么写stm8的IAP升级的bootloader和app

小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved