1
来自「RM51单片机实验板配套实验例程库」· 代码 · 共 1,240 行 · 第 1/4 页
TXT
1,240 行
页 1
11-27-05
16:01:21
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
;********************************************
;* 超声波测距器 *
;* 12MHZ晶振 *
;* LRM 2005.07.18 *
;********************************************
;测距范围7CM-90CM,堆栈在4FH以上,20H用于标志位
;显示缓冲单元在40H-43H,使用内存44H、45H、46H用于计算距离
;使用内存60H-63H用于设定报警
VOUT EQU P0.6 ; 超声波脉冲输出端口
VIN EQU P0.7 ; 超声波回波输入口
KEY0 Equ P2.6 ; 报警设定与退出键
KEY1 Equ P2.7 ; 报警设定数值+,远近报警选择
KEY2 Equ P3.2 ; 报警设定数值-
BELL EQU P0.2 ; 蜂鸣器
LED1 EQU P3.3 ; 灯1
LED2 EQU P3.4 ; 灯2
YJFLAG EQU 00H ;远近报警选择标志
;*************************************************
LAMPBLAK EQU P1.4 ;液晶背光灯控制,=0时开,=1时关.
CS EQU P1.5 ;液晶使能,=1操作,=0禁止.
SID EQU P1.6 ;液晶串行数据输入口
SCLK EQU P1.7 ;液晶串行操作时钟口
;
;********************************************
;* 中断入口程序 *
;********************************************
;
ORG 0000H
0000 02002C LJMP START
ORG 0003H
0003 32 RETI
ORG 000BH
000B 0200A0 LJMP INTT0
ORG 0013H
0013 32 RETI
ORG 001BH
001B 32 RETI
ORG 0023H
0023 32 RETI
ORG 002BH
002B 32 RETI
;
;********************************************
;* 主 程 序 *
;********************************************
;
002C 758180 START: MOV SP,#80H ;堆栈在80H以上
D:\C03电本教学实验资料\超声波报警示范程序(新)\5.ASM
页 2
11-27-05
16:01:21
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
002F C295 CLR CS ;液晶操作禁止
0031 120216 LCALL SETUP ;LCD初始化
0034 1201C5 LCALL LOGON ;LCD开机显示画面
0037 7840 MOV R0,#40H ;40H-43H为显示数据存放单元(40H为最高位)
0039 7F0B MOV R7,#0BH
003B 7600 CLEARDISP: MOV @R0,#00H ;清内存
003D 08 INC R0
003E DFFB DJNZ R7,CLEARDISP
0040 752000 MOV 20H,#00H
0043 758921 MOV TMOD,#21H ;T1为8位自动重装模式,T0为16位定时器
0046 758C00 MOV TH0,#00H ;65.536毫秒初值(发超声波的间隔)
0049 758A00 MOV TL0,#00H
004C 7580FF MOV P0,#0FFH
004F 7590FF MOV P1,#0FFH
0052 75A0FF MOV P2,#0FFH
0055 75B0FF MOV P3,#0FFH
0058 756000 MOV 60H,#00H ;
005B 756100 MOV 61H,#00H ;
005E 756200 MOV 62H,#00H ;
0061 756300 MOV 63H,#00H ;
0064 D2A9 SETB ET0
0066 D2AF SETB EA
0068 D28C SETB TR0 ;开启测距定时器
006A 308751 START1: JNB VIN,PINT0
006D 30A605 JNB KEY0,SAFESET8
0070 30A705 JNB KEY1,YJSET
0073 016A AJMP START1
;
0075 02045E SAFESET8: LJMP SAFESET
0078 C2A9 YJSET: CLR ET0
007A 30A7FB JNB KEY1,YJSET
007D B200 CPL YJFLAG
007F 20000F JB YJFLAG, YDISP
0082 7480 MOV A,#80H ;第一行左第一个字开始
0084 120246 LCALL WRITE_COM
0087 90039A MOV DPTR,#CHINESE8 ;"超声波测距器-J "
008A 1202EF LCALL WRITE_HZ
008D D2A9 SETB ET0
008F 016A AJMP START1
0091 7480 YDISP: MOV A,#80H ;第一行左第一个字开始
0093 120246 LCALL WRITE_COM
0096 9003AB MOV DPTR,#CHINESE9 ;"超声波测距器-Y "
0099 1202EF LCALL WRITE_HZ
009C D2A9 SETB ET0
009E 016A AJMP START1
;****************************************************
;* 中断程序* *
D:\C03电本教学实验资料\超声波报警示范程序(新)\5.ASM
页 3
11-27-05
16:01:21
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
;****************************************************
;T0中断,65毫秒中断一次
00A0 C2A9 INTT0: CLR ET0
00A2 C28C CLR TR0
00A4 758C00 MOV TH0,#00H
00A7 758A00 MOV TL0,#00H
00AA 7C06 MOV R4,#06H
00AC D28C SETB TR0 ;启动计数器T0,用以计算超声来回时间
00AE B286 VLOOP: CPL VOUT
00B0 00 NOP
00B1 00 NOP
00B2 00 NOP
00B3 00 NOP
00B4 00 NOP
00B5 00 NOP
00B6 00 NOP
00B7 00 NOP
00B8 00 NOP
00B9 DCF3 DJNZ R4,VLOOP
00BB D2A9 SETB ET0
00BD 32 OUT: RETI
;
;回波接收程序
00BE C28C PINT0: CLR TR0 ;关计数器
00C0 C2A9 CLR ET0 ;
00C2 858A44 MOV 44H,TL0 ;将计数值移入处理单元
00C5 858C45 MOV 45H,TH0 ;
00C8 758A00 MOV TL0,#00H
00CB 758C00 MOV TH0,#00H
00CE 1200EE LCALL WORK ;计算距离子程序
00D1 1201AE LCALL DATAUP ;将距离数据写在LCD上
00D4 1202B8 LCALL DELAY1 ;延时
00D7 20000A JB YJFLAG,YBAO
00DA 1203CE LCALL BAOJ ;调用近报警程序
00DD D28C SETB TR0 ;重新开启测距定时器
00DF D2A9 SETB ET0 ;
00E1 02006A lJMP START1 ;返回主程序
;
00E4 120416 YBAO: LCALL YBAOJ
00E7 D28C SETB TR0 ;重新开启测距定时器
00E9 D2A9 SETB ET0 ;
00EB 02006A lJMP START1 ;返回主程序
;
;****************************************************
;* 距离计算程序 (=计数值*17/1000cm) *
;****************************************************
;
00EE C0E0 work: PUSH ACC
D:\C03电本教学实验资料\超声波报警示范程序(新)\5.ASM
页 4
11-27-05
16:01:21
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
00F0 C0D0 PUSH PSW
00F2 C0F0 PUSH B
00F4 75D018 MOV PSW, #18h
00F7 AB45 MOV R3, 45H
00F9 AA44 MOV R2, 44H
00FB 7900 MOV R1, #00D
00FD 7811 MOV R0, #17D
00FF 120149 LCALL MUL2BY2
0102 7B03 MOV R3, #03H
0104 7AE8 MOV R2, #0E8H
0106 120178 LCALL DIV4BY2
0109 120178 LCALL DIV4BY2
010C 8C40 MOV 40H, R4
010E E540 MOV A,40H
0110 7000 JNZ JJ0
; MOV 40H,#0FH ;最高位为零,不点亮
0112 E8 JJ0: MOV A, R0
0113 FC MOV R4, A
0114 E9 MOV A, R1
0115 FD MOV R5, A
0116 7B00 MOV R3, #00D
0118 7A64 MOV R2, #100D
011A 120178 LCALL DIV4BY2
011D 8C41 MOV 41H, R4
011F E541 MOV A,41H
0121 7006 JNZ JJ1
0123 E540 MOV A,40H ;次高位为0,先看最高位是否为不亮
0125 940F SUBB A,#0FH
0127 7000 JNZ JJ1
; MOV 41H,#0FH ;最高位不亮,次高位也不亮
0129 E8 JJ1: MOV A, R0
012A FC MOV R4, A
012B E9 MOV A, R1
012C FD MOV R5, A
012D 7B00 MOV R3, #00D
012F 7A0A MOV R2, #10D
0131 120178 LCALL DIV4BY2
0134 8C42 MOV 42H, R4
0136 E542 MOV A,42H
0138 7006 JNZ JJ2
013A E541 MOV A,41H ;次次高位为0,先看次高位是否为不亮
013C 940F SUBB A,#0FH
013E 7000 JNZ JJ2
; MOV 42H,#0FH ;次高位不亮,次次高位也不亮
0140 8843 JJ2: MOV 43H, R0
0142 D0F0 POP B
0144 D0D0 POP PSW
0146 D0E0 POP ACC
D:\C03电本教学实验资料\超声波报警示范程序(新)\5.ASM
页 5
11-27-05
16:01:21
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
0148 22 RET
;
;****************************************************
;* 两字节无符号数乘法程序 *
;****************************************************
; R7R6R5R4 <= R3R2 * R1R0
;
0149 E4 MUL2BY2: CLR A
014A FF MOV R7, A
014B FE MOV R6, A
014C FD MOV R5, A
014D FC MOV R4, A
014E 754610 MOV 46H, #10H
0151 C3 MULLOOP1: CLR C
0152 EC MOV A, R4
0153 33 RLC A
0154 FC MOV R4, A
0155 ED MOV A, R5
0156 33 RLC A
0157 FD MOV R5, A
0158 EE MOV A, R6
0159 33 RLC A
015A FE MOV R6, A
015B EF MOV A, R7
015C 33 RLC A
015D FF MOV R7, A
015E E8 MOV A, R0
015F 33 RLC A
0160 F8 MOV R0, A
0161 E9 MOV A, R1
0162 33 RLC A
0163 F9 MOV R1, A
0164 500E JNC MULLOOP2
0166 EC MOV A, R4
0167 2A ADD A, R2
0168 FC MOV R4, A
0169 ED MOV A, R5
016A 3B ADDC A, R3
016B FD MOV R5, A
016C EE MOV A, R6
016D 3400 ADDC A, #00H
016F FE MOV R6, A
0170 EF MOV A, R7
0171 3400 ADDC A, #00H
0173 FF MOV R7, A
0174 D546DA MULLOOP2: DJNZ 46H, MULLOOP1
0177 22 RET
D:\C03电本教学实验资料\超声波报警示范程序(新)\5.ASM
页 6
11-27-05
16:01:21
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
;
;****************************************************
;* 四字节/两字节无符号数除法程序 *
;****************************************************
;R7R6R5R4/R3R2=R7R6R5R4(商)...R1R0(余数)
;
0178 754620 DIV4BY2: MOV 46H, #20H
017B 7800 MOV R0, #00H
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?