久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4882|回復(fù): 0
收起左側(cè)

MSP430單片機BasicTimer定時器通用程序庫

[復(fù)制鏈接]
ID:108615 發(fā)表于 2016-3-14 19:58 | 顯示全部樓層 |閱讀模式
本程序是《MSP430系列單片機系統(tǒng)工程設(shè)計與實踐》書里面的源碼,(包含工程文件 (例3.1.6))完整例程下載:http://www.zg4o1577.cn/bbs/dpj-46245-1.html


關(guān)于本程序的詳細(xì)解說大家可以點擊上圖下載電子書

  1. /*
  2.                
  3.                MSP430F4XX系列BasicTimer定時器通用程序庫


  4.   說明:該程序庫包含了BasiTimer(基礎(chǔ)定時器)常用的功能,如設(shè)置溢出頻率、
  5.         休眠延時等,可以作為各種程序的底層驅(qū)動使用。
  6.         要使用該庫函數(shù),需要將本文件(BasiTimer.c)添加進(jìn)工程,并在
  7.         需要調(diào)用顯示函數(shù)的文件開頭處包含"BasiTimer.h"


  8.   (C)西安電子科技大學(xué) 測控技術(shù)與儀器教研中心 編寫:謝楷 2008/02/02
  9.   
  10. */
  11. //
  12. //
  13. //                  MSP430F4XX
  14. //               +---------------+         
  15. //               |               |
  16. //               |           XOUT|-----
  17. //               |               |      32.768KHz Watch Crystal
  18. //               |            XIN|-----
  19. //               |               |
  20. //               +---------------+

  21. #include "msp430x42x.h"    /*單片機寄存器頭文件*/
  22. char  BT_Flag=0;
  23. /****************************************************************************
  24. * 名    稱:BT_Init()
  25. * 功    能:對BasicTimer進(jìn)行初始化設(shè)置
  26. * 入口參數(shù):Div_Sec: 定時器每秒產(chǎn)生中斷次數(shù)。
  27. * 出口參數(shù):無
  28. * 說    明: 如需使用后面的函數(shù),在主循環(huán)之前必須先調(diào)用該初始化函數(shù)
  29. ****************************************************************************/
  30. char  BT_Init(int Div_Sec)
  31. {
  32.   switch(Div_Sec)
  33.   {
  34.      case 20: BTCTL = BTDIV+BT_fCLK2_DIV256;break; // 2s BT Int
  35.      case 1:  BTCTL = BTDIV+BT_fCLK2_DIV128;break; // 1s BT Int
  36.      case 2:  BTCTL = BTDIV+BT_fCLK2_DIV64;break;  //  1/2s BT Int  
  37.      case 4:  BTCTL = BTDIV+BT_fCLK2_DIV32;break;  //  1/4s BT Int      
  38.      case 8:  BTCTL = BTDIV+BT_fCLK2_DIV16;break;  //  1/8s BT Int  
  39.      case 16: BTCTL = BTDIV+BT_fCLK2_DIV8;break;   //  1/16s BT Int  
  40.      case 32: BTCTL = BTDIV+BT_fCLK2_DIV4;break;   //  1/32s BT Int  
  41.      case 64: BTCTL = BTDIV+BT_fCLK2_DIV2;break;   //  1/64s BT Int
  42.      case 128:BTCTL = BT_fCLK2_DIV256;break;       //  1/128s BT Int
  43.      case 256:BTCTL = BT_fCLK2_DIV128;break;       //  1/256s BT Int
  44.      case 512:BTCTL = BT_fCLK2_DIV64;break;        //  1/512s BT Int
  45.      case 1024:BTCTL = BT_fCLK2_DIV32;break;       //  1/1024s BT Int
  46.      case 2048:BTCTL = BT_fCLK2_DIV16;break;       //  1/2048s BT Int
  47.      case 4096:BTCTL = BT_fCLK2_DIV8;break;        //  1/4096s BT Int
  48.      case 8192:BTCTL = BT_fCLK2_DIV4;break;        //  1/8192s BT Int  
  49.      case 16384:BTCTL =BT_fCLK2_DIV2;break;        // 1/16384s BT Int
  50.   default : return(0);
  51.   }
  52.   IE2 |= BTIE;                      // Enable Basic Timer interrupt
  53.   _EINT();
  54.   return(1);
  55. }
  56. /****************************************************************************
  57. * 名    稱:Cpu_SleepDelay()
  58. * 功    能:靠CPU休眠實現(xiàn)延遲。
  59. * 入口參數(shù):BT_Time: BasicTimer中斷次數(shù)
  60. * 出口參數(shù):無
  61. * 說    明: 需要設(shè)置BasicTimer定時器,并開啟中斷。該延遲函數(shù)極省電
  62. ****************************************************************************/
  63. void Cpu_SleepDelay(int BT_Time)
  64. {
  65.   for(;BT_Time>0;BT_Time--)
  66.   {
  67.    BT_Flag=0;
  68.    while(BT_Flag==0) LPM3;  //只有BT中斷才能喚醒CPU
  69.    BT_Flag=0;   
  70.   }
  71. }
  72. /****************************************************************************
  73. * 名    稱:Cpu_SleepWaitBT()
  74. * 功    能:CPU休眠,等待BT中斷喚醒。
  75. * 入口參數(shù):無
  76. * 出口參數(shù):無
  77. * 說    明: 需要設(shè)置BasicTimer定時器,并開啟中斷。該函數(shù)極省電
  78. ****************************************************************************/
  79. void Cpu_SleepWaitBT()
  80. {
  81.    BT_Flag=0;
  82.    while(BT_Flag==0) LPM3;  //只有BT中斷才能喚醒CPU
  83.    BT_Flag=0;   
  84. }
  85. /****************************************************************************
  86. * 名    稱:BT_ISR()
  87. * 功    能:定時喚醒CPU。
  88. * 入口參數(shù):無
  89. * 出口參數(shù):無
  90. ****************************************************************************/
  91. #pragma vector = BASICTIMER_VECTOR
  92. __interrupt void BT_ISR(void)   // 1/Div_Sec 秒一次中斷(由BasicTimer所產(chǎn)生)
  93. {
  94.   BT_Flag=1;
  95. /*
  96.    在這里寫中斷服務(wù)程序,如掃描鍵盤、實時鐘走時等。
  97. */  
  98.    __low_power_mode_off_on_exit();       //喚醒CPU
  99. }
