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

📄 dingshikaishui.dt

📁 采用义隆EM78P468单片机做的定时灌溉花园的程序.通过了测试,并已经用在实际的产品中.
💻 DT
📖 第 1 页 / 共 5 页
字号:
		;JMP	POWER_ON
		;
		ORG	0x0018
		;page  0		
		;JMP	P6P8_ISR0	;18 port 6, port 8 input status change interrupt
        BS	INTFLAG, P68CB	;do it only in motor open/stop
		BC	ISR, P68CB
		RETI
/***************************************/
		nop;ADD	A, @0xff
		JMP	POWER_ON
ChrClsHr:	CMPCLK	HOUR,CLSHOUR
		ret
/***************************************/
ClearLCD:	MOV	A, @19		; clear lcd buffer[1080c]
		MOV	LCDAR, A
ClrLCD:		CLR	LCDBR
		DJZ	LCDAR
		JMP	ClrLCD
		CLR	LCDBR
		RET
/*------------------*/
LightLCD:	MOV	A, @19		; light all lcd buffer[1080c]
		MOV	LCDAR, A
		MOV	A, @15
LgtLCD:		MOV	LCDBR, A
		DJZ	LCDAR
		JMP	LgtLCD
		MOV	LCDBR, A
		RET
/*-------------------------------------*/
/* set count1 as 2Hz */
CNT1init:	BS	PORT5, 0
		IOR	CNT12CR
		AND	A, @0xf0
		OR	A, @5
		IOW	CNT12CR
		BC	PORT5, 0
		MOV	A, @255
		IOW	CNT1PR
		MOV	A, @mCNT1EN
		MOV	CNTER, A
		BC	ISR,CNT1B
		IOR	IMR
		OR	A, @0x08
		IOW	IMR
		RET
/***************************************/
	;	ORG	0x0040
/***************************************/
CNT1_ISR0:	
		NOP
		NOP
		NOP
		MOV	ACCBR, A	; back up acc
		SWAPA	SR		;\
		MOV	SRBR, A		;/back up status
		INC	CLKCOM
		BS	INTFLAG, CNT1B
		SWAPA	SRBR		;\return status
		MOV	SR, A		;/
		SWAP	ACCBR		;\return acc
		SWAPA	ACCBR		;/
		BC	ISR, CNT1B
		RETI
;-----------------------------------------------------------------
;#################################################################
; Main Program
;---------------------------
POWER_ON:	PAGE	0
		DISI
		;nop
		;nop;ADD	A, @0xff
		;nop;ADD	A, @0xff
		clra
		mov		0x10,a
delay_0:
		nop
		nop
		djz		0x10
		jmp		delay_0
		;
		;check if we have reset from motor err
		JBS	INTFLAG, MOTORB	; check if we are reset due to motor error (holding motor)
		JMP PU_GD			;jump to normal and good powerup and continue
		
		JBS WTRFLAG, 5		;check if water flag bit 5 = 1, if not, jump good PU.
		JMP PU_GD
		
		JBC OPTION, 0x00	;check if OPTION bit 0 and 3 is "0" and "1"
		JMP PU_GD
		JBS OPTION, 0x03	;check if bit 3 == 1
		JMP PU_GD
		
		PAGE 3				;if we have motor error and reset, goto page 3 and loop err
		JMP _CmPerr			; Jump to non return err.
		
						; Normal and good powerup
PU_GD:	DISWDT			; disable watchdog
		set128r	0		;\ clear all ram.
		clrram			;/
		CALL	ClearLCD	; clear LCD panel.
		PAGE	3
		CALL	IOinit3
		CALL	LCDinit3	; 1/3 bias, 1/4 duty, 64Hz, 3.0v.
		CALL	RsysInit3
		CALL	ReadOpt3	; raed option jump' value.
		PAGE	0
/*#######################################################*/
PrjInit:	MOV	A, @0x01	; initialize flag.
		MOV	WEEKDAY, A	; as Monday.
		MOV	QFCNTL, A
		CLR	QFCNTH
	;	CLR	HOUR		; real time clock set as: Monday 00:00:00
	;	CLR	MINUTE        
		CLR	SECOND
		CLR	CLKCOM
		CLR	MODE		; 
		MOV	A, @CNT1MIN
		MOV	KCOUNT, A
		BS	WTRFLAG, 6
		BS	LCDCR, LCDEN	; Enable LCD function
		BC	R5, 0
		MOV	A, @0x00
		IOW	IMR
		CLR	ISR
		CLR	INTFLAG
		CALL	CNT1init	; as 1/2 sencond
		ENI
		PAGE	2		;\
		CALL	CheckLb2	; | modified on Oct 26, 07
		call	ClrBatt2	; |
		PAGE	3		;/
		call	TestMode3
		
		CALL	WtSchedule3	; initialization 128ram.
		clr     KEYBR          ;6月7日修改
		PAGE	1
		CALL	KeyIdle1
		CALL	KidleSet1
		PAGE	0
		CLR	DISPSW
		clr	KEYBR
		PAGE	1
		CALL	TDMdispClk	; initialize LCD panel
		PAGE	0
