📄 basictimer.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 + -