📄 um.asm
字号:
;/***********************************************************
;**--------------文件信息-----------------------------------
;**文 件 名: UM2.ASM
;**创 建 人: 弗兰克
;**最后修改日期: 2006年4月10日
;**描 述: MCU程序
; ==========================================================
; FAD805.HEX For CAR BACK SYSTEM
; ==========================================================
;**--------------历史版本信息--------------------------------
;** 修改人: 布莱德
;** 版 本: V1.0
;** 日 期: 2009.1.12
;** 描 述:
; 20090112:
;************************************************************/
; The main have 2 sensors and alarm out at p3.4 that connected R2 of channel 6
;主机有2到6个超声波发射接收头
; *********************************************************************************************
$MOD52
; *********************************************************************************************
; Define buffer
MBUF EQU 30H ; Key,display & S-Port buffer: 30H - 3FH
TEM_B EQU 4AH ; Save temperature code
CHX EQU 4BH ; Channel No:
NUM EQU 4CH
; ---------------------------------------------------------------------------------------------
; Define port
P40K BIT P1.7 ; Transmite Ultrasonic 用于发40KHZ的超声波
EN485T BIT P3.7 ; Enable 485 transmite 用于给车前的显示主机发数据,当不要显示时可以只用这一个主机,
; 作为单主机系统用来实现倒车雷达的功能。
BACK_F BIT P3.3
REPLY BIT P3.2
INH BIT P1.3 ; Inhibite of 4051
CPP BIT P1.0 ; Comparator input+用51的比较器功能实现用I/O口检测温度
SOUT BIT P3.4 ; Output of pulse for alarm以不同声音报警到障碍物的距离
; ============================ Code segment ===================================================
ORG 0000H
AJMP RESET
; ORG 0023H ; serial I/O interrupt vector
; AJMP SR
; ---------------------------------------------------------------------------------------------
ORG 0030H
RESET:
MOV SP,#STACK
ACALL STD_INIT
CLR EA
MOV P1,#0FFH
CLR CPP
ACALL D4MS ; For C discharge放电时间
; =============================================================================================
; MAIN ROUTINE
; =============================================================================================
MAIN:
; JB BACK_F,MAIN
ACALL MM ; Make a Measure Distanse测距
ACALL D60MS
AJMP MAIN
; =============================================================================================
; Ultrasonic
; =============================================================================================
; Measure temperature. The return is:
; Distanse of Ultrasonic transmiting in 7*1.085uS = 2.517743 mm at 0`C.
; SD DATA = 2.517743 * 50 = 126
MT: CLR A
SETB CPP
MT1: INC A
JNB P3.6,MT1 ; A = 175 at 0 @C (see Temp.xls)
MOV DPTR,#SD
MOVC A,@A+DPTR ; A = 126 at 0 @C (see Temp.xls)
MOV TEM_B,A ;
CLR CPP ; Discharge C
RET
; ---------------------------------------------------------------------------------------------
; Make a Measure Distanse
; P1 port:
; 1 0 0 0 1 1 1 0 = 8EH
; P40KC CHX2 CHX1 CHX0 INH NO-USE COMP- CPP
MM: ACALL MT ; Measure temperature
MOV NUM,#6 ; Number of channels
MOV R0,#MBUF
MOV CHX,#0E8H ; Start from channel #0
M1:
ACALL D20MS
MOV A,CHX
SWAP A
MOV P1,A ; P1 = 1000 1110 at channel #0
ACALL MED
MOV @R0,A ; A = code of disdanse
INC R0
INC CHX
DJNZ NUM,M1
MOV R2,#2 ; number of sorted data
MOV R1,#MBUF ; addr. of data
ACALL MIND ; Return in A (data)min / R4(NO:), use R3,R4,B
MOV B,A
MOV A,B
CLR C
SUBB A,#250
JNC TAS3 ; The data > 250 CM, jump over
MOV A,B
CLR C
SUBB A,#150
JNC TAS4 ; The data > 150 CM, jump over
MOV A,B
CLR C
SUBB A,#100
JNC TAS5 ; The data > 100 CM, jump over
MOV A,B
CLR C
SUBB A,#35
JNC TAS6 ; The data > 35 CM, jump over
AJMP TAS7 ; The data < 35 CM, jump over
; * * *
TAS3: ; The data > 250 CM
ACALL ST
RET
TAS4: ; The data > 150 CM
ACALL ST
ACALL SP0
RET
TAS5: ; The data > 100 CM
ACALL ST
ACALL SP1 ; Alarm out
RET
TAS6: ; The data > 35 CM
ACALL ST
ACALL SP2 ; Alarm out
RET
TAS7: ACALL ST
ACALL SP3 ; The data < 35 CM, Alarm out
RET
; ---------------------------------------------------------------------------------------------
; Measure Distanse: Transmite Ultrasonic and Receive her reply signal
; (DPTR)max = 3000 mm / 2.517743 mm = 1200 = 07D0H (Tmax = 9.114 mS)
; (DPTR*SD)max = 1200 * 174 = 208800 = 032FA0H
; (DPTR*SD/1000)max = 208800 / (50*10*2) = 209
MED:
ME: MOV DPH,#0
MOV DPL,#190
MOV R2,#40 ; Set transmite time: 40 * 25 uS = 1000 uS
ME1: CLR P40K
ACALL D12U
SETB P40K
ACALL D12D
DJNZ R2,ME1
ACALL D250
ACALL D250
CLR INH
ACALL D250 ;
ACALL D250 ;
ME2: INC DPTR ; Wait reply and count, 7*1.085uS / Loop
MOV A,DPH ;
CJNE A,#7,ME3 ; Limit at 15mS
AJMP MEE ; Time over,jump out
ME3: JB REPLY,ME2
SETB INH
MOV R6,DPH ; DPTR * TEM_B
MOV R7,DPL
MOV R5,TEM_B
ACALL WMULB ; R5*(R6,R7)-->(R5,R6,R7)
MOV R4,#0 ; R4R5R6R7/R2R3 = R6R7
MOV R2,#03H ; 3E8H = 1000
MOV R3,#0E8H
ACALL WDIV
MOV A,R7 ; MAX: 209
CLR C
RET
MEE:
SETB INH
MOV A,#0FFH ; The wrong data
SETB C ; Error
RET
; ---------------------------------------------------------------------------------------------
SP0:
ACALL STMS
RET
SP1:
ACALL SHMS
ACALL SHMS
ACALL SHMS
ACALL SHMS
RET
SP2: ACALL SHMS
MOV R2,B ; Stop B mS ...
SP22: ACALL D1MS
DJNZ R2,SP22 ; ...
ACALL SHMS
RET
SP3: ACALL S50MS
ACALL D60MS
ACALL S50MS
ACALL D60MS
ACALL S50MS
RET
S50MS: MOV R2,#50
S51: CLR SOUT
ACALL D500
SETB SOUT
ACALL D500
DJNZ R2,S51
RET
SHMS: MOV R2,#50
SH1: CLR SOUT
ACALL D1MS
SETB SOUT
ACALL D1MS
DJNZ R2,SH1
RET
STMS: MOV R2,#10
STM: CLR SOUT
ACALL D500
SETB SOUT
ACALL D500
DJNZ R2,STM
RET
; ---------------------------------------------------------------------------------------------
; Fu = 40 KHz, Tu = 25 uS = 1.085 uS * 23.04
D12U:
NOP
NOP
NOP
NOP
NOP
NOP
RET
D12D:
NOP
NOP
NOP
NOP
NOP
RET
; =============================================================================================
; Ultrasonic speed: v (m/s) = 331.5 + 0.6 * t (degry @C) = 346.5 at 25@C 测温后算出距离
; 11K-104C: RT=10K(3950),C=104,Rc=11K
; SD / 100 = Transmite Distance of Ultrasonic in (1.085*3 uS) at the temperature
SD:
DB 174, 171, 168, 163, 160, 158, 156, 154, 153, 152,
DB 151, 150, 149, 149, 148, 148, 147, 147, 146, 146,
DB 145, 145, 145, 144, 144, 144, 143, 143, 143, 143,
DB 142, 142, 142, 142, 141, 141, 141, 141, 140, 140,
DB 140, 140, 140, 140, 139, 139, 139, 139, 139, 138,
DB 138, 138, 138, 138, 138, 138, 137, 137, 137, 137,
DB 137, 137, 137, 136, 136, 136, 136, 136, 136, 136,
DB 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
DB 135, 134, 134, 134, 134, 134, 134, 134, 134, 134,
DB 133, 133, 133, 133, 133, 133, 133, 133, 133, 132,
DB 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,
DB 132, 132, 131, 131, 131, 131, 131, 131, 131, 131,
DB 131, 131, 131, 130, 130, 130, 130, 130, 130, 130,
DB 130, 130, 130, 130, 130, 130, 129, 129, 129, 129,
DB 129, 129, 129, 129, 129, 129, 129, 128, 128, 128,
DB 128, 128, 128, 128, 128, 128, 128, 127, 127, 127,
DB 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
DB 126, 126, 126, 126, 126, 126, 126, 126, 126, 125,
DB 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
DB 124, 124, 124, 124, 124, 124, 124, 124, 123, 123,
DB 123, 123, 123, 123, 122, 122, 122, 122, 122, 122,
DB 122, 121, 121, 121, 121, 121, 120, 120, 120, 120,
DB 120, 119, 119
; =============================================================================================
$INCLUDE(US-STD.asm) ; Key,display,delay routines 要加键盘和显示器使用。延时子程序也在这里。
; =============================================================================================
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -