超声波测离程序

发布者:创意探险最新更新时间:2018-01-10 来源: eefocus关键字:超声波  测离程序 手机看文章 扫描二维码
随时随地手机看文章

;*采用 AT89C52  12MHz晶振             *
;测距范围5CM-2M,堆栈在4FH以上,20H用于标志
;显示缓冲单元在40H-43H,使用内存44H、45H、46H用于计算距离


CS1     BIT     P2.3
CS2     BIT     P2.4
D_I     BIT     P3.6   ;4
R_W     BIT     P2.5   ;5
E       BIT     P2.6   ;6
DB0_DB7 EQU     P0
X       EQU     22H ;页地址
Y       EQU     23H ;列地址  
COM     EQU     24H
DAT     EQU     24H
COUNT   EQU     25H       ;代码倒计数单元         
CODE0   EQU     26H     ;表格起始地址,赋0值后与DPTR合成查表指针地址
MUL_    EQU     26H  ;显示数字时,暂存单元(要显示的数是几就在里面存几)  
VOUT    EQU     P3.5    ; 红外脉冲输出端口
                  ORG     0000H
                  AJMP    START
                  ORG     0013H
                  LJMP    PINT1
                  ORG     000BH
                  LJMP    INTT0
               ORG     001BH
        LJMP    INTT1
               ORG     0030H
            START: MOV   SP,#4FH
                   ACALL INT
                   SETB  CS1
                SETB  CS2
                   ACALL CLEAR
       ACALL SY
       MOV      R0,#40H     ;40H-43H为显示数据存放单元(40H为最高位)
                   MOV      R7,#0BH
       CLEARDISP:  MOV      @R0,#00H
                   INC     R0
                   DJNZ    R7,CLEARDISP
                   MOV      20H,#00H
                   MOV      TMOD,#21H     ;T1为8位自动重装模式,T0为16位定时器
                   MOV      TH0,#00H      ;65毫秒初值
                   MOV      TL0,#00H
                   MOV      TH1,#0F2H     ;40KHZ初值
                   MOV      TL1,#0F2H
                   MOV      P0,#0FFH
                   MOV      P1,#0FFH
                   MOV      P2,#0FFH
                   MOV      P3,#0FFH
                   MOV      R4,#04H       ;超声波肪冲个数控制(为赋值的一半)
       SETB    PX1
                   SETB    ET0
                   SETB    EA
                   SETB    TR0           ;开启测距定时器
            START1: LCALL  DISPLAY
                    JNB    00H,$         ;收到反射信号时标志位为1
                    CLR    EA
                    LCALL  WORK          ;计算距离子程序
                    SETB   EA
                    CLR    00H
                    SETB   TR0          ;重新开启测距定时器
                    MOV     R2,#0FFH      ;测量间隔控制(约4*100=400MS)
                    LCALL  DISPLAY
                    DJNZ   R2,$
                    SJMP   START1
;**********中断程序* 
;T0中断,65毫秒中断一次
INTT0:    CLR     EA
                CLR     TR0
                MOV      TH0,#00H
                MOV      TL0,#00H
                SETB    ET1
                SETB    EA
                SETB    TR0       ;启动计数器T0,用以计算超声来回时间
                SETB    TR1       ;开启发超声波用定时器T1
OUT:            RETI
;T1中断,发超声波用
INTT1:          CPL     VOUT
                DJNZ    R4,RETIOUT
                CLR     TR1        ;超声波发送完毕,关T1
                CLR     ET1        ;
                MOV      R4,#04H
                SETB    EX1        ;开启接收回波中断
RETIOUT:        RETI
;外中断0,收到回波时进入
PINT1:          CLR     TR0        ;关计数器
                CLR     TR1
     CLR     ET1
                CLR     EA         ;
                CLR     EX1        ;
                MOV      44H,TL0    ;将计数值移入处理单元
                MOV      45H,TH0    ;
                SETB    00H        ;接收成功标志
                RETI
;**************显示程序*********              
; 40H为最高位,43H为最低位,先扫描高位
DISPLAY:  ; MOV CODE0,40H
          ;ACALL DSP1
          MOV MUL_,41H
    ACALL DSP2
          MOV MUL_,42H
    ACALL DSP3
          MOV MUL_,43H
    ACALL DSP4
    RET
;*********距离计算程序 (=计数值*17/1000CM)          
WORK:     PUSH  ACC
          PUSH  PSW
          PUSH  B
          MOV    PSW, #18H
          MOV    R3,  45H
          MOV    R2,  44H
          MOV    R1,  #00D
          MOV    R0,  #17D
          LCALL MUL2BY2
          MOV    R3,  #03H
          MOV    R2,  #0E8H
          LCALL DIV4BY2
          LCALL DIV4BY2
          MOV    40H, R4
          MOV    A,40H
          JNZ   JJ0
          MOV    40H,#0AH    ;最高位为零,不点亮
JJ0:      MOV    A,  R0
          MOV    R4, A
          MOV    A,  R1
          MOV    R5, A
          MOV    R3,  #00D
          MOV    R2,  #100D
          LCALL DIV4BY2
          MOV    41H, R4
          MOV    A,41H
          JNZ   JJ1
          MOV    A,40H    ;次高位为0,先看最高位是否为不亮
          SUBB  A,#0AH
          JNZ   JJ1
          MOV    41H,#0AH ;最高位不亮,次高位也不亮
JJ1:      MOV    A,  R0
          MOV    R4, A
          MOV    A,  R1
          MOV    R5, A
          MOV    R3,  #00D
          MOV    R2,  #10D
          LCALL DIV4BY2
          MOV    42H, R4
          MOV    A,42H
          JNZ   JJ2
          MOV    A,41H    ;次次高位为0,先看次高位是否为不亮
          SUBB  A,#0AH
          JNZ   JJ2
          MOV    42H,#0AH ;次高位不亮,次次高位也不亮
JJ2:      MOV    43H, R0
          POP   B
          POP   PSW
          POP   ACC
          RET
;***********两字节无符号数乘法程序                
; R7R6R5R4 <= R3R2 * R1R0
MUL2BY2:  CLR   A
          MOV    R7,  A
          MOV    R6,  A
          MOV    R5,  A
          MOV    R4,  A
          MOV    46H, #10H
MULLOOP1: CLR   C
          MOV    A,   R4
          RLC   A
          MOV    R4,  A
          MOV    A,   R5
          RLC   A
          MOV    R5,  A
          MOV    A,   R6
          RLC   A
          MOV    R6,  A
          MOV    A,   R7
          RLC   A
          MOV    R7,  A
          MOV    A,   R0
          RLC   A
          MOV    R0,  A
          MOV    A,   R1
          RLC   A
          MOV    R1,  A
          JNC   MULLOOP2
          MOV    A,   R4
          ADD   A,   R2
          MOV    R4,  A
          MOV    A,   R5
          ADDC  A,   R3
          MOV    R5,  A
          MOV    A,   R6
          ADDC  A,   #00H
          MOV    R6,  A
          MOV    A,   R7
          ADDC  A,   #00H
          MOV    R7,  A
MULLOOP2: DJNZ  46H, MULLOOP1
          RET
;*********四字节/两字节无符号数除法程序        
;R7R6R5R4/R3R2=R7R6R5R4(商)...R1R0(余数)
DIV4BY2:  MOV    46H,  #20H
          MOV    R0,  #00H
          MOV    R1,  #00H
DIVLOOP1: MOV    A,   R4
          RLC   A
          MOV    R4,  A
          MOV    A,   R5
          RLC   A
          MOV    R5,  A
          MOV    A,   R6
          RLC   A
          MOV    R6,  A
          MOV    A,   R7
          RLC   A
          MOV    R7,  A
          MOV    A,   R0
          RLC   A
          MOV    R0,  A
          MOV    A,   R1
          RLC   A
          MOV    R1,  A
          CLR   C
          MOV    A,   R0
          SUBB  A,   R2
          MOV    B,   A
          MOV    A,   R1
          SUBB  A,   R3
          JC    DIVLOOP2
          MOV    R0,  B
          MOV    R1,  A
