我在做紅外的采集。用timer2捕獲,需要知道溢出次數(shù)才能確定兩次捕獲的長度。
voidmTimer2Interrupt( void ) interrupt INT_NO_TMR2 using 1? ? ? ? ? ? ? ? //timer2中斷服務(wù)程序,使用寄存器組3
{? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? //TR2 = FALSE; //關(guān)定時(shí)器
// if(TF2)? -----這里一打開運(yùn)行就不正常了
//? ? ? ? TF2 = 0;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//清空定時(shí)器2溢出中斷? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? if(CAP1F)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//T2電平捕捉中斷標(biāo)志
? ? {
t0 = T2CAP1;??
temp_len++;
tick0 = uwTick;
CAP1F = 0;//清空T2捕捉中斷標(biāo)志
? ? }
? ? //TR2 = TRUE;//開定時(shí)器? ?
}
//
PIN_FUNC |= bT2_PIN_X; //CAP1由P10 映射到P14
T2MOD &= ~ bT2_CLK;C_T2 = 0;? ? ? //定時(shí)器,時(shí)鐘=Fsys/12 T2標(biāo)準(zhǔn)時(shí)鐘
? ? RCAP2L = TL2 = 0;? ? ? ? ?//16位自動(dòng)重載定時(shí)器
? ? 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定時(shí)器中斷開啟?