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

📄 lcdavr_1k_1621.src

📁 液晶显示线包式交流稳压器
💻 SRC
📖 第 1 页 / 共 5 页
字号:
        RET
;--------------------------------
Detect_DLY_VOUT:;设置显示输出电压
        LD      R6,V_ADValueH
        LD      R7,V_ADValueL
                
	CALL	BCD_conversion
        LD      VoltOut_Value1,R3
        LD      VoltOut_Value2,R4
        LD      VoltOut_Value3,R5
        RET

    
;------------------------------------------------------------------
; 入口: R6:数据高八位 R7:数据低八位
; 出口: BCD码->低:(R2,),R3,R4,R5
BCD_conversion::
		CLR     R2
		CLR     R3
		
		
	_1000_loop:
		LD      R4,R6		;转换千位
		LD	R5,R7
		SUB     R7,#1000%256
		SBC     R6,#1000/256
		JR      C,conversion_next
		INC     R2
		JR      _1000_loop
		
        conversion_next:
		LD      R6,R4		;转换百位
		LD	R7,R5
	_100_loop:
		LD      R4,R6
		LD	R5,R7
		SUB     R7,#100
		SBC	R6,#0
		JR      C,_10_loop
		INC     R3
		JR      _100_loop
					;转换百位
	_10_loop:
		LD	R6,R5
		SUB	R5,#10
		JR	C,end_of_BCD_conversion
		INC	R4
		JR	_10_loop	;转换个位
	end_of_BCD_conversion:
		LD	R5,R6		
		RET
;-------------------------------------------------------------	

           
;---------------------------------
Detect_DLY_CURR:
        CLR     CURROut_Value1
        CLR     CURROut_Value2
        LD      R0,CURR_ADValueH
        LD      R1,CURR_ADValueL
	RCF
	RLC	R1
	RLC	R0
	LD	R3,R1
	LD	R2,R0
	
	RCF
	RLC	R1
	RLC	R0
	RCF
	RLC	R1
	RLC	R0
	ADD	R1,R3
	ADC	R0,R2
	LD	R3,#11	
	LD	R2,#0
	CALL	dbl_divs
	LD	R7,R1
	LD	R6,R0
	CALL	BCD_conversion
	
	CP	R3,#0
	JR	NE,set_no_point_dips
        LD      display_set2,#display_set2_P
        CP	R4,#0
        JR	NE,eretjetjel;tjel
        RCF	
        RRC	R5
        RCF
        RRC	R5
        CP	R5,#0
        JR	EQ,eretjetjel
        DEC	R5
        
eretjetjel:        
        LD      CURROut_Value1,R4
        LD      CURROut_Value2,R5
	RET
set_no_point_dips:
        CLR     display_set2
        ;CALL    HEX_TO_BCD
        LD      CURROut_Value1,R3
        LD      CURROut_Value2,R4
        RET
	
;-------------------------------------------------------------------
Detect_Overload::
        CP      LoadState,#LOAD_PROT
        JP      EQ,DET_LOAD_EXIT
	CP      SystemStatus,#SYSTEM_NORMAL     ;if system in normal operation
        JP      NE,DET_LOAD_EXIT

        CP      CURR_ADValueH,#OVER_300LOADH
        JR      ULT,DET_180LOAD
        JR      UGT,BEGIN_300LOAD
        CP      CURR_ADValueL,#OVER_300LOADL
        JR      ULT,DET_180LOAD
BEGIN_300LOAD:
        LD      LoadState,#LOAD_OVER5
        LD      R3,#THREE_TWO_SECOND
        LD      R4,#0
        JP      ACT_LOAD_LOW

DET_180LOAD:
	CP	CURR_ADValueH,#OVER_180LOADH
	JR	ULT,DET_160LOAD
	JR	UGT,set_over4
        CP      CURR_ADValueL,#OVER_180LOADL
        JR      ULT,DET_160LOAD
   set_over4:
        LD      LoadState,#LOAD_OVER4
        LD      R3,#TEN_SECOND
        LD      R4,#0
        JP      ACT_LOAD_LOW
        ;
DET_160LOAD:
        CP      CURR_ADValueH,#OVER_160LOADH
        JR      UGT,BEGIN_160LOAD
        JR	ULT,DET_140LOAD
        CP      CURR_ADValueL,#OVER_160LOADL
        JP      ULT,DET_140LOAD
BEGIN_160LOAD:
        LD      LoadState,#LOAD_OVER3
        LD      R3,#0FFH
        LD      R4,#FIVE_MINUTE
        JP      ACT_LOAD_LOW
