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

📄 us-std.asm

📁 PARK CAR 倒车雷达的制作文件1: 有原理图和控制程序源代码
💻 ASM
字号:
;/***********************************************************
;**--------------文件信息-----------------------------------
;**文   件   名: UM-STD.asm         键盘、显示、延时等用的子程序库	
;**创   建   人: 弗兰克
;**最后修改日期: 2006年4月10日
;**描        述: MCU程序
; ==========================================================
;      
; ==========================================================
;**--------------历史版本信息--------------------------------
;** 修改人: 布莱德  
;** 版  本: V1.0
;** 日 期: 2009.1.12 
;** 描 述: 
;   20090112:
;*********************************************************************************************
; Fm = 11.0592 MHz crystal with two 30p of capacitor. 1 machine cycle = 1.085 uS
; =============================================================================================
; Define RAM

stack	EQU	60H
TMP	EQU	2EH
FLAG	EQU	2FH		; All FLAG

SECD_F	BIT	FLAG.0
TASK_F	BIT	FLAG.1
ALAM_F	BIT	FLAG.2

; ---------------------------------------------------------------------------------------------
; Define const for display

CH_A	EQU	10		; Display " A "
CH_B	EQU	11		; Display " B "
CH_C	EQU	12		; Display " C "
CH_D	EQU	13		; Display " D "
CH_E	EQU	14		; Display " E "
CH_F	EQU	15		; Display " F "
CH_G	EQU	16		; Display " G "
CH_H	EQU	17		; Display " H "
CH_L	EQU	18		; Display " L "
CH_P	EQU	19		; Display " P "
CH_U	EQU	20		; Display " U "
dot	EQU	21		; Display " . "
dash	EQU	22		; Display " - "
BLAK	EQU	23		; For not display, base on DSPLY data table

COM_BYTES	EQU	8		; Counts of Communication bytes
KDNUM	EQU	5		; Keys or digits displayed

B11M_1200 	EQU 	0E8H 		; 1200 baud
B11M_2400 	EQU 	0F4H 		; 2400 baud
B11M_9600 	EQU 	0FDH 		; 9600 baud

B6M_1200 	EQU 	0F3H 		; 1200 baud
B6M_2400 	EQU 	0F9H 		; 2400 baud
B6M_9600 	EQU 	0FEH 		; 9600 baud

; =============================================================================================
; Init. routine	
; =============================================================================================
STD_INIT:
	MOV	FLAG,#0		; Reset all flag
	SETB 	EA 		; global interrupt enable
	MOV	P1,#0FFH
	MOV	P3,#0FFH

; Init. times
	MOV 	TMOD,#21H 		; T1:mode2 for S-port,T0:mode1,for time & clock

; For serial communication
 	SETB 	ES 		; enable serial interrupt
	MOV 	SCON,#01000000b 	; serial port mode 1, 8 bit
	SETB 	REN
	MOV 	TL1,#B11M_1200 	; T1 reload value
	MOV 	TH1,#B11M_1200 	; T1 reload value
	SETB 	TR1 
	CLR	EN485T

	CLR	DCK
	CLR	DDA
	RET
; =============================================================================================
; Display routine	
; =============================================================================================
; Display with statiic mode

DCK	BIT	P1.6		; For display,To P8 of 74HC164
DDA	BIT	P1.7		; For display,To P1,2 of 74HC164

DSPLY:
	MOV	R7,#KDNUM
	MOV	R0,#MBUF+KDNUM-1		; Pointer of display buffer
SDSA:	MOV	A,@R0
	MOV	DPTR,#CHAR
	MOVC	A,@A+DPTR			; 
	ACALL	SDS	
	DEC	R0
	DJNZ	R7,SDSA
	RET	

CHAR:	DB	41H,0E7H,89H,83H,27H,13H,11H,0C7H	; 0 -- 7
	DB	01H,03H,05H,31H,59H,0A1H,19H,1DH	; 8 -- F	
	DB	51H,25H,79H,0DH,61H,0FEH,0BFH,0FFH	; G,H,L,P,U,".","-",BLANK
; ---------------------------------------------------------------------------------------------
; Send a byte to 74hc164, sended byte in A, execution time: 180uS

SDS:	PUSH	B
	CLR	DCK		; Clock bit
	MOV	B,#8	
SD1:	RRC	A
	MOV	DDA,C		; data bit
	SETB	DCK
	CLR	DCK 
	DJNZ	B,SD1
	POP	B
	RET
; ---------------------------------------------------------------------------------------------
; Clear the LED

CLRLED:	MOV	R1,#MBUF
	MOV	R2,#KDNUM	
CL1:	MOV	@R1,#BLAK
	INC	R1
	DJNZ	R2,CL1
	ACALL	DSPLY
	RET
; =============================================================================================
; Serial port communication
; =============================================================================================
; Receive data INT. routine

SR:	PUSH	ACC		
	PUSH	PSW	
	SETB	RS0
	CLR	ES
	CLR 	TI 		; clear transmit interrupt FLAG
	
	MOV	R0,#MBUF		; Pointe mem. to save data
SR1:
	MOV	R3,#20		; LOOP = 20mS
SR3:	MOV	R4,#250		; LOOP = 1mS
SR4:	JBC 	RI,SR5 		; exit loop when char received
	DJNZ	R4,SR4
	DJNZ	R3,SR3
	AJMP	SR6		; Time over, No next data,jump to do things
SR5:
	MOV	@R0,SBUF
	INC	R0
	AJMP	SR1
SR6:	
	SETB	TASK_F		; Tell main routine  

	SETB	ES
	POP	PSW
	POP	ACC
	RETI
; ---------------------------------------------------------------------------------------------
; Transmite HEX data to another MCU
; Converte BCD data in MBUF as ASCII code first If transmite to PC 

ST:	CLR	ES		
	SETB	EN485T
	MOV	R2,#COM_BYTES
	MOV	R1,#MBUF
ST1:
	CLR	RI		; This is must 
	MOV	A,@R1
	MOV	SBUF,A
	JNB	TI,$
	CLR	TI
	INC	R1
	DJNZ	R2,ST1
	CLR	EN485T
	SETB	ES

	RET
; =============================================================================================
; Standard routines
; =============================================================================================
WMULB:	MOV	A,R5		; R5*(R6,R7)-->(R5,R6,R7)
	MOV	B,R7		; Use R3,R4
	MUL	AB
	XCH	A,R7
	MOV	R3,B
	CLR	A
	ADDC	A,#0
	MOV	R4,A
	MOV	A,R6
	MOV	B,R5
	MUL	AB
	ADD	A,R3
	XCH	A,R6
	XCH	A,B
	ADDC	A,R4
	MOV	R5,A	
	RET
;-----------------------------------------------------------------------------------------------
; 2Word / word
;-----------------------------------------------------------------------------------------------
; R4R5R6R7 / R2R3 --> R6R7 ram in R4R5
; *** If R4,R5 > R2,R3, failure

WDIV:	MOV	A,R5		; R4R5R6R7 / R2R3 --> R6R7 ram in R4R5
	CLR	C		; 456789ABH/6789H=AB9B...56B8
	SUBB	A,R3
	MOV	A,R4
	SUBB	A,R2
	JNC	WDI5		; ****If R4,R5 > R2,R3, failure
	MOV	B,#16
	CLR	C		; RLC R4,R5,R6,R7 ......
WDI1:	MOV	A,R7
	RLC	A
	MOV	R7,A
	MOV	A,R6
	RLC	A
	MOV	R6,A
	MOV	A,R5
	RLC	A
	MOV	R5,A
	MOV	A,R4
	RLC	A
	MOV	R4,A	
	MOV	F0,C
	CLR	C
	MOV	A,R5
	SUBB	A,R3	
	MOV	R1,A
	MOV	A,R4
	SUBB	A,R2
	JB	F0,WDI2
	JC	WDI3
WDI2:	MOV	R4,A
	MOV	A,R1
	MOV	R5,A
	SETB	C
	AJMP	WDI4 
WDI3:	CLR	C 
WDI4:	DJNZ	B,WDI1
	MOV	A,R7
	RLC	A
	MOV	R7,A
	MOV	A,R6
	RLC	A
	MOV	R6,A
	CLR	F0		;F0 = 0, WDIV OK	
	AJMP	WDI6
WDI5:	SETB	F0		;F0 = 1, R4R5>R2R3,WDIV failure
WDI6:	RET
; ---------------------------------------------------------------------------------------------
MIND:	MOV	B,#0FFH
	MOV	R3,#1
MD1:	MOV	A,@R1
	CLR	C
	SUBB	A,B
	JNC	MD2
	MOV	B,@R1
	MOV	A,R3
	MOV	R4,A
MD2:
	INC	R1
	INC	R3
	DJNZ	R2,MD1
	MOV	A,B		;
	RET			; Return in A (data)min / R4(number of data)
; ----------------------------------------------------------------------------------------------
BB2D:	MOV	B,#100		; Input in A
	DIV	AB		;
	MOV	@R1,A
	INC	R1
	MOV	A,#10 
	XCH	A,B
	DIV	AB
	MOV	@R1,A
	INC	R1
	MOV	@R1,B		; Return in @R1(MSB),@R1+1,@R1+2
	RET

; ---------------------------------------------------------------------------------------------
B2D:	MOV	B,#10		; Input in A
	DIV	AB
	MOV	@R1,A
	INC	R1
	MOV	@R1,B		; Return in @R1(MSB),@R1+1
	RET
; =============================================================================================
; Delay Fm = 11.0592MHz  1 machine cycle = 1.085 uS
; =============================================================================================
; ACALL,PUSH,POP,RET,MOV take 10*1.085 = 10.85 uS
D50:				; N = (50 - 10.85)/2.17 = 18
	PUSH	B
	MOV	B,#18
	DJNZ	B,$		; DJNZ takes 2.17 uS
	POP	B
	RET
D100:				; N = (100 - 10.85)/2.17 = 41
	PUSH	B
	MOV	B,#41
	DJNZ	B,$		; DJNZ takes 2.17 uS
	POP	B
	RET
D250:				; N = (250 - 10.85)/2.17 = 110.207
	PUSH	B
	MOV	B,#110
	DJNZ	B,$		; DJNZ takes 2.17 uS	POP	B
	RET
D500:				; N = (500 - 10.85)/2.17 = 225.4
	PUSH	B
	MOV	B,#225
	DJNZ	B,$		; DJNZ takes 2.17 uS 	
	POP	B
	RET

D1MS:	PUSH	B		; Delay 1 mS
	MOV	B,#4	
D1M1:	ACALL	D250
	DJNZ	B,D1M1
	POP	B
	RET

D4MS:	PUSH	B
	MOV	B,#16		; Delay 4 ms	
D4M1:	ACALL	D250	
	DJNZ	B,D4M1
	POP	B
	RET

D20MS:	PUSH	B
	MOV	B,#80		; Delay 20 ms	
D20M1:	ACALL	D250	
	DJNZ	B,D20M1
	POP	B
	RET

D60MS:	PUSH	B
	MOV	B,#240		; Delay 20 ms	
D60M1:	ACALL	D250	
	DJNZ	B,D60M1
	POP	B
	RET

D1S:	PUSH	B
	MOV	B,#50		; Delay 1 S	
D1S1:	ACALL	D20MS	
	DJNZ	B,D1S1
	POP	B
	RET

; =============================================================================================

⌨️ 快捷键说明

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