/*---------------------------------------*/
MainLoop:	JBC	INTFLAG, MOTORB	;
		JMP	MainCont	;if P68CB is set, don't sleep.
		
		BC	SBPCR, CPUS	; for chip idle
		JMP	$+1
		SLEP			; enter idle status
		NOP
		NOP	
		NOP
		NOP
		NOP
		;wdtc;
		BS	SBPCR, CPUS	; waked up and run at fast clock mode.
		JMP	$+1
		NOP
		NOP
		NOP
MainCont:	JBC	INTFLAG, CNT1B	
		JMP	ToCnt1Func
		JBC	INTFLAG, CNT2B
		JMP	ToCnt2Func
		JBC	INTFLAG, P68CB
		JMP	ToP6P8Func
		JBC	INTFLAG, MOTORB	
		JMP	ToP6P8Func
EndMain:	PAGE	2
		CALL	MotorCtl2
		PAGE	0
		JMP	MainLoop
/***************************************/
ToCnt1Func:	bc	INTFLAG, CNT1B
PwrOff:		jbc	PORT5, 4
		jmp	ChkMp0s5
		CALL	LcdRrem		; power off function subroutine.
		page	2
		call	CheckLb2	; check low battery energy.
		page	0
		jbc	SRFLAG, 1
		JMP	_ExtPoLb
		bc	SRFLAG, 4
		JMP	MainLoop
_ExtPoLb:	jbs	OPTION, 6
		JMP	MainLoop
		page	2
		call	MtrLbFun2	; check battery energy when need open water
		page	0
		JMP	PwrOff		; not enough energy.
ChkMp0s5:	JBC	WTRFLAG, 5	; Dec06,07
		JMP	Do0s5Func	; to do 0.5s check motor' position function.
		PAGE	1
		CALL	ScanMtSet1	; set port for scan motor' position.
		CALL	ScanMotor1	; read motor position
		PAGE	0
		JBC	OPTION, 6	; check close or open motor' position.
		JMP	_ChkMS5P1
	;	JMP	_ChkMS5P0
_ChkMS5P0:	XOR	A, @CLOSEWTR	; check close position
		JMP	_ChkMS5PCom
_ChkMS5P1:	XOR	A, @OPENWTR	; check open position
_ChkMS5PCom:	JBC	SR, Z
		JMP	ModifyOct23
		PAGE	1
		CALL	OpenMotor1	; open motor if it is difference.
		PAGE	0
		jmp	Do0s5Func
ModifyOct23:	PAGE	1
		call	DisMscan1	; diable motor' reading function.
		page	0
Do0s5Func:	jbc	CLKCOM, 7
		jmp	ToAddClock	; to add second
DoDispClr:	bs	CLKCOM, 7
		PAGE	2
		CALL	ClrFlash2	; do flash' clear function.
		PAGE	0
/*----------------------------------*/
		MOV	A, @0x0f
		AND	A, MINUTE	; per 10 minutes test low battery
		JBS	SR, Z		; modify on Oct 24, 07
		JMP	_Min5chkLb
		bc	OPTION, 5
		jmp	EndRunClk
_Min5chkLb:	JBC	OPTION, 5
		JMP	EndRunClk
		BS	OPTION, 5
		page	2
		call	CheckLb2	; check battery energy.
		call	TestRain2	; added on Dec 19, 07
		page	0
		jmp	EndRunClk
/*----------------------------------*/
ToAddClock:	mov	a, @0x0f
		and	CLKCOM, a
		PAGE	2
		CALL	LgtFlash2	; do flash light.
		PAGE	0
		CALL	RunClock	; run real time clock[add second and schedule]
		page	3
		CALL	ChkMtPosi3	; check motor position.
		page	0
		MOV	A, KEYBR
		JBS	SR, Z
		JMP	_TacCnt
		JBS	MODE, 5
		JMP	_TcntKrelax
		clr	KCOUNT		;\ added on Oct 29, 07
		JMP	_TacCnt		;/
