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

📄 wind1.asm

📁 此程序是检测风速的单片机程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	CJNE	A,#STOREMARK,FS3
	MOV	DPTR,#WINDSCALE1
	CALL	BYTRD_VERIFY
	MOV	R0,A
	ANL	A,#0F0H
	JNZ	FS2
	MOV	DISP6,#0FH
	MOV	DISP7,R0
	JMP	FS7
FS2:	SWAP	A
	MOV	DISP6,A
	ANL	AR0,#0FH
	MOV	DISP7,R0
	JMP	FS7
FS3:	MOV	DISP7,#5
	JMP	FS7
FS4:	MOV	DISP3,#2
	MOV	DPTR,#WINDSC_M2
	CALL	BYTRD_VERIFY
	CJNE	A,#STOREMARK,FS6
	MOV	DPTR,#WINDSCALE2
	CALL	BYTRD_VERIFY
	MOV	R0,A
	ANL	A,#0F0H
	JNZ	FS5
	MOV	DISP6,#0FH
	MOV	DISP7,R0
	JMP	FS7
FS5:	SWAP	A
	MOV	DISP6,A
	ANL	LR0,#0FH
	MOV	DISP7,R0
	JMP	FS7
FS6:	MOV	DISP7,#6
FS7:	JNB	ENT,FSESC
	CLR	ENT_OFF
	CLR	FS
	CLR	ADJBUF_PS_OK
	MOV	A,FUNSEL_REG
	CJNE	A,#1,FS8
	SETB	F1_1
	RET
FS8:	SETB	F1_2
	RET
FSESC:	JB	ESC,FSE1
	SETB	ESC_OFF
	RET
FSE1:	JNB	ESC_OFF,FSOUT
	CLR	ESC_OFF
	CLR	ADJBUF_PS_OK
	CLR	FS
	SETB	DESKTOP
	MOV	FUNSEL_REG,#1
FSOUT:	RET
	;*****************************************************************************************
P1SET:	JB	F1_1,P1S0
	RET
P1S0:	MOV	DISP4,#0FH
	MOV	DISP5,#0FH
	MOV	DPTR,#WINDSC_M1
	CALL	BYTRD_VERIFY
	CJNE	A,#STOREMARK,P1S1
	MOV	DPTR,#WINDSCALE1
	CALL	BYTRD_VERIFY
	MOV	R2,A
	JMP	P1S2
P1S1:	MOV	R2,#5
P1S2:	MOV	R5,#2
	MOV	R6,#12H
	CALL	BCDADJ_16
	JB	SEQADJ_EN,P1S3
	JB	TWINBIT1,P1S3
	MOV	DISP6,#0FH
	MOV	DISP7,#0FH
	JMP	P1S5
P1S3:	MOV	A,ADJBUF
	ANL	A,#0F0H
	JNZ	P1S4	
	MOV	DISP6,#0FH
	MOV	DISP7,ADJBUF
	JMP	P1S5
P1S4:	MOV	A,ADJBUF
	ANL	A,#0F0H
	SWAP	A
	MOV	DISP6,A
	MOV	A,ADJBUF
	ANL	A,#0FH
	MOV	DISP7,A
P1S5:	JB	ENT,P1S6
	SETB	ENT_OFF
	JMP	P1ESC
P1S6:	JB	ENT_OFF,P1S7
	RET
P1S7:	CLR	ENT_OFF
	MOV	A,ADJBUF
	ANL	A,#0F0H
	JNZ	P1S8	
	MOV	DISP6,#0FH
	MOV	DISP7,ADJBUF
	JMP	P1S9
P1S8:	MOV	A,ADJBUF
	ANL	A,#0F0H
	SWAP	A
	MOV	DISP6,A
	MOV	A,ADJBUF
	ANL	A,#0FH
	MOV	DISP7,A
P1S9:	SETB	BUZR
	;MOV	R2,#5
	;CALL	DELAYX1
	MOV	DPTR,#WINDSCALE1	
	MOV	R5,ADJBUF
	CALL	BYTWR_VERIFY
	MOV	DPTR,#WINDSC_M1
	MOV	R5,#STOREMARK
	CALL	BYTWR_VERIFY
	CLR	BUZR
	CLR	F1_1
	SETB	FS
	CLR	ADJBUF_PS_OK
	RET
P1ESC:	JB	ESC,P1E0
	SETB	ESC_OFF
	RET
P1E0:	JB	ESC_OFF,P1E1
	RET
