会员登录 | 会员注册 | 忘记密码 | 在线工具 | 设为首页

超声波的发射接收

日期:2018-09-06 17:17 作者:only 来源:http://blog.sina.com.cn/s/blog_4e7efd2d0100dwbz.html 点击:2
Tags:超声波

 我现在在做超声波测距,用的是非门 CX20106A方案。发射部分用非门驱动,如下超声波的发射接收

 

超声波接收采用CX20106A,如下:

 

超声波的发射接收

 

 

CX20106A是拆机件。

用万用板搭好电路之后,在网上找到了一些参考汇编程序,我修改后可以通过串口发到PC显示超声波往返的时间:
;/////////////////////////////////////////////////////// 
              USE  BY :超声波测距器                  
              IC      :STC89C52                      
              OSCCAL  :XT   (12M)                                  
;///////////////////////////////////////////////////////
;
       T2CON    EQU     0C8H
       T2MOD    EQU     0C9H
       RCAP2L   EQU     0CAH
       RCAP2H   EQU     0CBH
       TH2      EQU     0CDH
       TL2      EQU     0CCH       
       VOUT     EQU     P3.7                    ;超声波输出端口

;********************************************
;*             中断入口程序                 *
;********************************************
;
      ORG 0000H        ;复位
      LJMP  START           
      ORG 0003H        ;外部中断0
      LJMP  PINT0     
      ORG 000BH        ;T0溢出中断 
      RETI     
      ORG 0013H        ;外部中断1
      RETI                  
      ORG 001BH        ;T1溢出中断   
      LJMP  INTT1                  
      ORG 0023H        ;串口中断
      RETI                  
      ORG 002BH        ;T2EN端负跳变(52系列)
      RETI     
;
;********************************************
;*               主 程 序                   *
;********************************************
;
           START:  MOV     SP,#4FH                   
                   MOV     SCON,#50H     ;串口方式1工作,8位数据位,1位停止位,无奇偶校验,允许接收
                   MOV     T2MOD,#00H    ;DCEN 0,向上计数
                   MOV     RCAP2H,#0FEH  ;定时器T2置重装数,波特率:1200. (12MHz)
                   MOV     RCAP2L,#0C8H
                   MOV     TH2,#0FEH     ;定时器T2置初值
                   MOV     TL2,#0C8H  
                   MOV     T2CON,#34H    ;T2工作方式:波特率发生器,同时启动Time2定时器 
                   CLR     TI  
                   CLR     30H           
                   
                   MOV     TMOD,#11H     ;T1、T0为16位定时器
                   MOV     TH0,#00H      ;65毫秒初值
                   MOV     TL0,#00H
                   MOV     TH1,#00H     
                   MOV     TL1,#00H
                   MOV     P0,#0FFH
                   MOV     P1,#0FFH
                   MOV     P2,#0FFH
                   MOV     P3,#0FFH
                   MOV     R4,#04H       ;超声波脉冲个数控制(为赋值的一半,即2个超声波)
                   SETB    PX0
                   CLR     IE0           ;外部中断0中断请求标志位。当主机响应中断转向该中断服务程序执行时,由内部硬件自动将IE0位清0
                   SETB    IT0           ;当IT0 1时,则外部中断0(INT0 )端口由“1 ”→“0 ”下降沿跳变,激活中断请求标志位IE0,向主机请求中断处理
                   SETB    ET1           ;允许T1中断
                   SETB    EA
                   SETB    TR1           ;开启测距定时器
;main主循环开始                   
            start1: 
                    JNB    30H,$         ;收到反射信号时标志位为1
                    
                    CLR    EA            ;不让T1中断                 
                    MOV    R2,#64H       ;测量间隔控制(约5*100=500MS). 64H 100
              LOOP: LCALL  DL1MS
                    LCALL  DL1MS
                    LCALL  DL1MS
                    LCALL  DL1MS
                    LCALL  DL1MS                    
                    DJNZ   R2,LOOP  
                                      
                    CLR    30H           ;清除反射信号标志位
                    CLR    ET0           ;关闭T0中断
                    MOV    TH0,00H
                    MOV    TL0,00H
                    SETB   TR1           ;重新开启测距定时器
                    SETB   EA                   
                    SJMP   start1
;main主循环结束
 
;****************************************************
;*                    中断程序                      *
;****************************************************
 
;T1中断,发超声波用     ;T1中断,65毫秒中断一次
INTT1:          CLR     EA
                CLR     TR0
                CLR     EX0
                MOV     TH0,#00H
                MOV     TL0,#00H
                MOV     TH1,#00H
                MOV     TL1,#00H
                SETB    ET0             ;外部中断0中断请求标志位。当主机响应中断转向该中断服务程序执行时,由内部硬件自动将IE0位清0
                SETB    EA
                SETB    TR0             ;启动计数器T0,用以计算超声波传播时间
intt11:
                CPL     VOUT            ;发射40KHZ超声波. 晶振:12MHz,1us
                nop
                nop
                nop
                nop
                nop
                nop
                nop
                nop 
                nop                             
                DJNZ    R4,intt11       ;2us
                                        ;超声波发送完毕 
                CLR     IE0
                MOV     R4,#04H
                LCALL   DL1MS           ;延时2ms,避开发射的直达声波信号,消除余震 
                LCALL   DL1MS        
                SETB    EX0             ;开启接收回波中断
                
RETIOUT:        RETI

;外中断0,收到回波时进入
PINT0:          nop
                jb      P3.2,pint0_exit
                CLR     TR0             ;关闭T0                 
                CLR     EA             
                CLR     EX0                  
                
                MOV     SBUF,TH0
                JNB     TI,$
                CLR     TI
                
                MOV     SBUF,TL0
                JNB     TI,$
                CLR     TI                
              
                MOV     TH0,#00H
                MOV     TL0,#00H
                JNB     p3.2,$
                SETB    30H             ;接收成功标志
pint0_exit:
                RETI
;

;****************************************************
;*                    延时程序                      *
;****************************************************
;
DL1MS: 
               push    06H
               push    07H
 
               MOV    R6,#14H    ;14H 20
        DL1:   MOV    R7,#19H    ;19H 25
        DL2:   DJNZ   R7,DL2     ;2us 25 50
               DJNZ   R6,DL1     ;50us 20 1000us
               pop    07H
               pop    06H
               RET
;

;
DL100US: 
               push    06H
 
               MOV    R6,#32H    ;32H 50
        DL3:   DJNZ   R7,DL3     ;2us 50 100us
               pop    07H
               pop    06H
               RET
;

   END

在本论坛也找到了一些参考资料,说是在发射超声波后,为了消除余震,需要延时2ms,再打开外部中断0。我在以上程序中也这样做了,但发现无论距离远近,PC机显示的超声波往返时间居然都是2ms!我把余震延时时间设置为1ms,PC机显示的就是1ms,设置为3ms,PC机显示的就为3ms!

我把耳朵靠近超声波发射头,是可以听到嗒嗒的声音的,说明超声波已经有发射了。我把CX20106A拔下来,PC机就没有显示了,说明51的外部中断是好的,即CX20106A是有下降沿的。

上一篇: 下一篇:
声明:本网站会员原创内容,如需转载,请注明出处;本网站转载的内容(文章、图片、视频)等资料版权归原网站所有。如我们采用了您不宜公开的文章或图片,未能及时和您确认,避免给双方造成不必要的经济损失,请电邮联系我们,以便迅速采取适当处理措施;欢迎投稿,邮箱:513651338@qq.com