找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3039|回复: 4
打印 上一主题 下一主题
收起左侧

RCW-0001型超声波传感器编程问题,红色部分while(echo)那无法工作

[复制链接]
跳转到指定楼层
楼主
RCW-0001型号的超声波传感器  写的程序如下图 主要问题是红色部分while(echo)那无法工作 只要去掉就可以有数据传回上位机
trigg是控制端 持续10毫秒可以产生测距波, echo为接收端根据其为高电平时间测距
  1. #include<reg52.h>
  2. #include<math.h>
  3. #define uchar unsigned char

  4. sbit trig=P0^5;
  5. sbit echo=P0^4;
  6. sbit d=P0^6;

  7. float a,b1,c1;
  8.        int b,c,i,j,k;        
  9.             char x[9];

  10. void main()
  11. {         

  12.             TMOD = 0x20;
  13.         SCON = 0x50;
  14.         TH1 = 0xFD;
  15.        TL1 = TH1;
  16.        PCON = 0x00;
  17.        EA = 1;
  18.        ES = 1;
  19.        TR1 = 1;
  20.            trig=0;
  21.            echo=1;
  22.            while(1)
  23.            {  
  24.                        
  25.                    TH0=0X00;TL0=0X00;
  26.                trig=1;
  27.                    k++;k++;k++;        k++; k++; k++;k++;k++;k++;
  28.                    trig=0;
  29.                    while(!echo);
  30.                    TR0=1;
  31.                   [color=#ff0000] while(echo);//无法运行 ,去掉可以运行[/color]
  32.                   
  33.                    a=TH0*256+TL0;
  34.                    a=a*12*17;           
  35.                    TR0=0;
  36.                    a=(a/11059.2)+0.7;        //修正误差
  37.                     

  38.                    c1=modf(a,&b1);
  39.                    b=(int)(b1);
  40.                    c=(int)(1000*c1);
  41.                   
  42.                    x[0]=0x30+b/100;
  43.                    x[1]=0x30+b/10-10*(b/100);
  44.                    x[2]=0x30+b-10*(b/10);
  45.                    x[3]=0x2e;
  46.                    x[4]=0x30+c/100;
  47.                    x[6]=0x30+c/10-10*(c/100);
  48.                    x[7]=0x30+c-10*(c/10);
  49.                    x[8]='\0';
  50.                    for(i=0;i<9;i++)
  51.                       {   if((x[i]==0x30)&&(i<2))
  52.                               {    if(!(x[0]==0x30))
  53.                                                     {          SBUF=x[i];
  54.                                               while(!TI);
  55.                                               TI=0;
  56.                                                              }
  57.                                                    else
  58.                                                     {    SBUF=0x20;
  59.                                              while(!TI);
  60.                                              TI=0;
  61.                                                                 }
  62.                                           }
  63.                                    else {  SBUF=x[i];
  64.                                    while(!TI);
  65.                                     TI=0;
  66.                                                 }
  67.                             }
  68.                    for(i=0;i<110;i++)
  69.                        for(j=0;j<114;j++);
  70.                
  71.                 }
  72. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:318095 发表于 2018-6-3 10:57 | 只看该作者
这是改的程序分成模块
#include<reg52.h>
#include<math.h>
#define uchar unsigned char

sbit trig=P0^5;
sbit echo=P0^4;
sbit d=P0^6;

float a,b1,c1;
       int b,c,i,j,k;       
            char x[9];
float ceju()
{                  
          SBUF=0X31; while(!TI);TI=0;
         
             
           TH0=0X00;TL0=0X00;
               trig=1;
                   k++;k++;k++;        k++; k++; k++;k++;k++;k++;k++;k++;k++;k++;k++;k++;
                   trig=0;  SBUF=0X32;while(!TI);TI=0;
                   while(!echo);
                   TR0=1;  SBUF=0X33; while(!TI);TI=0;
                    
                   //while(echo);
                        SBUF=0X34;  while(!TI);TI=0;
                   a=TH0*256+TL0;
                   a=a*12*17;          
                    TR0=0;
                   a=(a/11059.2)+0.7;        //修正误差
                    SBUF=0X36;while(!TI);TI=0;
           return a;
}
void delay(b)
{
   
  for(i=1;i<b;i++)
    for(j=1;j<500;j++) ;
}
void songxian(float a)
{                    
           c1=modf(a,&b1);
                   b=(int)(b1);
                   c=(int)(1000*c1);
                  
                   x[0]=0x30+b/100;         
                   x[1]=0x30+b/10-10*(b/100);         
                   x[2]=0x30+b-10*(b/10);           
                   x[3]=0x2e;         
                   x[4]=0x30+c/100;         
                   x[6]=0x30+c/10-10*(c/100);
                   x[7]=0x30+c-10*(c/10);  
                   x[8]='\0';                
                   for(i=0;i<9;i++)
                      {   if((x[i]==0x30)&&(i<2))
                              {    if(!(x[0]==0x30))
                                                    {          SBUF=x[i];
                                              while(!TI);
                                              TI=0;
                                                             }
                                                   else
                                                    {    SBUF=0x20;
                                             while(!TI);
                                             TI=0;
                                                                }
                                          }
                                   else {  SBUF=x[i];
                                   while(!TI);
                                    TI=0;
                                                }
                            }
                   for(i=0;i<110;i++)
                       for(j=0;j<114;j++);
}
void main()
{         

            TMOD = 0x20;
        SCON = 0x50;
        TH1 = 0xFD;
       TL1 = TH1;
       PCON = 0x00;
       EA = 1;
       ES = 1;
       TR1 = 1;
           trig=0;
           echo=1;
           while(1)
           {  
                       SBUF=0X30; while(!TI);TI=0;
                       a=ceju();
                        d=0;
                        songxian(a);
                                    delay(5000);
                   /*TH0=0X00;TL0=0X00;
               trig=1;
                   k++;k++;k++;        k++; k++; k++;k++;k++;k++;
                   trig=0;
                   while(!echo);
                   TR0=1;
                   while(echo);
                  
                   a=TH0*256+TL0;
                   a=a*12*17;          
                   TR0=0;
                   a=(a/11059.2)+0.7;        //修正误差
                    

                   c1=modf(a,&b1);
                   b=(int)(b1);
                   c=(int)(1000*c1);
                  
                   x[0]=0x30+b/100;
                   x[1]=0x30+b/10-10*(b/100);
                   x[2]=0x30+b-10*(b/10);
                   x[3]=0x2e;
                   x[4]=0x30+c/100;
                   x[6]=0x30+c/10-10*(c/100);
                   x[7]=0x30+c-10*(c/10);
                   x[8]='\0';
                   for(i=0;i<9;i++)
                      {   if((x[i]==0x30)&&(i<2))
                              {    if(!(x[0]==0x30))
                                                    {          SBUF=x[i];
                                              while(!TI);
                                              TI=0;
                                                             }
                                                   else
                                                    {    SBUF=0x20;
                                             while(!TI);
                                             TI=0;
                                                                }
                                          }
                                   else {  SBUF=x[i];
                                   while(!TI);
                                    TI=0;
                                                }
                            }
                   for(i=0;i<110;i++)
                       for(j=0;j<114;j++); */
               
                }
}
回复

使用道具 举报

板凳
ID:277550 发表于 2018-6-3 12:04 | 只看该作者
在超声波前面2、30cm地方,放置反射物,再试试吧

超声波的原理就是先发射一段超声波,然后等待返波。。。。。走掉就不等待返回,测量根本不对了。






评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:343909 发表于 2018-6-3 12:06 | 只看该作者
回复

使用道具 举报

5#
ID:318095 发表于 2018-6-4 10:45 | 只看该作者
devcang 发表于 2018-6-3 12:04
在超声波前面2、30cm地方,放置反射物,再试试吧

超声波的原理就是先发射一段超声波,然后等待返波。。 ...

程序是对的  还了板之后可以用了  谢谢 回复
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表