STM8S timer5初始化设置及应用

浏览:
字体:
发布时间:2013-12-09 23:23:24
来源:
//文件timer5.h#ifndef _timer5_H_#define _timer5_H_#define		TIM5_DIV1				(uint8)0#define		TIM5_DIV2				(uint8)1#define		TIM5_DIV4				(uint8)2#define		TIM5_DIV8				(uint8)3#define		TIM5_DIV16				(uint8)4#define		TIM5_DIV32				(uint8)5#define		TIM5_DIV64				(uint8)6#define		TIM5_DIV128				(uint8)7#define	TIM5_UpDate				(unsigned char)0x01	//更新中断通道#define	TIM5_InChanel1		(unsigned char)0x02#define	TIM5_InChanel2		(unsigned char)0x04#define	TIM5_InChanel3		(unsigned char)0x08#define	TIM5_InDir_UP		(unsigned char)0#define	TIM5_InDir_DOWN	(unsigned char)1#define	TIM5_IEN_ENB				TIM5_CR1 |= 0X01 ;	//开启定时器#define	TIM5_IEN_OFF				TIM5_CR1 &= ~0X01 ;	//关闭定时器	extern 	void Init_TIM5_Base(uint16 Tcon,uint8 Pscr) ;extern	void Init_TIM5_InSet(void) ;extern	void TIM5_InChanelEnb(uint8 Chanel,uint8 en) ;extern	void TIM5_InDirection(uint8 Chanel,uint8 Dircetion);extern	void TIM5_InEnb(uint8 en) ;extern	void TIM5_IntEnb(uint8 Chanel,uint8 en) ;extern	void TIM5_Enb(uint8 en) ;#endif//文件timer5.c#include "global.h" #include "timer5.h"#define		Init_TIM5_Base_CALL/*#define		Init_TIM5_InSet_CALL#define		TIM5_InDirection_CALL#define		TIM5_InChanelEnb_CALL*/#define		TIM5_IntEnb_CALL//#define		TIM5_InEnb_	CALL#define		TIM5_Enb_CALL// *****   TIM5	16位普通定时器  ********//*************************************// 函数名称:Init_Timer5_Timer// 函数功能:TIM5作定时器用时初始化// 入口参数:// 出口参数:无/***************************************/#ifdef	Init_TIM5_Base_CALLvoid Init_TIM5_Base(uint16 Tcon,uint8 Pscr){	// 禁止产生更新事件		TIM5_EGR = 0x00;   //计数器时钟=主时钟/16=16MHZ/16 = 1U// 相当于计数器周期为1uS		TIM5_PSCR = Pscr;     														//设定重装载时的寄存器值		TIM5_ARRH = (Tcon >> 8) & 0xff;//0X07;   		TIM5_ARRL = Tcon & 0xff ;//0XD0;  	// 设定计数器的初值		 定时周期=(ARR+1)*8=16320uS		TIM5_CNTRH = 0; 		TIM5_CNTRL = 0; 				// b0 = 1,允许计数器工作 b1 = 0,允许更新// 设置控制器,启动定时器		TIM5_CR1 = 0x00;   		}#endif	//Init_TIM5_Base_CALL//*************************************// 函数名称:Init_Timer5_In// 函数功能:TIM5作输入捕捉使用时初始化// 入口参数:// 出口参数:无/***************************************/#ifdef	Init_TIM5_InSet_CALLvoid Init_TIM5_InSet(void){		TIM5_CCER1 &= ~(SETB0 | SETB4) ; //禁止输入捕获1 2 3		TIM5_CCER2 &= ~SETB0 ;//	采样频率=Fmst  N = 8  //  每个边沿捕获一次		TIM5_CCMR1 |= 0x30 ;		TIM5_CCMR2 |= 0x30 ;		TIM5_CCMR3 |= 0x30 ;				//通道映射方向		TIM5_CCMR1 |= 0x01 ;//IC1映射在TI1FP1	//		TIM5_CCMR1 |= 0x02 ;//IC1映射在TI2FP1		//		TIM5_CCMR2 |= 0x01 ;//IC2映射在TI2FP2			TIM5_CCMR2 |= 0X02 ;//IC2映射在TI1FP2			TIM5_CCMR3 = 0x31 ;//IC3映射在TI3FP3					TIM5_SMCR = 0X04 ; //触发方式复位				//捕捉方向		TIM5_InDirection(TIM5_InChanel1,TIM5_InDir_UP) ;		TIM5_InDirection(TIM5_InChanel2,TIM5_InDir_DOWN) ;			TIM5_InDirection(TIM5_InChanel3,TIM5_InDir_UP) ;		//捕捉通道使能		TIM5_InChanelEnb((TIM5_InChanel1 | TIM5_InChanel2) ,ENB) ;		TIM5_InChanelEnb(TIM5_InChanel3 ,DIS) ;		}#endif	//Init_TIM5_InSet_CALL//*************************************// 函数名称:TIM5_InDirection// 函数功能:TIM5捕捉方向设置// 入口参数:通道号,捕捉方向// 出口参数:无/***************************************/#ifdef		TIM5_InDirection_CALLvoid  TIM5_InDirection(uint8 Chanel,uint8 Dircetion){		if(Chanel == TIM5_InChanel1) //通道1		{						if(Dircetion == TIM5_InDir_UP)					TIM5_CCER1 &= ~SETB1 ;//捕捉在TI1F或TI2F的上升沿				else					TIM5_CCER1 |= SETB1 ;		}		else	if(Chanel == TIM5_InChanel2)//通道2		{				//捕捉在TI1F或TI2F的上升沿				if(Dircetion == TIM5_InDir_UP)							TIM5_CCER1 &= ~SETB5 ;				else					TIM5_CCER1 |= SETB5 ;						}		else	if(Chanel == TIM5_InChanel3)//通道3		{				if(Dircetion == TIM5_InDir_UP)							TIM5_CCER2 &= ~SETB1 ;//捕捉在TI3F的上升沿				else					TIM5_CCER2 |= SETB1 ;								}}#endif	//TIM5_InDirection_CALL//*************************************// 函数名称:TIM5_InChanelEnb// 函数功能:TIM5输入通道使能函数// 入口参数:TIM5通道号 使能参数// 出口参数:无/***************************************/#ifdef	TIM5_InChanelEnb_CALLvoid TIM5_InChanelEnb(uint8 Chanel,uint8 en){		if(ENB == en)				{			if(Chanel & TIM5_InChanel1)				TIM5_CCER1 |= SETB0 ;	//捕捉1使能			if(Chanel & TIM5_InChanel2)				TIM5_CCER1 |= SETB4 ;	//捕捉2使能			if(Chanel & TIM5_InChanel3)				TIM5_CCER2 |= SETB0 ;	//捕捉3使能		}		else 		{			if(Chanel & TIM5_InChanel1)				TIM5_CCER1 &= ~SETB0 ;	//捕捉1禁止使能			if(Chanel & TIM5_InChanel2)				TIM5_CCER1 &= ~SETB4 ;	//捕捉2禁止使能			if(Chanel & TIM5_InChanel3)				TIM5_CCER2 &= ~SETB0 ;	//捕捉3禁止使能						}					}#endif	//TIM5_InChanelEnb_CALL//*************************************// 函数名称:TIM5_IntEnb// 函数功能:TIM5中断使能函数// 入口参数:TIM5中断号 使能参数// 出口参数:无/***************************************/#ifdef	TIM5_IntEnb_CALL	void  TIM5_IntEnb(uint8 Chanel,uint8 en){		if(ENB == en)				{			if(Chanel & TIM5_UpDate)					TIM5_IER 	|= SETB0 ;	//允许更新中断			if(Chanel & TIM5_InChanel1)				TIM5_IER |= SETB1 ;	//开捕捉/比较1中断			if(Chanel & TIM5_InChanel2)				TIM5_IER |= SETB2 ;	//开捕捉/比较2中断			if(Chanel & TIM5_InChanel3)				TIM5_IER |= SETB3 ;	//开捕捉/比较3中断		}		else 		{			if(Chanel & TIM5_UpDate)					TIM5_IER 	&= ~SETB0 ;	//禁止更新中断			if(Chanel & TIM5_InChanel1)				TIM5_IER 	&= ~SETB1 ;		//禁止捕捉/比较1中断			if(Chanel & TIM5_InChanel2)				TIM5_IER 	&= ~SETB2 ;		//禁止捕捉/比较2中断			if(Chanel & TIM5_InChanel3)				TIM5_IER 	&= ~SETB3 ;		//禁止捕捉/比较3中断				}	}#endif	//TIM5_IntEnb_CALL	//*************************************// 函数名称:Tim5In_Enb// 函数功能:TIM5 开捕捉中断 // 入口参数:// 出口参数:无/***************************************/#ifdef	TIM5_InEnb_CALLvoid TIM5_InEnb(uint8 en){		if(en == ENB)		{			TIM5_CNTRH = 0; 			TIM5_CNTRL = 0; 			//开捕捉/比较1.2中断			TIM5_IntEnb((TIM5_InChanel1 | TIM5_InChanel2),ENB) ; 			TIM5_CR1 |= 0X01 ;	//开启定时器		}		else		{						//关闭捕捉/比较1.2.3中断			TIM5_IntEnb((TIM5_InChanel1 | TIM5_InChanel2 | TIM5_InChanel3),DIS) ; 			TIM5_CR1 &= ~0X01 ;	//关闭定时器					}}#endif	//TIM5_InEnb_CALL//*************************************// 函数名称:Tim5er_Enb// 函数功能:TIM5er使能 作定时器用// 入口参数:// 出口参数:无/***************************************/#ifdef	TIM5_Enb_CALLvoid TIM5_Enb(uint8 en){			if(en == ENB)		{			TIM5_IntEnb(TIM5_UpDate,ENB) ; //使能更新中断			TIM5_CR1 |= 0X01 ;	//开启定时器		}		else		{			TIM5_IntEnb(TIM5_UpDate,DIS) ; //禁止更新中断			TIM5_CR1 &= ~0X01 ;	//关闭定时器					}}#endif	//TIM5_Enb_CALL//实例应用void main(void){//-----TIM5 初始化--------------------------	Init_TIM5_Base(30,TIM5_DIV16) ; //16M/16=1M 定时30*1U=30U中断一次	TIM5_Enb(ENB) ;			//TIM5定时器使能计数 使能中断	while(1)	{				}}

>更多相关文章
24小时热门资讯
24小时回复排行
资讯 | QQ | 安全 | 编程 | 数据库 | 系统 | 网络 | 考试 | 站长 | 关于东联 | 安全雇佣 | 搞笑视频大全 | 微信学院 | 视频课程 |
关于我们 | 联系我们 | 广告服务 | 免责申明 | 作品发布 | 网站地图 | 官方微博 | 技术培训
Copyright © 2007 - 2024 Vm888.Com. All Rights Reserved
粤公网安备 44060402001498号 粤ICP备19097316号 请遵循相关法律法规
');})();