DIVLOOP2: CPL   C
          DJNZ  46H,  DIVLOOP1
          MOV    A,   R4
          RLC   A
          MOV    R4,  A
          MOV    A,   R5
          RLC   A
          MOV    R5,  A
          MOV    A,   R6
          RLC   A
          MOV    R6,  A
          MOV    A,   R7
          RLC   A
          MOV    R7,  A
          RET
;**********************************************************汉字显示子程序************ 


DSP2:    SETB CS2
      CLR  CS1
         MOV X,#0BAH          
         MOV Y,#50H        
         MOV      DPTR,#DDB 
      ACALL DISP_
   RET
DSP3:    SETB CS2
      CLR  CS1
         MOV X,#0BAH          
         MOV Y,#58H        
         MOV      DPTR,#DDB   
   ACALL DISP_
   RET
DSP4:    SETB CS2
      CLR  CS1
         MOV X,#0BAH          
         MOV Y,#60H        
         MOV      DPTR,#DDB   
   ACALL DISP_
   RET
;************************8位字宽显示子程序:  (CODE0待设)**********************
DISP_:  MOV B,#10H    ;要显示的数是几就用几乘以16,得到基址起始地址  
        MOV A,MUL_
  MUL AB
   MOV CODE0,A
        MOV 39H,#02H
     MOV COUNT,#08H     
LP_:    MOV COM,X         ;设置页地址
     LCALL INST
     MOV COM,Y         ;设置列地址
     LCALL INST 
W_:     MOV A,CODE0          
        MOV C A,@A+DPTR
     MOV DAT,A
     LCALL DATA_  
     INC CODE0
     DJNZ COUNT,W_
     DJNZ 39H,LP1_
     RET
LP1_:   INC X
     MOV COUNT,#08H
     AJMP LP_
;***************************16位字宽显示子程序**********************   
DISP:   MOV 39H,#02H
     MOV CODE0,#00H
     MOV COUNT,#10H ;根据字宽及象素的不同而改变 DISP中的COUNT根据字高及象素改变CODE0    
LP:     MOV COM,X         ;设置页地址
     LCALL INST
     MOV COM,Y         ;设置列地址
     LCALL INST 
W:      MOV A,CODE0          
        MOV C A,@A+DPTR
     MOV DAT,A
     LCALL DATA_  
     INC CODE0
     DJNZ COUNT,W
     DJNZ 39H,LP1
     RET
LP1:    INC X
     MOV COUNT,#10H
     AJMP LP
;***********************以下为字符显示子程序块*************************
SY:     SETB CS1          ;开机   
     CLR  CS2
        MOV X,#0BAH          
        MOV Y,#40H         
        MOV      DPTR,#TAB1  ;
        CALL    DISP
        MOV X,#0BAH           
        MOV Y,#50H        
        MOV      DPTR,#TAB2  ;
        CALL    DISP
        MOV X,#0BAH          
        MOV Y,#60H        
        MOV      DPTR,#TAB3    ;
        CALL    DISP
        MOV X,#0BAH          
        MOV Y,#70H        
        MOV      DPTR,#TAB4  ;   
        CALL    DISP
  CLR CS1
  SETB CS2
        MOV X,#0BAH          
        MOV Y,#40H         
        MOV      DPTR,#TAB5  ;
        CALL    DISP
        MOV X,#0BAH          
        MOV Y,#70H         
        MOV      DPTR,#TAB6  ;
        CALL    DISP  
  RET
INST:   LCALL BUSY  ;写指令
        SETB E
     CLR D_I
     CLR R_W
     MOV DB0_DB7,COM
     CLR E
     RET
DATA_:  LCALL BUSY  ;写数据
        SETB E
     SETB D_I
     CLR R_W
     MOV DB0_DB7,DAT
     CLR E
     RET
