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

📄 dingshikaishui.dt

📁 采用义隆EM78P468单片机做的定时灌溉花园的程序.通过了测试,并已经用在实际的产品中.
💻 DT
📖 第 1 页 / 共 5 页
字号:
S5		==	C0M4	; SG17
S6		==	C0M4	; SG18
S7		==	C0M1	; SG07
AM		==	C0M3	; SG08
PM		==	C0M2	; SG17
PROG		==	C0M2	; SG08
CLK		==	C0M1	; SG08
AUTO		==	C0M1	; SG17
D7B		==	C0M3	; SG18
D7C		==	C0M2	; SG18
D7ADEG		==	C0M1	; SG18
/* define 7 segment digital data */
D1EGFA		==	SG09	; digital 1 -- HOURH/Nc
D1DCB		==	SG10
D2EGFA		==	SG11	; digital 2 -- HOURL/COUNTH
D2DCB		==	SG12
;
D3EGFA		==	SG13	; digital 3 -- MINUTEH/COUNTLH
D3DCB		==	SG14
D4EGFA		==	SG19	; digital 4 -- MINUTEL/COUNTLL
D4DCB		==	SG20
;
D5EGFA		==	SG03	; digital 5 (water cycle times)
D5DCB		==	SG04
;
D6EGFA		==	SG05	; digital 6 (set water No.)
D6DCB		==	SG06
;
D7S6		==	SG18	; digital 7 (value of percent rate)
;
	PCT0	==	C0M4+C0M0+C0M0+C0M0	; %
	PCT1	==	C0M4+C0M3+C0M2+C0M0	; 1_%
	PCT2	==	C0M4+C0M3+C0M0+C0M1	; 2_%
;
D8EGFA		==	SG15	; digital 8 (point of percent)
D8DCBx		==	SG16
;
FIG0		==	C0Mb+C0Mc+C0Md+C0Ma+C0Mf+C0M0+C0Me	; 0	figure
FIG1		==	C0Mb+C0Mc+C0M0+C0M0+C0M0+C0M0+C0M0	; 1 *
FIG2		==	C0Mb+C0M0+C0Md+C0Ma+C0M0+C0Mg+C0Me	; 2
FIG3		==	C0Mb+C0Mc+C0Md+C0Ma+C0M0+C0Mg+C0M0	; 3
FIG4		==	C0Mb+C0Mc+C0M0+C0M0+C0Mf+C0Mg+C0M0	; 4
FIG5		==	C0M0+C0Mc+C0Md+C0Ma+C0Mf+C0Mg+C0M0	; 5
FIG6		==	C0M0+C0Mc+C0Md+C0Ma+C0Mf+C0Mg+C0Me	; 6
FIG7		==	C0Mb+C0Mc+C0M0+C0Ma+C0M0+C0M0+C0M0	; 7
FIG8		==	C0Mb+C0Mc+C0Md+C0Ma+C0Mf+C0Mg+C0Me	; 8 *
FIG9		==	C0Mb+C0Mc+C0Md+C0Ma+C0Mf+C0Mg+C0M0	; 9
LtrA		==	C0Mb+C0Mc+C0M0+C0Ma+C0Mf+C0Mg+C0Me	; A	letter
Ltrb		==	C0M0+C0Mc+C0Md+C0M0+C0Mf+C0Mg+C0Me	; b
Ltrc		==	C0M0+C0M0+C0Md+C0M0+C0M0+C0Mg+C0Me	; c
Ltrd		==	C0Mb+C0Mc+C0Md+C0M0+C0M0+C0Mg+C0Me	; d
LtrE		==	C0M0+C0M0+C0Md+C0Ma+C0Mf+C0Mg+C0Me	; E
LtrF		==	C0M0+C0M0+C0M0+C0Ma+C0Mf+C0Mg+C0Me	; F for "OFF"
LttC		==	C0M0+C0M0+C0Md+C0Ma+C0Mf+C0M0+C0Me	; C for "C"
LtrL		==	C0M0+C0M0+C0Md+C0M0+C0Mf+C0M0+C0Me	; L \for "Lo"
Ltro		==	C0M0+C0Mc+C0Md+C0M0+C0M0+C0Mg+C0Me	; o /
LtrP		==	C0Mb+C0M0+C0M0+C0Ma+C0Mf+C0Mg+C0Me	; P  for "PO"
Ltrr		==	C0M0+C0M0+C0M0+C0M0+C0M0+C0Mg+C0Me	; r  for "Err"
LtrS		==	C0M0+C0Mc+C0Md+C0Ma+C0Mf+C0Mg+C0M0	; S \for "tESt"
Ltrt		==	C0M0+C0M0+C0Md+C0M0+C0Mf+C0Mg+C0Me	; t /
IconLo		==	C0M0+C0M0+C0M0+C0M0+C0M0+C0Mg+C0M0	; -
	;		   b   +c   +d   +a   +f   +g   +e
;==============================================================
;
MOTORBIT	==	01100000B
OPENWTR		==	00100000B
CLOSEWTR	==	00000000B
WATERSET	==	0
MCHKB		==	7
;
KCLN0		==	00010000B	; key column 0
KCLN1		==	00100000B	; key column 1
KROW0		==	00000001B	; key row 0
KROW1		==	00000010B	; key row 1
KROW2		==	00000100B	; key row 2
KROW3		==	00001000B	; key row 3
;
UPK		==	0		; up key
DNK		==	1		; down key
MODK		==	2		; mode key
CLRK		==	4		; clear key
ETRK		==	5		; enter key
SWHK		==	6		; on/off switch
;
TESTK		==	mB2+mB4		; CLRK+MODK
;
;
OPTJ1		==	mB0
OPTJ2		==	mB1
OPTJ3		==	mB2
OPTHR		==	mB2
OPTJP		==	mB0+mB1+mB2
;
mRAINB		==	mB3+mB4

mLBCHK		==	mB5
mLBCTL		==	mB6
LBCHKB		==	5
LBCTLB		==	6
;
RRATE		==	0x00
RDUTY		==	0x01
RWEEK		==	0x02
;
RNO01		==	0x03	; 0x03~0x0B
RNO02		==	0x0C	; 0x0C~0x14 : ram number list
RNO03		==	0x15	; 0x15~0x1D
RNO04		==	0x1E	; 0x1E~0x26 : 0 WRATE
RNO05		==	0x27	; 0x27~0x2F : 1 WDUTY
RNO06		==	0x30	; 0x30~0x38 : 2 WEEKBK
RNO07		==	0x39	; 0x39~0x41 : [(3+9n)~(3+8+9n)] n=[0~11]
RNO08		==	0x42	; 0x42~0x4A : 9 RAM[WNUM,WHOUR,WMINUTE,
RNO09		==	0x4B	; 0x4B~0x53	CNTTMH,CNTTML,COUNTH,
RNO10		==	0x54	; 0x54~0x5C	COUNTL,CLSHOUR,CLSMINUTE]
RNO11		==	0x5D	; 0x5D~0x65
RNO12		==	0x66	; 0x66~0x6E
;
CNT25S		==	0x28
CNT1MIN		==	60	; for debug
/*==========================
interrupt var & common ram
define area  <0x10 ~ 0x1f>
===========================*/
ACCBR		==	0x10	;INT acc back buffer
SRBR		==	0x11	;INT status register back buffer
BNKBR		==	0x12	;INT bank back buffer
MOTORBF		==	0x12	; modified on Jan 16, 08
BAKHR		==	0x12	/**/
PGBR		==	0x13	;INT page back buffer
BAKMIN		==	0x13	/**/
INTFLAG		==	0x14	;INT interrupt flag
CLKCOM		==	0x15	;INT real time clock common counter
INTEMP		==	0x16	;INT\ \
INTEMPL		==	0x16	;INT/  | temporary register
INTEMPH		==	0x17	;INT  /
/*-----------*/
OPTION		==	0x18	; option buffer
				; b3&0: option jump 1~2 select value:[8/10/12]
				; b4:	option jump 3 select value: [12/24Hr]
				; b5:	nc
				; b6:	1-need open motor, 0-no need open motor
				; b7:	1-test mode, 0-normal operate

MODE		==	0x19	; b1b0: operat mode	b10: 00 clock mode
				;			     01 program mode
				;			     10 auto mode
				;			     11 auto mode:
				;			   b2:  1 quick mode
				;				0 manual/forbid mode