P1E1:	CLR	ESC_OFF
	CLR	F1_1
	CLR	ADJBUF_PS_OK
	SETB	FS
	RET
	;*****************************************************************************************
P2SET:	JB	F1_2,P2S0
	RET
P2S6:	JB	ENT_OFF,P2S7
	RET
P2S7:	CLR	ENT_OFF
	MOV	A,ADJBUF
	ANL	A,#0F0H
	JNZ	P2S8	
	MOV	DISP6,#0FH
	MOV	DISP7,ADJBUF
	JMP	P2S9
P2S8:	MOV	A,ADJBUF
	ANL	A,#0F0H
	SWAP	A
	MOV	DISP6,A
	MOV	A,ADJBUF
	ANL	A,#0FH
	MOV	DISP7,A
P2S9:	SETB	BUZR
	;MOV	R2,#5
	;CALL	DELAYX1
	MOV	DPTR,#WINDSCALE2	
	MOV	R5,ADJBUF
	CALL	BYTWR_VERIFY
	MOV	DPTR,#WINDSC_M2
	MOV	R5,#STOREMARK
	CALL	BYTWR_VERIFY
	CLR	BUZR
	CLR	F1_2
	SETB	FS
	CLR	ADJBUF_PS_OK
	RET
P2ESC:	JB	ESC,P2E0
	SETB	ESC_OFF
	RET
P2E0:	JB	ESC_OFF,P2E1
	RET
P2E1:	CLR	ESC_OFF
	CLR	F1_2
	CLR	ADJBUF_PS_OK
	SETB	FS
	RET
	;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
	;BASIC	KEYBOARD	PROGRAMS
	;基本按键程序
	;*****************************************************************************************
	;------------------------------------------------------------------------------------------
KEYSCAN:	JB	FUN_X,KS1
	;MOV	R2,#10
	;CALL	DELAYX2
	JB	FUN_X,KS1
	JB	FUN,KS2
	SETB	FUN
	CALL	KEYSOUND1
	JMP	KS2
KS1:	CLR	FUN
KS2:	JB	LEFTKEY_X,KS21
	;MOV	R2,#10
	;CALL	DELAYX2
	JB	LEFTKEY_X,KS21
	JB	LEFTKEY,KS3
	SETB	LEFTKEY
	CALL	KEYSOUND1
	JMP	KS3
KS21:	CLR	LEFTKEY
KS3:	JB	ENTKEY_X,KS31
	;MOV	R2,#10
	;CALL	DELAYX2
	JB	ENTKEY_X,KS31
	JB	ENT,KS4
	SETB	ENT
	CALL	KEYSOUND1
	JMP	KS4
KS31:	CLR	ENT
KS4:	JB	RIGHTKEY_X,KS41
	;MOV	R2,#10
	;CALL	DELAYX2
	JB	RIGHTKEY_X,KS41
	JB	RIGHTKEY,KS5
	SETB	RIGHTKEY
	CALL	KEYSOUND1
	JMP	KS5
KS41:	CLR	RIGHTKEY
KS5:	JB	ESC_X,KS52
	;MOV	R2,#10
	;CALL	DELAYX2
	JB	ESC_X,KS52
	JB	ESC,KS51
	SETB	ESC
	CALL	KEYSOUND1
KS51:	RET
KS52:	CLR	ESC
	RET
	;-----------------------------------------------------------------------------------------
KEYSOUND1:	JNB	ALM,KEYSND
	RET
KEYSND:	SETB	BUZR
	;MOV	R2,#KSL
	;CALL	DELAYX2
	CLR	BUZR
	RET
	;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
	;*****************************************************************************************
	;*
;*NAME:	RRC4
;*FUNCTION:	4
;*DESCRIPTION:;*INPUT:	R4R5R6R7
;*OUTPUT:	R4R5R6R7,C
;*REGISTER	USAGE:	A,C,R4,R5,R6,R7
	;-----------------------------------------------------------------------------------------
RRC4:	CLR	C
	MOV	A,R4
	RRC	A
	MOV	R4,A
	MOV	A,R5
	RRC	A
	MOV	R5,A
	MOV	A,R6
	RRC	A
	MOV	R6,A
	MOV	A,R7
	RRC	A
	MOV	R7,A
	RET
	;*****************************************************************************************
	;*延时子程序1
;*NAME:	DELAYX1
;*FUNCTION:	(0.1	X	R2	)
;*DESCRIPTION:	12M
;*INPUT:	R2
;*OUTPUT:	NONE
;*REGISTER	USAGE:	R2,R3,R4
	;-----------------------------------------------------------------------------------------
	;*****************************************************************************************
	;*延时子程序2
;*NAME:	DELAYX2
;*FUNCTION:	(0.001	X	R2	)
;*DESCRIPTION:	12M
;*INPUT:	R2
;*OUTPUT:	NONE
;*REGISTER	USAGE:	R2,R3
	;-----------------------------------------------------------------------------------------
	;*****************************************************************************************
	;*双字节无符号数除法
;*NAME:	DIV16_16
;*FUNCTION:	16/16
;*DESCRIPTION:;*INPUT:	R4R5/R6R7
;*OUTPUT:	R4R5,R2R3)
;*REGISTER	USAGE:	A,B,C,R2,R3,R4,R5,R6,R7
	;-----------------------------------------------------------------------------------------
DIV16_16:	MOV	R2,#0
	MOV	R3,#0
	MOV	R1,#10H
DIV11:	CLR	C
	MOV	A,R5
	RLC	A
	MOV	R5,A
	MOV	A,R4
	RLC	A
	MOV	R4,A
	MOV	A,R3
	RLC	A
	MOV	R3,A
	MOV	A,R2
	RLC	A
	MOV	R2,A
	MOV	A,R3
	SUBB	A,R7
	MOV	B,A
	MOV	A,R2
	SUBB	A,R6
	JC	NEXT
	INC	R5
	MOV	R2,A
	MOV	R3,B
NEXT:	DJNZ	R1,DIV11
	RET
	;*****************************************************************************************
	;*
;*NAME:	ROUND
;*FUNCTION:;*DESCRIPTION:;*INPUT:	R6R7,R2R3,R4R5
;*OUTPUT:	R4R5
;*REGISTER	USAGE:	A,C,R2,R3,R4,R5,R6,R7
	;-----------------------------------------------------------------------------------------
ROUND:	CLR	C
	MOV	A,R7
	RRC	A
	MOV	R7,A
	CLR	C
	MOV	A,R6
	RRC	A
	MOV	R6,A
	CLR	C
	MOV	A,R7
	SUBB	A,R3
	MOV	A,R6
	SUBB	A,R2
	JNC	RND1
	MOV	A,R5
	ADD	A,#1
	MOV	R5,A
	MOV	A,R4
	ADDC	A,#0
	MOV	R4,A
RND1:	RET
	;双字节无符号数乘法
	;*****************************************************************************************
	;*R4R5*R6R7=R4R5R6R7
;*NAME:	MUL16_16
;*FUNCTION:	16*16
;*DESCRIPTION:;*INPUT:	R4R5,R6R7
;*OUTPUT:	R4R5R6R7
;*REGISTER	USAGE:	A,B,C,R2,R3,R4,R5,R6,R7,F0
	;-----------------------------------------------------------------------------------------
MUL16_16:	MOV	A,R5
	MOV	B,R7
	MUL	AB
	XCH	A,R7
	MOV	R3,B
	MOV	B,R4
	MUL	AB
	ADD	A,R3
	MOV	R2,A
	CLR	A
	ADDC	A,B
	MOV	R3,A
	MOV	A,R6
	MOV	B,R5
	MUL	AB
	ADD	A,R2
	XCH	A,R6
	XCH	A,B
	ADDC	A,R3
	MOV	R3,A
	MOV	F0,C
	MOV	A,R4
	MUL	AB
	ADD	A,R3
	MOV	R5,A
	CLR	A
	MOV	ACC.0,C
	MOV	C,F0
	ADDC	A,B
	MOV	R4,A
	RET
	;*****************************************************************************************
	;*二进制转换为BCD码
;*NAME:	BINBCD
;*FUNCTION:;*DESCRIPTION:;*INPUT:	R3,R4,R5
;*OUTPUT:	R4
;*REGISTER	USAGE:	A,B,C,R0,R1,R2,R3,R4,R5,R6,R7
	;-----------------------------------------------------------------------------------------
BINBCD:	MOV	A,R5
	DEC	A
	ADD	A,R3
	MOV	R6,A
	MOV	A,R5
	ADD	A,R4
	MOV	R7,A
	MOV	R0,LR4
	MOV	R1,LR5
	INC	R1
	CLR	A
BB1:	MOV	@R0,A
	INC	R0
	DJNZ	R1,BB1
	MOV	A,LR5
	MOV	B,#08H
	MUL	AB
	MOV	R2,A
BB2:	MOV	R0,LR6
	MOV	R1,LR5
	CLR	C
