|
1金钱
#include <STC15F2K60S2.H>
#include <intrins.h>
#include <STDIO.H>
#include <SendDataByUart1.h>
//sbit Led=P0^6; //Led在P0^6口
sbit Trig=P3^3; //P3.3连接超声波Trig脚
sbit Echo=P3^4; //P3.4连接超声波Echo脚
uchar count;
uint distance;
/********************************************************/
void Delay_t_ms(uint t) //延时函数,单位ms
{
uint j,i;
for(j=0;j<t;j++)
{
for(i=0;i<1100;i++);
}
}
/********************************************************/
void Delay_15_us() //@11.0592MHz
{
uchar i=39;
while (--i);
}
/********************************************************/
void Init_Timer0()
{
TMOD=0x0E; //定时器一工作在模式0.且gate=1
TH0=0xfc;TL0=0x66; //计时每一毫秒,则溢出
ET0=1;EA=1; //开定时器0中断
}
/********************************************************/
void Init_Supersonic()
{
Trig=0;Echo=0; //超声波两个管脚先置0
count=0;distance=0; //超声波的计数及距离变量置0
}
/********************************************************/
void Trig_Supersonic() //触发超声波
{
Trig=1;
Delay_15_us();
Trig=0;
}
/********************************************************/
void Measure_Distance() //测量脉宽的时间间隔
{
uchar low=0;
uint high=0,mid=0;
TR0=1; //开启定时器0
while(Echo==1); //等待计时完成
TR0=0; //关闭计时器
low=TL0;high=TH0;
mid=(high<<8)+low;mid=mid-0xfc66; //计算微秒部分的时间(左移8位和乘以256效果一样)
distance=(mid+1000*count)*170/10000; //距离单位是cm
Delay_t_ms(30); //延时30ms,防止声波互相干扰
}
/********************************************************/
void main()
{
P3M1=0xA03M0=0xC0;
Init_Supersonic(); //初始化超声波
Init_Timer0(); //初始化定时器0
while(1)
{
Trig_Supersonic(); //触发超声波
while(Echo==0); //等待回声
distance=0xAAAA; //*
SendDataByUart1(distance/256); //* 发送distance高8位
SendDataByUart1(distance%256); //* 发送distance低8位
Measure_Distance(); //开始使用定时器计时
distance=0xAAAA; //*
SendDataByUart1(distance/256); //* 发送distance高8位
SendDataByUart1(distance%256); //* 发送distan低8位
Delay_t_ms(2000); //* 延时2s
Init_Supersonic(); //初始化超声波,进行第二次测距
}
}
/*----------------------------------------------------*/
void Timer0_Rountine() interrupt 1
{
count++;
if(count>=18)
count=0;
}
各位大佬可以帮忙看一下吗,不知道为什么程序一直卡在while(echo==0)那个地方,程序应该是在while(echo==0)之前出问题了,后面的都试过,没问题。
我知道答案
本帖寻求最佳答案回答被采纳后将获得系统奖励 10 金钱 , 目前已有 0人回答
|
|