DET_140LOAD:
        CP	CURR_ADValueH,#OVER_140LOADH
        JR	UGT,set_over2
        JR	ULT,DET_120LOAD
        CP      CURR_ADValueL,#OVER_140LOADL
        JR      ULT,DET_120LOAD
   set_over2:
        LD      LoadState,#LOAD_OVER2
        LD      R3,#0FFH
        LD      R4,#THIRTY_MINUTE
        JP      ACT_LOAD_LOW

DET_120LOAD:
	CP	CURR_ADValueH,#OVER_120LOADH
	JR	UGT,set_votlejfdj
	JR	ULT,DET_LOAD_NORMAL
        CP      CURR_ADValueL,#OVER_120LOADL
        JR      ULT,DET_LOAD_NORMAL
  set_votlejfdj:
        LD      LoadState,#LOAD_OVER1
        LD      R3,#0FFH
        LD      R4,#SIXTY_MINUTE
ACT_LOAD_HIGH:
ACT_LOAD_LOW:
        CP      LoadCounter,#LOAD_NORMAL
        JR      EQ,START_120LOAD
        CP      LoadState,LoadCounter
        JR      ULT,ACT_LOAD_UP
        CP      Load_TimerH,R4
        JR      UGT,START_120LOAD
        JR      ULT,DET_LOAD_EXIT
        CP      Load_TimerL,R3
        JR      UGT,START_120LOAD

        JP      DET_LOAD_EXIT
ACT_LOAD_UP:
;        SUB     R3,Load_TimerL
;        SBC     R4,Load_TimerH

START_120LOAD:
        LD      Load_TimerH,R4
        LD      Load_TimerL,R3
DET_LOAD_EXIT:
        LD      LoadCounter,LoadState
        RET
DET_LOAD_NORMAL:
        AND     UserFlag,#~ShortFlag
        LD      LoadState,#LOAD_NORMAL
        LD      Load_TimerH,#0
        LD      Load_TimerL,#0
        LD      LoadCounter,LoadState
        RET




;--------------------------------------------------------------------
; Detect if over temperature
;--------------------------------------------------------------------
Detect_Overtemp:
	CP      Temp_Protect,#TEMP_PROTECTED
        JR      EQ,temp_exit
	CP      T_ADValue,#T_PROTECT_VALUE
	JR      ULE,overtemp

normtemp:
	CP      Temp_Status,Temp_Status_Save
	JR      NE,temp_exit
	LD      TempDly_Timer,#FIVE_SECOND
	LD      Temp_Status,#TEMP_NORMAL
        LD      Temp_Protect,#TEMP_NOPROTECTED
        JP      temp_exit


overtemp:
	LD      Temp_Status,#TEMP_HIGH
	CP      TempDly_Timer,#0
	JR      NE,temp_exit
	LD      Temp_Protect,#TEMP_PROTECTED
        LD      TempDly_Timer,#TWO_SECOND      ;restore delay time
	JP      temp_exit

temp_exit:
	LD      Temp_Status_Save,Temp_Status
	RET

;--------------------------------------------------------------------
; Detect if output voltage great than 260V or less than 180V
;--------------------------------------------------------------------
CJUGTRR0L:	.MACRO L,addr
	CP	R0,#L/256
	JP	UGT,addr
	JR	ULT,nxt
	CP	R1,#L%256
	JP	UGT,addr
nxt:
	.ENDM
CJULTRR0L:	.MACRO L,addr
	CP	R0,#L/256
	JP	ULT,addr
	JR	UGT,nxt
	CP	R1,#L%256
	JP	ULT,addr
nxt:
	.ENDM
	;=-===========
Detect_OverOrUnder_Voltage::
	LD	R1,V_ADValueL			  ;Detect if over voltage
	LD	R0,V_ADValueH
	
	CJUGTRR0L	290,set_pro_imm
	JR	DETECT_VOUT_OVER_CHOICE
;        CP      V_ADValueH,#02H
;        JR      ULT,voltprot_normal_exit
;        JR      EQ,DETECT_VOUT_OVER_CHOICE
set_pro_imm:
        LD      Volt_PStatus,#VOLT_HIGH		;电压很高,立即保护
        LD      VoltProtDly_Timer,#0
        JP      voltprot_exit
        ;==================
DETECT_VOUT_OVER_CHOICE:
        ;CP      V_ADValueL,#VHIGH_PROTECT_VALUE
        ;JR      UGE,overhighvolt
        CJUGTRR0L	250,overhighvolt
voltprot_normal_exit:                                                ;Detect if under voltage
        CP      Volt_PStatus,#VOLT_NORMAL
	JR      NE,restore_normal

        LD      Volt_PStatus,#VOLT_NORMAL
        JP      voltprot_exit
                                                ;Detect if system in fail protect status

restore_normal:
					  ;Detect if over voltage
        ;CP      V_ADValueL,#VHIGH_PROTECT_VALUE-20H
        ;JR      UGE,overhighvolt
	 CJUGTRR0L	245,overhighvolt
				  ;Detect if under voltage
        LD      Volt_PStatus,#VOLT_NORMAL
	LD      Volt_Protect,#VOLT_NOPROTECTED
        JP      voltprot_exit

overhighvolt:

next_294v_point:
         CJULTRR0L	270,next_284v_point	;<265V 转
	;CP      V_ADValueL,#VHIGH_294V_VALUE
        ;JR      ULT,next_284v_point

        LD      R3,#EIGHT_TEN_SECOND	;>265V 0.8秒保护
        
ACT_VOUT_POINT:
        CP      Volt_PStatus,#VOLT_HIGH
        JR      NE,TURN_TO_294V
        CP      VoltProtDly_Timer,R3
        JR      ULE,voltprot_exit
        LD      VoltProtDly_Timer,R3
        JP      voltprot_exit
TURN_TO_294V:
        LD      Volt_PStatus,#VOLT_HIGH
        LD      VoltProtDly_Timer,R3
        JP      voltprot_exit

next_284v_point:
        ;CP      V_ADValueL,#VHIGH_284V_VALUE
        ;JR      ULT,next_274v_point
	CJULTRR0L	260,next_274v_point	;<260V 转
        LD      R3,#TWO_SECOND
        JP      ACT_VOUT_POINT

next_274v_point:
        ;CP      V_ADValueL,#VHIGH_274V_VALUE
        ;JR      ULT,next_264v_point
	CJULTRR0L	255,next_264v_point	;<255V 转

        LD      R3,#THREE_SECOND
        JP      ACT_VOUT_POINT
next_264v_point:
       ;CP      V_ADValueL,#VHIGH_PROTECT_VALUE
	;JR      ULT,voltprot_exit
	CJULTRR0L	250,voltprot_exit	;<255V 转

        LD      R3,#FIVE_SECOND
        JP      ACT_VOUT_POINT


voltprot_exit:
	;LD      Volt_PStatus_Save,Volt_PStatus
	RET


;=====================================SYSTEM INIT OUTPUT
SYS_INIT_OUTPUT:
	CP      SystemStatus,#SYSTEM_INIT
        JR      NE,SYSTEM_NORMAL_OUT
	CP      DlyLong_Timer,#00H
        JR      UGT,SYSTEM_INIT_EXIT
	CP      OutputDly_Timer,#00H
        JR      UGT,SYSTEM_INIT_EXIT
;        LD      DelaySW_Input,#DLY_SKIP
	LD      SystemStatus,#SYSTEM_NORMAL
SYSTEM_NORMAL_OUT:
SYSTEM_INIT_EXIT:
	RET
;==================================
VoltUp		MACRO			;电压向上调节,伺服驱动硬件模型 P0.1
		AND	P2,#~(01H|02H)  
		OR	P2,#02H	       
		ENDM
		
VoltDn		MACRO			;电压向下调节,伺服驱动,P0.2
		AND	P2,#~(01H|02H)  
		OR	P2,#01H         
		ENDM

;--------------------------------------------------------------------
; Control motor positive/reverse rotate, Output relay switching, and 
;  buzerr's output
;--------------------------------------------------------------------
Output_Module:
	CALL    SYS_INIT_OUTPUT
;	CP      SystemStatus,#SYSTEM_INIT      ;if system is init. status
;	JR      NE,output_regulate

;=============== Startup stage

	;CP      Startup_Timer,#0
        ;JR      NE,exit_volt_regu
						 ;Voltage is normal,and then

;=====================
output_regulate::

auto_regulate::
	CLR	R2	
	LD	R7,OutVoltRegulate+1
	LD	R6,OutVoltRegulate
	SUB	R7,#OUT_100ADC%256
	SBC	R6,#OUT_100ADC/256
	JR	NC,skip_abs
	LD	R2,#1	;输出电压低
	COM	R7
	COM	R6
	ADD	R7,#1
	ADC	R6,#0
skip_abs:
	CP	R6,#0
	JR	NZ,start_regulate
	CP	R7,AccuSW_Input
	JR	UGT,start_regulate
	CLR	RegulateTime
        AND     P2,#~(_OUT_INC|_OUT_DEC)      ; regulate stop
	;VoltUndo
	JR	exit_volt_regu
start_regulate:
	CALL	calc_regulate_time
	LD	RegulateTime,R0
	CP	R2,#1
	JR	EQ,set_volt_up
	VoltUp
	JR	exit_volt_regu
set_volt_up:
	VoltDn	
exit_volt_regu:	
	;===================




;===================
sys_norm_fail:

        CP      LoadState,#LOAD_PROT
        JR      EQ,sysfail
        CP      LoadState,#LOAD_NORMAL
        JR      EQ,OUT_TEMP_OVER
        CP      Load_TimerH,#0
        JR      NE,OUT_TEMP_OVER
        CP      Load_TimerL,#0
        JR      NE,OUT_TEMP_OVER
        LD      LoadState,#LOAD_PROT
	LD      SystemStatus,#SYSTEM_FAILED    ;Set system failed
        JP      sysfail
OUT_TEMP_OVER
	CP      Temp_Protect,#TEMP_PROTECTED   ;if temp. protect
	JR      NE,voltprot
	LD      SystemStatus,#SYSTEM_FAILED    ;Set system failed
	JP      sysfail
voltprot:
	CP      Volt_PStatus,#VOLT_NORMAL      ;if volt. protect
	JR      EQ,sys_norm
	CP      VoltProtDly_Timer,#0
        JR      NE,sys_norm
	LD      SystemStatus,#SYSTEM_FAILED    ;Set system failed
	LD      Volt_Protect,#VOLT_PROTECTED
	JP      sysfail
;====================
sys_norm:
	CP      SystemStatus,#SYSTEM_INIT
	JR      EQ,sysinit
	
	CP      SystemStatus,#SYSTEM_FAILED
	JR	EQ,is_volt_fresh
	
        OR      P2,#_RELAY            ;Close output relay
	OR      P2,#_BUZ 
	LD      BuzerStop_Timer,#THIRTY_SECOND
	LD      SystemStatus,#SYSTEM_NORMAL
	LD      Volt_Protect,#VOLT_NOPROTECTED
	JP      output_exit

is_volt_fresh::	;加入高压保护后重新延时输出
	LD	SystemStatus,#SYSTEM_INIT
	CLR	DLYINIT_Counter
	CLR	DLYDelay_Timer
	CP	DelaySW_Input,#DLY_SHORT
	JR	EQ,set_fresh_short
        LD      DlyLong_Timer,#THREE_MINUTE	;加入 abcd
        CLR	OutputDly_Timer
        JP	output_exit
set_fresh_short:
	LD      OutputDly_Timer,#SIX_SECOND
	CLR	DlyLong_Timer
	JP      output_exit

sysfail:
	CP      SystemStatus,#SYSTEM_FAILED
	JR      NE,sysinit
        AND     P2,#~_RELAY           ;Open output relay
;        AND     P1,#~_LED2            ;Light off LED2 = output relay open

				      ;Blink LED3 indicate system failed protect
;        CP      LEDBlink_Timer,#FOUR_TEN_SECOND
;        JR      UGT,lighton
;        AND     P0,#~_LED3             ;LED3 = system failed protect

;        CP      LEDBlink_Timer,#0
;        JR      NE,buzout

	JP      buzout

lighton:
;        OR      P0,#_LED3            ;LED3 = system failed protect

buzout:
	CP      BuzerStop_Timer,#0
	JR      EQ,buzstop
				      ;Bip buzer indicate system failed protect
	CP      Buzer_Timer,#FOUR_TEN_SECOND
	JR      UGT,bipon
bipoff:
	OR      P2,#_BUZ  ;Buzer off

	CP      Buzer_Timer,#0
	JR      NE,buzend
        LD      Buzer_Timer,#FOUR_TEN_SECOND+EIGHT_TEN_SECOND
	JP      buzend

bipon:
	AND     P2,#~_BUZ  ;Buzer on
	JP      buzend

buzstop:
	OR      P2,#_BUZ  

buzend:
	JP      output_exit

sysinit:
        AND     P2,#~_RELAY           ;Open output relay
;        AND     P1,#~_LED2            ;Light off LED2 = output relay open
	LD      BuzerStop_Timer,#THIRTY_SECOND
;        AND     P0,#~_LED3            ;Light off LED3
	OR      P2,#_BUZ  ;Bip off buzer

output_exit:

	RET
;------------------------------------------------------------------

;------------------------------------------
;调节时间计算
;
;----------------------------------------------

⌨️ 快捷键说明

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