BB3:	MOV	A,@R0
	RLC	A
	MOV	@R0,A
	DEC	R0
	DJNZ	R1,BB3
	MOV	R1,LR5
	INC	R1
	MOV	A,R7
	MOV	R0,A
BB4:	MOV	A,@R0
	ADDC	A,@R0
	DA	A
	MOV	@R0,A
	DEC	R0
	DJNZ	R1,BB4
	DJNZ	R2,BB2
	RET
	;*****************************************************************************************
	;*
;*NAME:	INT5045
;*FUNCTION:	INITIALIZE	THE	STATUS	REGISTER	OF	X5045
;*DESCRIPTION:;*INPUT:	NONE
;*OUTPUT:	NONE
;*REGISTER	USAGE:	A,C,R2,R3,R5
	;-----------------------------------------------------------------------------------------
INT5045:	MOV	R5,#X5045INT_VALUE
	CALL	WRSR_CMD
	RET
	;*****************************************************************************************
	;*
;*NAME:	WRSR_CMD
;*FUNCTION:	X25045
;*DESCRIPTION:;*INPUT:	R5
;*OUTPUT:	NONE
;*REGISTER	USAGE:	A,C,R2,R3,R5
	;-----------------------------------------------------------------------------------------
WRSR_CMD:	CLR	EA
	CALL	WREN_CMD
	CLR	CS5045	;BRING	/CS5045	LOW
	MOV	A,#WRSR_INST
	CALL	OUTBYT	;SEND	WRSR	INSTRUCTION
	MOV	A,R5
	CALL	OUTBYT	;SEND	STATUS	REGISTER
	SETB	CS5045
	CALL	WIP_POLL	;POLL	FOR	COMPLETION	OF	WRITE	CYCLE
	SETB	EA
	RET
	;*****************************************************************************************
	;*
;*NAME:	RDSR_CMD
;*FUNCTION:	X25045
;*DESCRIPTION:;*INPUT:	NONE
;*OUTPUT:	A
;*REGISTER	USAGE:	A,C,R2
	;-----------------------------------------------------------------------------------------
RDSR_CMD:	CLR	CS5045	;BRING	/CS5045	LOW
	MOV	A,#RDSR_INST
	CALL	OUTBYT	;SEND	RDSR	INSTRUCTION
	CALL	INBYT	;READ	STATUS	REGISTER
	SETB	CS5045	;BRING	/CS5045	HIGH
	RET
	;*****************************************************************************************
	;字节写
	;-----------------------------------------------------------------------------------------
BYTE_WRITE:	CALL	WREN_CMD
	CLR	CS5045	;BRING	/CS5045	LOW
	MOV	A,#WRITE_INST
	MOV	B,DPH
	MOV	C,B.0
	MOV	ACC.3,C
	CALL	OUTBYT	;SEND	WRITE	INSTRUCTION	INCLUDING	MSB	OF	ADDRESS
	MOV	A,DPL
	CALL	OUTBYT	;SEND	8	LSBS	OF	ADDRESS
	MOV	A,R5
	CALL	OUTBYT	;SEND	DATA	BYTE
	SETB	CS5045
	CALL	WIP_POLL	;POLL	FOR	COMPLETION	OF	WRITE	CYCLE
	RET
	;*****************************************************************************************
	;-----------------------------------------------------------------------------------------
BYTWR_VERIFY:	CLR	EA
	MOV	R4,#10	;SET	THE	VERIFY	TIMES	COUNTER	TO	TEN
BYTE_REWR:	CALL	BYTE_WRITE
	CALL	BYTE_READ	;VERIFY	THE	CORRECTNESS	OF	THE	WRITE	OPERATION
	CJNE	A,LR5,WRBYT_POLL
	RET
WRBYT_POLL:	DJNZ	R4,BYTE_REWR
	SETB	EA
	RET
	;*****************************************************************************************
	;*
;*NAME:	BYTE_READ
;*FUNCTION:	X25045
;*DESCRIPTION:;*INPUT:	DPTR
;*OUTPUT:	A
;*REGISTER	USAGE:	A,B,C,DPTR,R2
	;-----------------------------------------------------------------------------------------
BYTE_READ:	CLR	CS5045	;BRING	/CS5045	LOW
	MOV	A,#READ_INST
	MOV	B,DPH
	MOV	C,B.0
	MOV	ACC.3,C
	CALL	OUTBYT	;SEND	READ	INSTRUCTION	INCLUDING	MSB	OF	ADDRESS
	MOV	A,DPL
	CALL	OUTBYT	;SEND	8	LSBS	OF	ADDRESS
	CALL	INBYT	;READ	DATA	BYTE
	SETB	CS5045	;BING	/CS5045	HIGH
	RET
	;*****************************************************************************************
	;*
;*NAME:	BYTRD_VERIFY
;*FUNCTION:	X25045
;*DESCRIPTION:;*INPUT:	DPTR
;*OUTPUT:	A
;*REGISTER	USAGE:	A,B,C,DPTR,R2,R3,R4
	;-----------------------------------------------------------------------------------------
BYTRD_VERIFY:	CLR	EA
	MOV	R3,#10
BYTE_RERD:	CALL	BYTE_READ
	MOV	R4,A
	CALL	BYTE_READ
	CJNE	A,LR4,RDBYT_POLL
	RET
RDBYT_POLL:	DJNZ	R3,BYTE_RERD
	SETB	EA
	RET
	;*****************************************************************************************
	;*
;*NAME:	WREN_CMD
;*FUNCTION:	X25045
;*DESCRIPTION:;*INPUT:	NONE
;*OUTPUT:	NONE
;*REGISTER	USAGE:	A,C,R2
	;-----------------------------------------------------------------------------------------
WREN_CMD:	CLR	CS5045	;BRING	/CS5045	LOW
	MOV	A,#WREN_INST
	CALL	OUTBYT	;SEND	WREN	INSTRUCTION
	SETB	CS5045	;BRING	/CS5045	HIGH
	RET
	;*****************************************************************************************
	;*
;*NAME:	OUTBYT
;*FUNCTION:;*DESCRIPTION:;*INPUT:	A
;*OUTPUT:	NONE
;*REGISTER	USAGE:	A,C,R2
	;-----------------------------------------------------------------------------------------
OUTBYT:	MOV	R2,#08	;SET	BIT	COUNTER	TO	EIGHT
OB1:	CLR	SCK	;BRING	SCK	LOW
	RLC	A	;SHIFT	BYTE	LEFT	THROUGH	CARRY
	MOV	SI,C	;SEND	DATA	BIT	IN	CARRY
	SETB	SCK	;BRING	SCK	HIGH
	DJNZ	R2,OB1	;FINISH	IF	LAST	DATA	BIT
	RET
	;*****************************************************************************************
	;*
;*NAME:	INBYT
;*FUNCTION:;*DESCRIPTION:;*INPUT:	NONE
;*OUTPUT:	A
;*REGISTER	USAGE:	A,C,R2
	;-----------------------------------------------------------------------------------------
INBYT:	MOV	R2,#08	;SET	BIT	COUNTER	TO	EIGHT
IB1:	SETB	SCK	;BRING	SCK	HIGH
	CLR	SCK	;BRING	SCK	LOW
	MOV	C,SO	;RECEIVE	DATA	BIT	AND	STORE	IN	CARRY
	RLC	A	;SHIFT	BYTE	LEFT	THROUGH	CARRY
	DJNZ	R2,IB1	;FINISH	IF	LAST	DATA	BIT
	RET
	;*****************************************************************************************
	;*
;*NAME:	WIP_POLL
;*FUNCTION:	X25045
;*DESCRIPTION:;*INPUT:	NONE
;*OUTPUT:	NONE
;*REGISTER	USAGE:	A,C,R2,R3
	;-----------------------------------------------------------------------------------------
WIP_POLL:	MOV	R3,#MAX_POLL	;SET	MAXIMUM	NUMBER	OF	POLLS
WIP_POLL1:	CALL	RDSR_CMD	;READ	STATUS	REGISTER
	JNB	ACC.0,WIP_POLL2	;IF	WIP	BIT	'0'	WRITE	CYCLE	COMPLETED
	DJNZ	R3,WIP_POLL1	;IF	WIP	BIT	'1'	CONTINUE	POLLING
WIP_POLL2:	RET
	;*****************************************************************************************
	;*
;*NAME:	RST_WDOG
;*FUNCTION:	X25045
;*DESCRIPTION:;*INPUT:	NONE
;*OUTPUT:	NONE
;*REGISTER	USAGE:	NONE
	;-----------------------------------------------------------------------------------------
RST_WDOG:	CLR	EA
	CLR	CS5045	;BRING	/CS5045	LOW	TO	RESET	WATCHDOG	TIMER
	SETB	CS5045	;BRING	/CS5045	HIGH
	SETB	EA
	RET
	;*****************************************************************************************
	;=========================================================================================
	;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
	;=========================================================================================
	FILLBLANK
	END

⌨️ 快捷键说明

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