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