51单片机控制的超声波测距程序问题,为什么num一直为0#include#define uint unsigned intsbit RST= P1^1;sbit start=P1^2;sbit Pled1= P2^0;sbit Pled2= P2^1;uint num;\x05\x05\x05\x05 //num一个数值代表0.05msvoid DetectScanf();void mai

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/15 11:24:55
51单片机控制的超声波测距程序问题,为什么num一直为0#include#define uint unsigned intsbit RST= P1^1;sbit start=P1^2;sbit Pled1= P2^0;sbit Pled2= P2^1;uint num;\x05\x05\x05\x05 //num一个数值代表0.05msvoid DetectScanf();void mai
xT]OP+% Zzu1dKh/v ԭt31K&TpT`[✈=u[v yޯ9!`]U3qs%sZ=vkx,j"j.κ[i4VR9KKH[?oRh*nIQ(TB%!LAejtfa\dbG0 q|0lf%(oxJkW+iF/05$BH Io@y} ~'5,&uEMq /2joA+2Yqt? 9L;z!N N톱mWՒvj.jO*Ipɥlm&hϲw;]^˒Gvv׹thy񡅚ͱbD`."B,8_Ge|4*x YP$)<ֈt͍mB8-lGfiKڭÍ螁蘹wl5Wӎ^(1~pc{>CҬQp&/BT3_OHFoqez7: QС]n@-b9mߕ@Wu ZrnBO{juJio^Iiz\ڇD}}v! T8SҊKW;;JxzT;R7LB}{yZn ި4^Xx@v&%ۧz1idavRuFgOkdٮtx4( Fj ;

51单片机控制的超声波测距程序问题,为什么num一直为0#include#define uint unsigned intsbit RST= P1^1;sbit start=P1^2;sbit Pled1= P2^0;sbit Pled2= P2^1;uint num;\x05\x05\x05\x05 //num一个数值代表0.05msvoid DetectScanf();void mai
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#include#define uint unsigned intsbit RST= P1^1;sbit start=P1^2;sbit Pled1= P2^0;sbit Pled2= P2^1;uint num;\x05\x05\x05\x05 //num一个数值代表0.05msvoid DetectScanf();void mai
嗯!这个问题是!你的外部中断使用的是外部中断0,而定时器使用的也是0.在51内,外部中断0的优先级是要大于定时器0的.所以在程序的最后是要先执行外部中断0的!
然后你的程序就会先进入外部中断服务,然后你在外部中断中又把定时器中断给关闭了!这样你就不会走到定时器中断的服务项中.
所以你的num一直是0