復(fù)制代碼

main.c上面程序的調(diào)用方法:
  1. #include <msp430x42x.h>
  2. #include "BasicTimer.h"

  3. #define LED1_ON   P1OUT |=  BIT1
  4. #define LED1_OFF  P1OUT &=~ BIT1
  5. unsigned char LED1_Status=0;
  6. /********************************************************************
  7. * 名    稱:LED1_SetStatus()
  8. * 功    能:設(shè)置LDE1的狀態(tài)
  9. * 入口參數(shù): 0:滅   1:亮   2:慢閃   3:快閃
  10. * 出口參數(shù):無
  11. ********************************************************************/
  12. void LED1_SetStatus (unsigned char Status)
  13. {  
  14.    LED1_Status= Status;
  15. }
  16. /********************************************************************
  17. * 名    稱:LED1_Process()
  18. * 功    能:LED1處理任務(wù)
  19. * 入口參數(shù):Ticks:  該函數(shù)每秒被調(diào)用的次數(shù)。
  20. * 出口參數(shù):無
  21. * 說    明: 該函數(shù)需要被周期性地調(diào)用。可放于主循環(huán)或定時中斷內(nèi)
  22. ********************************************************************/
  23. void LED1_Process (Ticks)
  24. {  
  25.   static unsigned int LED1_TimerS;
  26.   static unsigned int LED1_TimerF;
  27.   LED1_TimerS++; if(LED1_TimerS >= Ticks  ) LED1_TimerS=0;
  28.   LED1_TimerF++; if(LED1_TimerF >= Ticks/4) LED1_TimerF=0;
  29.   switch(LED1_Status)
  30.   {
  31.    case 0:  LED1_OFF; break;
  32.    case 1:  LED1_ON;  break;
  33.    case 2:  if(LED1_TimerS >= Ticks/2) LED1_ON;
  34.              else                            LED1_OFF;
  35.              break;
  36.    case 3:  if(LED1_TimerF >= Ticks/8) LED1_ON;
  37.              else                            LED1_OFF;
  38.              break;
  39.   }
  40. }


  41. void main( void )
  42. {
  43.    unsigned int Timer=0;
  44.    WDTCTL = WDTPW + WDTHOLD;                   // 停止看門狗
  45.    FLL_CTL0 |= XCAP18PF;                // 配置晶振負(fù)載電容
  46.    P1DIR |= BIT1 + BIT3 + BIT4;         // 三個LED所在IO口設(shè)為輸出
  47.    P1OUT =0;                            // 全滅
  48.    BT_Init(16);                         // BasicTimer設(shè)為1/16秒中斷一次
  49.    while(1)
  50.    {
  51.       Cpu_SleepWaitBT();        //休眠,等待BT喚醒,以下代碼1/16秒執(zhí)行一次
  52.       LED1_Process (16);        //LED1狀態(tài)處理任務(wù)
  53.       Timer++;
  54.       if(Timer==80)  LED1_SetStatus(0);             //滅5秒
  55.       if(Timer==160) LED1_SetStatus(1);             //亮5秒
  56.       if(Timer==240) LED1_SetStatus(2);             //慢閃5秒
  57.       if(Timer==320) {LED1_SetStatus(3); Timer=0;}  //快閃5秒
  58.    }
  59. }
復(fù)制代碼



回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 天堂一区在线观看 | 国产精品视频久久 | 日韩欧美三级电影在线观看 | 久久国产一区二区 | 国产日韩欧美在线观看 | 国产色片| 男女精品网站 | 日韩av在线免费 | 国产在线一区二区三区 | av在线一区二区三区 | 玖玖视频免费 | 电影午夜精品一区二区三区 | 7777久久| 国内精品久久久久久 | 欧美精品久久 | 欧美视频在线播放 | 亚洲成人999 | 欧美一区二区视频 | 国产精品视频久久 | 日韩在线免费 | 中文字幕第十五页 | 在线精品一区二区 | 日本在线免费视频 | 欧美在线小视频 | 一区二区视屏 | 色播av| 精精国产视频 | 国产精品久久久久久久久久久久久久 | 国产精品不卡 | 精品欧美乱码久久久久久 | 色婷婷综合在线观看 | 亚洲欧美精品一区 | 成年人在线播放 | 亚洲视频 欧美视频 | 亚洲精品小视频在线观看 | 久久99精品久久久久婷婷 | 国内自拍偷拍 | 自拍偷拍av | 综合激情网 | 日韩精品一区二区三区中文字幕 | 欧美精品一区二区三区在线 |