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

📄 wdt4mmain.s43

📁 射频卡水表源代码 射频卡水表源代码
💻 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 + -