📄 lcdavr_1k_1621.src
字号:
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 + -