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

📄 laohua.asm

📁 一个老化房温控器的程序
💻 ASM
📖 第 1 页 / 共 5 页
字号:
                CALL            !DRYM
                CALL            !DRY10M
                CALL            !DRY4M
                CALL			!DRY30S
                CALL            !AUTOFAN30S
MAINTRY1:
;                CALL            !REFRESHRAM
               
                CALL            !TIMERCHECK
                CALL            !DOG
MAIN4:          BF          TIMERF,$MAIN2
                CLR1        TIMERF
;                BBC         SVANEF,MAIN3
;;;                BT              TRYRUNF,$MAIN3_0
;                CALL        !DISVANE
;;;;                CALL            !DISPFAN
MAIN3:

MAIN2:          
;;;;;;;;		CALL            !VANEDO
;                CALL            !QJRDO
MAIN3_0:
                CALL            !DOG
;                CALL            !KEYSCAN_164
                BF          KEYSTAF,$REMOTE
                CLR1        KEYSTAF
                CALL        !ADKEYDEAL
;                CALL            !REFRESHRAM

REMOTE:         BF          RECENDF,$MAIN1
                CLR1        RECENDF
                CALL        !RECVDEAL
;                CALL            !REFRESHRAM

MAIN1:
;                CALL        !KEYSCAN
                CALL            !DOG
;                BT              TRYRUNF,$NOMAINPRO
                CALL        !MAINPRO
;                CALL            !REFRESHRAM
NOMAINPRO:
                CALL            !DOG
                
                CALL	!DISPTEMP
                
;                BBS         TRYRUNF,START0
;                BBC         LCDCHF,START0
                BF              DISERRF,$NODISCH
                CALL            !DISERR
                CALL            !DOG
NODISCH:
;;;;;                CALL            !WRITE_164
                CALL            !SLEEP
;                BF              SCANF,$START00
;                CLR1            SCANF                                   
;                CALL            !SCANLED
;                CLR1        LCDCHF

;                 CALL           !REFRESHRAM

                DI
                MOV             A,SEG1
                MOV             SEG11,A
                MOV             A,SEG2
                MOV             SEG22,A
                MOV             A,SEG3
                MOV             SEG33,A
                MOV             A,SEG4
                MOV             SEG44,A
                MOV             A,SEG5
                MOV             SEG55,A
                MOV             A,SEG6
                MOV             SEG66,A
                MOV             A,SEG7
                MOV             SEG77,A
                MOV             A,SEG8
                MOV             SEG88,A
                EI
START00:        BF		EEPROMERRF,$EEPROMNOERR
		BR		!EEPROM_3
EEPROMNOERR:		
		BT		EEPROM_READERRF,$EEPROM_4
		BT		EEPROM_ADDRCHF,$EEPROM_7
;判断标志位是否有改变,有改变则写入		
		MOVW		HL,#EEPROM_RAM
		MOVW		DE,#ATEMP
EEPROM_2:		
		MOV		A,[DE]
		CMP		A,[HL]
		BZ		$EEPROM_1
		SET1		EEPROM_WRITEERRF
		MOV		EEPROMBUF,#0H		
		MOV		[HL],A
EEPROM_1:		
		INC		L
		INC		E
		MOV		A,L
		CMP		A,#LOW EEPROM_RAM+12
		BNZ		$EEPROM_2
		BF		EEPROM_WRITEERRF,$EEPROM_4				
		CALL		!EEPROM_WRITE
		BT		EEPROM_WRITEERRF,$EEPROM_30		
		
;成功写入之后,开始读入并与写入的比较,判断写入是否正确,先备份写入的数据
		SET1		EEPROM_READERRF		
		MOVW		HL,#EEPROM_RAMBAK 
		MOVW		DE,#EEPROM_RAM 
EEPROM_5:		
		MOV		A,[DE]
		MOV		[HL],A
		INC		L
		INC		E
		MOV		A,E
		CMP		A,#LOW EEPROM_RAM+12
		BNZ		$EEPROM_5		
;开始读入刚写到EEPROM的数据		
EEPROM_4:	BF		EEPROM_READERRF,$EEPROM_3		
		CALL		!EEPROM_READ	
		BT		EEPROM_READERRF,$EEPROM_3
		MOVW		HL,#EEPROM_RAMBAK
		MOVW		DE,#EEPROM_RAM
EEPROM_6:		
		MOV		A,[DE]
		CMP		A,[HL]
		BNZ		$EEPROM_7
		INC		E
		INC		L
		MOV		A,E
		CMP		A,#LOW EEPROM_RAM+12
		BNZ		$EEPROM_6
