#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.51hei.com/bbs/) | Powered by Discuz! X3.1 |