_TcntKrelax:	mov	KCOUNT, KCOUNT	; do key relax count function[one minute]
		JBC	SR, Z
		JMP	_TacCnt
		deca	KCOUNT
		MOV	KCOUNT, A
		JBS	SR, Z
		JMP	_TacCnt
		JBS	MODE, 0		;\
		JMP	_RtnAutoM	; |
		JBC	MODE, 1		; | modified on Nov 01, 07
		JMP	_TacFb0		;/
_TcKchkPgm:	jbs	SRFLAG, 5
		jmp	_RtnAutoM
		page	1
		call	TDMdispAuto	; for return automation mode' LCD display
		page	0
		JMP	EndRunClk
_RtnAutoM:	PAGE	1
		CALL	_TDMautoCom	
		PAGE	0
		JMP	EndRunClk
_TacCnt:	jbc	MODE, 0
		jmp	EndRunClk
		JBC	MODE, 5
		JMP	EndRunClk
		JBS	MODE, 1
		JMP	EndRunClk
		PAGE	2
		CALL	LightWeek2	; refresh real time clock' display.
		CALL	LgtClock2
		PAGE	0
EndRunClk:	
		JMP	EndMain
_TacFb0:	jbc	MODE, 2		; added on Oct 26, 07
		jmp	_TacQk0		; modified on Oct 30, 07
_TacFb1:	mov	a, DISPSW
		XOR	a, @0x03
		jbc	SR, Z
		jmp	_TacQk0
		mov	a, @0x01
		mov	DISPSW, A
		MOV	A, @0x03
		MOV	MODE, A
		call	ClearLCD
		PAGE	2
		call	LightOFF2
		CALL	LightRain2
		CALL	LightBat2
		PAGE	0
		jmp	EndRunClk
_TacQk0:	jbs	DISPSW, 1	;\
		jmp	_RtnAutoM	; > added on Oct 30, 07
		JMP	_TacCnt		;/
/***************************************/
ToCnt2Func:	bc	INTFLAG, CNT2B
		PAGE	1
		CALL	ScanKey1	; for press key function
		PAGE	0
		jbc	SR, Z
		jmp	KeyRelax
ExitCnt2:	JBS	MODE, 0
		JMP	_NorKey
		JBC	MODE, 1
		JMP	_AutoSwK
_NorKey:	jbc	KEYCNT, 3
		jmp	_NorKchk
		inc	KEYCNT
		jmp	ExitCtwo
_NorKchk:	JBC	MODE, 7
		JMP	ExitCtwo
		MOV	A, KEYBR		;\
		AND	A, @1<<UPK+1<<DNK	; | added on Oct 26, 07
		JBC	SR, Z			; |
		JMP	ExitCtwo		;/
		mov	a, @0x01
		xor	KEYCNT, A
		JBC	KEYCNT, 0
		JMP	ExitCtwo
		PAGE	1
		CALL	KeyProc1
		PAGE	0
		jmp	ExitCtwo
KeyRelax:	bc	KEYCNT, 3		; Nov 27, 07
		mov	a, @CNT1MIN
		mov	KCOUNT, a
		page	3
		call	CNT2dis3
		page	0
		call	ChkQorF
		PAGE	1
		CALL	KeyIdle1
		CALL	KidleSet1
		PAGE	0
ExitCtwo:
		JMP	EndMain
/*------------------*/
_AutoSwK:	JBS	MODE, 2
		JMP	_AutoSwF
		MOV	DISPSW, DISPSW
		jbs	SR, Z
		JMP	_NorKey
		jbs	KEYBR, SWHK
		jmp	_NorKey

		mov	a, @CNT25S	; on/off 5 seconds
		xor	a, KEYCNT
		JBC	SR, Z
		jmp	ExitCtwo
__AutoSwCnt:	inca	KEYCNT
		MOV	KEYCNT, A
		xor	a, @CNT25S
		JBS	SR, Z
		JMP	ExitCtwo
__AutoFb:	BC	MODE, 2
		call	ClearLCD
		PAGE	2
		call	LightOFF2
		CALL	LightRain2
		CALL	LightBat2
		PAGE	0
		jmp	ExitCtwo

_AutoSwF:	DJZA	DISPSW
		JMP	_NorKey
		jbs	KEYBR, SWHK	;Dec06,07
		jmp	_NorKey
		mov	a, @CNT25S
		xor	a, KEYCNT
		JBC	SR, Z
		jmp	ExitCtwo
_AutoSfCnt:	inca	KEYCNT
		MOV	KEYCNT, A
		xor	a, @CNT25S
		JBS	SR, Z
		JMP	ExitCtwo
_AutoReturn:	BC	OPTION, 6
		PAGE	1
		call	_TDMautoCom
		page	0
		inc	DISPSW
		BS	MODE, 7
		JMP	ExitCtwo