EEPROM_30:	BR		!EEPROM_3			
;读入数据与刚写入的数据不同,则表明此块EEPROM区域已无用,必须重新更改写入地址
EEPROM_7:	SET1		EEPROM_ADDRCHF	
		MOV		A,#0F0H     
		CALL		!IICBUS_START   
		CALL		!WRITE8BIT
		CALL		!SLAVEACK
		CMP		A,#0H
		BNZ		$EEPROM_3
		MOV		A,EEPROM_ADDR
		ADD		A,#18H
;判断是否超出1K EEPROM的区域		
		CMP		A,#08H
		BNZ		$EEPROM_9
		SET1		EEPROMERRF
		BR		!EEPROM_3
EEPROM_9:				
		CALL		!WRITE8BIT
		CALL		!SLAVEACK
		CMP		A,#0H
		BNZ		$EEPROM_3
		CALL		!IICBUS_STOP
		BT		EEPROMERRF,$EEPROM_3
		CLR1		EEPROM_ADDRCHF
;更改EEPROM的区域存入地址后置重新写入的数据		
		SET1		EEPROM_WRITEERRF
		MOVW		HL,#EEPROM_RAM				
		MOVW		DE,#ATEMP
EEPROM_8:		
		MOV		A,[DE]
		MOV		[HL],A
		INC		L
		INC		E
		MOV		A,L
		CMP		A,#LOW EEPROM_RAM+12
		BNZ		$EEPROM_8
EEPROM_3:	BF		LOCKF,$UNLOCKMAC
		SET1		SEG7.7
		BR         !START0
UNLOCKMAC:	CLR1		SEG7.7
		BR	!START0
                
ONMCU0:                 BR                         !ONMCU                
;*********************HOST MAIN PROGRAM*************************
SUB2            CSEG    UNIT
MAINPRO:
                BT              SONF_F,$ONMCUUU
WARMDJR2:                
                SET1	DJR                
                CLR1	SEG3.1
                RET
ONMCUUU:
	BT	ROMERRF,$WARMDJR2
	CMP	ROMTEMP,#0F0H
	BNC	$WARMDJR1
	MOV	A,TEMPBUF
	CMP	A,ROMTEMP
	BZ	$WARMDJR2
	BC	$WARMDJR2
WARMDJR1:
	CLR1	DJR
	SET1	SEG3.1
	RET	                
                
                
                
                
                
                
                
	CSEG     UNIT
                
                
                
OFFMCU:         
;;;;;;;                SET1            WARMFIRSTF
		
;		BT		ROMERRF,$NOERROFF
;		BT		PIPERRF,$NOERROFF
;		BT		OUTERRF,$NOERROFF
		BT		DISERRF,$NOERROFF	
		MOV		SEG1,#0H
		MOV		SEG8,#0H
NOERROFF:	
		BF		TIMONF,$OOOO
		AND		SEG2,#00000011B
		BR		!PPPP
OOOO:		MOV		SEG2,#0H
PPPP:
		BF		LOCKF,$NOLOCKOFF
		AND		SEG7,#10000000B
		BR		!DDDD
NOLOCKOFF:	MOV		SEG7,#0H
DDDD:
		MOV		SEG3,#0H
		MOV		SEG4,#0H
		MOV		SEG5,#0H
		MOV		SEG6,#0H
		
                CLR1                    SECONDF
                CLR1                    DISTMP5SF
                MOV                             DISTMP5SC,#0H
;                CLR1            RB.3
                CLR1            SEG2.7


                CLR1            AUTOSECOF       ;MUST
                CLR1		SETTEMPF
;                CALL            !CLRFLG_AUTO

                CALL            !CLRAUTOFAN

                CLR1            DRYSECOF
                CLR1            DRY30SF
                MOV             DRY30SC,#0H
                CLR1            DRYMF
                CLR1            DRY4MF
                CLR1            DRY10MF
;;                MOV             DRYMC,#0H
;;                MOV             DRYMC+1,#0H
;;;                CLR1            SEG5.6
                BF              TIMONF,$OHERE1
                MOV             SEG2,#00000011B
                BR              !OHERE2        
OHERE1:         MOV             SEG2,#0H
OHERE2:
;                CLR1            RB.4

                BF              SSLEEPF,$NOSLEEP1
                CLR1            SSLEEPF
;;;;;;                MOV             SLEEPC,#0H
;;;;;;                MOV             SLEEPC+1,#0H
                MOV             A,SSTEMP
                MOV             TEMPBUF,A
;;;;;;;;                CALL            !SLETMPLD

