?? s805g3.src
字號:
JR UGT, JUMP_HIGH_255_TIME
INC Out_Volt_High_255_Time
JUMP_HIGH_255_TIME:
CP Out_volt_High_245_Time, #50
JR UGT, JUMP_HIGH_245_TIME
INC Out_volt_High_245_Time
JUMP_HIGH_245_TIME:
CP Out_Volt_Normal_Time, #50
JR UGT, JUMP_NORMAL_TIME
INC Out_Volt_Normal_Time
JUMP_NORMAL_TIME:
CP Out_Volt_Less_150_Time, #50
JR UGT, JUMP_LESS_150_TIME
INC Out_Volt_Less_150_Time
JUMP_LESS_150_TIME:
INC Cnt_200ms
CP Cnt_200ms,#2
JR ULT, JUMP_CLEAR_CNT_200MS
CLR Cnt_200ms
OR FlagReg, #REFRESH_REGULATE_VOLT
JUMP_CLEAR_CNT_200MS:
INC Cnt_500ms
CP Cnt_500ms,#5 ; 500ms
JR ULT, JUMP_CLEAR_CNT_500MS
CLR Cnt_500ms
TM FlagReg, #DELAY_6S_YEL_FLASH
JR Z, SKIP_SET_DELAY_6S_YEL_FLASH
AND FlagReg, #~DELAY_6S_YEL_FLASH
JR EXIT_DELAY_6S_YEL_FLASH
SKIP_SET_DELAY_6S_YEL_FLASH:
OR FlagReg, #DELAY_6S_YEL_FLASH
EXIT_DELAY_6S_YEL_FLASH:
OR FlagReg, #REFRESH_DISPLAY_VOLT
XOR FlagReg, #FLASH_FLAG
TM FlagReg, #FLASH_FLAG
JR Z, SKIP_TURN_OFF_BUZZER
OR FlagReg2, #BUZZER_255
INC Buzzer245Cnt
CP Buzzer245Cnt, #02
JR ULT, JUMP_CLEAR_BUZZER_245_CNT
CLR Buzzer245Cnt
JUMP_CLEAR_BUZZER_245_CNT:
CP Buzzer245Cnt, #01
JR NE, SKIP_SET_BUZZER_245_OFF
OR FlagReg2, #BUZZER_245
JR EXIT_SET_BUZZER_245
SKIP_SET_BUZZER_245_OFF:
AND FlagReg2, #~BUZZER_245
EXIT_SET_BUZZER_245:
INC Buzzer150Cnt
CP Buzzer150Cnt, #03
JR ULT, JUMP_CLEAR_BUZZER_150_CNT
CLR Buzzer150Cnt
JUMP_CLEAR_BUZZER_150_CNT:
CP Buzzer150Cnt, #01
JR NE, SKIP_SET_BUZZER_150_OFF
OR FlagReg2, #BUZZER_150
JR EXIT_SET_BUZZER_150
SKIP_SET_BUZZER_150_OFF:
AND FlagReg2, #~BUZZER_150
EXIT_SET_BUZZER_150:
JR EXIT_PROCESS_BUZZER
SKIP_TURN_OFF_BUZZER:
AND FlagReg2, #~BUZZER_255
AND FlagReg2, #~BUZZER_245
AND FlagReg2, #~BUZZER_150
EXIT_PROCESS_BUZZER:
JUMP_CLEAR_CNT_500MS:
INC Cnt_1000ms
CP Cnt_1000ms, #10 ; 1000ms
JR ULT, SKIP_CLEAR_CNT_1000MS
CLR Cnt_1000ms
CP Delay_6s_Cnt, #00
JR EQ, JUMP_DEC_Delay_6s_Cnt
DEC Delay_6s_Cnt
JUMP_DEC_Delay_6s_Cnt:
INC Cnt_10s
CP Cnt_10s, #10 ; While out volt more than 255V, delay 10s
JR ULT, SKIP_OUT_VOLT_PROTCT_255
LD Cnt_10s, #11
SKIP_OUT_VOLT_PROTCT_255:
SKIP_CLEAR_CNT_1000MS:
EXIT_INT_TIMER0:
AND T0CON, #0F6H ;Clear TIME0 counter and TIME0 interrupt flag
POP R15
POP R14
POP R13
IRET
SEND_DISPLAY_DATA:: ; Send one data, delay 6ms, continue send next buffer
OFF_DISPLAY
LD R13, DispNow
LD R14, #DispBuf[R13]
LD P0,R14
CP R13, #00
JR NE, SKIP_CHECK_IF_1
ON_ERROR_LED
JR SKIP_MODIFY_DISPNOW
SKIP_CHECK_IF_1:
CP R13, #01
JR NE,SKIP_IS_2
ON_DELAY_LED
JR SKIP_MODIFY_DISPNOW
SKIP_IS_2:
ON_WORK_LED
SKIP_MODIFY_DISPNOW:
INC DispNow ; Indicate next display buffer
CP DispNow, #03
JR ULT, EXIT_SEND_DISPLAY_DATA
CLR DispNow
EXIT_SEND_DISPLAY_DATA:
RET
;================================================
MAIN::
NOP
INIT_SYSTEM
INIT_PARAMETER
BUZZER_OFF
OFF_DISPLAY
OFF_RL1 ; Confirm alternating current direct connect
OFF_RL2 ; e.g. Input volt equal to output volt
ON_RL3
EI
MAIN_LOOP:
CALL DEAL_INPUT ; Sample out volt value
CALL REGULATE_VOLT ; Control relay in accord base output volt
CALL DEAL_DISPLAY ; Process display
JP MAIN_LOOP
;================================================
DEAL_INPUT:: ; Sample out volt value
LD ADCON, #OUT_VOLT_ADCON
CALL SAMPLE_NEW_AD_VALUE
CALL CALCULATE_OUT_VOLT
LD OutVoltValue+1, R1
LD OutVoltValue, R0
RET
SAMPLE_NEW_AD_VALUE:: ; Sample out volt AD value, use average value method
CLR SampleTime
OR ADCON, #AD_CONVERT_START
WAIT_FIRST_SAMPLE:
TM ADCON, #AD_CONVERT_END
JR Z, WAIT_FIRST_SAMPLE
OR FlagReg, #BASE_POINT
SKIP_NEW_START:
CLR R5 ; Out volt ADC value sum
CLR R4
CLR R7 ; Sample times
CLR R6
LOOP_SAMPLE_AD_VALUE:
CP SampleTime, #MAX_SAMPLE_TIME
JR UGE, SKIP_SAMPLE_OVER
OR ADCON, #AD_CONVERT_START
WAIT_AD_CONVERT_END:
TM ADCON, #AD_CONVERT_END
JR Z, WAIT_AD_CONVERT_END
LD R1, ADDATAH
LD R0, ADDATAL
LD R3, R1
SUB R3, #DC_2V_AD_VALUE_H8
JR NC, JUMP_REVERSE_R3
COM R3
INC R3
JUMP_REVERSE_R3:
CP R3, #3
JR UGE, SKIP_NOT_BASE_POINT
TM FlagReg, #BASE_POINT
JR Z, SKIP_IS_END_POINT
AND FlagReg, #~BASE_POINT
CLR FactSampleTime
JR SKIP_SAMPLE_NEXT_POINT
SKIP_IS_END_POINT:
CP FactSampleTime, #MIN_SAMPLE_TIME
JR UGE, SKIP_SAMPLE_OVER
JR SKIP_ADD_AD_VALUE
SKIP_NOT_BASE_POINT:
TM FlagReg, #BASE_POINT
JR NZ, SKIP_NEW_START
SKIP_ADD_AD_VALUE:
CLR R3
RCF
RLC R1
RLC R3
RCF
RLC R1
RLC R3
OR R1, R0
SUB R1, #DC_2V_AD_VALUE%256
SBC R3, #DC_2V_AD_VALUE/256
JR NC, JUMP_REVERSE_AD_VALUE
COM R1
COM R3
ADD R1, #1
ADC R3, #0
JUMP_REVERSE_AD_VALUE:
ADD R4, R1
ADC R5, R3
INC R6
JR NZ, SKIP_SAMPLE_NEXT_POINT
INC R7
SKIP_SAMPLE_NEXT_POINT:
JP LOOP_SAMPLE_AD_VALUE
SKIP_SAMPLE_OVER:
LD R3, R7
OR R3, R6
JR Z, SKIP_RETURN_ZERO
LD R1, R5
LD R0, R4
LD R3, R7
LD R2, R6
CALL DOUBLE_BYTES_DIV ;Return value:@RR0
RET
SKIP_RETURN_ZERO:
LD R1, #00
LD R0, #00
RET
CALCULATE_OUT_VOLT:: ; Calculate out volt value
LD R3, R1
OR R3, R0
JR Z, EXIT_CALCULATE_OUT_VOLT ;Error sample value, not use
CLR R15 ;Sample out volt high than 220V flag
LD R3, R1
LD R2, R0
SUB R2, #VOLT_200V_AD_VALUE%256
SBC R3, #VOLT_200V_AD_VALUE/256
JR NC, JUMP_REVERSE_SUB
LD R3, #VOLT_200V_AD_VALUE/256
LD R2, #VOLT_200V_AD_VALUE%256
LD R15, #0FFH
SUB R2, R0
SBC R3, R1
JUMP_REVERSE_SUB:
CALL CALCULATE_SCALE_FACTOR
CP R15, #00H
JR NE, SKIP_OUT_VOLT_LESS_220V
ADD R0, #VOLT_200V%256
ADC R1, #VOLT_200V/256
JR EXIT_CALCULATE_OUT_VOLT
SKIP_OUT_VOLT_LESS_220V:
LD R3, #VOLT_200V/256
LD R2, #VOLT_200V%256
SUB R2, R0
SBC R3, R1
LD R1, R3
LD R0, R2
EXIT_CALCULATE_OUT_VOLT:
RET
CALCULATE_SCALE_FACTOR:: ; Factor: 5/3, Input: R3R2; Output:R1R0
LD R5, R3
LD R4, R2
LD R7, #00
LD R6, #5
CALL DOUBLE_BYTES_MUL
LD R1, R5
LD R0, R4
LD R3, #00
LD R2, #3
CALL DOUBLE_BYTES_DIV
RET
;================================================
; Prevision team: 1 out volt <= 210V Charge to: 2
; Prevision team: 2 out volt >= 240V Charge to: 1
; out volt <= 203V Charge to: 3
; Prevision team: 3 out volt >= 236V Charge to: 2
; out volt <= 205V Charge to: 4
; Prevision team: 4 out volt >= 238V Charge to: 3
;------------------------------------------------
REGULATE_VOLT:: ; Control relay, use out volt average value in the 200ms
TM FlagReg, #REFRESH_REGULATE_VOLT
JR NZ, SKIP_REGULATE_VOLT
ADD RegulateVoltSum, OutVoltValue
ADC RegulateVoltSum+1, OutVoltValue+1
INC RegulateVoltCnt
RET
SKIP_REGULATE_VOLT:
AND FlagReg, #~REFRESH_REGULATE_VOLT
LD R1, RegulateVoltSum+1
LD R0, RegulateVoltSum
CLR R3
LD R2, RegulateVoltCnt
CALL DOUBLE_BYTES_DIV
LD RegulateVoltValue+1,R1
LD RegulateVoltValue, R0
CLR RegulateVoltSum+1
CLR RegulateVoltSum
CLR RegulateVoltCnt
CP RegulateTeam, #01
JR NZ, JUMP_REGULATE_1
CALL REGULATE_1
JP EXIT_REGULATE_VOLT
JUMP_REGULATE_1:
CP RegulateTeam, #02
JR NZ, JUMP_REGULATE_2
CALL REGULATE_2
JP EXIT_REGULATE_VOLT
JUMP_REGULATE_2:
CP RegulateTeam, #03
JR NZ, JUMP_REGULATE_3
CALL REGULATE_3
JP EXIT_REGULATE_VOLT
JUMP_REGULATE_3:
CP RegulateTeam, #04
JR NZ, EXIT_REGULATE_VOLT
CALL REGULATE_4
EXIT_REGULATE_VOLT:
RET
REGULATE_1::
CP RegulateVoltValue+1,#OUT_VOLT_210/256
JR UGT, EXIT_REGULATE_1
JR ULT, SKIP_REGULATE_1
CP RegulateVoltValue, #OUT_VOLT_210%256
JR UGT, EXIT_REGULATE_1
SKIP_REGULATE_1:
CLR Regulate_2_Time_H
CLR Regulate_2_Time_L
CLR Regulate_3_Time_H
CLR Regulate_3_Time_L
CLR Regulate_4_Time
CP Regulate_1_Time, #REGULATE_TIME
JR ULT, EXIT_REGULATE_1
REGULATE_TEAM_2
EXIT_REGULATE_1:
RET
REGULATE_2::
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -