我写的这个程序想实现的效果是通过外部中断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口几次下降沿跳变才会从一种状态转换为另一种状态。请大家帮我看看这个程序的问题出现在哪?该怎么解决? |