STM8S207定时器分频后定时不准
我用定时器作为红外发码脉宽控制用,STM8S207定时器分频后定时不准,定时器1或2都不行。下面是我的红外发码程序;搞了好久了都不行。TIM2->SR1&=0xF8;
TIM2->IER=0X01;
TIM2->CCER1=0x00;
TIM2->CCER2=0x00;
TIM2->CCMR2=0x00;
//TIM2->PSCR = 0X00;
//TIM2->EGR=0x01;
sentf=1;
for(i=0;i>8);
TEMPL=(unsigned char)(dumm&0x00ff);
TIM2->CNTRH=TEMPH;
TIM2->CNTRL=TEMPL;
if(ir_sentf)
{
////TIM3->EGR=0x01;
//TIM3->CCER1=0x00;
IR_OUT=1;
ir_sentf=0;
}
else
{
//TIM3->EGR=0x01;
//TIM3->CCER1=0x30;
IR_OUT=0;
ir_sentf=1;
}
TIM2->SR1=0;
enableInterrupts();
TIM2->CR1=0X09;
IWDG->KR = 0xAA;
nop();
sentf1=0;
while(!sentf1)
{
nop();
}
TIM2->SR1&=0xFE;
disableInterrupts();
//TIM2->CR1=0x08;
}
下面这个是定时器2的更新中断处理
@near @interrupt void TIM2_UPD_OVF_BRK_IRQHandler (void)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
if(TIM2->SR1&0x01)
{ TIM2->SR1&=0xfe;
if(sentf)
{
sentf1=1;
}
}
//enableInterrupts(); return;
}
片内晶振吗?这个是有偏差的。 如果频率偏差是固定偏大或者偏小。。那应该是内部时钟偏差造成的。 学习一下。。。楼主解决问题了吗? 我的903k3实测过一次定时溢出处理间隔最短是10us级别的,曾经我在10us级别的定时中断里写了很多赋值判断语句,导致定时严重偏差,最后只剩下3个赋值语句,删掉了其他判断语句才定时正常。楼主可以试试中断计数,闪烁LED灯看看定时准不准。
页:
[1]