BUSY:   CLR D_I     ;测忙
        SETB R_W
BUSY1:  MOV DB0_DB7,#0FFH
        SETB E
     MOV A,DB0_DB7
     CLR E
     JB ACC.7,BUSY1
     RET
CLEAR:   MOV R4,#00H   ;清屏
CLEAR1: MOV A,R4
        ORL A,#0B8H
   MOV COM,A
  ACALL INST
   MOV COM,#40H
  ACALL INST
   MOV R3,#40H
CLEAR2: MOV DAT,#00H
        LCALL DATA_
  DJNZ R3,CLEAR2
  INC R4
  CJNE R4,#08H,CLEAR1
  RET
INT:    MOV COM,#0C0H ;初始化
        ACALL INST
   MOV COM,#3FH
  ACALL INST
  RET
DEL:  MOV R7,#02H
DEL1: MOV R6,#0FFH
DEL2: MOV R5,#0FFH
      DJNZ R5,$
      DJNZ R6,DEL2
   DJNZ R7,DEL1
   RET
DDB:
DB 000H,0E0H,010H,008H,008H,010H,0E0H,000H,000H,00FH,010H,020H,020H,010H,00FH,000H ; "0" 0
DB 000H,010H,010H,0F8H,000H,000H,000H,000H,000H,020H,020H,03FH,020H,020H,000H,000H ; "1" 1
DB 000H,070H,008H,008H,008H,088H,070H,000H,000H,030H,028H,024H,022H,021H,030H,000H ; "2" 2
DB 000H,030H,008H,088H,088H,048H,030H,000H,000H,018H,020H,020H,020H,011H,00EH,000H ; "3" 3
DB 000H,000H,0C0H,020H,010H,0F8H,000H,000H,000H,007H,004H,024H,024H,03FH,024H,000H ; "4" 4
DB 000H,0F8H,008H,088H,088H,008H,008H,000H,000H,019H,021H,020H,020H,011H,00EH,000H ; "5" 5
DB 000H,0E0H,010H,088H,088H,018H,000H,000H,000H,00FH,011H,020H,020H,011H,00EH,000H ; "6" 6
DB 000H,038H,008H,008H,0C8H,038H,008H,000H,000H,000H,000H,03FH,000H,000H,000H,000H ; "7" 7
DB 000H,070H,088H,008H,008H,088H,070H,000H,000H,01CH,022H,021H,021H,022H,01CH,000H ; "8" 8
DB 000H,0E0H,010H,008H,008H,010H,0E0H,000H,000H,000H,031H,022H,022H,011H,00FH,000H ; "9" 9
DB 000H,0E0H,010H,008H,008H,010H,0E0H,000H,000H,00FH,010H,020H,020H,010H,00FH,000H ; "0" 0
DB 000H,0E0H,010H,008H,008H,010H,0E0H,000H,000H,00FH,010H,020H,020H,010H,00FH,000H ; "0" 0
DB 000H,0E0H,010H,008H,008H,010H,0E0H,000H,000H,00FH,010H,020H,020H,010H,00FH,000H ; "0" 0
DB 000H,0E0H,010H,008H,008H,010H,0E0H,000H,000H,00FH,010H,020H,020H,010H,00FH,000H ; "0" 0
DB 000H,0E0H,010H,008H,008H,010H,0E0H,000H,000H,00FH,010H,020H,020H,010H,00FH,000H ; "0" 0
DB 000H,0E0H,010H,008H,008H,010H,0E0H,000H,000H,00FH,010H,020H,020H,010H,00FH,000H ; "0" 0
TAB1:
DB 000H,03EH,022H,0E2H,022H,03EH,000H,0FEH,022H,022H,022H,022H,022H,0E2H,002H,000H ; 
DB 040H,07FH,020H,03FH,011H,011H,000H,07FH,042H,042H,042H,042H,042H,043H,040H,000H ; "距" 0
TAB2:
DB 000H,004H,004H,0F4H,084H,0CCH,0ADH,096H,094H,0ACH,0CCH,084H,0F4H,006H,004H,000H ; 
DB 000H,000H,0FEH,002H,01AH,016H,012H,013H,012H,016H,01AH,072H,082H,07EH,000H,000H ; "离" 1
TAB3:
DB 008H,008H,0E8H,0A8H,0A9H,0AEH,0EAH,008H,008H,0C8H,00CH,00BH,0EAH,008H,008H,000H ; 
DB 000H,000H,07FH,004H,024H,044H,03FH,000H,000H,01FH,040H,080H,07FH,000H,000H,000H ; "前" 2
TAB4:
DB 008H,008H,008H,008H,008H,008H,0F9H,04AH,04CH,048H,048H,0C8H,008H,008H,008H,000H ; 
DB 040H,040H,020H,010H,00CH,003H,000H,000H,020H,040H,040H,03FH,000H,000H,000H,000H ; "方" 3
TAB5:         
DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H ; 
DB 000H,000H,036H,036H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H ; ":" 0
TAB6:
DB 0C0H,030H,008H,008H,008H,008H,038H,000H,008H,0F8H,0F8H,000H,0F8H,0F8H,008H,000H ; "C" 1
DB 007H,018H,020H,020H,020H,010H,008H,000H,020H,03FH,000H,03FH,000H,03FH,020H,000H ; "M" 2   
   
    END


