我寫的這個程序想實現的效果是通過外部中斷0的下降沿觸發方式實現P2.6口40k頻率的發射和停止。(端口低電平有效)
#include <reg52.h> #include <stdio.h> #define uint unsigned int uint i=0; sbit p2_6=P2^6; void main() { TMOD=0x02; /*定時器工作在模式2*/ IT0=1; EX0=1; ET0=1; TH0=249; /*初始化定時器*/ TL0=249; EA=1; while(1) { if(i%2==1) /*用i的值決定開始還是停止發送40k的頻率*/ { TR0=1; } else
p2_6=1; } }
void extern_int0() interrupt 0 { TR0=0; /*進入外部中斷首先關閉定時器中斷*/ i++; /*每進入一次外部中斷改變一次i的值*/ }
void timer0() interrupt 1 { p2_6=!p2_6; /*發送頻率*/ }
我想實現的效果是當我不給外部0中斷時p2.6口不會發射頻率,當我給一個INT0口一個下降沿跳變時,定時器開始工作通過定時器中斷來實現40k頻率波的發射。當我再次給一個INT0口一個下降沿跳變時,P2.6口停止頻率的發射。但是我現在出現的情況是有時候情況是正常的,即我給它一個外部中斷它就會從一個狀態轉換為另一個狀態,有時候要給INT0口幾次下降沿跳變才會從一種狀態轉換為另一種狀態。請大家幫我看看這個程序的問題出現在哪?該怎么解決? |