#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口幾次下降沿跳變才會從一種狀態轉換為另一種狀態。請大家幫我看看這個程序的問題出現在哪?該怎么解決?
| 歡迎光臨 (http://www.raoushi.com/bbs/) | Powered by Discuz! X3.1 |