📄 s805g3.src
字号:
AND FlagReg2, #~DISP_HIGH_245_FLAG
OR FlagReg2, #DISP_NORMAL_FLAG
AND FlagReg2, #~DISP_LOW_150_FLAG
CP Out_Volt_Normal_Time, #DISPLAY_TIME
JP ULT, SKIP_SET_PREVISION_OUT_VOLT_PROCESS
SKIP_OUT_VOLT_NORMAL_ZONE:
AND FlagReg2, #~DISP_NORMAL_FLAG
TM FlagReg2, #DISP_HIGH_265_FLAG
JR NZ, JUMP_CLR_High_265_Time_NORMAL
CLR Out_Volt_High_265_Time
JUMP_CLR_High_265_Time_NORMAL:
TM FlagReg2, #DISP_HIGH_255_FLAG
JR NZ, JUMP_CLR_High_255_Time_NORMAL
CLR Out_Volt_High_255_Time
JUMP_CLR_High_255_Time_NORMAL:
TM FlagReg2, #DISP_HIGH_245_FLAG
JR NZ, JUMP_CLR_High_245_Time_NORMAL
CLR Out_volt_High_245_Time
JUMP_CLR_High_245_Time_NORMAL:
TM FlagReg2, #DISP_LOW_150_FLAG
JR NZ, JUMP_CLR_Less_150_Time_NORMAL
CLR Out_Volt_Less_150_Time
JUMP_CLR_Less_150_Time_NORMAL:
LD DisplayVoltValueBackup+1, DisplayVoltValue+1
LD DisplayVoltValueBackup, DisplayVoltValue
CLR Cnt_2s
CLR Cnt_10s
TM FlagReg, #OUT_VOLT_PROTECT
JR Z, JUMP_SET_DELAY_6S_NORMAL
OR FlagReg, #DELAY_6S
LD Delay_6s_Cnt, #00
JP EXIT_OUT_VOLT_NORMAL
JUMP_SET_DELAY_6S_NORMAL:
CP DisplayVoltValue,#220
JR ULT ,out_less_205 ;display the true value
CP DisplayVoltValue,#220
JR UGT ,out_large_235 ;display the true value
CLR R9
; LD R8, #220
LD R8,DisplayVoltValue
SUB R8,#205
LD R6,#REG_DISP_TAB/256
LD R7,#REG_DISP_TAB%256
ADD R7,R8
ADC R6,#0
LDC R8,@RR6
CALL DISP_LED_DATA
WORK_LED ON
DELAY_LED ON
ERROR_LED OFF
BUZZER_OFF
EXIT_OUT_VOLT_NORMAL:
RET
out_less_205:
out_large_235:
CLR R9
LD R8 ,DisplayVoltValue
; CLR R9
; LD R8, #220
CALL DISP_LED_DATA
WORK_LED ON
DELAY_LED ON
ERROR_LED OFF
BUZZER_OFF
RET
REG_DISP_TAB:
.DB 216,216,216
.DB 217,217,217
.DB 218,218,218
.DB 219,219,219
.DB 220,220,220
.DB 220,220,220
.DB 221,221,221
.DB 222,222,222
.DB 223,223,223
.DB 224,224,224
.DB 225,225,225
OUT_VOLT_LOW_150:
CP DisplayVoltValue+1,#OUT_VOLT_150/256
JP UGT, EXIT_OUT_VOLT_LOW_150
JR ULT, SKIP_OUT_VOLT_LOW_150
CP DisplayVoltValue, #OUT_VOLT_150%256
JP UGT, EXIT_OUT_VOLT_LOW_150
SKIP_OUT_VOLT_LOW_150:
AND FlagReg2, #~DISP_HIGH_265_FLAG
AND FlagReg2, #~DISP_HIGH_255_FLAG
AND FlagReg2, #~DISP_HIGH_245_FLAG
AND FlagReg2, #~DISP_NORMAL_FLAG
OR FlagReg2, #DISP_LOW_150_FLAG
CP Out_Volt_Less_150_Time, #DISPLAY_TIME
JR ULT, SKIP_SET_PREVISION_OUT_VOLT_PROCESS
SKIP_OUT_VOLT_LESS_150_ZONE:
AND FlagReg2, #~DISP_LOW_150_FLAG
TM FlagReg2, #DISP_HIGH_265_FLAG
JR NZ, JUMP_CLR_High_265_Time_150
CLR Out_Volt_High_265_Time
JUMP_CLR_High_265_Time_150:
TM FlagReg2, #DISP_HIGH_255_FLAG
JR NZ, JUMP_CLR_High_255_Time_150
CLR Out_Volt_High_255_Time
JUMP_CLR_High_255_Time_150:
TM FlagReg2, #DISP_HIGH_245_FLAG
JR NZ, JUMP_CLR_High_245_Time_150
CLR Out_volt_High_245_Time
JUMP_CLR_High_245_Time_150:
TM FlagReg2, #DISP_NORMAL_FLAG
JR NZ, JUMP_CLR_Normal_Time_150
CLR Out_Volt_Normal_Time
JUMP_CLR_Normal_Time_150:
LD DisplayVoltValueBackup+1, DisplayVoltValue+1
LD DisplayVoltValueBackup, DisplayVoltValue
CLR Cnt_2s
CLR Cnt_10s
TM FlagReg, #OUT_VOLT_PROTECT
JR Z, JUMP_SET_DELAY_6S_150
OR FlagReg, #DELAY_6S
LD Delay_6s_Cnt, #00
JP EXIT_OUT_VOLT_LOW_150
JUMP_SET_DELAY_6S_150:
TM FlagReg, #FLASH_FLAG
JR NZ, SKIP_DISP_L
CALL DISP_OFF
WORK_LED ON
DELAY_LED ON
ERROR_LED OFF
JP SKIP_PROCESS_BUZZER_150
SKIP_DISP_L:
CALL DISP_L
WORK_LED ON
DELAY_LED ON
ERROR_LED ON
SKIP_PROCESS_BUZZER_150:
TM FlagReg2, #BUZZER_150
JR NZ, SKIP_BUZZER_150_ON
BUZZER_OFF
JP SKIP_BUZZER_150
SKIP_BUZZER_150_ON:
BUZZER_ON
SKIP_BUZZER_150:
EXIT_OUT_VOLT_LOW_150:
RET
SKIP_SET_PREVISION_OUT_VOLT_PROCESS: ; For prevent display not continue
LD DisplayVoltValue+1, DisplayVoltValueBackup+1 ; Use prevision out volt value process
LD DisplayVoltValue, DisplayVoltValueBackup
CP Out_Volt_Normal_Time, #DISPLAY_TIME
JP UGE, SKIP_OUT_VOLT_NORMAL_ZONE
CP Out_volt_High_245_Time, #DISPLAY_TIME
JP UGE, SKIP_OUT_VOLT_HIGH_245_ZONE
CP Out_Volt_Less_150_Time, #DISPLAY_TIME
JP UGE, SKIP_OUT_VOLT_LESS_150_ZONE
CP Out_Volt_High_255_Time, #DISPLAY_TIME
JP UGE, SKIP_OUT_VOLT_HIGH_255_ZONE
CP Out_Volt_High_265_Time, #DISPLAY_TIME
JP UGE, SKIP_OUT_VOLT_HIGH_265_ZONE
RET
DISP_H: ; Display H
OR DispBuf+2, #7FH
OR DispBuf+1, #7FH
AND DispBuf+1, #7FH ;Not change indicator LED
OR DispBuf+0, #7FH
RET
DISP_L: ; Display L
OR DispBuf+2, #7FH
OR DispBuf+1, #7FH
AND DispBuf+1, #7FH ;Not charge indicator LED
OR DispBuf+0, #7FH
RET
DISP_OFF: ; Turn off LED
OR DispBuf+2, #7FH
OR DispBuf+1, #7FH
OR DispBuf+0, #7FH
RET
DISP_LED_DATA: ;Process display data, Input: R9R8
CALL DOUBLE_BYTES_CONVERT_BCD
LD R10, R4
CALL BCD_CONVERT_LED
AND DispBuf+2, #80H ;Not charge indicater LED bit
AND R10, #~80H
OR DispBuf+2, R10
LD R10, R3
CALL BCD_CONVERT_LED
AND DispBuf+1, #80H
AND R10, #~80H
OR DispBuf+1, R10
LD R10, R2
CALL BCD_CONVERT_LED
AND DispBuf+0, #80H
AND R10, #~80H
OR DispBuf+0, R10
RET
;------------------------------------------------
;Input: R9R8; Output:(R5),R4,R3,R2
;------------------------------------------------
DOUBLE_BYTES_CONVERT_BCD:: ; Double bytes data convert to 4 bytes BCD code
CLR R5
CLR R4
LOOP_1000_BIT:
LD R3, R9
LD R2, R8
SUB R8, #1000%256
SBC R9, #1000/256
JR C, SKIP_CONVERT_NEXT
INC R5
JR LOOP_1000_BIT
SKIP_CONVERT_NEXT:
LD R9, R3
LD R8, R2
LOOP_100_BIT:
LD R3, R9
LD R2, R8
SUB R8, #100
SBC R9, #0
JR C, LOOP_10_BIT
INC R4
JR LOOP_100_BIT
LOOP_10_BIT:
LD R9, R2
SUB R2, #10
JR C, SKIP_1_BIT
INC R3
JR LOOP_10_BIT
SKIP_1_BIT:
LD R2, R9
RET
BCD_CONVERT_LED:: ; BCD code convert to display LED code
LD R0, #DISP_LED_TAB/256
LD R1, #DISP_LED_TAB%256
ADD R1, R10
ADC R0, #0
LDC R10, @RR0
RET
DISP_LED_TAB:
.DB 88H ; 0
.DB 0EEH ; 1
.DB 92H ; 2
.DB 0C2H ; 3
.DB 0E4H ; 4
.DB 0C1H ; 5
.DB 81H ; 6
.DB 0EAH ; 7
.DB 80H ; 8
.DB 0C0H ; 9
.DB 0A4H ; H
.DB 09DH ; L
.DB 7FH ; OFF
;================================================
;Common subroutine
;------------------------------------------------
DELAY_10MS:: ; Delay 10ms
CLR Delay10msCnt
WAIT_DELAY_10MS:
CP Delay10msCnt, #5
JR ULT, WAIT_DELAY_10MS
RET
;------------------------------------------------
; R1R0/R3R2-->R1R0 Remainder:R5R4
;------------------------------------------------
DOUBLE_BYTES_DIV::
LD R5, R3
OR R5, R2
JR NZ, SKIP_DOUBLE_BYTES_DIV
CLR R1 ; Return zero
CLR R0
CLR R5
CLR R4
JR EXIT_DOUBLE_BYTES_DIV
SKIP_DOUBLE_BYTES_DIV:
LD R6, #16
CLR R5
CLR R4
LOOP_DIV:
RCF
RLC R0
RLC R1
RLC R4
RLC R5
CP R5, R3
JR ULT, SKIP_NOT_SUB
JR UGT, SKIP_GO_SUB
CP R4, R2
JR ULT, SKIP_NOT_SUB
SKIP_GO_SUB:
SUB R4, R2
SBC R5, R3
OR R0, #1
SKIP_NOT_SUB:
DEC R6
JR NZ, LOOP_DIV
EXIT_DOUBLE_BYTES_DIV:
RET
;------------------------------------------------
; R5R4*R7R6-->R7R6R5R4
;------------------------------------------------
DOUBLE_BYTES_MUL::
LD R3, R5
LD R2, R4
LD R1, R7
LD R0, R6
LD R8, #16
CLR R7
CLR R6
LOOP_MUL:
RRC R3
RRC R2
JR NC, SKIP_NOT_ADD
ADD R6, R0
ADC R7, R1
SKIP_NOT_ADD:
RRC R7
RRC R6
RRC R5
RRC R4
DEC R8
JR NZ, LOOP_MUL
RET
;================================================
.END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -