📄 dingshikaishui.dt
字号:
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 + -