求单片机高手编一小段AVR程序(用C语言,AVR studio里运行),超声波避障。
我用的是DYP-ME007超声波传感器,想用它测距来实现避障,但是不知道AVR的测距程序怎么编,这个是产品说明:本产品使用方法简单,一个控制口发一个10US以上的高电平,...
我用的是DYP-ME007超声波传感器,想用它测距来实现避障,但是不知道AVR的测距程序怎么编,这个是产品说明:
本产品使用方法简单,一个控制口发一个10US以上的高电平,就可以在接收口等待高电平输出。一有输出就可以开定时器计时,当此口变为低电平时就可以读定时器的值,此时就为此次测距的时间,方可算出距离。如此不断的周期测,就可以达到你移动测量的值了。
请高手帮我编一下测距的程序,我主要是不知道接受口怎么读定时器的值。帮我编到读出定时器值这里就可以!注意是AVR 单片机,要用AVR studio 能运行的。 感谢! 展开
本产品使用方法简单,一个控制口发一个10US以上的高电平,就可以在接收口等待高电平输出。一有输出就可以开定时器计时,当此口变为低电平时就可以读定时器的值,此时就为此次测距的时间,方可算出距离。如此不断的周期测,就可以达到你移动测量的值了。
请高手帮我编一下测距的程序,我主要是不知道接受口怎么读定时器的值。帮我编到读出定时器值这里就可以!注意是AVR 单片机,要用AVR studio 能运行的。 感谢! 展开
展开全部
这本质上就是测周期,你完全可以借鉴移植频率测量程序(低频测量)。
float LF_test(void)//低频测试子程序
{uint ta,tb;
ulong t=0;//中断次数及高电平时间寄存器
DDRD&=~0x40;//ICP1输入
TCCR1B=(0<<CS12)|(0<<CS11)|(1<<CS10)|(1<<ICES1);//不分频,上升沿触发
TCNT1=0;
TIFR=(1<<ICF1);//清输入捕捉中断标志位
while(!(TIFR&0x20));//等待一次上升沿捕捉
TIFR=(1<<ICF1);//清输入捕捉中断标志位
ta=ICR1;//保存捕捉值
TIFR=(1<<TOV1);//清溢出中断标志
while(!(TIFR&0x20)) {if(TIFR&0x04) {TIFR=(1<<TOV1);t++;}}//统计溢出次数,并等待第二次上升沿捕捉 //这个地方要改成下降沿触发,记得修改哦。
tb=ICR1;//存捕捉值
TCCR1B=(0<<CS12)|(0<<CS11)|(0<<CS10);//关闭定时器 T1
t*=65536;//溢出次数转换成相应计数次数
t=t+tb-ta;//计算时间
return(8000000.0/t);//计算结果
}
在这个基础上移植,相信你能成功。
float LF_test(void)//低频测试子程序
{uint ta,tb;
ulong t=0;//中断次数及高电平时间寄存器
DDRD&=~0x40;//ICP1输入
TCCR1B=(0<<CS12)|(0<<CS11)|(1<<CS10)|(1<<ICES1);//不分频,上升沿触发
TCNT1=0;
TIFR=(1<<ICF1);//清输入捕捉中断标志位
while(!(TIFR&0x20));//等待一次上升沿捕捉
TIFR=(1<<ICF1);//清输入捕捉中断标志位
ta=ICR1;//保存捕捉值
TIFR=(1<<TOV1);//清溢出中断标志
while(!(TIFR&0x20)) {if(TIFR&0x04) {TIFR=(1<<TOV1);t++;}}//统计溢出次数,并等待第二次上升沿捕捉 //这个地方要改成下降沿触发,记得修改哦。
tb=ICR1;//存捕捉值
TCCR1B=(0<<CS12)|(0<<CS11)|(0<<CS10);//关闭定时器 T1
t*=65536;//溢出次数转换成相应计数次数
t=t+tb-ta;//计算时间
return(8000000.0/t);//计算结果
}
在这个基础上移植,相信你能成功。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先把DYP-ME007PDF文档发上来,我帮你弄弄看
追问
怎么给你呢...我QQ1181628416 太感谢了
追答
我加你QQ,怎么没反应呢?
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没学过单片机。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询