超声测距模块,用51调,接受的数据始终不对啊,请各位大...

2020-01-21 21:44发布

#include<STC12C5A60S2.h>
#include"uart.h"

sbit T=P1^0;
sbit R=P3^2;
unsigned char succeed_flag,H,L;
unsigned int distance_data;
#define time_value 0x28

void delay_20us()
{
    unsigned char a;
    for(a=109;a>0;a--);
}

void ini_timer()
{
        TMOD=0x01;
        TR0=0;
}

void ini_exti()
{
        EX0=0;
}

void open_timer()
{
        TR0=1;
}

void open_exti()
{
        EX0=1;
}

void close_timer()
{
        TR0=0;
}

void close_exti()
{
        EX0=0;
}

void light()
{
        P1&=0x7f;
}

void main()
{
        unsigned char send_data[5];

        ini_timer();
        ini_exti();
        uart_ini(0xfd);
        succeed_flag=0;
        T=0;
        EA=1;
        uart_send_u8('7');

        while(1)
        {
                TH0=0;
                TL0=0;
                T=1;
                delay_20us();
                T=0;
               
                while(R==0);
                open_exti();
                open_timer();
               
                while(TH0<time_value);
                close_timer();

                if(succeed_flag==1)
                {       
                        light();
                        distance_data=H;
                        distance_data<<=8;
                        distance_data|=L;

                        distance_data*=12;
                        distance_data/=58;

                        send_data[0]=distance_data/1000+0x30;
                        send_data[1]=distance_data%1000/100+0x30;
                        send_data[2]=distance_data%100/10+0x30;
                        send_data[3]=distance_data%10+0x30;
                        send_data[4]=' ';

                        uart_send_string(send_data,5);
                }
        }
}

void extern0() interrupt 0
{
        succeed_flag=1;
        H=TH0;
        L=TL0;
        close_exti();
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
yao2013lin
1楼-- · 2020-01-22 19:23
iridescent_rsy 发表于 2014-11-7 10:29
咦,改完之后结果还是一样啊,如果有 distance_data/=58;这条语句,就返回0,如果把那条语句注释掉,就是 ...

你发下你的程序看看就是我说的那个程序
iridescent_rsy
2楼-- · 2020-01-23 00:20
 精彩回答 2  元偷偷看……
iridescent_rsy
3楼-- · 2020-01-23 00:23
我把高电平改成50us了
iridescent_rsy
4楼-- · 2020-01-23 03:20
我用示波器看,接收端就是2~3us的高电平,难道是我的模块坏了

一周热门 更多>