ch552 timer2的溢出中斷

我在做紅外的采集。用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í)器中斷開啟?


?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


這兩是同一個(gè)位表示的,不能同時(shí)處理,所以你這樣寫就不對(duì)了,就應(yīng)該把TF2那一段屏蔽掉。


溢出次數(shù)如何知道呢??捕獲兩次間隔有長有短。


38k的紅外,還要軟件濾波。有思路嗎


溢出次數(shù)這個(gè)沒有直接的軟件標(biāo)志位。


我采用time1做1ms的計(jì)數(shù)tick,根據(jù)它計(jì)算大概溢出個(gè)數(shù)。26us(38k)內(nèi)處理還是有漏采集。


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频