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

📄 md-fan.asm

📁 美的风扇的源码
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;************************************************************************
;************************************************************************
		R0	EQU	[00H]			; System Register Definition
		MP	EQU	[01H]
		ACC	EQU	[05H]
		PCL	EQU	[06H]
		TBLP	EQU	[07H]
		TBLH	EQU	[08H]
		WDTS	EQU	[09H]
		STATUS	EQU	[0AH]
		INTC	EQU	[0BH]
		TMR	EQU	[0DH]
		TMRC	EQU	[0EH]
		PA	EQU	[12H]
		PAC	EQU	[13H]
		PB	EQU	[14H]
		PBC	EQU	[15H]
		PC	EQU	[16H]
		PCC	EQU	[17H]
		EMI	EQU	INTC.0
		EIF	EQU	INTC.4
		TF	EQU	INTC.5
		C	EQU	STATUS.0
		Z	EQU	STATUS.2
		TON	EQU	TMRC.4
;----------------------------------------------------
		BUZ		EQU	PC.1		; I/O Port Definition
		OUT_LOW		EQU	PB.4
		OUT_MID		EQU	PA.3
		OUT_HIG		EQU	PA.2
		OUT_SW		EQU	PA.1
		OUT_ION		EQU	PA.0
		OUT_FAN		EQU	PB.3
		HEAT_LOW	EQU	PC.0
		HEAT_HIG	EQU	PB.2
		LED_COM1	EQU	PB.1
		LED_COM2	EQU	PB.5
		LED_COM3	EQU	PC.2
		LED_COM4	EQU	PA.4
		LED_SEG1	EQU	PA.7
		LED_SEG2	EQU	PA.6
		LED_SEG3	EQU	PA.5
		LED_SEG4	EQU	PB.7
		LED_SEG5	EQU	PB.0
		LED_SEG6	EQU	PB.6
;-----------------------------------------------------
		ACC_BUF		EQU	[40H]		; 
		PFLAG_BUF	EQU	[41H]
		SPEED		EQU	[44H]		; 风速变量
		HEAT		EQU	[45H]		; 加热变量
		TIME		EQU	[46H]		; 定时变量
		SWING		EQU	[47H]		; 摆头变量
		RESETA		EQU	[48H]
		T2MS_TIMER	EQU	[49H]
		T4MS_TIMER	EQU	[4AH]		; 4ms定时变量
		T1SEC_TIMER	EQU	[4BH]		; 1s 定时变量
		T1SEC_TIMER1	EQU	[4CH]		; 1s 定时变量1
		T1SEC_TIMER2	EQU	[4DH]		; 1s 定时变量2
		T1SEC_TIMER3	EQU	[4EH]		; 1s 定时变量3
		T_SEC		EQU	[4FH]		; 秒变量
		T_SEC1		EQU	[50H]		; 秒变量1
		T_SEC2		EQU	[51H]		; 秒变量2
		T_SEC3		EQU	[52H]		; 秒变量3
		T_MIN		EQU	[53H]		; 分变量
		T_MIN2		EQU	[54H]		; 分变量2
		STEP		EQU	[55H]
		RESETB		EQU	[56H]
		TN		EQU	[58H]		; 遥控脉宽计数变量(125us)
		T_RESET 	EQU	[59H]		; 两次有效遥控信号时间间隔
		CODE0		EQU	[5BH]		; 遥控码暂存变量
		CODE1		EQU	[5CH]
		CODE2		EQU	[5DH]
		BITNUM		EQU	[5EH]		; 遥控码位数变量
		RESETC		EQU	[5FH]
		LEDN		EQU	[60H]
		BUZ_NUM		EQU	[61H]
		T_BUZ1		EQU	[62H]
		T_BUZ2		EQU	[63H]
		BUZ_COUNT	EQU	[64H]
		RESETD		EQU	[65H]
		FLAG1		EQU	[66H]
		FLAG2		EQU	[67H]
		FLAG3		EQU	[68H]
		T_ZERO1		EQU	[69H]		; 过零信号高电平时间变量
		T_ZERO2		EQU	[6AH]		; 过零信号低电平时间变量
		RESETE		EQU	[6BH]
		KEY_DELAY1	EQU	[6CH]		; 按键去抖时间变量
		KEY_DELAY2	EQU	[6DH]		; 按键释放时间变量
		KEY_VALUE	EQU	[6EH]
		KEY_VALUE0	EQU	[6FH]
		RESETF		EQU	[75H]
		CODE3		EQU	[76H]
		CODE4		EQU	[77H]
		REMOTE_NUM	EQU	[78H]
		T_REMOTE2	EQU	[79H]
		TESTA		EQU	[7AH]
		TESTB		EQU	[7BH]
		TESTC		EQU	[7CH]
		ION		EQU	[7DH]
		FAN_DELAY	EQU	[7EH]
;---------------------------------------------------
		F_ONOFF		EQU	FLAG1.0		; BIT FLAG
		F_OUTPUT	EQU	FLAG1.2
		F_LIGHT		EQU	FLAG1.4
		F_ION		EQU	FLAG1.6
		F_BUZ		EQU	FLAG2.0
		F_REMOTE	EQU	FLAG2.2
		F_ONKEY		EQU	FLAG2.4
		F_T2MS		EQU	FLAG3.1
		F_NOPOWER	EQU	FLAG3.2
		F_RISE_YK	EQU	FLAG3.3
		F_YK_FIRST	EQU	FLAG3.4
		F_YK_SECOND	EQU	FLAG3.5
		F_TEST		EQU	FLAG3.6
		F_OUTPUT1	EQU	FLAG3.7
;*****************************************
		ORG	000H
   		JMP	RESET
   		NOP
   		NOP
   		JMP	RESET
		ORG	004H
		RETI
		NOP
		NOP
		JMP	RESET
;*********************************************
		ORG	008H				; 定时中断程序(125us)
TIMER:		MOV	ACC_BUF,	A		; 现场保护
		MOV	A,		STATUS
		MOV	PFLAG_BUF,	A
		MOV	A,		80H
		MOV	TMR,		A
		MOV	A,		91H
		MOV	TMRC,		A
;------------------- BUZZER ---------------------
		SZ	F_BUZ
		JMP	BUZZ
		CLR	BUZ
		JMP	END_BUZZ
BUZZ:		INC	BUZ_NUM
		SNZ	BUZ_NUM.0
		CLR	BUZ
		SZ	BUZ_NUM.0
		SET	BUZ
END_BUZZ:
;------------------- ZERO -----------------------
		;SNZ	ZERO
		JMP	NPLUSE
PPLUSE:		CLR	T_ZERO1				; 正半周
		JMP	ENDPLUSE
NPLUSE:		CLR	T_ZERO2				; 负半周
ENDPLUSE:
;---------------------------------------------------

;---------------------------------------------------
TIMER0:		INC	TN
		INC	T2MS_TIMER			; 2ms定时
		MOV	A,		T2MS_TIMER
		SUB	A,		10H
		SNZ	C
		JMP	ENDTINT

		CLR	T2MS_TIMER
		SET	F_T2MS
ENDTINT:
		MOV	A,		PFLAG_BUF	; 现场恢复
		MOV	STATUS,		A
		MOV	A,		ACC_BUF
		RETI
;********************************************
RESET:		CLR	EMI
		CLR	PAC				; 端口设置及初始化
		CLR	PBC
		CLR	PCC
		MOV	A,		1FH
		MOV	PA,		A
		MOV	A,		3EH
		MOV	PB,		A
		MOV	A,		0FDH
		MOV	PC,		A
		MOV	A,		0BH		; 开看门狗
		MOV	WDTS,		A
		MOV	A,		80H
		MOV	TMR,		A
		MOV	A,		91H
		MOV	TMRC,		A
		JMP	RESETJUD

LOOP0:		MOV	A,		5H
		MOV	INTC,		A
		MOV	A,		5AH
		MOV	RESETA,		A
		MOV	RESETD,		A
		MOV	A,		0A5H
		MOV	RESETB,		A
		MOV	RESETE,		A
		MOV	A,		69H
		MOV	RESETC,		A
		MOV	RESETF,		A
		MOV	A,		30
		MOV	FAN_DELAY,	A
	
;******************************************************
MAIN_LOOP:	CLR	WDT1
		SZ	F_T2MS
		CALL	TIMER_2MS
		;SNZ	REMOTE
		;JMP	REMOTE_RECEIVE
MAIN_LOOP0:	;SZ	F_REMOTE
		;JMP	SCANREMOTE
MAIN_LOOP1:	MOV	A,		RESETA
		XOR	A,		5AH
		SNZ	Z
		JMP	RESET
		MOV	A,		RESETD
		XOR	A,		5AH
		SNZ	Z
		JMP	RESET
		MOV	A,		RESETB
		XOR	A,		0A5H
		SNZ	Z
		JMP	RESET
		MOV	A,		RESETE
		XOR	A,		0A5H
		SNZ	Z
		JMP	RESET
		MOV	A,		RESETC
		XOR	A,		69H
		SNZ	Z
		JMP	RESET
		MOV	A,		RESETF
		XOR	A,		69H
		SNZ	Z
		JMP	RESET
		SZ	F_NOPOWER
		JMP	MAIN_LOOP2
		SZ	F_ONOFF
		JMP	WORK
MAIN_LOOP2:	SET	OUT_HIG
		SET	OUT_MID
		SET	OUT_LOW
		SET	OUT_SW
		SET	OUT_ION
		SET	HEAT_LOW
		SET	HEAT_HIG
		MOV	A,		FAN_DELAY
		SUB	A,		10
		SZ	C
		SET	OUT_FAN
		JMP	MAIN_LOOP
		NOP
		NOP
		NOP
		NOP
		NOP
		JMP	RESET
;****************************************************
WORK:		MOV	A,		SPEED
		SUB	A,		1
		SNZ	C
		JMP	OFFN
		MOV	A,		T_SEC3
		SUB	A,		3
		SZ	C
		JMP	WORK1
WORK0:		SET	OUT_HIG
		SET	OUT_LOW
		CLR	OUT_MID
		JMP	WORKING
WORK1:
NORMAL:		MOV	A,		SPEED
		ADDM	A,		PCL
		JMP	OFFN
		JMP	SPN1
		JMP	SPN2
		JMP	SPN3

OFFN:		SET	OUT_HIG			; 停止
		SET	OUT_MID
		SET	OUT_LOW
		JMP	WORKING

SPN1:		SET	OUT_HIG			; 低风
		SET	OUT_MID
		SZ	F_OUTPUT
		CLR	OUT_LOW
		JMP	WORKING
	
SPN2:		SET	OUT_HIG			; 中风
		SET	OUT_LOW
		SZ	F_OUTPUT
		CLR	OUT_MID
		JMP	WORKING
	
SPN3:		SET	OUT_MID			; 强风
		SET	OUT_LOW
		SZ	F_OUTPUT
		CLR	OUT_HIG
		JMP	WORKING

WORKING:
		SNZ	SWING.0
		SET	OUT_SW
		SZ	SWING.0
		CLR	OUT_SW
		MOV	A,		HEAT
		XOR	A,		0
		SNZ	Z
		JMP	WORKING1
		SET	OUT_ION		
		SET	HEAT_LOW
		SET	HEAT_HIG
		MOV	A,		FAN_DELAY
		SUB	A,		10
		SZ	C
		SET	OUT_FAN
		JMP	MAIN_LOOP
