测码的部分如下,外置12M晶振,测出的头码在13.35-13.48左右,用IRREAD测得的是13.52-13.58之间变化不会那么大,似乎有丢失,高手帮忙看下!到底哪里的问题?实在不知道怎么搞了。
另外,因做板子的时候没有考虑周到,现PC3接的是红外接收头而PC3的IO复用功能恰好是TIM_CH3,我反复试验TIM1_CH1,TIM1_CH2可以用,查资料说CH3不能用来做外部输入捕获?是这样的吗?
/*------------------------------------------------
定时器 4初始化
------------------------------------------------*/
void Init_Tim4(void)
{
TIM4_DeInit();
TIM4_TimeBaseInit(TIM4_PRESCALER_16, 0x3C); //预分频系数16
TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE); //IER
TIM4_PrescalerConfig(TIM4_PRESCALER_16, TIM4_PSCRELOADMODE_UPDATE); //预分频配置
TIM4_Cmd(ENABLE);
}
/*------------------------------------------------
定时器4中断服务函数
------------------------------------------------*/
#pragma vector=0x19
__interrupt void TIM4_UPD_OVF_IRQHandler(void)
{
irtime++; //用于计数2 个下降沿之间的时间
TIM4_SR=0; //清除中断标致位
}
/*------------------------------------------------
外部中断初始化
------------------------------------------------*/
void EXTI_INIT(void)
{
EXTI_DeInit();
EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOC,EXTI_SENSITIVITY_FALL_ONLY); //下降沿触发
}
/*------------------------------------------------
外部中断中断服务函数
------------------------------------------------*/
#pragma vector=7
__interrupt void EXTI_PORTC_IRQHandler(void)
{
static uchar i;
if(Flag.db0)
{
if(irtime<202&&irtime>=105)//引导头码
{
i=0;
aa=TIM4_CNTR;
}
irdata=irtime;
i++;
TIM4_CNTR=0;
irtime=0;
if(i==33)
{
count = irdata[0]; //取引导码数值
irok=1;
i=0;
Flag.db0=0;
}
}
else
{
Init_Tim4();
Flag.db0=1;
irtime=0;
}
} |