suebillt 发表于 2012-11-7 16:28:36

求助STC12C5A60S2的超声波测距问题

用普通51是可以的,但换上加强型的就不行了trig=1;//   delay20us();   trig=0; 这一句,我用while语句循环,用示波器看输出波形是预料中的,但是衔接起来就不行了,时间被拉得很长,软件就测不到超声波模块的echo的信号了(因为回复信号在trig还没有降到低电平前就完了)困惑我好几天了
#include<reg51.h>
#include<intrins.h>
#include "6x8.h"
#include "LQ12864.h"
#define uint unsigned int
#define uchar unsigned char
sbit trig=P1^7;
sbit echo=P3^2; uint succeed;
float t,d;
uint distance,timeh,timel;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void delay20us()
{
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
} void init_time1()
{
TMOD=0x11; //两个定时器都工作为16位定时器
TH1=0; //清零
TL1=0; //
}
void T1_time() interrupt 3
{
TH1=0;
TL1=0;
succeed=0;
EA=0;
}
void ex0()interrupt 0
{
timeh=TH1;
timel=TL1;
t=(timeh*256+timel)*1.09;
d=t*0.17;
distance=(int)d;
succeed=1;
TH1=0;
TL1=0;
EA=0;
}void main()
{
LCD_Init();
LCD_6x8(60,0,"start");
init_time1();
while(1)
{
trig=0;
echo=0;
succeed=0;
trig=1;
delay20us();
trig=0;
while(echo==0);
EA=1;
EX0=1;
ET1=1; //定时器1中断允许
TR1=1;
delay(60);
switch(succeed)
{
case 1:
LCD_Cler_6x8(0,0,4);
display();
break;
case 0:
LCD_Cler_6x8(0,2,6);
displayerror();
break;
}
// delay(1000);
}
}
程序就死在红色字体那边

1013850890 发表于 2013-1-10 21:52:38

lz你的问题解决了吗?

suebillt 发表于 2013-1-10 22:17:20

1013850890 发表于 2013-1-10 21:52 static/image/common/back.gif
lz你的问题解决了吗?

没有,后来没用超声波

妮可 发表于 2013-1-23 11:12:41

suebillt 发表于 2013-1-10 22:17 static/image/common/back.gif
没有,后来没用超声波

nop 的时间太短
多加几个就可以了
页: [1]
查看完整版本: 求助STC12C5A60S2的超声波测距问题