[STM8] STM8S103K3 输入捕获问题

[复制链接]
4107|3
 楼主| win2000_li 发表于 2010-8-2 17:36 | 显示全部楼层 |阅读模式
void Timer1Config(void)
{
TIM1_DeInit();
TIM1_TimeBaseInit(0, TIM1_COUNTERMODE_DOWN, 10000, 0);
TIM1_ICInit(TIM1_CHANNEL_1, TIM1_ICPOLARITY_RISING, TIM1_ICSELECTION_DIRECTTI,  TIM1_ICPSC_DIV8, 0x0);
TIM1_ITConfig(TIM1_IT_CC1, ENABLE);

TIM1_ClearFlag(TIM1_FLAG_CC1);
TIM1_Cmd(ENABLE);
}

这里是我的初始化函数。

#ifdef _COSMIC_
@far @interrupt void TIM1_CAP_COM_IRQHandler(void)
#else /* _RAISONANCE_ */
void TIM1_CAP_COM_IRQHandler(void) interrupt 12
#endif /* _COSMIC_ */
{   
u8 DataCnt  = SetZero;
u16 TempVale = SetZero;

if (TIM1_GetITStatus(TIM1_IT_CC1))
{
  TIM1_ClearFlag(TIM1_FLAG_CC1);
  
  tab = ta/10;
  ta++;
  switch(tab)
  {
   case 0:  
    a[tabc++] = TIM1_GetCapture1();;
   break;
   case 1:
    if (ta==11)
     tabc = 0;
    b[tabc++] = TIM1_GetCapture1();;
   break;
   case 2:
    if (ta==21)
     tabc = 0;
    c[tabc++] = TIM1_GetCapture1();;
   break;
   case 3:
    if (ta==31)
     tabc = 0;
    d[tabc++] = TIM1_GetCapture1();;
    nop();
   break;
   case 4:
    if (ta==41)
     tabc = 0;
    e[tabc++] = TIM1_GetCapture1();;
   break;
   case 5:
    if (ta==51)
     tabc = 0;
    f[tabc++] = TIM1_GetCapture1();;
   break;
   default:
    tab = 0;
    ta = 0;
    tabc = 0;
   break;
  }
}

这里是我的中断服务函数。

我捕获的脉冲是周期1KHZ的方波(信号发生器出来的)

但是在程序抓出来确是2000,我认为正确应该是1000才对;
1.JPG
 楼主| win2000_li 发表于 2010-8-2 17:37 | 显示全部楼层
这是怎么回事呢???

请大家指点一二。。。。。。。
 楼主| win2000_li 发表于 2010-8-2 17:42 | 显示全部楼层
定时器1 CH1通道做为输入捕获,周期为10000,向下计数, 定时器分频为8,滤波为0,

是上升沿捕获!
CrazyST 发表于 2010-8-2 18:35 | 显示全部楼层
是每次都是2000还是先出现2000然后改为1000?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

142

主题

718

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部