笔记:合泰单片机BH66F2652开发(四)TIMER

笔记:(四)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-----------------------------------*/

猜你喜欢

转载自blog.csdn.net/FutureStudio1994/article/details/114127994
今日推荐