C51单片机 超声波测距模快问题 向高手求解
voidmain(){unsignedinti;IT0=1;EX0=1;TMOD=0x09;TH0=0x00;TL0=0x00;Echo=1;Trig=0;while(1...
void main()
{
unsigned int i;
IT0 = 1;
EX0 = 1;
TMOD = 0x09;
TH0 = 0x00;
TL0 = 0x00;
Echo = 1;
Trig = 0;
while(1)
{
Display(10);
Trig = 1;
for(i=12;i>0;i--)
{
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
}
Trig = 0;
TR0 = 1;
EA = 1;
}
}
void INT0() interrupt 0
{
EA = 0;
s = ((TH0*256)+TL0)*0.18446/10;
if(s>4500)s=4500;
TH0 = TL0 = 0;
}
这段程序为什么只能测到70cm左右呢(最大测距是450cm) ,在这70cm之内测得的结果都是准确的,有人说是定时器溢出了,可是我怎么也想不通,亲手测试了一下并没有定时器溢出的现象产生,疑惑啊 展开
{
unsigned int i;
IT0 = 1;
EX0 = 1;
TMOD = 0x09;
TH0 = 0x00;
TL0 = 0x00;
Echo = 1;
Trig = 0;
while(1)
{
Display(10);
Trig = 1;
for(i=12;i>0;i--)
{
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
}
Trig = 0;
TR0 = 1;
EA = 1;
}
}
void INT0() interrupt 0
{
EA = 0;
s = ((TH0*256)+TL0)*0.18446/10;
if(s>4500)s=4500;
TH0 = TL0 = 0;
}
这段程序为什么只能测到70cm左右呢(最大测距是450cm) ,在这70cm之内测得的结果都是准确的,有人说是定时器溢出了,可是我怎么也想不通,亲手测试了一下并没有定时器溢出的现象产生,疑惑啊 展开
3个回答
展开全部
仿真一下吧,定时器溢出的可能性很大。当然,你要先确定硬件是没有问题的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
福州大禹电子科技
2024-12-16 广告
2024-12-16 广告
福州大禹电子科技有限公司成立于2008年自创办以来,专注超声产品的研发和产业化,始终坚持技术创新是企业发展动力的理念,运用最基础的物理声学原理,攻克了一系列卡脖子难题,成功打破了国外垄断,把超声技术运用到了工控、水利、市政、环保、医疗,海洋...
点击进入详情页
本回答由福州大禹电子科技提供
展开全部
问题就出现在 定时器和 外部中断这两个对象中,在好好的看看程序,我已经做的超声波测距可以达到5米,另外上网查找超声测距的现成程序,我记得以前买的金聚宝的开发板里面就有现成的测量程序,拿来就用了!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
s 你定义的什么类型? 编程软件给出警告没?
追问
int 型的 没有警告
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询