我在做红外的采集。用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定时器中断开启