KEYBR		==	0x1a	; key buffer

KCOUNT		==	0x1b	; key relax 60 seconds count
BNKBF		==	0x1c	; main program bank buffer
BAKNO		==	0x1c	/**/
TEMP		==	0x1d	;*\ \
TEMPL		==	0x1d	;*/  | temporary register for operation
TEMPM		==	0x1e	;    |
TEMPH		==	0x1f	;   /
/*==================================
[bank 0]: real time clock ram area
===================================*/
DISPSW		==	0x20	; display flash flag
			;0 weekday    WRATE	COLON	nc	nc
			;1 HOUR	   WDYTY&WEEKBK		minutes	OFF
			;2 MINUTE     WEEKBR		water	minute
			;3	      WNUM			water
			;4	      WHOUR	
			;5	      WMINUTE	
			;6	      CNTTMH&L	
			;7

KEYCNT		==	0x21	; key keep counter for 1/4 second function

WEEKDAY		==	0x22	; 1~7
HOUR		==	0x23	; decimal: 0 ~ 23
MINUTE		==	0x24	; decimal: 0 ~ 59
SECOND		==	0x25	; decimal: 0 ~ 59
SRFLAG		==	0x26	; B0: rain sensor set bit| 0-nor/1-rain
				; B1: low battery flag
				; b2: wait check
				; b3: 0[/1] need[/no need] water today
				; b4: battery flag
				; b5: adjust clock flag in time mode
				; b6: flag bit for schedule search
				; b7: 1[/0] yesterday water[/no water]

WRATE		==	0x27	; decimal: 10%~200%
WDUTY		==	0x28	; 0~7: c,1,2,3,4,5,6,7
WEEKBK		==	0x29	; MON/TUE/WED/THU/FRI/SAT/SUN <==> [mB0~3]&[mB5~7]

WNUM		==	0x2a	;  decimal: 1 ~ 8/10/12
WHOUR		==	0x2b	;\ decimal: 0~23 & 24
WMINUTE		==	0x2c	;/ decimal: 0~59
CNTTMH		==	0x2d	;\ decimal: 1~300
CNTTML		==	0x2e	;/
COUNTH		==	0x2f	;\ decimal/hexadecimal: 0~660
COUNTL		==	0x30	;/
CLSHOUR		==	0x31	;\ decimal: 0~23
CLSMINUTE	==	0x32	;/ decimal: 0~59

WEEKBR		==	0x33	; 1~7
SCHNO		==	0x34	; 0~7/9/11
WTRFLAG		==	0x35	; B7, 1-set schedule, 0-no set schedule
				; b6, 1-open water switch/icon, 0-stop water switch
				; B5, 1-open motor, 0-stop motor
				; B4, 1-need water, 0-no need water
				; b0~3: rem water schedule number.
SCHDATA		==	0x36	; if duty is "c", then it is week;
				; if duty isn't "c", then it is duty.

QFCNTH		==	0x37	;\ quick @ forbit mode time buffer
QFCNTL		==	0x38	;/

DSPBRH		==	0x39	;\ lcd display temporary register
DSPBRL		==	0x3a	;/
HOUR12		==	0x3a	; for 12hr/24hr display temporary register

MCHKCNT		==	0x3b	
QFSECNT		==	0x3c	; for quick & forbit count second/Oct 30, 07
WEEKADJ		==	0x3d
HOURADJ		==	0x3e
MINADJ		==	0x3f
/*============================
[bank 1]:
============================*/


/*============================
[bank 2]: remember the lcd buffer for PO
============================*/


/*============================
[bank 3]:
============================*/

/*########################################################################
MACRO define district
########################################################################*/
/************************************
 fuction: clear general ram
************************************/
clrram		macro
		MOV	A, @0x10
		MOV	R4, A
$clrloop:	clr	R0
		INC	R4
		MOV	A, R4
		JBC	SR, Z
		JMP	$clrend		; check current bank ending?
		AND	A, @0x3f
		JBS	SR,Z
		JMP	$clrloop
		MOV	A, @0x20	; refresh the address
		ADD	R4, A
		JMP	$clrloop
$clrend:
		endm
/*---------------------------------*/
set128r		macro	XXX
		bc	5, 0
		CLR	TEMP
$clr128:	mov	A, TEMP		; set up the 128 ram with the value "XXX"
		iow	RAMAR
		mov	a, @XXX
		iow	RAMBR
		inc	TEMP
		jbs	TEMP, 7
		jmp	$clr128
		endm
/*---------------------------------*/
DISWDT		macro
		BS	R5, 0
		IOR	WDTCR
		AND	A, @0x0f7	; disable watchdog
		IOW	WDTCR
		WDTC
		endm
/*---------------------------------*/
dBCD02X		macro	BCDBR, X	; dec bcd from 0 to X
		MOV	A, BCDBR
		JBC	SR, Z
		JMP	$dBCDrst
		ADD	A, @256-1
		JBC	SR, DC
		JMP	$dBCDend
		ADD	A, @256-6
		JMP	$dBCDend
$dBCDrst:	MOV	A, @X
$dBCDend:	MOV	BCDBR, A
		endm
/*---------------------------------*/
iBCD02X		macro	BCDBR, X
		MOV	A, BCDBR
		add	a, @0x01
		DAA
		MOV	BCDBR, A
		SUB	A, @X
		JBS	SR, C
		CLR	BCDBR
		endm
/*---------------------------------
	   [BCDBR|BCDBR+1]   (1~300)
			+1
	-------------------
	   [BCDBR|BCDBR+1]
----------------------------------*/
i12300		macro	BCDBR		; increase from 1 to 300
		MOV	A, BCDBR+1
		ADD	A, @1
		DAA
		MOV	BCDBR+1, A
		JBC	SR, C
		INC	BCDBR
		MOV	A, @0X03
		SUB	A, BCDBR
		JBS	SR, C
		JMP	$End12300
		MOV	A, @1
		SUB	A, BCDBR+1
		JBS	SR, C
		JMP	$End12300
		MOV	A, @1
		MOV	BCDBR+1, A
		CLR	BCDBR
$End12300:
		endm
/*---------------------------------
	   [BCDBR|BCDBR+1]   (300~1)
			-1
	-------------------
	   [BCDBR|BCDBR+1]
----------------------------------*/
d30021		macro	BCDBR
		MOV	A, @256-1
		ADD	BCDBR+1, A
		JBC	SR, DC
		JMP	$d300211
		JBS	SR, C
		JMP	$d300210
		MOV	A, @256-6
		ADD	BCDBR+1, A
		JMP	$End30021
$d300210:	MOV	A, @256-102
		ADD	BCDBR+1, A
		DEC	BCDBR
$d300211:	MOV	A, BCDBR+1
		OR	A, BCDBR
		JBS	SR, Z
		JMP	$End30021
		MOV	A, @0X03
		MOV	BCDBR, A
$End30021:
		endm
/*---------------------------------
	   [BCDBR|BCDBR+1]   (300~0)
			-1
	-------------------
	   [BCDBR|BCDBR+1]
----------------------------------*/
d30020		macro	BCDBR
		MOV	A, @256-1
		ADD	BCDBR+1, A
		JBC	SR, DC
		JMP	$End30020
		JBS	SR, C
		JMP	$d300200
		MOV	A, @256-6
		ADD	BCDBR+1, A
		JMP	$End30020
$d300200:	MOV	A, @256-102
		ADD	BCDBR+1, A
		DEC	BCDBR
$End30020:
		endm
/*---------------------------------
  [HEXBR|HEXBR+1] (=<0x3e7[999]),
  result [BCDBR|BCDBR+1]
----------------------------------*/
H2d10B		macro	HEXBR, BCDBR
		CLR	BCDBR
		MOV	A, HEXBR
		MOV	BCDBR+1, A
		MOV	A, HEXBR+1
$H2D100:	ADD	A, @256-100
		JBS	SR, C
		JMP	$H2D101
		INC	BCDBR
		JMP	$H2D100
$H2D101:	MOV	BCDBR+1, BCDBR+1
		JBC	SR, Z
		JMP	$H2D102
		DEC	BCDBR+1
		INC	BCDBR
		JMP	$H2D100
$H2D102:	ADD	A, @100
$H2D103:	ADD	A, @256-10
		JBS	SR, C
		JMP	$H2D104
		INC	BCDBR+1
		JMP	$H2D103