WORKING1:	SNZ	ION.0
		SET	OUT_ION
		SZ	ION.0
		CLR	OUT_ION
		MOV	A,		HEAT
		ADDM	A,		PCL
		JMP	ENDWORK
		JMP	HEAT1
		JMP	HEAT2
		JMP	HEAT3
HEAT1:		SET	HEAT_LOW
		SET	HEAT_HIG
		CLR	OUT_FAN
		JMP	ENDWORK
HEAT2:		SET	HEAT_HIG
		CLR	OUT_FAN
		CLR	FAN_DELAY
		SZ	F_OUTPUT1
		CLR	HEAT_LOW
		JMP	ENDWORK
HEAT3:		SET	HEAT_LOW
		CLR	OUT_FAN
		CLR	FAN_DELAY
		SZ	F_OUTPUT1
		CLR	HEAT_HIG
		JMP	ENDWORK		
ENDWORK:	JMP	MAIN_LOOP
		NOP
		NOP
		NOP
		NOP
		NOP
		JMP	RESET
;****************************************************
;****************************************************
TIMER_2MS:
		CLR	F_T2MS
		INC	T4MS_TIMER
		SNZ	T4MS_TIMER.0
		JMP	DISPLAY
		JMP	TIMER_PRO
TIMER_4MS:
;-------------------ZERO PROCESS ----------------
ZERO_PRO:	INC	T_ZERO1
		INC	T_ZERO2
		CLR	F_NOPOWER
		MOV	A,		T_ZERO1
		SUB	A,		12
		SZ	C
		SET	F_NOPOWER			; NO ZERO OVER 50ms SHUTOFF OUTPUT
		MOV	A,		T_ZERO2
		SUB	A,		12
		SZ	C
		SET	F_NOPOWER			; NO ZERO OVER 50ms SHUTOFF OUTPUT
		MOV	A,		T_ZERO1
		SUB	A,		80
		SZ	C
		JMP	OVER320MS
		MOV	A,		T_ZERO2
		SUB	A,		80
		SNZ	C
		JMP	END_ZERO_PRO
OVER320MS:	CLR	F_ONOFF				; NO ZERO OVER 320ms RESET SYSTEM
		CLR	RESETA
		CLR	RESETB
		CLR	RESETC
		CLR	RESETD
		CLR	RESETE
		CLR	RESETF
END_ZERO_PRO:
;-------------------- TIMER -----------------------
TIMER_PRO:	SNZ	F_ONOFF
		JMP	NNE
TIMER_3SEC:	INC	T1SEC_TIMER3
		MOV	A,		T1SEC_TIMER3
		SUB	A,		250
		SNZ	C
		JMP	T0
		CLR	T1SEC_TIMER3
		MOV	A,		T_SEC3
		SUB	A,		10
		SNZ	C
		INC	T_SEC3
T0:		INC	T1SEC_TIMER
		MOV	A,		T1SEC_TIMER
		SUB	A,		250
		SNZ	C
		JMP	T1
							; 1秒定时
		CLR	T1SEC_TIMER
		INC	T_SEC
		MOV	A,		T_SEC
		SUB	A,		60
		SNZ	C
		JMP	T1
							; 分定时
		CLR	T_SEC
		INC	T_MIN
WTMJUD:		MOV	A,		TIME
		XOR	A,		0H
		SZ	Z
		JMP	T1	
		MOV	A,		TIME
		SUB	A,		3
		SZ	C
		JMP	TIME4H
		MOV	A,		T_MIN
		SUB	A,		60
		SNZ	C
		JMP	T1
		CLR	T_MIN
		DEC	TIME
		MOV	A,		TIME
		XOR	A,		0H
		SNZ	Z
		JMP	T1
WTM_STOP:	CLR	F_ONOFF
		CLR	TIME
		JMP	T1
