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

📄 idwracrmt.asm

📁 空调控制程序,MCU 采用NEC D789189
💻 ASM
字号:
;************************************************************************
; 	TITLE:          LT0333MOD.ASM
;	VERSION:	1.0
;	DATE:		2003.07.23
; 	AUTHOR:         Gilbert.Huang
; 	DESCRIPTION:    GOODMAN
;
;	Chip type:	NECuPD78F9188
; 	ROM SIZE:	16K  BYTES
; 	RAM SIZE:	384 BYTES
; 	EEPROM SIZE:	256 BYTES
; 	CRYSTAL:	4.19MHz
; 	I/O PORT:	26  PINS
; 	PACKAGE:	DIP32
;************************************************************************
;	NAME	REMOTE

;************************************************************************
;*	Module Name:	Remote						*
;*	Function:	Reveive the remote coede			*
;*	Input:								*
;*	Output:		f_RMTend,D_RMTdat				*
;*	Break:								*
;*	stack:								*
;************************************************************************
;	History:
;
;------------------------------------------------------------------------
; 	$include 	(LT0333sym.INC)
;	$include	(LT0333RAM.INC)
;	CSEG
;	EXTRN		BEEP1tms
;	EXTRN		ON2OFF
;	
;	PUBLIC		RMTdec

;================================
;        REMOTE PROGRAM
;================================
INTP0:		          ;
	EI
	PUSH    HL
	PUSH    AX
	PUSH	BC
	PUSH	DE
;	MOV     A,#01H
INTPWAIT:			;WAIT 100us
;	INC     A
;	CMP     A,#10H
;	BNZ     $INTPWAIT
INTP0_1:
	CALL	!BAKtm20
	MOV	C_REVovr,#n_5msTM8	;reset the over counter
	CMP     MODEP,#01H
	BZ      $LEADA	  ;MODEP=1?
	CMP     MODEP,#02H
	BZ      $LEADB	  ;MODEP=2?
	CMP     MODEP,#03H
	BZ      $DATACD	  ;MODEP=3?
	BR      LEADA5		;ERROR
LEADA:
	BT      i_RMT,$LEADA3
	BR      INTP0RT
LEADA3:		          ;

	MOVW    AX,REGTM20
	SUBW    AX,#40;10H
	BC      $LEADA5
	MOVW    AX,REGTM20
	SUBW     AX,#460;104
	BNC     $LEADA5	  	;RECEIVE ERROR
	MOV     MODEP,#02H

	MOV     INTM0,#40H	;falling edge
	BR      INTP0RT
LEADA5:
	CLR1	f_RMTend
	mov	a,MODEP
;	MOV	D_TMRon,A	;debug del it
	MOV     MODEP,#00H
	SET1    PMK0
	BR      INTP0RT
LEADB:
	BT      i_RMT,$LEADB8	  ;INTP0RT	  ;
	MOVW    AX,REGTM20
	SUBW    AX,#n_4_5msT2-70;;50
	BC      $LEADA5
	MOVW    AX,REGTM20
	SUBW    AX,#n_4_5msT2+50
	BC      $INITWORK
	BR     $LEADA5
;	MOV     MODEP,#03H
;	MOV     INTM0,#00H	;falling	edge
;	MOV     INTM0,#40H	  ;RISING EDGE
	BR      INTP0RT
INITWORK:
	CLR1	f_RMTy902
	MOV     D_RMTbuf+4,#00H		 ;
	MOV     D_RMTbuf+3,#00H
	MOV     D_RMTbuf+2,#00H
	MOV     D_RMTbuf+1,#00H
	MOV     D_RMTbuf+0,#00H
	MOV     MODEP,#03H
  	SET1	D_RMTd4.2
LEADB8:
	BR      INTP0RT
DATACD:
	BT      i_RMT,$INTP0RT
