24小时热门版块排行榜    

查看: 1193  |  回复: 4
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

njw龃龉

银虫 (初入文坛)

[求助] Need Your Help!!!想用三个超声波做避障小车。。。 已有1人参与



大家好,我现在想做一个避障小车,是用89c51的,用三个超声波(左,前,右)。
请问在程序里怎么设定那些TH,TL,TR,EX等等呢。。。
能不能劳烦大家给一下三个超声波用在89c51里的程序呢?
就是驱动他们三个超声波的程序。。。



恳请您的帮助!!
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

468077240

新虫 (初入文坛)

很久前做过旋转超声波避障车,不过我想问你是如何保证三个超声波间的发射和接受不产生紊乱的

发自小木虫Android客户端
4楼2015-10-24 16:26:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 5 个回答

wake_up

木虫 (著名写手)

【答案】应助回帖

感谢参与,应助指数 +1
1. 先在网上找一个定时器程序,然后跑通。 能按周期亮灭小灯。
2. 在网上找一个外部中断的程序,比如一个按钮触发中断。靠外部中断来控制小灯亮灭。
3. 学如何控制超声波模块发射。
4. 用超生发射,然后接收(应该是接受到回波有中断). 发一次,收一次,让等量。
5.用定时器计算发射和接到的时间差。就能算出距离。
扫地扫地扫心地,心地不扫空扫地,人人都把心地扫,世上无处不净地.
2楼2015-10-24 13:36:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

njw龃龉

银虫 (初入文坛)

引用回帖:
2楼: Originally posted by wake_up at 2015-10-24 13:36:40
1. 先在网上找一个定时器程序,然后跑通。 能按周期亮灭小灯。
2. 在网上找一个外部中断的程序,比如一个按钮触发中断。靠外部中断来控制小灯亮灭。
3. 学如何控制超声波模块发射。
4. 用超生发射,然后接收(应该 ...

能帮我看看这个程序吗?三个超声波都可以工作,但是测不到距离呀。。就是我把书放到它哪个距离都会停,三面很远没障碍物时它才转。谢谢您
#include <reg52.h>
#include <intrins.h>

sbit IN1=P1^2;  
sbit IN2=P1^3;
sbit ENA=P1^4;
sbit IN3=P1^5;
sbit IN4=P1^6;  
sbit ENB=P1^7;
sbit Trig1=P2^0;  
sbit Echo1=P2^1;
sbit Trig2=P2^2;  
sbit Echo2=P2^3;
sbit Trig3=P2^4;     
sbit Echo3=P2^5;
bit  flag1=0;
bit  flag2=0;
bit  flag3=0;


unsigned long S1=0;      
unsigned long S2=0;
unsigned long S3=0;
unsigned int  time1=0;
unsigned int  time2=0;
unsigned int  time3=0;
void Forward(void)          
{
         IN1=1;
         IN2=0;
         IN3=1;
         IN4=0;
}
        void Stop(void)            
{
   IN1=0;
         IN2=0;
         IN3=0;
         IN4=0;
}
void Delay10us(unsigned char i)   
{
   unsigned char j;
do{
  j = 10;
  do{
   _nop_();
   }while(--j);
}while(--i);
}



void conut1(void)     
{
          time1=TH0*256+TL0;
          TH0=0;
          TL0=0;
    S1=time1*0.17+10;
}
void conut2(void)      
{
          time2=TH1*256+TL1;
          TH1=0;
          TL1=0;
    S2=time2*0.17+10;
}
void conut3(void)           
{
          time3=TH2*256+TL2;
          TH2=0;
          TL2=0;
    S3=time3*0.17+10;
}

void zd1() interrupt    1            
{
flag1=1;       
  TH0=0;
        TL0=0;
}
void zd2() interrupt    2               
{
        flag2=1;
        TH1=0;
        TL1=0;
}
void zd3() interrupt    3              
{
        flag3=1;
        TH2=0;
        TL2=0;
}
void StartCSB2()                      
{               
    Trig1=1;
  Trig2=1;
        Trig3=1;
         Delay10us(2);
        Trig1=0;
        Trig2=0;
  Trig3=0;
   
}


void gudingluxian()        
{
        StartCSB2();
    conut1();
        conut2();
        conut3();
       
                  if(S1<50||S2<50||S3<50)   
                {
                   Stop();
                }
                else
                {
                        Forward();
                }
       
                         }

               

void  Timer_Count_csb1( void)
{
          TR0=1;
          while(Echo1==1);
          TR0=0;
         TR1=1;
        while(Echo2==1);
        TR1=0;
        TR2=1;
        while(Echo3==1);
        TR2=0;
               
    gudingluxian();

}

void main(void)
{       

        unsigned int a;

       
TMOD=TMOD|0x01;
    EA=1;       

        TH0=0;
    TL0=0;                          
    ET0=1;   
        TR0=1;

        TH1=0;
    TL1=0;                          
    ET1=1;   
        TR1=1;
       
        TH2=0;
    TL2=0;                          
    ET2=1;   
        TR2=1;

           while(1)
        {   
           ENA=1;
           ENB=1;
         
         Echo1=1;
         Echo2=1;
         Echo3=1;
         
     StartCSB2();
                  
        for(a=951;a>0;a--)
            {
                  
               if(Echo1==1||Echo2==1||Echo3==1)
                   {
             Timer_Count_csb1();       
                   }
                  
             }
           }
}
3楼2015-10-24 15:57:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

njw龃龉

银虫 (初入文坛)

引用回帖:
4楼: Originally posted by 468077240 at 2015-10-24 16:26:25
很久前做过旋转超声波避障车,不过我想问你是如何保证三个超声波间的发射和接受不产生紊乱的

我也不怎么清楚呢,网上说每个超声波有一定时间来间隔工作,但我不清楚怎么用,不知在void  Timer_Count_csb1( void)里加延时行不行呢?
5楼2015-10-24 17:52:10
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见