|
|
STC15系列單片機(jī)的外部中斷0(INT0)和外部中斷1(INT1)的觸發(fā)有兩種方式,上升沿和下降沿均可觸發(fā)方式和僅下降沿觸發(fā)方式。在實(shí)際應(yīng)用中,有時(shí)候需要上升沿觸發(fā)。這時(shí)有兩種方案可以解決。
1.將觸發(fā)方式設(shè)置成僅下降沿觸發(fā)。當(dāng)外部電路產(chǎn)生一個(gè)上升沿時(shí),通過硬件電路加一個(gè)三極管進(jìn)行反向變成下降沿。
2.這種方法不需要改變硬件電路。將觸發(fā)方式設(shè)置成上升沿和下降沿均可觸發(fā)方式。外部中斷產(chǎn)生一個(gè)上升沿時(shí),進(jìn)入中斷服務(wù)函數(shù),這時(shí)在中斷服務(wù)函數(shù)里做進(jìn)一步處理,檢測(cè)當(dāng)前INT0的電平狀態(tài)。如果是高電平,則判斷為上升沿。如果是低電平,則判斷為是下降沿。
注意(很重要!): 進(jìn)入中斷服務(wù)函數(shù)后,一定要延時(shí)幾個(gè)毫秒再去做電平檢測(cè)。因?yàn)椴还苁巧仙剡是下降沿,都不可能是在一個(gè)瞬間完成的,中間會(huì)經(jīng)歷一個(gè)從高(低)到低(高)的過程。
如果進(jìn)入中斷服務(wù)函數(shù)就立刻檢測(cè),可能當(dāng)時(shí)電平還沒有達(dá)到滿足高或低電平的默認(rèn)電壓值或者處于高和低之間的臨界電壓狀態(tài),很可能出現(xiàn)誤判的現(xiàn)象。這樣做的目的是讓跳變后的電平達(dá)到穩(wěn)定狀態(tài)再檢測(cè),說白了就是一個(gè)去抖動(dòng)的過程。
下面把初始化和中斷服務(wù)函數(shù)的代碼貼出來:
- void Initial_INT0(void)
- {
- INT0=0;
- IT0=0; // 設(shè)置成上升沿和下降沿均觸發(fā)
- EX0=1; //使能INT0中斷
- EA=0;
- }
- void exint0() interrupt 0 //外部中斷入口
- {
- delay_ms(50); //延時(shí)消抖
- if(INT0==1) //如果檢測(cè)到INT0=1,則判斷為上升沿
- {
- led=0;
- delay_ms(500);
- led=1;
- }
- else
- led=1;
- }
復(fù)制代碼 在實(shí)際做東西的過程中遇到的一個(gè)小問題,希望對(duì)你有幫助。
|
評(píng)分
-
查看全部評(píng)分
|