;	BT	f_RMTend,$LEADA5
	MOVW    AX,REGTM20
	SUBW    AX,#n_112t2-25
	BC      $LEADA5	  	;error
	MOVW    AX,REGTM20
	SUBW    AX,#n_225T2+25
	BNC     $CHKsplit	;LEADA5	  	;error
	MOVW    AX,REGTM20
	SUBW    AX,#n_225T2-30	;25
	BNC     $DATACD5
	CLR1    CY
	BR      SHIFT
;------------------------------------------------------------------------
CHKsplit:
	MOVW    AX,REGTM20
	SUBW	AX,#n_4_5msT2-50
	BC	$LEADA5
	MOVW    AX,REGTM20
	SUBW    AX,#n_4_5msT2+50
	BNC	$LEADA5
SPLITcod:
	SET1	f_RMTy902
	SET1	D_RMTd0.7
	BR      INTP0RT
;------------------------------------------------------------------------
	

DATACD5:		          ;
	SET1    CY
SHIFT:
	call	!ROTrmt
	BNC	$INTP0RT		;Receive complete? No>jump
;	CALL	!CHKcode		;CHECK THE CUSTOMER CODE
;	BC	$LEADA5			;ERROR
	SET1    f_RMTok	;f_RMTend;	
	bt	f_RMTy902,$LEADA5
	set1	cy
	call	!ROTrmt
	BR	LEADA5

INTP0RT:
	POP	DE	        ;
	POP	BC
	POP     AX		;
	POP     HL
	EI			;
	NOP		  	;
	RETI

;===========================================
ROTrmt:
	MOVW	HL,#D_RMTbuf+4
	MOV	B,#5
SHIFT1:
	MOV     A,[HL]
	RORC    A,1
	MOV	[HL],A
	DECW	HL
	DBNZ	B,$SHIFT1
	ret
;================================
;       Timer count for remote
;	call in tm80
;================================
TMRremot:	         	;
	CMP     MODEP,#0H	;
	BNZ     $NOmodep0	;
	BT      i_RMT,$NOhead	;high>>no header receive
	INC     BTCT	  	;
	CMP     BTCT,#015	;
	BNZ     $TMRrmtRT	;
	MOV     MODEP,#01H	;
	CALL	!BAKtm20

        MOV	C_REVovr,#n_5msTM8
	MOV     INTM0,#01000100B;INTP0 RISING EDGE
	CLR1    PMK0	  	;enable INTP0
	BR      TMRrmtRT	  	;
NOmodep0:		        ;
	DEC	C_REVovr	;接收溢出计时
	BNZ     $TMRrmtRT
;	BF	f_RMTend,$INITrmt
;	SET1	f_RMTok
;	CLR1	f_RMTend
INITrmt:
	MOV	MODEP,#0	;初始化接收
NOhead:			        ;
	MOV     BTCT,#0H	;
	SET1	PMK0		;DISABLE INP0
TMRrmtRT:		        ;
        NOP
	RET

;************************************************************************
;*	Module Name:	BAKtm20						*
;*	Function:	Tm20-D_BAKt20->REGTM20;tm20->D_BAKt20		*
;*	Input:		tm20,D_BAKt20					*
;*	Output:		D_BAKt20,REGTM20				*
;*	Break:		AX,HL						*
;*	stack:								*
;************************************************************************
;	History:
;
;------------------------------------------------------------------------
BAKtm20:
	MOVW    AX,TM90
	MOVW	HL,AX

;	SUBW	AX,D_BAKt20
	XCH	A,X
	SUB	A,D_BAKt20
	XCH	A,X
	SUBC	A,D_BAKt20+1


	MOVW    REGTM20,AX
	MOVW	AX,HL
	MOVW	D_BAKt20,AX
        RET



;************************************************************************
;*	Module Name:							*
;*	Function:							*
;*	Input:								*
;*	Output:								*
;*	Break:								*
;*	stack:								*
;************************************************************************
;	History:
;
;------------------------------------------------------------------------
CHKcode:
	CMP	D_RMTbuf+4,#n_COMcod		;Check the customer code
	BNZ	$CHKfail				;NG

CHKcdOK:
	CLR1	CY
	RET
CHKfail:
	SET1	CY
	RET

;************************************************************************
;*	Module Name:	RMTdec						*
;*	Function:	remote receive data decode			*
;*	Input:		D_RMTdat					*
;*	Output:								*
;*	Break:								*
;*	stack:								*
;************************************************************************
;	History:
;
;------------------------------------------------------------------------
REMOTdec:
RMTdec:

	BT	f_RMTok,$$+4+1
	RET
	CLR1	f_RMTok
	
	BT	f_RMTy902,$RMTy902
	
;	CALL	!DEBUGdat

	CALL	!CHKcode		;CHECK THE CUSTOMER CODE RETURN A:0 SWING CODE,1 TIMER DATA,2 NORMAL DATA
	BNC	$$+2+1			;NO ERROR
	RET
	CALL	!NORcode
	ret
;
RMTy902:
	MOV	A,D_RMTd3
	cmp	A,#11010111b
	BEQ	custOK
	RET
custOK:
	CMP	C_RMTlock,#0
	BEQ	RMTaccept
	mov	C_RMTlock,#n_150ms3125
	ret
RMTaccept:
	mov	C_RMTlock,#n_150ms3125
	LD	A,D_RMTd4
	and	A,#0fh
	rol	A,1
	xch	A,x
	xor	A,A
	addw	AX,#T_KEYrmt
	MOVW	HL,ax
	mov	A,[hl]
	xch	A,X
	MOV	A,[HL+1]
	BR	AX
	
T_KEYrmt:
	dw	AUTOkey		;COOLkey	 ;0
	dw	KEYmoney	;HEATkey         ;1
	dw	KEYquick	;DRYkey          ;2
	dw	KEYsleep	;KEYtmr          ;3
	dw	MODEkey		;KEYup           ;4
	dw	KEYfansp	;KEYdown         ;5
	dw	KEYtmr		;noused          ;6
	dw	noused		;noused          ;7
	dw	KEYup		;FANhigh         ;8
	dw	KEYdown		;FANlow          ;9
	dw	KEYswing	;KEYswing        ;0a
	dw	KEYon		;KEYon           ;0b
	dw	noused		;noused          ;c
	dw	noused		;noused          ;d
	dw	noused		;noused          ;e
	dw	noused		;noused          ;f
	

AUTOkey:
	BT	f_PWRon,$$+4+1
	ret
	
	cmp	M_MODset,#n_Mauto
	BEQ	COOLkey1			;[HIS-006]
	MOV	M_MODset,#n_Mauto
;------------------------------------------------------------------------
;[HIS-011]		
	BF	f_COOLquick,$NOqcMOD
	CLR1	f_COOLquick			;
	mov	M_FANset,#n_FANhigh
	MOV	D_TMPset,#72+n_TMPdsp                                                                                                                               
	LD	D_TMPcset,#22+n_TMPdsp

	
NOqcMOD:	
;------------------------------------------------------------------------

	CLR1	f_MODmoney
	BR	modSET1	
MODEkey:
	BT	f_PWRon,$$+4+1
	ret
	bt	f_MODmoney,$AUTOkey		;[HIS-012]
	BT	f_COOLquick,$COOLkey
	inc	M_MODset
	mov	A,#n_Mheat
	BF	f_COOLonly,$$+4+1
	dec	A
	
	cmp	A,M_MODset
	BNC	$modSETrmt		
	mov	M_MODset,#n_Mcool
;------------------------------------------------------------------------
;[HIS-005]	
	mov	A,#n_FANhigh
	mov	M_FANset,A
	MOV	D_TMPset,#72+n_TMPdsp                                                                                                                               
	LD	D_TMPcset,#22+n_TMPdsp
;------------------------------------------------------------------------


modSETrmt:
;------------------------------------------------------------------------
;[HIS-008]
	cmp	M_MODset,#n_Mdry
	BEQ	DRYkey
	CMP	M_MODset,#n_Mfan
	BNE	noFANmKEY
	MOV	D_TMPset,#72+n_TMPdsp                                                                                                                               
	LD	D_TMPcset,#22+n_TMPdsp
	CLR1	f_SLEEP
