我寫的這個程序想實(shí)現(xiàn)的效果是通過外部中斷0的下降沿觸發(fā)方式實(shí)現(xiàn)P2.6口40k頻率的發(fā)射和停止。(端口低電平有效)
#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的值決定開始還是停止發(fā)送40k的頻率*/ { TR0=1; } else
p2_6=1; } }
void extern_int0() interrupt 0 { TR0=0; /*進(jìn)入外部中斷首先關(guān)閉定時器中斷*/ i++; /*每進(jìn)入一次外部中斷改變一次i的值*/ }
void timer0() interrupt 1 { p2_6=!p2_6; /*發(fā)送頻率*/ }
我想實(shí)現(xiàn)的效果是當(dāng)我不給外部0中斷時p2.6口不會發(fā)射頻率,當(dāng)我給一個INT0口一個下降沿跳變時,定時器開始工作通過定時器中斷來實(shí)現(xiàn)40k頻率波的發(fā)射。當(dāng)我再次給一個INT0口一個下降沿跳變時,P2.6口停止頻率的發(fā)射。但是我現(xiàn)在出現(xiàn)的情況是有時候情況是正常的,即我給它一個外部中斷它就會從一個狀態(tài)轉(zhuǎn)換為另一個狀態(tài),有時候要給INT0口幾次下降沿跳變才會從一種狀態(tài)轉(zhuǎn)換為另一種狀態(tài)。請大家?guī)臀铱纯催@個程序的問題出現(xiàn)在哪?該怎么解決? |