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/09/09 09:38:49
![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](/uploads/image/z/11051235-27-5.jpg?t=51%E5%8D%95%E7%89%87%E6%9C%BA%E6%8E%A7%E5%88%B6%E7%9A%84%E8%B6%85%E5%A3%B0%E6%B3%A2%E6%B5%8B%E8%B7%9D%E7%A8%8B%E5%BA%8F%E9%97%AE%E9%A2%98%2C%E4%B8%BA%E4%BB%80%E4%B9%88num%E4%B8%80%E7%9B%B4%E4%B8%BA0%23include%23define+uint+unsigned+intsbit+RST%3D+P1%5E1%3Bsbit+start%3DP1%5E2%3Bsbit+Pled1%3D+P2%5E0%3Bsbit+Pled2%3D+P2%5E1%3Buint+num%3B%5Cx05%5Cx05%5Cx05%5Cx05+%2F%2Fnum%E4%B8%80%E4%B8%AA%E6%95%B0%E5%80%BC%E4%BB%A3%E8%A1%A80.05msvoid+DetectScanf%28%29%3Bvoid+mai)
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