#include <reg52.h>
#include <intrins.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
sbit TRIG = P1^2;
sbit ECH0 = P1^3;
uint time=0;
float Distance=0;
bit flag =0;
void Timeinit()
{
TMOD=0x21; //0020 0001
SCON=0x50;
TH0=0;
TL0=0;
TH1=0xFD;
TL1=0xFD; //9600
ET0=1;
TR0=1;
TR1=1;
TI=1;
EA=1;
}
void StartModule()
{
TRIG=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TRIG=0;
}
void Conut()
{
time=TH0*256+TL0;
TH0=0;
TL0=0;
Distance = (time*1.82)/100; //cm
if(flag==1||Distance>60)
{
flag=0;
printf("--.---CM\n");
}
printf("Distance=%.3f CM\n",Distance);
}
void delayms(uint ms)
{
unsigned char i=100,j;
for(;ms;ms--)
{
while(--i)
{
j=10;
while(--j);
}
}
}
void main()
{
Timeinit();
while(1)
{
StartModule();
while(!ECH0);
TR0=1;
while(ECH0);
TR0=0;
Conut();
delayms(60);
}
}
void Timer0() interrupt 1
{
flag=1;
}
用普中开发板得到的测距效果,还是挺准确的,就是手有点抖
用最小系统的这个代码printf函数没办法把数据到串口