打印
[51单片机]

超声波测距,距离测试不出来

[复制链接]
1555|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主


上面是我的发射和接收电路图,附上程序代码
#include"STC12C5A60S2.h"
#include<intrins.h>
#include<stdio.h>
#include"1602.h"

#define uint unsigned int
#define uchar unsigned char

sbit TX = P3^4;           //发送
sbit RX = P3^2;          //接收
//sbit flag1 = P2^0;          //接收
//sbit flag2 = P2^1;          //接收

uint x,y;
uchar outcomeL,flag,outcomeH;
uchar s;
float distance_data;

void delay1ms(uint z)//延时子函数用于转向延时
{
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);               
}

void main()
{  
        unsigned char date[16] = 0;
       
        TX = 0;          //超声波发射端初始为低电平

        init1602();

        TMOD=0x11;//确定1时器工作方式
    TH0 = (65536 - 1000) / 256;
        TL0 = (65536 - 1000) % 256;
        TH1 = 0;
        TL1 = 0;
//        ET1 = 1;          //开定时器1中断
        ET0 = 1;
        EA = 1;         //开总中断
    EX0 = 0;          //开外部0中断
    IT0 = 1;          //外部中断下降沿触发
        TR0 = 1;
//    flag = 0;        //计算距离标志位         
        while(1)
        {
                if(flag == 1)
                {
                        distance_data=outcomeH << 8 + outcomeL;               
            distance_data = distance_data* 340 / 2.0 / 10000;        //CM   
                        sprintf(date,"S = %.2f Cm",distance_data);
                        disstr(1,1,date);
                        flag = 0;
                }       
        }         
}

void timer0() interrupt 1
{
        if(s == 0)
        {
                TH0 = (65536 - 1500) / 256;
                TL0 = (65536 - 1500) % 256;
                TX = 1;
                s = 1;
//        TH1 = 0;
//        TL1 = 0;
        }
        else if(s == 1)        //延时一段时间
        {
                TH0 = (65536 - 1000) / 256;         
                TL0 = (65536 - 1000) % 256;
                TX = 0;
                TR1 = 1;
                s=2;
        }
        else if(s == 2)
        {
                TH0 = (65536 - 500) / 256;         
                TL0 = (65536 - 500) % 256;
                s = 0;
                EX0 = 1;       
        }       
}

void INTO_() interrupt 0   // 外部中断是0号
{   
     TR1 = 0;
         outcomeH =TH1;    //取出定时器的值
     outcomeL =TL1;    //取出定时器的值
     flag = 1;           //至成功测量的标志
//     EX0 = 0;            //关闭外部中断
         TH1 = 0;
         TL1 = 0;
         

}
现在我的问题是 CX的7脚是一个有规律的高低电平信号,这个高低电平跟我控制发射超声波的发射与接收的信号一模一样。如果不发射超声波,7脚就一直都是高电平。现在我的这个程序就是测不出来距离,在1602上显示的一直都是0.00CM。。。请问大神们啊,我的问题出现在哪里啊???!!调了很久了!!~~





相关帖子

沙发
xiaoliping1945| | 2013-8-31 22:02 | 只看该作者
你这好像是独立的发送接送帽呢呢?那就要自己发送38K的方波触发信号才行呢,看手册上有的,百度一下

使用特权

评论回复
板凳
kpzclxtx| | 2013-8-31 22:20 | 只看该作者
1,改为电平触发试试;2,调节R3电阻降低灵敏度;3,定时器中断开启好像搞错了?看我的帖子、、

使用特权

评论回复
地板
511706987|  楼主 | 2013-9-1 23:06 | 只看该作者
kpzclxtx 发表于 2013-8-31 22:20
1,改为电平触发试试;2,调节R3电阻降低灵敏度;3,定时器中断开启好像搞错了?看我的帖子、、 ...

en 明天试试吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

86

帖子

0

粉丝