|
每次调试测试时,TH1总是在10以下,就是说不管多远,距离显示总是在10厘米以内,彻底无语了,求高手指点
先贴出程序
----------------------------------------------------------------------------------------
uint distance;
uchar num1,num2,num3,num4;
----------------------------系统初始化------------------------------------------
void init()
{
Trig = 0;
TMOD = 0x91;
ET0 = 1;
ET1 = 1;
TR1 = 0;
TR0 = 0;
EX1 = 1;
IT1 = 1; //下降沿触发方式
EA = 1;
}
----------------------开启sensor------------------------------
void start_sensor()
{
Trig = 1;
TH0 = 0xff;
TL0 = 0xf0;
TR0 = 1;
}
---------------定时器0中断,用于产生10us高脉冲-------------------------
void timer0() interrupt 1
{
Trig = 0;
TR0 = 0;
TH1 = 0x00;
TL1 = 0x00;
TR1 = 1;
}
--------------记录ECHO的脉冲长度---------------------------由于时间没有这么长,这段程序基本不肯能执行
void timer1() interrupt 3
{
TH1 = 0x00;
TL1 = 0x00;
}
----------------根据脉冲长度计算距离-------------------------------------------
void out1_interrupt() interrupt 2
{
TR1 = 0;
num1 = TH1;
num2 = TL1;
num3 = num1*256/1000*170;
num4 = num2*340/2000;
distance= num3 + num4; //测量的实际距离
TH1 = 0x00;
TL1 = 0x00;
}
-------------------------主函数-----------------------------------------------
void main()
{
init();
while(1)
{
i = i + 1;
if(i >100)
{
start_sensor();
i = 0;
}
display(distance);
}
}
基本思路是:1、由 i 控制发射波的频率,由于display()大约10ms,故大约一分钟发射一次
2、用定时器0来控制Trig启动信号的脉冲宽度,大约有16个us长度
3、用定时器1和外部中断1共同控制计算Echo的脉冲长度,只计算第一个高脉冲的长度
4、外部中断通过Echo的下降沿触发,取出Echo脉冲长度的信息,计算出距离
但是每次调试测试时,TH1总是在10一下,就是说不管多远,距离显示总是在10厘米以内,彻底无语了,求高手指点 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|