📄 wdt4mmain.s43
字号:
//*****************************************************************************//
//***** This is the main program for the water-meter's control software ******//
//****************************** We begin from this ***************************//
NAME Main
//****************************** Extern Declaration ***************************//
#include "WDT4MDefination.h"
extern INIT_ALL
extern SaveSystemData
extern MeasureWater
extern CardAccess
extern SystemProtect
extern AVprompt
extern DLY10MS
extern SYSTEMDATA1
extern SYSTEMDATA2
//*****************************************************************************//
RSEG CODE
Main DINT ;Disable all interrupt
mov.b #18h,&SVSCTL ;040608
MOV #0300H,SP ; Init Stack pin
CALL #INIT_ALL ;Initialize all the system's
clr.b &IE1
mov.b #BTIE,&IE2
call #IniOthers ;040817
EINT
MainLoop
bit #OtherInt
jnz MainNXT
bit #TIMFG
jz Sleep
MainNXT
CALL #MeasureWater
CALL #CardAccess
CALL #SystemProtect
CALL #AVprompt
CALL #SaveSystemData
Sleep bis #LPM3+GIE,SR ;开放中断并进入睡眠方式
nop
jmp MainLoop
//******************************* Port 1 Interrupt ********************************//
Port1INT
bic #LPM3,0(SP) ;退出睡眠状
push AX
PUSH DX
PUSH CX
CALL #Port1IntServe
POP CX
POP DX
pop AX
reti
//*************************** Port 1 Interrupt service ***************************//
//**************************** Water meter wheel count ***************************//
Port1IntServe
//sjh:040209-->
BIT #ValveOperatingFG
JNZ PISNXT1
bit #VALVEFG
JZ PISNXT1
cmp.b #31,&VCCOUNT
jhs PISNXT
inc.b &VCCOUNT
inc.b &VCP1INT
cmp.b #3,&VCP1INT
jlo PISNXT1
clr.b &VCP1INT
// BIC #VALVEFG
bis #CloseValveFG
bis #CloseValve2FG
jmp PISNXT1
PISNXT
bis #VALVERuined
//<--sjh:040209
PISNXT1
bis #OtherInt
bit.b #TA0,&P1IFG
jz PISRTN
bic.b #TA0,&P1IFG
bit.b #TA0,&P1IN
jz PISRTN
mov &EndTime,&StartTime
mov.b &BTCNT1,&EndTimeL
mov.b &BTCNT2,&EndTimeH
bit #FirstPulse
jnz PISNXT2
bis #FirstPulse
//040817 bic #WaterFlowFG
//040817 mov #00H,&Interval
mov #900,&Interval
//040817 jmp PISRTN
jmp PISNXT4 ;040817
PISNXT2
//040817 bis #WaterFlowFG
cmp &EndTime,&StartTime
jhs PISNXT3
mov &EndTime,AX
sub &StartTime,AX
RRA AX
RRA AX
RRA AX
RRA AX
RRA AX
and #0000011111111111B,AX
add AX,&Interval
jmp PISNXT4
PISNXT3
cmp #Step,&Interval
jlo PISRTN
mov &StartTime,AX
sub &EndTime,AX
RRA AX
RRA AX
RRA AX
RRA AX
RRA AX
and #0000011111111111B,AX
sub AX,&Interval
PISNXT4
cmp #00H,&Interval
jeq PISRTN
CMP #900,&Interval
JLO PISNXT5
MOV #900,&Interval
PISNXT5
MOV &Interval,AX
MOV #00H,&Interval
BIT #LowSpeed
JZ PISNXT6
CMP #80,AX
JHS PISNXT7
BIC #LowSpeed
JMP PISNXT7
PISNXT6
CMP #600,AX
JLO PISNXT7
BIS #LowSpeed
PISNXT7
MOV.B SYSTEMDATA1(AX),DX
AND #0FFH,DX
RRA AX
MOV.B SYSTEMDATA2(AX),CX
JC PISNXT8
RRA.B CX
RRA.B CX
RRA.B CX
RRA.B CX
PISNXT8
AND #0FH,CX
SWPB CX
ADD CX,&Oddment
ADD DX,&Oddment
bis #WaterFlowFG ;040817
PISNXT9
CMP #10000,&Oddment
JLO PISRTN
SUB #10000,&Oddment
INC &Dosage
JMP PISNXT9
PISRTN
ret
//******************************* Port 2 Interrupt *******************************//
//*********************************** Card on ************************************//
Port2Int
bic #LPM3,0(SP) ;退出睡眠状态,禁止中断?????
PUSH AX2
PUSH BX2
PUSH CX
PUSH DX
CALL #Port2IntServe
POP DX
POP CX
POP BX2
POP AX2
reti
//*************************** Port 2 Interrupt service ***************************//
//************************************ Card on ***********************************//
Port2IntServe
MOV.B #DSPTM_,&DSPTM
bit #CARDOP
jnz CardDo
call #Insert ;插卡检测程序
CardDo
call #Poarch
bic.b #CardIn+POAR,&P2IFG
RET
;**************************************
;---------------2002.6.21---------------
;窃用检测程序
;---------------------------------------
Poarch bit.b #POAR,&P2IFG
jz Poar_end
call #FLTER
bit.b #POAR,&P2IN
jz Poar_end
bis #LOSEFG
bic.b #POAR,&P2IFG
Poar_end
ret
;------------插卡检测程序-------------------
;USE: AX2,CX,DX
;------------------------------------------
Insert bit.b #CardIn,&P2IFG
jz Insert0
call #FLTER
bit.b #CardIn,&P2IN
jnz Insert0
bis #CARDFG
bic.b #CardIn,&P2IFG
;bic #TIMESFG
Insert0 ret
;--------------------------------------
;滤波子程序
;USE: BX2
;--------------------------------
#define FLT_ 1500
FLTER
mov #FLT_,BX2
FLTER1
dec BX2
jnz FLTER1
ret
;******时钟定时中断服务程序********************
;USE: (ISR_wdt:AX,CX,DX,EX), AX2,BX2
;**************************************************
BaseTimerInt
DINT
BIC #LPM3,0(SP) ;退出睡眠状态
PUSH AX
PUSH CX
PUSH DX
PUSH EX
PUSH AX2
PUSH BX2
CALL #BasicTimerServe
POP BX2
POP AX2
POP EX
POP DX
POP CX
POP AX
EINT
reti
//*********************** Basic Timer Interrupt serving Progrm **********************//
BasicTimerServe
bic #OtherInt
bic #TIMFG ;1 second bit
bit #FirstPulse
jz BTSNXT1
mov.b &BTCNT2,AX
and #11000000B,AX
jnz BTSNXT1
ADD #Step,&Interval
cmp #1800H,&Interval
jLO BTSNXT1
mov #00H,&Interval
bic #FirstPulse
BIC #LowSpeed
BTSNXT1 mov #WDTPW+WDTCNTCL+WDTSSEL,&WDTCTL ;clear the Watchdog
INC.b &ClockTCount
cmp.B #2,&ClockTCount
JNE BTSRTN
BTSNXT2
bis #TIMFG ;1 second bit
bis #VolDectFG ;040608
CLR.B &ClockTCount
CALL #TimerCount
CALL #Calendar
BTSRTN
RET
//*************************** Time count for some system ***************************//
//** These count are Valve-close, Water-stolen, Voatage-checking, LCD-display, etc**//
TimerCount
tst &PORTIME ;Water stealing time limitation
jz Time0a
dec &PORTIME
Time0a tst.b &T_V_TIM ;open or close valve time count
jz Time1a
dec.b &T_V_TIM
tst.b &T_V_TIM ;open or close valve time count
jnz Time1a
bit #ValveOperatingFG
jz Time1a
bic #ValveOperatingFG
bic.b #Mo_H,&P6OUT
bic.b #Mo_L,&P6OUT
xor #VALVEFG
Time1a tst.b &ValveGap ;Check card delay time count
jz Time1b
dec.b &ValveGap
tst.b &ValveGap
jnz Time1b
bit #VALVEFG ;040608
jz Time1c
bic #CloseValveFG
bis #OpenValveFG
jmp Time1b
Time1c
bis #CloseValveFG
bic #OpenValveFG
Time1b
bis #DSPFG
tst.b &DSPGAP ;显示切换,余量,累计
jz Time1b1
dec.b &DSPGAP
bic #DSPFG
Time1b1
tst.b &DSPTM ;显示延时时间
jz TCRTN
dec.b &DSPTM ;;定时关显示器
Time1b2
//sjh:040817 move --->
/*
tst.b &CHVTM ;
jz TCRTN
dec.b &CHVTM_
tst.b &CHVTM ;
jnz TCRTN
bit #VALVERuined
jnz TCRTN
mov.b #0H,&VCCOUNT
bic.B #SenPWR,&P1OUT
*/
//<--- sjh:040817 move
TCRTN RET
//*************************** Time calculate Program **************************//
Calendar
inc.b &SEC ;万年历程序--日历有效2001-2399年
cmp.b #60,&SEC
jlo Clock_rtn
inc.b &MIN ;1min到,调整分
clr.b &SEC
cmp.b #60,&MIN
jlo Clock_rtn
inc.b &HOUR ;1h到,调整小时
clr.b &MIN
cmp.b #24,&HOUR
jlo Clock_rtn
inc.b &DAY ;1d到,调整日
BIS #NEWRFG
clr.b &HOUR
mov.b &MON,BX2 ;计算每月最大天数
mov.b DateTab(BX2),AX2
cmp.b #2,BX2
jne Time2b
mov &YEAR,BX2
and.b #3,BX2 ;判断是否是2月份润月?
jne Time2b
mov.b #30,AX2
Time2b cmp.b AX2,&DAY ;!!!!!!!!wqs 02/02/25
jlo Clock_rtn
MOV.B &MON,AX
AND #0FH,AX
RLA AX
mov &ThisMonth,January(AX)
MOV #00H,&ThisMonth
inc.b &MON ;1个月到
MOV.B #ValveGap_,&ValveGap
bit #VALVEFG ;040608
jz Time2c
bic #CloseValveFG
bis #OpenValveFG
jmp Time2d
Time2c
bis #CloseValveFG
bic #OpenValveFG
Time2d mov.b #1,&DAY ;每月的第一日
cmp.b #13,&MON
jlo Clock_rtn
MOV.B #01H,&MON
inc &YEAR
Clock_rtn
RET
;-------------------------------------------------
DateTab db 0
db 32,29,32,31,32,31 ;每个月的天数+1
db 32,32,31,32,31,32
even
;-------------------------------------------------
OtherINT ;Other Interrupts
call #IniOthers
reti
;-----------------------------------------------------------
IniOthers
clr.b IE1
mov.b #BTIE,&IE2
bic #TAIE+TAIFG,&TACTL
bic #CCIE,&CCTL0
bic #CCIE+CCIFG,&CCTL1
bic #CCIE+CCIFG,&CCTL2
clr.b &CACTL1
clr.b &CACTL2
clr.b &CAPD
ret
//***************************** Interrupt Enterance ***************************//
//********************* All Interrupt Entered from this ***********************//
RSEG INTVEC
INT dw BaseTimerInt ;Basic Timer1
dw Port2Int ;P2.0-P2.7 Interrupt
dw Main ;Trap for Unused Int
dw Main ;Trap for Unused Int
dw Port1INT ;P1.0-P1.7 Interrupt
dw OtherINT ;Trap for Timer_A3 TACCR0 CCIFG
dw OtherINT ;Trap for Timer_A3 CCIFGs, TAIFG TACCR1 and TACCR
dw Main ;Trap for Unused Int
dw Main ;Trap for Unused Int
dw Main ;Trap for Unused Int
dw OtherINT ;Watchdog Timer over
dw OtherINT ;Comparator_A
dw Main ;Trap for Unused Int
dw Main ;Trap for Unused Int
dw Main ;Trap for NMI Oscillator Fault Flash memory access violation
dw Main ;WDTIFG,KEYV
//****************** Good Luck! We come to the end at last! *******************//
END Main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -