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