笔记:(四)TIMER定时器驱动
#include "include.h"
/*******************************************************************************
* fn timer0Init
* brief TIM0初始化
* param 无
* return 无
*******************************************************************************/
u8 OpenFlag = 0;
void timer0Init(void)
{
_ctmc0 = 0x30;//TIM0时钟 = sys / 64; TIM0时钟 = 8MHz / 64 = 125kHz;
_ctmc1 = 0xc1;//定时器模式、比较计数器A匹配清0计数器 计数器计数一次为0.0008ms
_ctmal = 625 & 0xff;//0.0008ms * 625 = 5ms
_ctmah = 625 >> 8;//tm0ah寄存器为8位,625 = 0000 0010 0111 0001; tm0ah填入值,右移取高八位,即 0000 0010
_ctmae = 1;//比较计数器A匹配中断使能
_mf0e = 1;//多功能中断使能
_emi = 1;//使能总中断
_cton = 1;//打开定时器
/* _cton = 0;//关闭定时器*/
if(!OpenFlag)
OpenFlag = 1;
}
/*******************************************************************************
* fn timer0Open
* brief TIM0打开定时器
* param 无
* return 无
*******************************************************************************/
void timer0Open(void)
{
_emi = 1;//使能总中断
_cton = 1;//打开定时器
}
/*******************************************************************************
* fn timer0Open
* brief TIM0关闭定时器
* param 无
* return 无
*******************************************************************************/
void timer0Close(void)
{
_emi = 0;//失能总中断
_cton = 0;//关闭定时器
}
/*******************************************************************************
* fn TIMEROISR
* brief
* param 无
* return 无
*******************************************************************************/
u16 timer0buff[]={
0};
u16 SSR = 0;
/*DEFINE_ISR(TIMEROISR,TIMER0VECTOR)*/
DEFINE_ISR(TIMEROISR,0x10)
{
static unsigned char sec = 0;
if(_ctmaf)//比较器A匹配中断标志位置1
{
_ctmaf = 0;//中断标志位需要软件清0
/* 开机打开显示,只能执行一次 */
if(OpenFlag)
{
if(_pb0)
{
if(SSR<500)
SSR++;
if(SSR>250)
{
SSR = 0;
OpenFlag = 0;
if(!sFlag)
sFlag = 1;
}
}
else
{
SSR = 0;
}
}
/* 20ms定时器,管控滑块何时停下 */
if(++sec >= 4)//5ms*4=20ms
{
sec = 0;
/* 20ms定时器,管控滑块何时停下 */
SysCnt++;
/* 20ms定时器,管控语音按键是否按下 */
if(_pb2 == 0)//按键按下
AudioKeyFlag = 1;
else
AudioKeyFlag = 0;
}
/* if((_pb0)&&(systemFlag))//按下按键*/
if(_pb0)//按下按键
{
if(DOWNKeyCnt<500)
DOWNKeyCnt++;
if(DOWNKeyCnt>300)
{
DOWNKeyCnt = 0;
if(!DOWNKeyFlag)
{
DOWNKeyFlag = 1;
}
}
}
else
{
DOWNKeyCnt = 0;
DOWNKeyFlag = 0;
}
}
}
/*--------------------------------END THE FILE-----------------------------------*/
#ifndef _TIMER_H
#define _TIMER_H
#include "BH66F2652.h"
#define TIMER0VECTOR 0x10
extern void timer0Init(void);
extern void timer0Open(void);
extern void timer0Close(void);
extern void SystemIsRun(void);
extern void PreparatoryWork(void);
#endif
/*--------------------------------END THE FILE-----------------------------------*/