ch552 timer2的溢出中断

我在做红外的采集。用timer2捕获,需要知道溢出次数才能确定两次捕获的长度。

voidmTimer2Interrupt( void ) interrupt INT_NO_TMR2 using 1                //timer2中断服务程序,使用寄存器组3

{                                                                             

    //TR2 = FALSE; //关定时器

// if(TF2)  -----这里一打开运行就不正常了

//        TF2 = 0;                                                             //清空定时器2溢出中断                                                      

    if(CAP1F)                                                               //T2电平捕捉中断标志

    {

t0 = T2CAP1;  

temp_len++;

tick0 = uwTick;

CAP1F = 0;//清空T2捕捉中断标志

    }

    //TR2 = TRUE;//开定时器   

}

//

PIN_FUNC |= bT2_PIN_X; //CAP1由P10 映射到P14

T2MOD &= ~ bT2_CLK;C_T2 = 0;      //定时器,时钟=Fsys/12 T2标准时钟

    RCAP2L = TL2 = 0;         //16位自动重载定时器

    RCAP2H = TH2 = 0;


    RCLK = 0;

    TCLK = 0;

    CP_RL2 = 1;

    C_T2 = 0;

    T2MOD = T2MOD & ~T2OE | (1 << 2) | bT2_CAP1_EN; //使能T2引脚捕捉功能,边沿捕捉模式选择

T2COUNT = 0;

TR2 = TRUE;// Timer2 开始

ET2 = 1; //T2定时器中断开启 


 sbit TF2           = T2CON^7;      // timer2 overflow & interrupt flag, need software clear, the flag will not be set when either RCLK=1 or TCLK=1
 sbit CAP1F         = T2CON^7;      // timer2 capture 1 interrupt flag, set by T2 edge trigger if bT2_CAP1_EN=1, need software clear


这两是同一个位表示的,不能同时处理,所以你这样写就不对了,就应该把TF2那一段屏蔽掉。


溢出次数如何知道呢? 捕获两次间隔有长有短。


38k的红外,还要软件滤波。有思路吗


溢出次数这个没有直接的软件标志位。


我采用time1做1ms的计数tick,根据它计算大概溢出个数。26us(38k)内处理还是有漏采集。


只有登录才能回复,可以选择微信账号登录