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 + -
显示快捷键?