NOSLEEP1:       CALL            !CLRFLG_COOL
                CALL            !CLRFLG_WARM
                CLR1            VALOFF1MF
                CLR1            P4F

                BF              STF,$NOVALOFF
                SET1            VALOFF1MF

NOVALOFF:       BF              FANOFFF,$GOOFFMCU1
                RET
GOOFFMCU1:      BT              SDRYF,$COOLOFF
                BT              SFANMF,$COOLOFF1
                BT              SAUTOF,$AUTOOFF
                BT              SCOOLF,$COOLOFF
WARMOFF:        CALL            !CLRFLG_AUTO
                CLR1            EXTFAN
                BF              COMP,$FANOFF
                CLR1            COMP
;;;;;                CLR1            EXTFAN
                SET1            COMP3MF
                CLR1            COMP3MY
                MOV             COMP3MC,#0H

FANOFF:         BR              $DJROFFFAN
;    	         BBC             FANOFFF,DJROFFFAN
;                RET
AUTOOFF:        SET1            FANOFFF
                BT              GOWARMF,$WARMOFF
                CALL            !CLRFLG_AUTO
COOLOFF:        BF              COMP,$COOLOFF1
                CLR1            COMP
                CLR1            EXTFAN
                SET1            COMP3MF
                CLR1            COMP3MY
                MOV             COMP3MC,#0H
;                RET
COOLOFF1:       SET1            HFAN
                CLR1            LFAN
                CLR1            MFAN
;;;;;;;;                CLR1                    RB.3
;                CLR1            RB.4
                RET
DJROFFFAN:      SET1            FANOFFF
                BT              WARMFIRSTF,$NOOFFAN
                SET1            WARMFIRSTF
                SET1            FANDELAY30SF
                BT              DJR,$OFFFAN
                SET1            DJR
                SET1            DJRFANF
;                SET1            FANDELAY10SF
                SET1            LFAN
                SET1            HFAN
                CLR1            MFAN
                RET
OFFFAN:         
                BF              PIPERRF,$PIPERRFANOFF
                RET
PIPERRFANOFF:
                CMP             PIPTEMP,#0F0H
                BNC             $NOOFFAN
                CMP             PIPTEMP,#30
                BC              $NOOFFAN
                CMP             PIPTEMP,#37
                BC              $OFFCUIYURE
                CMP             PIPTEMP,#47
                BC              $WARMOFF1
                CLR1            HFAN
                CLR1            LFAN
                CLR1            MFAN
                RET
WARMOFF1:       CALL            !NORFAN
                RET
;PIPERRFAN30S:   SET1            FANDELAY30SF
;                RET
;DEFROOFF:       CLR1            DEFROSTF
;                CLR1            SEG5.6
;                BR             OFFFAN
OFFCUIYURE:     SET1            LFAN
                SET1            HFAN
                CLR1            MFAN
;                SET1            FANDELAY20SF
                RET
NOOFFAN:        CLR1            LFAN
                SET1            HFAN
                CLR1            MFAN
                CLR1            FANDELAY30SF
                MOV             FANDELAY30SC,#0H
                RET

;;;;;;;ON MCU;;;;;;;;;;;;;;;;;;

ONMCU:         
		
;                CALL            !DISPTEMP

                CLR1            FANOFFF

                CLR1            FANDELAY30SF
                MOV             FANDELAY30SC,#0H
                CLR1            DJRFANF

MODESELECT:     BF              SAUTOF,$MODESELECT1
                BR             !SAUTO
MODESELECT1:    BF              SCOOLF,$MODESELECT2
                BR             !SCOOL
MODESELECT2:    BF              SDRYF,$MODESELECT3
                BR             !SDRY
MODESELECT3:    BF              SFANMF,$MODESELECT40
                BR             !SFANMODE
MODESELECT40:   BR                             !MODESELECT4
GOWARM0_L:      BR              !GOWARM0
SAUTO:          CLR1            SEG3.4
		CLR1		SEG2.6
		CLR1		SEG3.2
		CLR1		SEG3.6
                SET1            SEG3.3
                BT              ROMERRF,$GOWARM0_L
                BF              P1F,$NOP1
                CLR1            P1F
NOP1:           BT              AUTOSECOF,$AUTOSECO
		SET1		AUTOSECOF
		SET1		WARMFIRSTF
                CMP             ROMTEMP,#0F0H
                BNC             $GOWARM
                CMP             ROMTEMP,#21
                BC              $GOWARM
                CMP             ROMTEMP,#26
                BC              $GODRY
GOCOOL:         CLR1            GOWARMF

⌨️ 快捷键说明

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