关键字:超声波  测离程序 引用地址:超声波测离程序

上一篇:键控门铃程序
下一篇:12864并口方式显示程序

推荐阅读最新更新时间:2024-03-16 15:52

UPC1018C构成的超声波接收电路
使用价格便宜的极普通的upc10I8C作为超声波的放大电路,采用独特的连接方式,可获得非常好的应用效果。UPC1018C构成的超声波 接收电路 :
[模拟电子]
UPC1018C构成的<font color='red'>超声波</font>接收电路
基于STM32F103C8T6的超声波测距示例
一、所需材料: 1、面包板: https://item.taobao.com/item.htm?spm=a1z10.3-c-s.w4002-17409464480.12.942e3961LSzalG&id=566952992749 2、STM32F103C8T6核心板 https://item.taobao.com/item.htm?spm=a1z10.3-c-s.w4002-17409464480.12.69693961YaTulR&id=567200541464 3、超声波模块 https://item.taobao.com/item.htm?spm=a1z10.3-c-s.w4002-17409464480.12.306c3
[单片机]
基于STM32F103C8T6的<font color='red'>超声波</font>测距示例
贸泽供货Texas Instruments PGA460超声波处理器
专注于新产品引入 (NPI) 并提供极丰富产品类型的业界顶级半导体和电子元件分销商贸泽电子 (Mouser Electronics),宣布即日起备货Texas Instruments (TI) 的PGA460和PGA460-Q1超声波信号处理器与驱器。下面就随网络通信小编一起来了解一下相关内容吧。 汽车级PGA460-Q1和非汽车级PGA460是现有的两款超声波传感器,能够以较低的功耗检测较宽范围内的物体,是各种超声波位置传感和机器人应用的理想选择。 贸泽电子备货的TI PGA460和PGA460-Q1为具有先进DSP内核的高度集成片上系统 (SoC) 超声波传感器驱动器和信号调理器。这两款器件具有2种基于驱动器的拓扑结构:基于
[网络通信]
如何利用超声波传感器制作一个轮式自平衡机器人
这是一个轮式自平衡机器人。由 UNO 供电并由超声波平衡,同时它能够自我保持垂直平衡。 动力源 动力由两个齿轮直流电机为机器人提供。 构建 第一步:将连接到齿轮直流电机 现在我们将轮子连接到的轴上。 第二步:准备 PVC T 型接头 这是PVC管的T型接头。我们将用它来固定电机,将从顶部的孔中出来。 第三步:通过 T 形接头为电机接线 在将电机固定在该管道中之前,我们必须将它们接线。我们将从顶孔穿过 4 根电线。两端分体,每台电机2根线。 第四步:通过顶孔拉线 我们将从 T 型接头拉回电线,以便电机就位。 第五步:将电机固定到位 现在我们已将电机固
[机器人]
基于AVR与DDS技术的超声波电源研制
1 引言 近年来, 随着压电材料、电力电子技术的飞速发展,超声在工业、农业、生物、医药卫生、环境保护等国民经济的各个部门以及国防工业中已得到广泛的应用。超声技术的两大核心要素包括换能器和超声电源。目前,超声技术向高频率、高稳定性发展,因此对超声电源的性能提出了更高的要求。在超声系统工作过程中,由于变幅杆系统刚度、载荷、工作面积等因素的变化,导致换能器系统固有频率发生漂移,要求超声电源具有精确的频率自动跟踪功能,以满足换能器稳定的超声输出。此外,目前对换能器多种工作频率的需求日愈增加,急需具有多种频率选择的超声电源与之配对。本文采用DDS与AVR,研制了一种新型超声波电源,能够提供500kHz、功率为3.2瓦范围内的电信号输出,且具
[单片机]
基于AVR与DDS技术的<font color='red'>超声波</font>电源研制
带插接定位的超声波流量计的原理及设计
内容说明 本发明涉及流量测量技术领域,具体的说是一种带插接定位的超声波流量计。 发明背景 众所周知,现有的超声波流量计是由流量管体、测量管体、换能器安装管体、定位元件、反射镜安装座、反射镜和换能器组成,所述流量管体侧壁设有两个换能器安装管体和定位孔,所述流量管体内设有测量管体,所述换能器安装管体与流量管体相连通,所述流量管体经定位元件与测量管体相固定,所述换能器管体内设有换能器,所述测量管体两端分别安装反射镜安装座,所述反射镜安装座上设有反射镜,所述反射镜与换能器相对应,这种结构的不足是:一、由于定位元件直径尺寸较小,造成定位不够精确,在水流的反复冲击下,反射镜安装座在测量管段内定位不可靠。二、流量管体和测量管段上都需要加工定
[测试测量]
带插接定位的<font color='red'>超声波</font>流量计的原理及设计
超声波液位计如何正确选型
超声波液位计由于不直接接触液体,因此,能够用于具有一定毒性、易燃性、高粘度以及腐蚀性的物料和液体当中。超声波液位计还具有重量轻、寿命长、稳定耐用、安装方便等方面的优势,在污水处理、化工生产等领域得到广泛应用。为使超声波液位计在实际工况中更好地发挥作用,本文就超声波液位计如何正确选型介绍如下。 Uson-21隔爆型超声波液位计 一、根据测量介质合理选型   从超声波液位计的测量原理可知,超声波液位计仅能应用于能够充分反射和传播超声波的介质当中。如果所测量介质无法反射和传播超声波,或者介质具有较强的挥发性,甚至对于超声波具有较强吸附能力,此时,就不能选用超声波液位计用于液位测量。 二、根据应用工况合理选型   如果所应用的工况为
[测试测量]
<font color='red'>超声波</font>液位计如何正确选型
位差超声波传感器在智能玩具机器人中的应用
    目前国内生产的电子玩具技术含量较低,由于不具备智能化,利润空间小,受欢迎程度低。近年来,伴随计算机技术的高速发展,智能控制器的发展迅速,一些典型的智能玩具如轮式移动机器人在部分院校教学中得到推广,因为智能玩具机器人是一个典型的机电一体化系统,它融合制造技术、机械、电子、传感器、计算机和人工智能等众多先进技术,是进行工程训练、教学实验和研究的理想平台,在电子学教学领域中有着诸多的研究价值。     传感器是智能机器人获取外界数据的“感知系统”,离开智能传感器的机器人大多是些功能单一,不具备思维能力,有些甚至是底盘基座固定式的,使得这些机器人只能固定在某一位置按照事先设定动作进行机械式的重复操作,其应用范围仅限于工业生产中
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved