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

📄 mnapp.asm

📁 这是一个完整的除湿机方案!另包含SCH原理图。希望对用松翰单片机的朋友有帮助!
💻 ASM
📖 第 1 页 / 共 2 页
字号:

;	mov	a,countfreql4
;	add	countfreql,a
;	mov	a,countfreqh4
;	adc	countfreqh,a
	
	mov	a,#countfreql1$m
	mov	ww0,a
	mov	a,#countfreql1$l
	mov	ww1,a
	mov	a,#3
	mov	temp9,a
	call	givemm
	mov	a,temp0
	mov	countfreql,a
	mov	a,temp1
	mov	countfreqh,a
	b0bclr	fc
	rrcm	countfreqh
	rrcm	countfreql

humidretp25:
	b0bclr	t250msflag
	b0bclr	firsrecflag
	b0bclr	firsrecflag2
	b0bset	humidcomflag

	b0bclr	fc
	rlcm	countfreql
	rlcm	countfreqh
	b0bclr	fc
	rlcm	countfreql
	rlcm	countfreqh

	mov	a,#0ch			;260ch=9740
	sub	a,countfreql		;FOUT=9740-18*RH
	mov	r0,a
	mov	a,#26h
	sbc	a,countfreqh
	mov	r1,a
	mov	a,#18
	mov	r2,a
	clr	r3
	call	DIV_HEX2B
	mov	a,r5
	mov	r2,a
	call	CHA_HEXD1BTOBCD
	mov	a,r2
	mov	humid_dis_d,a
	mov	a,r6
	mov	r0,a
	call	CHA_HEX1BTOBCD
	mov	a,r2
	mov	humid_dis_i,a
	b0bclr	temphumiflag

	b0bts1	humidfirflag
	jmp	humidretp40	
	mov	a,humid_dis_iold
	sub	a,humid_dis_i
	b0bts1	fc
	jmp	humidretp30
	sub	a,#2
	b0bts1	fc
	jmp	humidretp39
	jmp	humidretp35
humidretp30:
	mov	a,humid_dis_i
	sub	a,humid_dis_iold
	sub	a,#2
	b0bts1	fc
	jmp	humidretp39
humidretp35:
	mov	a,humidcount
	sub	a,#6
	b0bts0	fc
	jmp	humidretp39
	incms	humidcount
	nop
	mov	a,humid_dis_iold
	mov	humid_dis_i,a
	mov	a,humid_dis_dold
	mov	humid_dis_d,a
	jmp	humidretp40
humidretp39:
	clr	humidcount
humidretp40:

	b0mov	y,#lcdstable$m
	b0mov	z,#lcdstable$l
	swap	humid_dis_i
	and	a,#0fh
	add	z,a
	movc
	mov	seg7,a
	mov	a,r
	or	a,#10000000b
	mov	seg8,a
	b0mov	y,#lcdstable$m
	b0mov	z,#lcdstable$l
	mov	a,humid_dis_i
	and	a,#0fh
	add	z,a
	movc
	mov	seg9,a
	mov	a,r
	or	a,#10000000b
	mov	seg10,a
	b0mov	y,#lcdstable$m
	b0mov	z,#lcdstable$l
	mov	a,humid_dis_d
	and	a,#0fh
	add	z,a
	movc
	mov	seg11,a
	mov	a,r
	or	a,#10000000b
	mov	seg12,a
	mov	a,humid_dis_i
	mov	humid_dis_iold,a
	mov	a,humid_dis_d
	mov	humid_dis_dold,a
	b0bts1	startdisflag
	jmp	humidretp80
	b0bset	humidfirflag
humidretp80:
	b0bset	startdisflag
humidretp90:
	ret



;*********************************************************************************
;NAME:			DIV_HEX2B
;INPUT:			被除数放在R1,R0(R1R0)中,除数放在R3,R2(R3R2)中
;FUNCTION:		二进制双字节除法
;DESCRIBE:		(R7R6.R5R4)=(R1R0)÷(R3R2)
;			选取:DIV_HEX2B_KEY 	EQU 	1
;CALL SUBPROGRAM:	CPL_FC
;USING RESOURCE:	A,R0~R7,WK00
;STACK NEED:		1
;OUTPUT:		商的整数放在R7、R6中,商的小数放在R5,R4中(R7R6.R5R4)
;ROM SIZE:		65+(6) BYTE
;*****************************************************************
DIV_HEX2B:
	MOV	A,#0
	B0MOV	R7,A
	B0MOV	R6,A
	B0MOV	R5,A
	B0MOV	R4,A
	OR	A,R2
	OR	A,R3
	B0BTS0	FZ			;If acc==0,then FZ=1
	RET				;Acc=0
	
DIV_HEX2B10:				;整数部分求解
	MOV_	WK00,#16
	B0BCLR	FC
DIV_HEX2B20:	
	RLCM	R0
	RLCM	R1	
	
	RLCM	R6
	RLCM	R7
		
	;CPL_F	FC			;注意CY标志位
;	CALL	CPL_FC			;MODIFY BY CHENZG IN 04/05/09
	MOV	A,R6
;	Sbc	A,R2
	Sub	A,R2
	B0MOV	R6,A
	MOV	A,R7
	SBC	A,R3	
	B0MOV	R7,A
	
	B0BTS0	FC
	JMP	DIV_HEX2B30		;CY==1
	MOV	A,R2			;CY==0
	ADd	R6,A
	MOV	A,R3
	ADC	R7,A
	;CPL_F	FC			;MODIFY BY CHENZG IN 04/05/09
	CALL	CPL_FC
;	b0bclr	fc
DIV_HEX2B30:	
	DJNZ	WK00,DIV_HEX2B20
	B0MOV	A,R0
	B0XCH	A,R6
	B0MOV	R0,A
	
	B0MOV	A,R1
	B0XCH	A,R7
	B0MOV	R1,A
	
	RLCM	R6			;INT PART
	RLCM	R7	
;---------------------------------------------------------------------------------	
	MOV_	WK00,#16
DIV_HEX2B40:				;小数部分求解
	RLCM	R4
	RLCM	R5
	
	RLCM	R0
	RLCM	R1
	
	;CPL_F	FC			;注意CY标志位
;	CALL	CPL_FC			;MODIFY BY CHENZG IN 04/05/09
	B0MOV	A,R0
	Sub	A,R2	
	B0MOV	R0,A
	B0MOV	A,R1
	SBC	A,R3	
	B0MOV	R1,A
	
	B0BTS0	FC
	JMP	DIV_HEX2B50		;CY==1
	B0MOV	A,R2			;CY==0
	ADD	R0,A
	B0MOV	A,R3
	ADC	R1,A
	b0bclr	fc
	;CPL_F	FC
;	CALL	CPL_FC			;MODIFY BY CHENZG IN 04/05/09
DIV_HEX2B50:
	DJNZ	WK00,DIV_HEX2B40
	RLCM	R4			;DOT PART
	RLCM	R5
	RET

;*********************************************************************************
;NAME:			CPL_FC
;INPUT:			FC
;FUNCTION:		FC=/FC
;DESCRIBE:		NONE
;CALL SUBPROGRAM:	NONE
;USING RESOURCE:	FC
;STACK NEED:		0
;OUTPUT:		/FC
;*********************************************************************************	
CPL_FC:
	BTS0	FC
	JMP	CPL_FC30
	BSET	FC
	JMP	CPL_FC90
CPL_FC30:
	BCLR	FC
CPL_FC90:
	RET
;*********************************************************************************
;NAME:			CHA_HEX1BTOBCD
;INPUT:			R0(HEX)
;FUNCTION:		单字节十六进制数转换为BCD
;DESCRIBE:		(R0)hex->(R1R2)bcd
;			选取:CHA_HEX1BTOBCD_KEY 	EQU 	1
;CALL SUBPROGRAM:	NONE
;USING RESOURCE:	A,R0,R1,R2
;STACK NEED:		0
;OUTPUT:		R1(空位,百位),R2(十位,个位)
;*********************************************************************************
CHA_HEX1BTOBCD:
	CLR	R1
	CLR	R2
BCD1B10:
	MOV	A,R0
	SUB	A,#100
	B0BTS1	FC
	JMP	BCD1B20
	MOV	R0,A
	INCMS	R1
	NOP
	JMP	BCD1B10
BCD1B20:
BCD1B30:
	MOV	A,R0
	SUB	A,#10
	B0BTS1	FC
	JMP	BCD1B40
	MOV	R0,A
	INCMS	R2
	nop
	JMP	BCD1B30	
BCD1B40:
	SWAPM	R2
	MOV	A,R0
	OR	R2,A
BCD1B90:
	RET

;*********************************************************************************
;NAME:			CHA_HEXD1BTOBCD
;INPUT:			R2(HEX)
;FUNCTION:		十六进制数小数转换为BCD小数
;DESCRIBE:		(.R2)hex->(.R2)bcd
;			选取:CHA_HEXD2BTOBCD_KEY 	EQU 	1
;			快速乘法(ROM较多): FAST_CALCULATE  EQU	1
;CALL SUBPROGRAM:	NONE
;USING RESOURCE:	A,R0~R7,R,WK00,WK01,Y,Z
;STACK NEED:		0
;OUTPUT:		压缩BCD:R2(十分位,百分位)
;**********************************************************

CHA_HEXD1BTOBCD:
	MOV_	R0,#9
	MOV_	WK00,R2			;L
	CLR	R
CHA_HEXD1BTOBCD30:
	B0MOV	A,WK00
	ADD	R2,A
	MOV	A,#00
	ADC	R,A
	DJNZ	R0,CHA_HEXD1BTOBCD30
	MOV	A,R
	mov	r2,a