TIME4H:		MOV	A,		T_MIN
		SUB	A,		120
		SNZ	C
		JMP	T1
		CLR	T_MIN
		DEC	TIME
		JMP	T1	
T1:		INC	T1SEC_TIMER1
		MOV	A,		T1SEC_TIMER1
		SUB	A,		12
		SZ	C
		SET	F_OUTPUT
		MOV	A,		T1SEC_TIMER1
		SUB	A,		120
		SZ	C
		SET	F_OUTPUT1
		MOV	A,		T1SEC_TIMER1
		SUB	A,		250
		SNZ	C
		JMP	NNE

		CLR	T1SEC_TIMER1
		CLR	F_OUTPUT
		CLR	F_OUTPUT1
		INC	T_SEC1
		MOV	A,		T_SEC1
		SUB	A,		3
		SNZ	C
		JMP	T2
		CLR	T_SEC1
		INC	STEP
		MOV	A,		STEP
		SUB	A,		30
		SZ	C
		CLR	STEP
T2:		
		INC	T_SEC2
		MOV	A,		T_SEC2
		SUB	A,		60
		SNZ	C
		JMP	NNE

		CLR	T_SEC2
		
;---------------------------------------------------	
NNE:		INC	T1SEC_TIMER2
		MOV	A,		T1SEC_TIMER2
		SUB	A,		250
		SNZ	C
		JMP	NNE1
		CLR	T1SEC_TIMER2
		MOV	A,		FAN_DELAY
		SUB	A,		40
		SNZ	C
		INC	FAN_DELAY
NNE1:
		CLR	WDT2
		MOV	A,	TESTA
		SUB	A,	200
		SNZ	C
		INC	TESTA	
		MOV	A,		T_RESET
		SUB	A,		200
		SZ	C
		JMP     BUZ_TIMER
                INC     T_RESET
                MOV     A,              T_RESET
                SUB     A,              200
                SNZ     C
                JMP     BUZ_TIMER 
                MOV	A,		30
		MOV	T_BUZ1,		A
		CLR	BUZ_COUNT
  		CLR	T_BUZ2
		SET	F_BUZ              
                		
BUZ_TIMER:	MOV	A,		T_BUZ1
		SUB	A,		1
		SNZ	C
		JMP	BUZ_TIMER1
		DEC	T_BUZ1
		JMP	END_BUZ_TIMER
BUZ_TIMER1:	CLR	F_BUZ
		INC	T_BUZ2
		MOV	A,		T_BUZ2
		SUB	A,		15
		SNZ	C
		JMP	END_BUZ_TIMER
		CLR	T_BUZ2
		MOV	A,		BUZ_COUNT
		SUB	A,		1
		SNZ	C
		JMP	END_BUZ_TIMER
		DEC	BUZ_COUNT
		MOV	A,		30
		MOV	T_BUZ1,		A
		SET	F_BUZ
END_BUZ_TIMER:
TEST_BUZ:	SNZ	F_TEST
		JMP	DISPLAY		
		INC	TESTC
		MOV	A,	TESTC
		SUB	A,	125
		SNZ	C
		JMP	DISPLAY
		CLR	TESTC
		MOV	A,		30
		MOV	T_BUZ1,		A
		SET	F_BUZ
;-------------------- DISPLAY -------------------------------
DISPLAY:	INC	LEDN
		MOV	A,		LEDN
		SUB	A,		6
		SNZ	C
		JMP	LED
		CLR	LEDN
		;SNZ	F_REMOTE
		JMP	KEY
LED:		CLR	PAC
		CLR	PBC
		CLR	PCC	
		SET	LED_COM1
		SET	LED_COM2
		SET	LED_COM3
		SET	LED_COM4
		CLR	LED_SEG1
		CLR	LED_SEG2
		CLR	LED_SEG3
		CLR	LED_SEG4
		CLR	LED_SEG5
		CLR	LED_SEG6
		;SET	OUT_LIGHT

⌨️ 快捷键说明

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