/***************************************/
ToP6P8Func:	bc	INTFLAG, P68CB	; do it only in motor stop
		JBS	WTRFLAG, 5
		JMP	ToKeyFunc
/*-------------------------------------*/
MotorChk:	JBS	OPTION, 6
		JMP	_ChkClose
/*------------------*/
_ChkOpen:	page	1
		call	ScanMotor1
		page	0
		XOR	A, @OPENWTR
		JBS	SR, Z
		jmp	_ChkExit
		BS	WTRFLAG, 6
		jmp	_ChkMend
/*------------------*/
_ChkClose:	page	1
		call	ScanMotor1
		page	0
		XOR	A, @CLOSEWTR
		JBS	SR, Z
		jmp	_ChkExit
		BC	WTRFLAG, 6
/*------------------*/
_ChkMend:	BC	SRFLAG, 2
		clr	MCHKCNT		; Nov 27, 07
		page	1
		call	StopMotor1
		call	DisMscan1
		PAGE	2
		call	LgtSwIcon2
		page	0
_ChkExit:	JMP	EndMain

/***************************************/
ToKeyFunc:	PAGE	1		; for strike key function
		CALL	ScanKey1
		PAGE	0
		jbs	SR, Z
		jmp	KeyFirst
Krelax:		bc	KEYCNT, 3		; Nov 27, 07
		mov	a, @CNT1MIN
		mov	KCOUNT, a
		page	3
		call	CNT2dis3
		PAGE	1
		CALL	KeyIdle1
		CALL	KidleSet1
		PAGE	0
		jmp	ExitKey

KeyFirst:	page	3
		call	CNT2init3
		PAGE	1
		CALL	KdisIdle1
		CALL	KeyProc1
		PAGE	0
		clr	KEYCNT
ExitKey:
		JMP	EndMain

/*##############################################*/
LcdRrem:	MOV	A, @0xe0	/*<*/
		MOV	R4, A
		CLR	LCDAR
_Lcd2Bnk3:	MOV	A, LCDBR
		MOV	R0, A		; backup lcd ram data[0~19]
		INC	R4
		INCA	LCDAR
		MOV	LCDAR, A
		XOR	A, @20
		JBS	SR, Z
		JMP	_Lcd2Bnk3
		clr	R4		/*>*/
		bc	R5, 0
		IOR	IMR
		MOV	INTEMP, A
		mov	a, @mCNT1E
		iow	IMR
		clr	INTEMPH
_PoLoop:	jbc	PORT5, 4
		jmp	_PwrChkEnd
		JMP	$+1
		BC	SBPCR, CPUS
		SLEP		
		BS	SBPCR, CPUS
		JMP	$+1
		JBS	INTFLAG, CNT1B
		JMP	_PoLoop
		BC	INTFLAG, CNT1B
		JBS	INTEMPH, 0
		JMP	_POclr
		BC	INTEMPH, 0
		PAGE	2
		call	LightPO2
		PAGE	0
		JMP	_PoLoop
_POclr:		BS	INTEMPH, 0
		MOV	A, KCOUNT	/*<<*/
		JBC	SR, Z
		JMP	$+6
		AND	A, @0x7f
		JBS	SR, Z
		ADD	A, @255
		OR	A, @0x80
		MOV	KCOUNT, A	/*>>*/
		CALL	RunClock
		call	ClearLCD
		JMP	_PoLoop
_PwrChkEnd:	MOV	A, INTEMP
		BC	R5, 0
		IOW	IMR
		CLR	ISR
		CLR	CLKCOM

		MOV	A, MODE		/*<*/
		AND	A, @3
		ADD	2, A
		JMP	_KcntChk	;_PoEdTM
		JMP	_KcntChk	;_PoEdPgm
	;	JMP	_PoRtnAuto	;_PoEdAuto
		JMP	_PoRtnAut	;1123
		JMP	_PoEdFQ		/*>*/

_PoRtnAut:	JBS	OPTION, 6	;\
		JMP	_PoRtnAuto	; > 1123
		CALL	LcdRrfh
		PAGE	2
		CALL	LgtWtrCnt2
		CALL	LightWeek2
		CALL	LgtWtrNo2
		call	LgtSwIcon2
		PAGE	0
		RET

LcdRrfh:	MOV	A, @0xe0	/*<*/
		MOV	R4, A
		CLR	LCDAR
_Bnk32Lcd:	MOV	A, R0
		MOV	LCDBR, A	; return lcd data to lcd ram.
		INC	R4

⌨️ 快捷键说明

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