⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 超声波.asm

📁 用C51做超声波,嵌入式开发模式,对开发者有用!
💻 ASM
字号:

        VOUT  EQU  P1.0 ;脉冲输出端口

        ORG  0000H
        LJMP  START
        ORG 0003H
        LJMP  PINT0
        ORG 000BH
        LJMP  INTT0
        ORG 0013H
        RETI
        ORG 001BH
        LJMP  INTT1
        ORG 0023H
        RETI
        ORG  0050H

;主程序

START:    MOV  SP,#4FH
          MOV  R0,#40H
          MOV  R7,#0BH

CLEARDISP:MOV  @R0,#00H
          INC  R0
          DJNZ R7,CLEARDISP
          MOV 20H,#00H
          MOV TMOD,#21H
          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 PX0
          SETB ET0
          SETB EA
          SETB TR0         ;开启测距定时器

START1:   LCALL DISPLAY
          JNB  00H,START1   ;收到发射信号时标志位为1
          CLR EA
          LCALL WORK        ;计算距离子程序
          SETB EA
          CLR  00H  
          SETB TR0          ;重新开启测距定时器
          MOV R2,#64H       ;测量间隔控制(约4*100=400ms)

LOOP:     LCALL DISPLAY
          DJNZ R2,LOOP
          SJMP START1

;中断程序  65s中断一次

INTT0:    CLR EA
          CLR  TR0
          MOV TH0,#00H
          MOV TL0,#00H
          SETB ET1
          SETB EA
          SETB TR0           ;启动计数器T0,计算超声来回时间
          SETB TR1
OUT:      RETI

;T1中断,发超声波用

INTT1:         CPL VOUT
               DJNZ R4,RETIOUT
               CLR  TR1
               CLR  ET1
               MOV R4,#04H
               SETB EX0
RETIOUT:       RETI

;外中断0,收到回波时进入

PINT0:  CLR  TR0           ;关计数器
        CLR  TR1
        CLR ET1
        CLR EA
        CLR EX0
        MOV 44H,TL0        ;将计数值移植入处理单元
        MOV 45H,TH0
        SETB 00H           ;接收成功标志
        RETI

;显示程序

DISPLAY:MOV R1,#40H
        MOV R5,#0F7H

PLAY:   MOV A,R5
        MOV P0,#0FFH
        MOV P2,A
        MOV A,@R1
        MOV DPTR,#TAB
        MOVC A,@A+DPTR
        MOV P0,A
        LCALL DL1MS
        INC R1
        MOV A,R5
        JNB ACC.0,ENDOUT
        RR A
        MOV R5,A
        AJMP PLAY

ENDOUT: MOV P2,#0FFH
        MOV P0,#0FFH
        RET
        
TAB:    DB  0AH,0BBH,26H,0A2H,93H,0C2H,42H,0ABH,02H,82H
;字型码   "0-9","不亮","A","-"

;延时程序
DL1MS:  MOV R6,#14H
DL1:    MOV R7,#19H
DL2:    DJNZ R7,DL2
        DJNZ R6,DL1
        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         ;最高位为0,不点亮

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
        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
        SUBB A,#0AH
        JNZ JJ2
        MOV 42H,0AH

JJ2:    MOV 43H,R0
        POP B
        POP PSW
        POP ACC
        RET

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


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

             END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -