⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 basictimer.c

📁 这是一个我自己用430单片机时作的一个简易数字示波器
💻 C
字号:
/*
               
               MSP430F4XX系列BasicTimer定时器通用程序库


  说明:该程序库包含了BasiTimer(基础定时器)常用的功能,如设置溢出频率、
        休眠延时等,可以作为各种程序的底层驱动使用。
        要使用该库函数,需要将本文件(BasiTimer.c)添加进工程,并在
        需要调用显示函数的文件开头处包含"BasiTimer.h"
 

  (C)西安电子科技大学 测控技术与仪器教研中心 编写:谢楷 2008/02/02 
  
*/
//
//
//                  MSP430F4XX
//               +---------------+          
//               |               |
//               |           XOUT|-----
//               |               |      32.768KHz Watch Crystal
//               |            XIN|-----
//               |               |
//               +---------------+

#include "msp430x42x.h"    /*单片机寄存器头文件*/
char  BT_Flag=0;
/****************************************************************************
* 名    称:BT_Init()
* 功    能:对BasicTimer进行初始化设置
* 入口参数:Div_Sec: 定时器每秒产生中断次数。
* 出口参数:无
* 说    明: 如需使用后面的函数,在主循环之前必须先调用该初始化函数
****************************************************************************/
char  BT_Init(int Div_Sec)
{
  switch(Div_Sec)
  {
     case 20: BTCTL = BTDIV+BT_fCLK2_DIV256;break; // 2s BT Int 
     case 1:  BTCTL = BTDIV+BT_fCLK2_DIV128;break; // 1s BT Int 
     case 2:  BTCTL = BTDIV+BT_fCLK2_DIV64;break;  //  1/2s BT Int  
     case 4:  BTCTL = BTDIV+BT_fCLK2_DIV32;break;  //  1/4s BT Int      
     case 8:  BTCTL = BTDIV+BT_fCLK2_DIV16;break;  //  1/8s BT Int  
     case 16: BTCTL = BTDIV+BT_fCLK2_DIV8;break;   //  1/16s BT Int  
     case 32: BTCTL = BTDIV+BT_fCLK2_DIV4;break;   //  1/32s BT Int  
     case 64: BTCTL = BTDIV+BT_fCLK2_DIV2;break;   //  1/64s BT Int 
     case 128:BTCTL = BT_fCLK2_DIV256;break;       //  1/128s BT Int 
     case 256:BTCTL = BT_fCLK2_DIV128;break;       //  1/256s BT Int 
     case 512:BTCTL = BT_fCLK2_DIV64;break;        //  1/512s BT Int 
     case 1024:BTCTL = BT_fCLK2_DIV32;break;       //  1/1024s BT Int 
     case 2048:BTCTL = BT_fCLK2_DIV16;break;       //  1/2048s BT Int 
     case 4096:BTCTL = BT_fCLK2_DIV8;break;        //  1/4096s BT Int 
     case 8192:BTCTL = BT_fCLK2_DIV4;break;        //  1/8192s BT Int  
     case 16384:BTCTL =BT_fCLK2_DIV2;break;        // 1/16384s BT Int 
  default : return(0);
  }
  IE2 |= BTIE;                      // Enable Basic Timer interrupt 
  _EINT();
  return(1);
}
/****************************************************************************
* 名    称:Cpu_SleepDelay()
* 功    能:靠CPU休眠实现延迟。
* 入口参数:BT_Time: BasicTimer中断次数
* 出口参数:无
* 说    明: 需要设置BasicTimer定时器,并开启中断。该延迟函数极省电
****************************************************************************/
void Cpu_SleepDelay(int BT_Time)
{ 
  for(;BT_Time>0;BT_Time--)
  {
   BT_Flag=0;
   while(BT_Flag==0) LPM3;  //只有BT中断才能唤醒CPU
   BT_Flag=0;    
  }
}
/****************************************************************************
* 名    称:Cpu_SleepWaitBT()
* 功    能:CPU休眠,等待BT中断唤醒。
* 入口参数:无
* 出口参数:无
* 说    明: 需要设置BasicTimer定时器,并开启中断。该函数极省电
****************************************************************************/
void Cpu_SleepWaitBT()
{ 
   BT_Flag=0;
   while(BT_Flag==0) LPM3;  //只有BT中断才能唤醒CPU
   BT_Flag=0;    
}
/****************************************************************************
* 名    称:BT_ISR()
* 功    能:定时唤醒CPU。
* 入口参数:无
* 出口参数:无
****************************************************************************/
#pragma vector = BASICTIMER_VECTOR
__interrupt void BT_ISR(void)   // 1/Div_Sec 秒一次中断(由BasicTimer所产生)
{
  BT_Flag=1; 
/*
   在这里写中断服务程序,如扫描键盘等。
*/  
   __low_power_mode_off_on_exit();       //唤醒CPU
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -