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

📄 lcdavr_1k_1621.src

📁 液晶显示线包式交流稳压器
💻 SRC
📖 第 1 页 / 共 5 页
字号:
        JR      EQ,GET_ACCU_HIGH
        LD      AccuSW_Input,#ACCU_LOW
        JR      DELAY_INPUT
GET_ACCU_HIGH:
        LD      AccuSW_Input,#ACCU_HIGH
        JR      DELAY_INPUT
KEY1_DECISION:
        LD      KeyState1,#KEY_READY
DELAY_INPUT:
        ;CP      DelaySW_Save,#DLY_SKIP
        ;JR      EQ,timer_j00
        CP      Aux_Timer,#0
        JR      NE,timer_j00
        
        TM      P0,#_DELAY_SW   ;Detect P0.3(Delay Switch input) if 1
        JR      NZ,KEY2_DECISION
        CP	DelaySW_Input,#DLY_LONG		;abcd
        JR	EQ,timer_j00
       ; LD	DelaySW_Input,#DLY_LONG
   jfdfdfdsalfjksl:
        LD      Aux_Timer,#SIX_TEN_SECOND
        LD      DelaySW_Save,#DLY_CHANGED
        JR      timer_j00
 set_DELAY_short:
 	;LD	DelaySW_Input,#DLY_SHORT
 	JR	jfdfdfdsalfjksl
KEY2_DECISION:
        ;LD      KeyState2,#KEY_READY
        CP	DelaySW_Input,#DLY_SHORT
        JR	NE,set_DELAY_short
timer_j00:
        CP      RegulateTime,#0
        JR      EQ,STOP_REG_VOUT
        DEC     RegulateTime
        JR      timer_j01
STOP_REG_VOUT:
        AND     P2,#~(_OUT_INC|_OUT_DEC) ;regulate stop
         
timer_j01:
;	CP      VoltDly_Timer,#0   ;10
;	JR      EQ,timer_j0        ;10/12
;	DEC     VoltDly_Timer      ;6

timer_j0:
	;CP      Input_Timer,#0     ;10
	;JR      EQ,timer_j1        ;10/12
	;DEC     Input_Timer        ;6

timer_j1:                          ;10
        CP      System_Timer,#100         ;100*2ms=0.2s
	JR      UGE,timer_j2        ;10/12
	INC     System_Timer       ;6
exit_this_interrupt:	
	AND	T0CON,#0F6H	;CLR Interrupt Flag Of T0
	IRET

timer_j2:
	CLR	System_Timer
	
	DEC	FreshDipsTime
	JR	NZ,skip_FreshDispVolt
	LD	FreshDipsTime,#__600ms
	OR	UserFlag,#FreshDispVolt
skip_FreshDispVolt:
	
	CP      OutputDly_Timer,#0   ;10
	JR      EQ,timer_j20         ;10/12
	DEC     OutputDly_Timer      ;6
	JR      timer_j3
timer_j20:
	CP      DlyLong_Timer,#00H
	JR      EQ,timer_j3
	DEC     DlyLong_Timer
	LD      OutputDly_Timer,#SIX_SECOND

timer_j3:
	CP      TempDly_Timer,#0     ;10
        JR      EQ,timer_j30          ;10/12
	DEC     TempDly_Timer        ;6

timer_j30:
        CP      Aux_Timer,#0       ;10
        JR      EQ,timer_j4       ;10/12
        DEC     Aux_Timer          ;6

timer_j4:
	CP      VoltProtDly_Timer,#0
	JR      EQ,timer_j5
	DEC     VoltProtDly_Timer

timer_j5:
	;CP      Startup_Timer,#0
	;JR      EQ,timer_j6
	;DEC     Startup_Timer

timer_j6:
        CP      LCDBlink_Timer,#0
        JR      EQ,timer_j9
        DEC     LCDBlink_Timer

timer_j7:
	CP      Buzer_Timer,#0
	JR      EQ,timer_j8
	DEC     Buzer_Timer

timer_j8:
	CP      BuzerStop_Timer,#0
	JR      EQ,timer_j9
	DEC     BuzerStop_Timer

timer_j9:
timer_j10:
        CP      DLYINIT_Timer,#0
        JR      EQ,timer_j11
        DEC     DLYINIT_Timer
timer_j11:
        CP      DLYDelay_Timer,#0
        JR      EQ,timer_j12
        DEC     DLYDelay_Timer
timer_j12:
        CP      Load_TimerL,#0
        JR      EQ,timer_j13
        DEC     Load_TimerL
        JR      timer_j14
timer_j13:
        CP      Load_TimerH,#0
        JR      EQ,timer_j14
        DEC     Load_TimerH
        LD      Load_TimerL,#0FFH
timer_j14:
	AND	T0CON,#0F6H	;CLR Interrupt Flag Of T0
        IRET


        
;--------------------------------------------------------------------
; Get Delay time switch input and V_ADC,T_ADC  A/D input
;--------------------------------------------------------------------
Input_Module:    

;=============================
KEY_INPUT:


        CP      DelaySW_Save,#DLY_SKIP
        JR      EQ,AD_INPUT
        CP      DelaySW_Input,#DLY_INIT
        JR      NE,KEY_READ

        LD      DelaySW_Input,#DLY_LONG
        CP      DelaySW_Input,#DLY_LONG
        JR      EQ,Get_Switch
        LD      DelaySW_Input,#DLY_LONG
        LD      DlyLong_Timer,#THREE_MINUTE
        LD      OutputDly_Timer,#SIX_SECOND
        ;LD      Input_Timer,#ONE_SECOND
        JP      AD_INPUT
KEY_READ:
        CP      DelaySW_Save,#DLY_CHANGED
        JR      NE,AD_INPUT
        LD      DelaySW_Save,#DLY_SKIP
        CP      DelaySW_Input,#DLY_LONG
        JR      EQ,KEY_READ_SHORT
        LD      DelaySW_Input,#DLY_LONG
        CP      OutputDly_Timer,#00H
        JR      EQ,AD_INPUT
        LD      DlyLong_Timer,#THREE_MINUTE
        JR      AD_INPUT
KEY_READ_SHORT:
        LD      DelaySW_Input,#DLY_SHORT
        ;CP      DlyLong_Timer,#THREE_MINUTE
        ;JR      ULT,KEY_CHANGE_START
        ;CP      OutputDly_Timer,#THREE_SECOND
        ;JR      ULE,KEY_CHANGE_START
        LD      DlyLong_Timer,#00H
        LD     OutputDly_Timer,#SIX_SECOND
        JR      AD_INPUT
KEY_CHANGE_START:
        CLR     DlyLong_Timer
        CLR     OutputDly_Timer
        JR      AD_INPUT
Get_Switch:
	LD	DelaySW_Input,#DLY_SHORT
	CLR	DlyLong_Timer	;加入 abcd
	
	TM      P0,#_DELAY_SW  
	JR	NZ,set_delay_short_here	
	
        LD      DelaySW_Input,#DLY_LONG;DLY_SHORT修改 abcd
        LD      DlyLong_Timer,#THREE_MINUTE	;加入 abcd
set_delay_short_here:
	;LD      DlyLong_Timer,#00H
        LD      OutputDly_Timer,#SIX_SECOND
        
	;LD      Input_Timer,#ONE_SECOND


;===============
AD_INPUT::
        CALL    TEMP_ADC
        CALL    OUTPUT_VOLT_ADC
	CP      SystemStatus,#SYSTEM_INIT
        JR      EQ,AD_INPUT_EXIT
        CP      DLYDelay_Timer,#00H
        JR      NE,AD_INPUT_EXIT
        ;CALL    INPUT_VOLT_ADC
        LD      CurrADFlag,#CURR_AD_START
AD_INPUT_EXIT:
        CALL    INPUT_VOLT_ADC
        CALL    OUTPUT_CURR_ADC
        RET
;==============================
TEMP_ADC::
	LD	ADCON,#TEMP_ADCONTROL|START_ADC
	LD	R7,#30 ; 30 * 50us=1.5ms
	CLR	R6
	CALL	GetMaxMinData
	RCF
	RRC	R0
	RRC	R1
	
	RCF
	RRC	R0
	RRC	R1
	LD      T_ADValue,R1    ;Use only high 8-bit
        RET
;===============
OUTPUT_VOLT_ADC::
	
	LD	ADCON,#OUTVOLT_ADCONTROL|START_ADC
	CALL	SampleNew
	LD	OutVoltRegulate+1,R7 ;用于调压
	LD	OutVoltRegulate,R6   ;
	
	CALL	cal_outvolt
	
        ;LD      V_ADValueH,R4
        ;LD      V_ADValueL,R5

        RET
;==============================
INPUT_VOLT_ADC::
	LD	ADCON,#INVOLT_ADCONTROL|START_ADC
	CALL	SampleNew
	CALL	calc_involt

        ;LD      VIn_ADValueH,R4
        ;LD      VIn_ADValueL,R5

        RET

;===================================
OUTPUT_CURR_ADC::

	LD	ADCON,#CURR_ADCONTROL|START_ADC
	AND	UserFlag,#~FreshAdc
waite_still_do:
	CLRWDT
	TM	UserFlag,#FreshAdc
	JR	Z,waite_still_do
	
	
        LD      R0,#ADC_Buffer
        LD      R1,#7
        LD      R13,CURR_ADValueH
        LD      R14,CURR_ADValueL
CURR_ADC_CIRCLE:
        LD      R2,#20H
        CLR     R5
        CLR     R6
        CLR     R7
        CLR     R8
CURR_ADC_NEXT:
        ;LD      ADCON,#00010100B     ;P1.1:T_ADC, Clock=Fosc/4
	;OR      ADCON,#00000001B     ;Start A/D
CURR_Conv_loop:
	CLRWDT
	TM	UserFlag,#FreshAdc
	JR	Z,waite_still_do
	AND	UserFlag,#~FreshAdc
;CURR_Conv_loop:
;	TM      ADCON,#00001000B     ;Check EOC bit
;        JR      Z,CURR_Conv_loop

        LD      R9,AdataH    ;Save high 8-bit
        LD      R10,AdataL    ;Save low 2-bit

        CLR     CURR_ADValueH           ;First clear ADValue High/Low byte
        CLR     CURR_ADValueL

	RCF
        RLC     R9
        RLC     CURR_ADValueH
	RCF
        RLC     R9
        RLC     CURR_ADValueH

        LD      CURR_ADValueL,R9
        OR      CURR_ADValueL,R10
        LD      R3,CURR_ADValueH
        LD      R4,CURR_ADValueL
        CP      R3,#03H
        JR      ULT,ADC_GOON
        CP      R4,#0A0H
        JR      UGT,GET_SHORTED
ADC_GOON:
        CP      CurrADFlag,#CURR_AD_START
        JR      NE,CURR_ADC_EXIT
        CALL    GET_LARGE_SMALL
        CALL    Delay_1ms
        DEC     R2
        CP      R2,#00H
        JR      UGT,CURR_ADC_NEXT

        SUB     R6,R8
        SBC     R5,R7
        CP      R5,#OVER_500LOADH
        JR      ULT,NORMAL_GOON
        CP      R6,#OVER_500LOADL
        JR      UGT,GET_SHORTED
NORMAL_GOON:
        LD      @R0,R5
        INC     R0
        LD      @R0,R6
        INC     R0
        DEC     R1
        CP      R1,#00H
        JR      UGT,CURR_ADC_CIRCLE
        CALL    SORT_DATA
        LD      CURR_ADValueH,R4
        LD      CURR_ADValueL,R5
        RET
CURR_ADC_EXIT:
        LD      CURR_ADValueH,R13
        LD      CURR_ADValueL,R14
        RET

GET_SHORTED:
        LD      LoadState,#LOAD_PROT
        OR      UserFlag,#ShortFlag
	LD      SystemStatus,#SYSTEM_FAILED    ;Set system failed
        RET
;----------------------------------------
SORT_DATA:
        LD      R0,#ADC_Buffer        
        LD      R1,#ADC_Buffer+1
        LD      R2,#ADC_Buffer+2
        LD      R3,#ADC_Buffer+3
        LD      R11,#06H

SORT_NEXT_CIRCLE:
        LD      R8,R11

SORT_NEXT_DATA:     
        LD      R4,@R0
        LD      R5,@R1
        LD      R6,@R2
        LD      R7,@R3
        CP      R4,R6
        JR      UGT,SORT_SKIP
        JR      ULT,SORT_EXCHANGE
        CP      R5,R7
        JR      UGE,SORT_SKIP
SORT_EXCHANGE:
        LD      @R0,R6
        LD      @R1,R7
        LD      @R2,R4
        LD      @R3,R5
        
SORT_SKIP:
        ADD     R2,#02H
        ADD     R3,#02H
        DEC     R8
        JR      NZ,SORT_NEXT_DATA

        ADD     R0,#02H
        ADD     R1,#02H
        LD      R2,R1
        INC     R2
        LD      R3,R2
        INC     R3
        DEC     R11
        JR      NZ,SORT_NEXT_CIRCLE
        LD      R0,#ADC_Buffer+6
        LD      R1,#ADC_Buffer+7
        LD      R4,@R0
        LD      R5,@R1
        RET
        
;-----------------------------------------
GET_LARGE_SMALL:
        CP      R2,#20H
        JR      EQ,SET_INIT
        CP      R5,R3
        JR      UGT,GET_EXCHANGE_LOW
        JR      ULT,GET_EXCHANGE_HIGH
        CP      R6,R4
        JR      UGE,GET_EXCHANGE_LOW
GET_EXCHANGE_HIGH:
        LD      R5,R3
        LD      R6,R4
        RET
SET_INIT:
        LD      R5,R3
        LD      R7,R3
        LD      R6,R4
        LD      R8,R4
        RET
GET_EXCHANGE_LOW:
        CP      R7,R3
        JR      ULT,GET_LAR_SMALL_EXIT
        JR      UGT,GET_LOW_BENG
        CP      R8,R4
        JR      ULE,GET_LAR_SMALL_EXIT
GET_LOW_BENG:
        LD      R7,R3
        LD      R8,R4
GET_LAR_SMALL_EXIT:
        RET

;--------------------------------------------------------------------
; Delay_1ms 1ms
;  One period is 15us, if delay 1ms, R1=1000/15=67
;--------------------------------------------------------------------
Delay_1ms:
	PUSH    R1

        LD      R1,#140
loop_1ms:
        NOP                   ;6 cycle
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP

	DEC     R1            ;6
	JR      NZ,loop_1ms    ;12/10

	POP     R1
	RET
         
;--------------------------------------------------------------------
; Detect regulated output voltage, transformer temperature
;--------------------------------------------------------------------
Detect_Module::    
      
	CALL    Detect_Overtemp

	CALL    Detect_OverOrUnder_Voltage

        CALL    Detect_Overload

       ; CALL    Detect_Output_Regulate

        CP      SystemStatus,#SYSTEM_INIT
        JR      EQ,DETECT_EXIT
        CP      CurrADFlag,#CURR_AD_START
        JR      NE,DETECT_EXIT
        OR      UserFlag,#DetectFlag
        LD      CurrADFlag,#CURR_AD_STOP

check_volt_disp:        
	CALL	sumallfordisp
	TM	UserFlag,#FreshDispVolt
	JR	Z,skip_volt_fresh_dispf
	AND	UserFlag,#~FreshDispVolt
	CALL	checkallfordisp

        CALL    Detect_DLY_VIN
        CALL    Detect_DLY_VOUT
        CALL    Detect_DLY_CURR
skip_volt_fresh_dispf:
        RET
DETECT_EXIT:
        AND      UserFlag,#~DetectFlag
        JR	check_volt_disp
;-----------------------------------------------------------------
InVoltForDisp:		.RAM_DS 2
OutVoltForDisp:		.RAM_DS 2
DispCnt:		.RAM_DS 1

sumallfordisp:	
	ADD	InVoltForDisp+1,VIn_ADValueL
	ADC	InVoltForDisp,VIn_ADValueH

	ADD	OutVoltForDisp+1,V_ADValueL
	ADC	OutVoltForDisp,V_ADValueH

	INC	DispCnt
	RET
;===================================
checkallfordisp:
	LD	R1,InVoltForDisp+1
	LD	R0,InVoltForDisp
	LD	R3,DispCnt
	CLR	R2
	CALL	dbl_divs
	LD	VIn_ADValueL,R1
	LD	VIn_ADValueH,R0
	
	LD	R1,OutVoltForDisp+1
	LD	R0,OutVoltForDisp
	LD	R3,DispCnt
	CLR	R2
	CALL	dbl_divs
	LD	V_ADValueL,R1
	LD	V_ADValueH,R0

	CLR	DispCnt
	CLR	InVoltForDisp+1
	CLR	InVoltForDisp
	CLR	OutVoltForDisp+1
	CLR	OutVoltForDisp
	RET

;-----------------------------------------------------------------
Detect_DLY_VIN:	;设置显示输入电压
        LD      R6,VIn_ADValueH
        LD      R7,VIn_ADValueL
        ;LD      R6,CURR_ADValueH
        ;LD      R7,CURR_ADValueL
        
        ;LD	R7,CurrentCycle+1
        ;LD	R6,CurrentCycle
	CALL	BCD_conversion
        LD      VoltIn_Value1,R3
        LD      VoltIn_Value2,R4
        LD      VoltIn_Value3,R5

⌨️ 快捷键说明

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