CHA_HEXD1BTOBCD90:
	RET
;*****************************************************	
;去最大最小值
;比较块的首址ww0,ww1,比较次数temp9,temp5,求和结果放temp1,temp0(l)
;min:temp0,temp1
;max:temp2,temp3
givemm:
	@rst_wdt
	mov	a,temp9
	mov	temp5,a
	mov	a,ww0
	mov	y,a
	mov	a,ww1
	mov	z,a
	mov	r6,a
	mov	r7,a
	mov	a,@yz
	mov	temp2,a
	mov	temp0,a
	incms	z
	jmp	givemm400
	incms	y
	nop
givemm400:
	mov	a,@yz
	mov	temp3,a
	mov	temp1,a
givemmlop:	
	incms	z
	jmp	givemm420
	incms	y
	nop
givemm420:
	mov	a,@yz	
	mov	WK00,a
	incms	z
	jmp	givemm430
	incms	y
	nop
givemm430:
	mov	a,@yz	
	mov	WK01,a
	
	mov	a,WK00
	sub	a,temp2
	mov	a,WK01
	sbc	a,temp3
	b0bts1	fc
	jmp	givemm460	
givemm450:
	decs	z
	nop
	mov	r6,a
	MOV_	temp3,WK01		;保存最大值
	MOV_	temp2,WK00
;----------------------------------------------------------
givemm460:
	mov	a,WK00
	sub	a,temp0
	mov	a,WK01
	sbc	a,temp1
	b0bts0	fc
	jmp	givemm485	
givemm480:
	decs	z
	nop
	mov	r7,a
	MOV_	temp1,WK01		;保存最小值
	MOV_	temp0,WK00
givemm485:
	decms	temp9
	jmp	givemmlop
	b0mov	y,#00h
	mov	a,r6
	b0mov	z,a
	clr	@yz
	incms	z
	nop
	clr	@yz	
	mov	a,r7
	b0mov	z,a
	clr	@yz
	incms	z
	nop
	clr	@yz
	mov	a,ww0
	mov	y,a
	mov	a,ww1
	mov	z,a
	mov	a,@yz
	mov	temp0,a
	incms	z
	nop
	mov	a,@yz
	mov	temp1,a
sumlop:
	incms	z
	nop
	mov	a,@yz
	add	temp0,a
	incms	z
	nop
	mov	a,@yz
	adc	temp1,a	
	decms	temp5
	jmp	sumlop
		
givemm90:
	ret


RxTable:

	dw	022bh;	02bbh		;0~10
	dw	021bh;	029eh
	dw	0212h;	0282h		;2
	dw	0203h;	0267h
	dw	01f9h;	024eh
	dw	01ddh;	0235h		;5
	dw	01d5h;	021eh
	dw	01cah;	0208h
	dw	01beh;	01f2h		;8
	dw	01a9h;	01deh
	dw	01a1h;	01cbh		;10
	

	dw	018eh;	01b9h		;11~20
	dw	017eh;	01a7h
	dw	0172h;	0197h
	dw	0162h;	0187h		;14
	dw	015ah;	0177h
	dw	014fh;	0169h
	dw	0147h;	015bh		;17
	dw	013fh;	014eh
	dw	0136h;	0141h
	dw	012ah;	0135h		;20
	
	dw	0120h;	0129h		;21~30
	dw	0114h;	011eh		;22
	dw	010dh;	0113h		;23
	dw	0107h;	0109h
	dw	00fch;	0100h		;25
	dw	00f5h;	00f5h
	dw	00efh;	00ech
	dw	00e4h;	00e4h		;28
	dw	00d9h;	00dbh
	dw	00d3h;	00d3h

	dw	00cdh;	00cch		;31~40
	dw	00c6h;	00c9h
	dw	00bfh;	00c0h
	dw	00b9h;	00bdh		;34
	dw	00b4h;	00b8h
	dw	00afh;	00b1h	
	dw	00a9h;	00a9h		;37
	dw	00a3h;	00a4h
	dw	009eh;	0099h
	dw	0099h;	0094h		;40

	dw	0094h;	008fh		;41
	dw	0088h;	008ah
;***********************************************
lcdwtable:			;abcfged
	dw	0e0b0h		;0
	dw	6000h		;1	;00a0h
	dw	0c070h		;2
	dw	0e050h		;3
	dw	60c0h		;4
	dw	0a0d0h		;5
	dw	0a0f0h		;6
	dw	0e000h		;7
	dw	0e0f0h		;8
	dw	0e0d0h		;9	
;***********************************************
lcdstable:			;cbadegf
	dw	70d0h		;0
	dw	6000h		;1	;0050h
	dw	30e0h		;2
	dw	70a0h		;3
	dw	6030h		;4
	dw	50b0h		;5
	dw	50f0h		;6
	dw	7000h		;7
	dw	70f0h		;8
	dw	70b0h		;9

⌨️ 快捷键说明

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