$H2D104:	ADD	A, @10
		SWAP	BCDBR+1
		OR	BCDBR+1, A
		endm
/*-----------------------------------
  clock X later than clock Y
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  [HrX] | [HrX+1]  (MinX)   clock X
- [HrY] | [HrY+1]  (MinY)   cloxk Y
------------------  [TEMPL ~ TEMPH]
 [Mins] | [Mins+1]	    minutes
------------------------------------*/
CntMins		macro	HrX,HrY,Mins
		CLR	Mins
		CLR	Mins+1
		MOV	A, HrY
		SUB	A, HrX
		JBC	SR, Z
		JMP	$CntMin
		JBS	SR, DC
		ADD	A, @256-6
		MOV	Mins, A
		AND	A, @0x0f
		JBC	Mins, 4
		ADD	A, @10
		JBC	Mins, 5
		ADD	A, @20
		JBC	Mins, 6
		ADD	A, @40
		JBC	Mins, 7
		ADD	A, @80
		MOV	Mins+1, A
		BC	SR, C
		RLC	Mins+1
		RLC	Mins+1
		SWAPA	Mins+1
		AND	A, @0x0f
		MOV	Mins, A
		SWAPA	Mins+1
		AND	A, @0xc0
		COM	Mins+1
		INC	Mins+1
		ADD	Mins+1, A
		JBS	SR, C
		DEC	Mins
$CntMin:	MOV	A, HrX+1
		AND	A, @0x0f
		JBC	HrX+1, 4
		ADD	A, @10
		JBC	HrX+1, 5
		ADD	A, @20
		JBC	HrX+1, 6
		ADD	A, @40
		JBC	HrX+1, 7
		ADD	A, @80
		ADD	Mins+1, A
		JBC	SR, C
		INC	Mins
		MOV	A, HrY+1
		AND	A, @0x0f
		JBC	HrY+1, 4
		ADD	A, @10
		JBC	HrY+1, 5
		ADD	A, @20
		JBC	HrY+1, 6
		ADD	A, @40
		JBC	HrY+1, 7
		ADD	A, @80
		SUB	Mins+1, A
		JBS	SR, C
		DEC	Mins
		endm
/*-----------------------------------
   [HrX] | [HrX+1]  (MinX)   clock X
 - [HrY] | [HrY+1]  (MinY)   cloxk Y
-------------------------------------
compare clock x&y later or early
	 equ:  [x=y]c=1,z=1;
	later: [x>y]c=1,z=0;
	early: [x<y]c=0,z=0.
------------------------------------*/
CMPCLK		macro	HrX,HrY
		MOV	A, HrY
		SUB	A, HrX
		JBS	SR, Z
		JMP	$+3
		MOV	A, HrY+1
		SUB	A, HrX+1
		endm
;#################################################################
; interrupt vector list:
		ORG	0x0000
		JMP	POWER_ON	;00 power on import
		JMP	POWER_ON
		JMP	POWER_ON
		ORG	0x0003
		;page 0
		;JMP	TCC_ISR0	;03 TCC overflow interrupt
;		JMP	POWER_ON
		;JMP	POWER_ON
		BS	INTFLAG, TCCB
		BC	ISR, TCCB
		RETI
		ORG	0x0006
		BC	ISR, MOTORB	; clear flag
		RETI
		;JMP	POWER_ON
		;
		ORG	0x0009
		BC	ISR, INT1B
		RETI
		;JMP	POWER_ON
		;
		ORG	0x000c
		page 0
		JMP	CNT1_ISR0	;0c Counter 1 underflow interrupt
;		JMP	POWER_ON
		;JMP	POWER_ON
		;
		ORG	0x000f
		;page 0
		;JMP	CNT2_ISR0	;0f Counter 2 underflow interrupt
;		JMP	POWER_ON
		;JMP	BS	INTFLAG, CNT2B
		BS	INTFLAG, CNT2B
		BC	ISR, CNT2B
		RETI
		;
		ORG	0x0012
		BC	ISR, HPWTB
		RETI
		;JMP	POWER_ON
		;
		ORG	0x0015
		BC	ISR, LPWTB
		RETI

⌨️ 快捷键说明

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