作业帮 > 综合 > 作业

51单片机控制的超声波测距程序问题,为什么num一直为0

来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/11/10 18:50:13
51单片机控制的超声波测距程序问题,为什么num一直为0
#include
#define uint unsigned int
sbit RST= P1^1;
sbit start=P1^2;
sbit Pled1= P2^0;
sbit Pled2= P2^1;
uint num;\x05\x05\x05\x05 //num一个数值代表0.05ms
void DetectScanf();
void main()
{
num=0;\x05\x05\x05
TMOD=0x11;
EA=1;
RST=0;
while(1)
{
DetectScanf();
}
}
void DetectScanf()
{
while(start) {;}
if(start==0)
{
while(!start){;}
TH0=(65535-46)/255;
TL0=(65535-46)%255;
RST=1;
TR0=1;
ET0=1;
EX0=1;
IT0=1;
while(1){;}
}
}
void time1() interrupt 1 //定时器0的中断服务程序
{
TH0=(65535-46)/255;
TL0=(65535-46)%255;
num++; //定时到,加0.05ms
}
void receive() interrupt 0
{
ET0=0;
TR0=0;
RST=0;
if(num==0) Pled1=0;
if(num!=0) Pled2=0;
}
现象时按了START按键后,一直是Pled1亮,即num=0 即使没有放物体也是如此,为什么呢?
51单片机控制的超声波测距程序问题,为什么num一直为0
嗯!这个问题是!你的外部中断使用的是外部中断0,而定时器使用的也是0.在51内,外部中断0的优先级是要大于定时器0的.所以在程序的最后是要先执行外部中断0的!
然后你的程序就会先进入外部中断服务,然后你在外部中断中又把定时器中断给关闭了!这样你就不会走到定时器中断的服务项中.
所以你的num一直是0