noFANmKEY:

;------------------------------------------------------------------------
	
	call	!BEEP1tms
	MOV	C_RMT1s,#n_2s125
	ret
;------------------------------------------------------------------------
;[his-004]
COOLkey1:
;	MOV	A,#n_FANhigh
;	MOV	M_FANset,A
;	MOV	D_TMPset,#72+n_TMPdsp                                                                                                                               
;	LD	D_TMPcset,#22+n_TMPdsp
;	BR	COOLkey
;------------------------------------------------------------------------
COOLkey:
enCOOL:
	BT	f_PWRon,$$+4+1
	ret
	MOV	D_TMPset,#72+n_TMPdsp                                                                                                                               
	LD	D_TMPcset,#22+n_TMPdsp
	mov	M_FANset,#n_FANhigh
	CLR1	f_COOLquick
	MOV	A,#n_Mcool

	BR	modSET
HEATkey:
	BT	f_PWRon,$$+4+1
	ret
	bt	f_COOLonly,$noused
	MOV	A,#n_Mheat
	BR	modSET
DRYkey:
	BT	f_PWRon,$$+4+1
	ret	
;	CLR1	f_SLEEP	
	MOV	M_FANset,#n_FANlow
	MOV	A,#n_Mdry
modSET:
	mov	M_MODset,A
modSET1:	
	call	!BEEP1tms
	MOV	C_RMT1s,#n_2s125
	ret
;========================================================================
FANhigh:
	BT	f_PWRon,$$+4+1
	ret
	MOV	A,#n_FANhigh
	BR	fanSET

FANlow:
	BT	f_PWRon,$$+4+1
	ret
	MOV	A,#n_FANlow	
fanSET:
	MOV	M_FANset,A
	call	!BEEP1tms
	MOV	C_RMT1s,#n_2s125
	ret
;========================================================================
;========================================================================
noused:
	ret
;************************************************************************
;*	Module Name:							*
;*	Function:							*
;*	Input:								*
;*	Output:								*
;*	Break:								*
;*	stack:								*
;************************************************************************
;	History:
;
;------------------------------------------------------------------------
NORcode:


;------------------------------------------------------------------------
;	REMOTE MODE SET
;------------------------------------------------------------------------
RmodSET:
	MOV	A,D_RMTd0
	CALL	!RORA4
	AND	A,#7

	CMP	A,#n_Mheat
	BNE	NOheat
	BBC	f_COOLonly,NOheat
	RET
NOheat:	
	MOV	M_MODset,A	
ENDmodSET:
;------------------------------------------------------------------------
	CALL	!BEEP1tms

	SET1	f_SYSsave
	mov	C_RMT1s,#n_2s125
	CALL	!PWRset
	
	CALL	!SETtmr
	CALL	!RtmpSET				;TEMP SET	

	CALL	!RslpSET
	CALL	!RfanSET				;FAN SPEED SET
	CALL	!PWRsave	
	call	!Rswing

	ret
;------------------------------------------------------------------------






;************************************************************************
;************************************************************************
;------------------------------------------------------------------------
;	REMOTE power SET
;------------------------------------------------------------------------
PWRset:
	BT	D_RMTd0.7,$rmtPWRon
	BT	f_PWRon,$PWRswitchOFF
;------------------------------------------------------------------------
	RET
PWRswitchOFF:
	mov	C_RMT1s,#0
	CALL	!ON2OFF
	ret
rmtPWRon:
	BF	f_PWRon,$PWRsetON
	ret
PWRsetON:	
	mov	C_RMT1s,#0
	CALL	!OFF2ON
PWRsetRET:
	
	RET
;************************************************************************
;************************************************************************
SETtmr:
	BT	D_RMTd2.3,$RMTtmrSET
	CLR1	f_TMRset
	mov	D_TMRon,#0
	ret
	
