== 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_CALL
void 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_CALL
void 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_CALL
void 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)
{
}
}
|