我用单片机发射40KHZ的脉冲驱动超声波头产生超声波,但是产生的超声波居然能够听到声音

我的产生程序为voiddelay12us(){ucharf=2;while(f--);}voidfashe(){uchari;for(i=0;i<6;i++){p1_0=... 我的产生程序为
void delay12us()
{
uchar f=2;
while(f--) ;
}
void fashe()
{
uchar i;
for(i=0;i<6;i++)
{p1_0=~p1_0;
delay12us();
}
EA=1;
EX0=1;
TH0=0;
TL0=0;
TR0=1;
}
这个程序有问题吗?我是将单片机的P1^0口连接了74HC04之后连接的发射头。希望有高手能够给我指正错误。或者给我一个适用的正确方案,我会非常感激的…………
展开
 我来答
摆渡还不知道
2010-12-07 · TA获得超过1427个赞
知道小有建树答主
回答量:669
采纳率:0%
帮助的人:538万
展开全部
因为不知道你的单片机的指令周期为多少,对于时间的问题就不计算了。说说你可能出现的问题。不过究竟有没有问题,最好还是用示波器来确定。
1、没有看汇编代码,对于程序真正需要几条指令,究竟用了多少时间并不了解,所以产生了问题。因为你只需要发射有限的几次,建议不要用循环,不要调用子函数。直接用赋值语句给端口赋值,延时用NOP(可能是nop()或者_nop()什么的,不记得了)。这样能够准确的执行。不然,那些条件判断,跳转等的指令会烦死你。

2、声音的频率是人耳能听到的声音的2倍频率,但是如果听到的是极其尖锐的声音,可能是没有问题的,探头发射的声音不可能一个准确的频率。中心频率是你期望的,你的程序就没有问题。

3、1楼给出的方式可以参考,但最好不要用那样的赋值语句。自动重装载是不错的选择。只不过,你的程序的思路要被打乱。而且会占用一个定时器。
希卓
2024-10-17 广告
分布式光纤声音振动监测技术,作为北京希卓信息技术有限公司的核心技术之一,通过光纤作为传感器,实现对声音振动的精准感知。该技术利用光纤的传输和传感双重功能,能够实时、远距离监测目标区域的声音振动变化。我们的系统不仅具备测量距离远、定位准确等优... 点击进入详情页
本回答由希卓提供
吸血鬼_媛
2010-12-09 · 超过17用户采纳过TA的回答
知道答主
回答量:47
采纳率:0%
帮助的人:32.6万
展开全部
嗯,看了2楼的回答让我领悟了蛮多的,对于40K的频率的确可以用自动重装实现,至于直接给端口赋值是建立在你只发送有限的几次的基础上的,但是根据我的判断,你并不是只需要发射有限的几次,而是用40KHZ来驱动超声波发射头发送声波,然后用来测距或其他,所以只发送有限几次的并不适合你的系统。又根据2楼的不要使用循环,但是如果不占用一个定时器的话,在无限次的发送过程中就必须用循环了,但是我也不建议使用循环,使用循环会使发送的频率不稳定。所以根据你的需求,使用定时器是必须的了,如何自动重装呢?只要使定时器工作于方式2就可以了,具体的程序我就不给出了,相信你自己可以完成的。
能听到尖锐的声音我就不同意2楼的说法了,我觉得应该是你超声波发射头发出的声波频率还在人耳的听觉范围,离40K很远。如果中心频率是40K的话,人耳能听到的话,那么频率的下限应该是在20K以内,下限到40K的差值的最小值是20K,这个差值太大,系统非常不稳定,而且一个超声波系统老是发出尖锐声音,谁会愿意用这种东西呢?产生这样的结果的因素不仅仅有程序的影响,还应该包含有7404的影响,7404是不是使频率平移至低值了呢?当然这些只是假设,楼主可以自己验证,我个人认为7404可信度不是很高,如果楼主的程序正确了(用示波器测量是40K),而经过7404输出后频率的平移比较大,那么就可以认为7404不适合这样的电路,可以使用4049试试看。
以上只是个人的推测,可靠性看楼主啊。。。
修改完毕,睡觉咯。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
军初瑶59
2010-12-07 · TA获得超过298个赞
知道小有建树答主
回答量:534
采纳率:0%
帮助的人:326万
展开全部
要用示波器看波形的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式