RMTtmrSET:
	MOV	C_TMRmin,#n_1h1m-1	
	BT	D_RMTd2.0,$$+4+3
	MOV	C_TMRmin,#n_1h1m-1+30		;有0.5小时
	
	SET1	f_TMRset
	mov	A,D_RMTd2
	CALL	!RORA4
	and	A,#0fh
	BF	D_RMTd2.1,$$+4+3
	ADD	A,#10
	
	BF	D_RMTd2.2,$$+4+3
	ADD	A,#20
	
	MOV	D_TMRon,A
	mov	D_TMRset,A	
	
	ret
;************************************************************************
;	SUBroutine area

;------------------------------------------------------------------------
;	REMOTE SWING CHECK
;------------------------------------------------------------------------
Rswing:
	BT	f_PWRon,$$+4+1
	RET
	
	BT	D_RMTd1.2,$SETswg
rCLRswg:
	CLR1	f_SWGset
	RET
SETswg:

	SET1	f_SWGset
	RET
;------------------------------------------------------------------------
;	REMOTE FAN SPEED SET
;------------------------------------------------------------------------
RfanSET:

	MOV	A,D_RMTd1
	AND	A,#03H
	MOV	M_FANset,A
	RET
;------------------------------------------------------------------------
;	REMOTE TEMP SET
;------------------------------------------------------------------------
RtmpSET:
	BT	D_RMTd3.7,$RMTfDEG
	MOV	A,D_RMTd1
	CALL	!RORA4
	AND	A,#0FH

	ADD	A,#n_TMPdsp+16

	LD	D_TMPcset,A
	CALL	!degreeC2F
	LD	D_TMPset,A

	ret	

RMTfDEG:
	MOV	A,D_RMTd1
	CALL	!RORA4
	AND	A,#0FH
	BF	D_RMTd3.6,$$+4+2
	SET1	A.4
	

	ADD	A,#n_TMPdsp+60
	LD	D_TMPset,A
	CALL	!degreeF2C
	LD	D_TMPcset,A
	RET
	

;========================================================================
PWRsave:
	BT	f_GOODman,$NOpwrSAVE
	BF	D_RMTd3.3,$NOpwrSAVE
	cmp	M_MODset,#n_Mcool
	BNZ	$NOpwrSAVE

	SET1	f_MODmoney
	RET
NOpwrSAVE:
	CLR1	f_MODmoney
	ret
	
;------------------------------------------------------------------------
;	REMOTE SLEEP SET
;------------------------------------------------------------------------
RslpSET:
	BF	D_RMTd1.3,$CLRsleep2
	BF	f_PWRon,$CLRsleep1
	BF	f_SLEEP,$INITslp
	RET
CLRsleep1:
	BF	f_TMRon,$CLRsleep2		;定时开可设定睡眠
	BF	f_SLEEP,$INITslp
	RET
CLRsleep2:
	BT	f_SLEEP,$rCLRsleep

	RET
rCLRsleep:

	CLR1	f_SLEEP
	MOV	C_SLPstp,#0		;sleep set to 7 step. each step count to 8min
	MOV	C_SLP1h,#0		;count source 1min
	RET
INITslp:
	SET1	f_SLEEP
	MOV	C_SLPstp,#2		;sleep set to 7 step. each step count to 7min
	MOV	C_SLP1h,#n_1h1m		;count source 1min
RETsleep:	
	RET
;************************************************************************
;************************************************************************
RORA4:
	ROR	A,1
	ROR	A,1
	ROR	A,1
	ROR	A,1
	RET
	
	
;************************************************************************
;*	Module Name:							*
;*	Function:							*
;*	Input:								*
;*	Output:								*
;*	Break:								*
;*	stack:								*
;************************************************************************
;	History:
;
;------------------------------------------------------------------------
ADDcrc:
	MOV	A,#0
ADDloop:
	ADD	A,[HL]
	INCW	HL
	DBNZ	B,$ADDloop
	XOR	A,#0FFH
	RET
	
;	END
	

⌨️ 快捷键说明

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