资源预览内容
第1页 / 共23页
第2页 / 共23页
第3页 / 共23页
第4页 / 共23页
第5页 / 共23页
第6页 / 共23页
第7页 / 共23页
第8页 / 共23页
第9页 / 共23页
第10页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
IMA74Al.Sl-lIN574ALS04674ALS04U4D74ALS04我现在在做超声波测距,用的是非门+ CX20106A方案。发射 部分用非门驱动,如下:74ALS04 U4E11I. NC/(原文件名:超声波发射电路原理图.gif)引用图片我手上没有74ALS04或74LS04,所以用74HC04和HCF4069UBE 代替。10k3 Op冲= 亠超声波接收采用CX20106A,如下:接收探头CX20L06AR2200k(原文件名:接收电路.jpg)引用图片我用的CX20106A是拆机件。用万用板搭好电路之后,在网上找到了一些参考汇编程序,我 修改后可以通过串口发到PC显示超声波往返的时间: ;/器USE BY:超声波测距2IC:STC89C5M)OSCCAL:XT(12;/T2CONEQU0C8HT2MODEQU0C9HRCAP2LEQU0CAHRCAP2HEQU0CBHTH2EQU0CDHTL2EQU0CCHVOUTEQUP3.7;超声波输出端口* ;*中断入口程序*;* JORG 0000H;复位LJMP STARTORG 0003H;外部中断0LJMP PINTOORG 000BH;T0溢出中断RETIORG 0013H;外部中断1RETIORG 001BH;T1溢出中断LJMP INTT1ORG 0023H;串口中断RETIORG 002BH;T2EN端负跳变(52系列)RETIJJ;*主程序*JJSTART: MOVSP,#4FHMOVSCON,#50H;串口方式1工作,8位数据位,1位停止位,无奇偶校验,允许接收MOVT2MOD,#00H;DCEN = 0, 向上计数MOVRCAP2H,#0FEH;定时器T2置重装数,波特率:1200. (12MHz)MOVRCAP2L,#0C8HMOVTH2,#0FEH;定时器T2置初值MOVTL2,#0C8HMOVT2CON,#34H;T2工作方式:波特率发生器,同时启动Time2定时器CLRTICLR30HMOVTMOD,#11H;T1、T0 为 16位定时器MOVTH0,#00H;65毫秒初值MOVTL0,#00HMOVTH1,#00HMOVTL1,#00HMOVP0,#0FFHMOVP1,#0FFHMOVP2,#0FFHMOVP3,#0FFHMOVR4,#04H;超声波脉冲个数控制(为赋值的一半,即2个超声波)SETBPX0CLRIE0;外部中断0中断请求标志位。当主机响应中断转向该中断服务程序执行时,由内部硬件自动将IE0位清0SETBIT0;当 IT0 = 1时,则外部中断0 (INT0 )端口由“ 1 ”“0 ”下降沿跳变,激活中断请求标志位IE0,向主机请求中断处理SETBET1;允许T1中断SETBEASETBTR1;开启测距定时器;main主循环开始时标志位为1start1:JNB30H,$;收到反射信号CLREA;不让T1中断MOVR2,#64H;测量间隔控制(约 5* 100=500MS).64H = 100LOOP:LCALLDL1MSLCALLDL1MSLCALLDL1MSLCALLDL1MSLCALLDL1MSDJNZR2,LOOPCLR30H;清除反射信号标志位CLRET0;关闭T0中断MOVTH0,00HMOVTL0,00HSETBTR1;重新开启测距定时器SETBEASJMPstart1;main主循环结束*中断程序*;T1中断,发超声波用;T1中断,65毫秒中断一次INTT1:CLREACLRTR0CLREX0MOVTH0,#00HMOVTL0,#00HMOVTH1,#00HMOVTL1,#00HSETBET0;外部中断0中断请求标志位。当主机响应中断转向该中断服务程序执行时,由内部硬件自动将IE0位清0SETBEASETBTR0;启动计数器T0,用以计算超声波传播时间inttll:CPLVOUT;发射40KHZ超声波.晶振:12MHz,lusnopnopnopnopnopnopnopnopnopDJNZR4,i nttll;2us;超声波发送完毕CLRIE0MOVR4,#04HLCALLDL1MS;延时2ms,避开发射的直达声波信号,消除余震LCALLDL1MSSETBEX0;开启接收回波中断RETIOUT:RETI;外中断0,收到回波时进入PINTO:nopjbP3.2,pi nt0 _ex itCLRTR0;关闭T0CLREACLREX0MOVSBUF,TH0JNBTI,$CLRTIMOVSBUF,TL0JNBTI,$CLRTIMOVTH0,#00HMOVTL0,#00HpintO_exit:JNBp3.2,$SETB30H;接收成功标志RETI*J;*延时程序*;*JDL1MS:push06Hpush07HMOVR6,#14H;14H = 20DL1:MOVR7,#19H;19H = 25DL2:DJNZR7,DL2;2us * 25 = 50DJNZR6,DL1;50us * 20 = 1000uspop07Hpop06HRETDL100US:push06HMOVR6,#32H;32H =50DL3:DJNZR7,DL3;2us *50 = 100uspop07Hpop06HRETEND 在本论坛也找到了一些参考资料,说是在发射超声波后,为了 消除余震,需要延时2ms,再打开外部中断0。我在以上程序中 也这样做了,但发现无论距离远近,PC机显示的超声波往返时 间居然都是2ms !我把余震延时时间设置为1ms, PC机显示的就是1ms,设置为3ms,PC机显示的就为3ms!我把耳朵靠近超声波发射头,是可以听到嗒嗒的声音的,说明 超声波已经有发射了。我把CX20106A拔下来,PC机就没有显示了,说明51的外部中断是好的,即CX20106A是有下降沿的。麻烦看一下问题出在哪里?余震时间要如何设置?谢谢!本贴被wyb4993编辑过,最后修改时间:2009-02-27,11:41:20.【1楼】ben ladn911 AVR 猎手积分 派别 等级 来自 门发射脉冲后,等待余震之后开中断。一般余震的大小跟你使用的 探头有关,两个探头靠太近的话这个余震时间就比较长(因为接 收头会收到发射头刚刚发出的脉冲),所以稍微增大两个探头之 间的距离。-以上针对收发分离的探头的应用。2193如果是对收发同体的,那就没什么招了,跟探头的性能有关, 般盲距都在30厘米以上,盲距和探测具体成反比。福建厦2009-02-27,09:44:10资料邮件回复引用回复tt编辑删除4993积分:169派别:等级:来自:深圳【2楼】wyb回benladn911 AVR猎手:我用的是收发分体的超声波头,开放 式的非防水探头(就是铝外壳,探头表面有金属网,可以看到里 面有一锥形的金属)。我刚用尺子测量两个探头之间的中心距离, 是5CM。这种情况下的余震延时时间要怎么设置呢?现在我的情况是:无论把余震延时时间设置为多少,一打开EX0, 马上外部中断0就发生了,所以T0(超声波往返时间)读到的是 余震延时时间。2009-02-27,11:08:16资料邮件回复引用回复编辑删除资料邮编件回复辑2009-02-27,08:37:28引用回复删除【3楼】ckv你把发射和接受头中间加点东西阻隔一下看看 lhf积分:506派别:等级:来自:2009-03-0 资料 邮件 回复 引用回复上上丄丄编辑 删除1,21:13:29【4楼】the在你发出N个波峰的时候做一个很短的延时,延时结束后打开中5moon断积分:9程序我这里有可以给你的派别:不过看你的问题建议你检查一下你的接收电路等级: 仿佛过于简单了啊,接收后面怎么的也得有放大吧?来自
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号