超声测距模块,用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条回答
iridescent_rsy
1楼-- · 2020-01-22 02:44
始终返回的都是两个时钟周期
ypengfei
2楼-- · 2020-01-22 04:30
本帖最后由 ypengfei 于 2014-11-6 21:12 编辑

succeed_flag不需要回0吗?

没明白你说什么意思。
yao2013lin
3楼-- · 2020-01-22 07:57
 精彩回答 2  元偷偷看……
iridescent_rsy
4楼-- · 2020-01-22 08:50
yao2013lin 发表于 2014-11-6 21:21
if(succeed_flag==1)
                {        
                        light();

谢谢!!!!!!!!!!!!!!!!!!!!!!!
iridescent_rsy
5楼-- · 2020-01-22 14:18
iridescent_rsy 发表于 2014-11-7 10:22
谢谢!!!!!!!!!!!!!!!!!!!!!!!

咦,改完之后结果还是一样啊,如果有 distance_data/=58;这条语句,就返回0,如果把那条语句注释掉,就是24或者36(之前除以个12,所以就是两个机器周期)
iridescent_rsy
6楼-- · 2020-01-22 16:12
ypengfei 发表于 2014-11-6 21:07
succeed_flag不需要回0吗?

没明白你说什么意思。

改过之后还是那样啊

一周热门 更多>