贴程序
/*******************************************************/ 主程序
#pragma vector=0x10
__interrupt void TIM2_CAP_COM_IRQHandler(void) //捕获1
{
if ( TIM2_GetFlagStatus(TIM2_FLAG_CC1) == SET )
{
switch(BH.key)
{
case 0:{
BH.hr_buhuo1 = TIM2_GetCapture1();
BH.key=1;
TIM2_CCER1_CC1P=1; //下降沿
}break;
case 1:{
BH.hr_buhuo3 = TIM2_GetCapture1();
TIM2_CCER1_CC1P=0; //上升沿
BH.key=2;
}break;
case 2:{
BH.hr_buhuo2 = TIM2_GetCapture1();
BH.hr_buhuo2=BH.hr_buhuo2-BH.hr_buhuo1;
TIM2_CCER1_CC1P=1; //下降沿
BH.key=3;
}break;
case 3:{
BH.hr_buhuo4 = TIM2_GetCapture1();
BH.hr_buhuo4=BH.hr_buhuo4-BH.hr_buhuo3;
BH.hr_buhuo=BH.hr_buhuo4+BH.hr_buhuo2;
BH.hr_pl=PL_psc/BH.hr_buhuo; //检测的频率
SPEED_BUZ=(BH.hr_pl/2)*60; //检测的实际转速
TIM2_CCER1_CC1P=0; //上升沿
BH.key=0;
}break;
}
}
TIM2_ClearITPendingBit(TIM2_IT_CC1);
TIM2_ClearFlag(TIM2_FLAG_CC1);
}
/*****************************************/ 初始化
void time2_init(void) //捕获
{
TIM2_PSCR=0x08; //2的8次分频256 最大65535分频 (16000000/256=16us, 16X65535=1.04S 最小1hz)
TIM2_ARRH = 0xff;
TIM2_ARRL = 0xff;
TIM2_CCMR1=0X01; //01:CC1通道被配置为输入,IC1映射在TI1FP1上
TIM2_IER_CC1IE=1; //允许捕获/比较1中断
TIM2_CCER1=0x01; //使能捕获
TIM2_Cmd(ENABLE); //使能TIM3计数
}
/**************************************************/ //常数
#define PL_psc 125000 //(单片机频率/PSC分频数=PL_psc)
就是差几转,高手帮忙看看有没有问题 输入捕获10-300HZ,谢谢了
|