微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 超声波测距的问题

超声波测距的问题

时间:10-02 整理:3721RD 点击:
测距显示到65之后不显示66显示的是0,从0又开始了,是啥问题,还有我这个测距只能测1.3米什么问题,我的是CT107D开发板,下面是程序
#include<reg52.h>
#include<absacc.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define BUZZ XBYTE[0xBFFF]
uchar code table[]=
{0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90};
uchar dspbuf[8]={10,10,10,10,10,10,10,10};
uchar dspcom=0;
sbit TX=P1^0;         //发送
sbit RX=P1^1;         //接收
uchar a,flag;
void delay()       //延迟函数
{
uchar i;
i=10;
_nop_();
_nop_();
_nop_();
while(--i);
}
void display()        //显示函数
{
XBYTE[0xE000]=0xff;
XBYTE[0xC000]=(1<<dspcom);
XBYTE[0xE000]=table[dspbuf[dspcom]];
if(++dspcom==8)
{
  dspcom=0;
}
}
void init()                             //初始化计时器
{
BUZZ=0;
TMOD=0x11;
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
TH1=0;
TL1=0;
EA=1;
ET0=1;
TR0=1;
}
void send_wave()      //发送方波
{
uchar x;
for(x=0;x<8;x++)   //发送八个方波
{
  TX=1;
  delay();
  TX=0;
  delay();
}
}
uint getdistance()      //测距
{
uint distance,time;
send_wave();
TR1=1;
while((RX==1)&&(TF1==0));                //等待收到超声波
TR1=0;
if(TF1==1)
{
  TF1=0;
  distance=999;
}
else
{
  time=TH1;                                          //时间
  time=(time<<8)|TL1;
  distance=time*17/1000;                     //距离
}
TH1=TL1=0;
return distance;
}
void main()
{
uint value;
init();
while(1)
{
  if(flag==1)
  {
         flag=0;
   value=getdistance();                             
   dspbuf[0]=value/100;
   dspbuf[1]=value%100/10;
   dspbuf[2]=value%10;
  }
}  
}
void timer0() interrupt 1   //中断
{
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
display();
if(++a==50)
{
  a=0;
  flag=1;
}
}

总感觉这是一个16位的无符号数据除1000后取整的结果。是不是你这个受制于申请的变量长度的原因啊?

怎么改,大神,我快被这个问题烦死了

谢了

上一篇:MDK5
下一篇:求指教,LED灯两端电压

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top