📄 s597g1.src
字号:
.INCLUDE "kbs597 hardware.src"
TEMP_OVER_LIMIT .EQU 210
TEMP_RESET_LIMIT .EQU 240
TEMP_FAN_ON .EQU 431
TEMP_FAN_OFF .EQU 460
.RAM_ORG 0
FlagReg: .RAM_DS 1
BLINK_500ms: .EQU 1
VoltHigh: .EQU 2
RelayStatus: .EQU 4
DELAY_FLAG: .EQU 10H
FreshDisp: .EQU 20h
PRECTION_FLAG: .EQU 40h
;=================================
UserFlag: .RAM_DS 1
DispUnchange: .EQU 1
FreshAdc: .EQU 2
BasePoint: .EQU 4
haltalarmFLAG2 .EQU 08h
lessfound: .equ 10h
SelfBlink: .EQU 20h
SpkFlag: .EQU 40h
;=================================
SystemTimer:: .RAM_DS 1
_4ms: .EQU 4000/T0INT_TIME
LedBlinkTimer: .RAM_DS 1
_200ms: .EQU 200/4
;=================================
AdataH: .RAM_DS 1
AdataL: .RAM_DS 1
RelayOnTime: .RAM_DS 1
_6s: .EQU 180
_120s: .EQU 3
;=================================
dispnow: .RAM_DS 1
DispBuf: .RAM_DS 3
SeconCnt: .RAM_DS 1
_1s: .EQU 1000/4
InVoltValue: .RAM_DS 2
OutVoltValue: .RAM_DS 2
TempValue: .RAM_DS 2
KeyAdcValue: .RAM_DS 2
;=================================
KeyStatus: .ram_ds 1
Key_uncertain: .equ 0*3
Key_wait_release: .equ 1*3
Key_normal: .equ 2*3
Key_continue: .equ 3*3
key_uncertain_time: .RAM_DS 1
_UNCERTAINTIME: .EQU 10
key_old: .RAM_DS 1
key_three_sec_cnt: .ram_ds 1
_3sec: .equ 3
_15s .EQU 10
_10s: .EQU 5
_5s: .EQU 3
_3s: .EQU 2
_5m: .EQU 210
_30m: .EQU 1350
_60m: .EQU 2700
;电压保护时间
VoltProtect10s: .RAM_DS 1
VoltProtect5s: .RAM_DS 1
VoltProtect3s: .RAM_DS 1
SetDispTime: .RAM_DS 1
SETDISPTIME_LIMIT: .EQU 4
precision: .RAM_DS 1
RegulateTime: .RAM_DS 1
FreshDipsTimer: .RAM_DS 1
_500ms: .EQU (580/4)
Timer2ms: .RAM_DS 1
;---------------
Cnt100ms: .RAM_DS 1
_100ms: .EQU 100/4
HaltAlarmTime: .RAM_DS 1
HALTSPKTIME: .EQU 30
;------------------------------------------------------------
INPUT_LED: .MACRO Status
AND LedStatus,#~GRN_LED_STATUS
.if Status==ON
OR LedStatus,#GRN_ON
.else
.if Status==OFF
OR LedStatus,#GRN_OFF
.else
.if Status==BLINK
OR LedStatus,#GRN_BLINK
.else
.if Status==SKIP
OR LedStatus,#GRN_SKIP
.endif
.endif
.endif
.endif
.ENDM
;--------------------------------------
OUTPUT_LED: .MACRO Status
AND LedStatus,#~YEL_LED_STATUS
.if Status==ON
OR LedStatus,#YEL_ON
.else
.if Status==OFF
OR LedStatus,#YEL_OFF
.else
.if Status==BLINK
OR LedStatus,#YEL_BLINK
.else
.if Status==SKIP
OR LedStatus,#YEL_SKIP
.endif
.endif
.endif
.endif
.ENDM
;-------------------------------------
WORKING_LED: .MACRO Status
AND LedStatus,#~RED_LED_STATUS
.if Status==ON
OR LedStatus,#RED_ON
.else
.if Status==OFF
OR LedStatus,#RED_OFF
.else
.if Status==BLINK
OR LedStatus,#RED_BLINK
.else
.if Status==SKIP
OR LedStatus,#RED_SKIP
.endif
.endif
.endif
.endif
.ENDM
;-----------------------------
;=================================
.ORG 0
.VECTOR 00H,INT_Handler
;------------------
.ORG 003CH
DB 00H
DB 00H
DB 00H ; LVR disable
DB 01H
;------------------
INT_Handler:
TM T0CON,#00000001B
JR NZ,INT_Timer0
IRET
;=================================
INT_Timer0::
TM ADCON,#ADC_OEC
JR Z,skip_fresh_adc
LD AdataH,ADDATAH
LD AdataL,ADDATAL
OR ADCON,#START_ADC
OR UserFlag,#FreshAdc
skip_fresh_adc
DEC Timer2ms
JR NZ,skip_Timer2ms
LD Timer2ms,#(_4ms)/2
CP RegulateTime,#0
JR NE,_dec_RegulateTime
VoltUndo
JR RegulateTime_over
_dec_RegulateTime:
DEC RegulateTime
RegulateTime_over:
skip_Timer2ms:
DEC SystemTimer
JP NZ,skip_SystemTimer
LD SystemTimer,#_4ms
DEC LedBlinkTimer
JR NZ,skip_LedBlinkTimer
XOR FlagReg,#BLINK_500ms
LD LedBlinkTimer,#_200ms
CALL led_control
skip_LedBlinkTimer:
DEC Cnt100ms
JR NZ,skip_100ms
LD Cnt100ms,#_100ms
INC BellFreeTime1
CP BellFreeTime,#0
JR EQ,skip_BellFreeTime
DEC BellFreeTime
skip_100ms:
skip_BellFreeTime:
CALL bell_controll
DEC SeconCnt
JR NZ,skip_SeconCnt
LD SeconCnt,#_1s
CP HaltAlarmTime,#0
JR EQ,skip_HaltAlarmTime
DEC HaltAlarmTime
skip_HaltAlarmTime:
CP VoltProtect10s,#0
JR EQ,skip_VoltProtect10s
DEC VoltProtect10s
skip_VoltProtect10s:
CP VoltProtect5s,#0
JR EQ,skip_VoltProtect5s
DEC VoltProtect5s
skip_VoltProtect5s:
CP VoltProtect3s,#0
JR EQ,skip_VoltProtect3s
DEC VoltProtect3s
skip_VoltProtect3s:
CP key_three_sec_cnt,#0
JR EQ,skip_key_three_sec_cnt
DEC key_three_sec_cnt
skip_key_three_sec_cnt:
CP RelayOnTime,#0
JR EQ,skip_RelayOnTime
DEC RelayOnTime
skip_RelayOnTime:
CP SetDispTime,#8
JR UGE,skip_setDisplayTime
INC SetDispTime
skip_setDisplayTime:
skip_SeconCnt:
DEC FreshDipsTimer
JR NZ,skip_FreshDipsTimer
LD FreshDipsTimer,#_500ms
OR FlagReg,#FreshDisp
skip_FreshDipsTimer:
CALL display
CP key_uncertain_time,#0
JR EQ,skip_key_uncertain_time
DEC key_uncertain_time
skip_key_uncertain_time:
skip_SystemTimer:
AND T0CON,#0F6H
IRET
;=================================
ORG 0100H
JP start_up
;=================================
; 入口: R13:数据,
;=================================
DISP_8BIT: .MACRO
LD R12,#8
SEND_GOON:
DISP_DATA_BUS HIGH
RLC R13
JR C,MD_CLK
DISP_DATA_BUS LOW
MD_CLK:
MAKE_IO_CLK
DEC R12
JR NZ,SEND_GOON
;RET
.ENDM
;-----------------------------------
display::
OFF_DISP
LD R14,dispnow
LD R13,#DispBuf[R14]
DISP_8BIT
CP R14,#0
JR NE,if_is_1
ON_DIGIT_1
JR RE_BIT
if_is_1:
CP R14,#1
JR NE,is_2
ON_DIGIT_2
JR RE_BIT
is_2:
ON_DIGIT_3
RE_BIT:
INC dispnow
CP dispnow,#3
JR ULT,ex_disp
CLR dispnow
ex_disp:
RET
;=================================
LED_SEG_0: .EQU 0C0H
LED_SEG_1: .EQU 0F9H
LED_SEG_2: .equ 0A4H
LED_SEG_5: .EQU 92H
SIGNED_DEC: .EQU 17
SIGNED_ADD: .EQU 18
LED_OFF: .EQU 0FFH
CHAR_H: .EQU 10001001B;H
CHAR_L: .EQU 11000111B;L
CHAR_O: .EQU 10100011B;o
CHAR_A: .EQU 88H
CHAR_D: .EQU 0A1H
CHAR_U: .EQU 11100011B;u
CHAR_T: .EQU 10000111B;t
CHAR_R: .EQU 10101111B;r
CHAR_C: .EQU 0A7H
CHAR_F: .EQU 8EH
CHAR_Y: .EQU 10010001B;y
CHAR_E: .EQU 86H
CHAR_P: .EQU 10001100B
DISP_LED_TAB: ;七段LED显示码表,共阳极
.DB LED_SEG_0 ;0
.DB LED_SEG_1 ;1
.DB LED_SEG_2 ;2
.DB 0B0H ;3
.DB 99H ;4
.DB LED_SEG_5 ;5
.DB 82H ;6
.DB 0F8H ;7
.DB 80H ;8
.DB 90H ;9
.DB CHAR_A ;A
.DB 83H ;B
.DB CHAR_C ;C
.DB CHAR_D ;D
.DB CHAR_E ;E
.DB CHAR_F ;F ;15
.DB LED_OFF ;space ;16
.DB 0CH&0FH ;17
.DB 00H&0FH ;18
MSG::
MSG_PRECISION_L: .DB CHAR_P,CHAR_C,CHAR_L
MSG_PRECISION_H: .DB CHAR_P,CHAR_C,CHAR_H
MSG_TEMP_HIGH: .DB CHAR_T,LED_OFF,CHAR_H
MSG_VOLT_HIGH: .DB LED_OFF,CHAR_H,LED_OFF
MSG_VOLT_LOW: .DB LED_OFF,CHAR_L,LED_OFF
MSG_ERROR: .DB CHAR_E,CHAR_R,CHAR_R
load_string::
LDCI R0,@RR6
AND R0,#~80H
AND DispBuf+0,#80H
OR DispBuf+0,R0
LDCI R0,@RR6
AND R0,#~80H
AND DispBuf+1,#80H
OR DispBuf+1,R0
LDCI R0,@RR6
AND R0,#~80H
AND DispBuf+2,#80H
OR DispBuf+2,R0
RET
;-----------------------------------------
; 出口: 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
;-------------------------------------------------------------
BCD_TO_LED::
LD R0,#DISP_LED_TAB/256
LD R1,#DISP_LED_TAB%256
ADD R1,R7
ADC R0,#0
LDC R7,@RR0
RET
;-------------------------------------------------
set_display_data::
AND DispBuf+2,#80H
AND DispBuf+0,#80H
AND DispBuf+1,#80H
LD R7,R3
CALL BCD_TO_LED
AND R7,#~80H
OR DispBuf+0,R7
LD R7,R4
CALL BCD_TO_LED
AND R7,#~80H
OR DispBuf+1,R7
LD R7,R5
CALL BCD_TO_LED
AND R7,#~80H
OR DispBuf+2,R7
RET
;=================================
;------------------------------------------------------
GRN_LED_STATUS: .equ 00000011b
YEL_LED_STATUS: .equ 00001100b
RED_LED_STATUS: .equ 00110000b
GRN_OFF: .equ 00000000b
YEL_OFF: .equ 00000000b
RED_OFF: .equ 00000000b
GRN_ON: .equ 00000001b
YEL_ON: .equ 00000100b
RED_ON: .equ 00010000b
GRN_BLINK: .equ 00000010b
YEL_BLINK: .equ 00001000b
RED_BLINK: .equ 00100000b
GRN_SKIP: .equ 00000011b
YEL_SKIP: .equ 00001100b
RED_SKIP: .equ 00110000b
LedStatus: .ram_ds 1
led_control::
LD R12,LedStatus
LD R13,R12
AND R12,#GRN_LED_STATUS ;
CP R12,#GRN_SKIP
JR EQ,skip_deal_grn_led
CP R12,#GRN_OFF
JR NE,if_grn_on
grn_is_off:
OR DispBuf+1,#80h
JR skip_deal_grn_led
if_grn_on:
CP R12,#GRN_ON
JR NE,grn_is_blink
grn_is_on:
AND DispBuf+1,#~80h
JR skip_deal_grn_led
grn_is_blink:
TM FlagReg,#BLINK_500ms
JR Z,grn_is_on
JR grn_is_off
skip_deal_grn_led:
LD R12,R13
AND R12,#YEL_LED_STATUS ;
CP R12,#YEL_SKIP
JR EQ,skip_deal_YEL_led
CP R12,#YEL_OFF
JR NE,if_YEL_on
YEL_is_off:
OR DispBuf+0,#80h
JR skip_deal_YEL_led
if_YEL_on:
CP R12,#YEL_ON
JR NE,YEL_is_blink
YEL_is_on:
AND DispBuf+0,#~80h
JR skip_deal_YEL_led
YEL_is_blink:
TM FlagReg,#BLINK_500ms
JR Z,YEL_is_on
JR YEL_is_off
skip_deal_YEL_led:
LD R12,R13
AND R12,#RED_LED_STATUS ;
CP R12,#RED_SKIP
JR EQ,skip_deal_RED_led
CP R12,#RED_OFF
JR NE,if_RED_on
RED_is_off:
OR DispBuf+2,#80h
JR skip_deal_RED_led
if_RED_on:
CP R12,#RED_ON
JR NE,RED_is_blink
RED_is_on:
AND DispBuf+2,#~80h
JR skip_deal_RED_led
RED_is_blink:
TM FlagReg,#BLINK_500ms
JR Z,RED_is_on
JR RED_is_off
skip_deal_RED_led:
RET
;================================
BELL_IDLE: .EQU 0
BELL_ON: .EQU 1*3
BELL_OFF: .EQU 2*3
BellStatus: .RAM_DS 1
;BELL COMMAND
SOUND_UNDO .EQU 00000000b
SOUND_ONE .EQU 00010000b
SOUND_TWO .EQU 00100000b
SOUND_CONTINUE .EQU 00110000b
SOUND_TWOCONTINUE: .EQU 01000000b
BellFreeTime: .RAM_DS 1
BELL_SOUND_TIME: .EQU 3
BellFreeTime1 .RAM_DS 1
BellCycleTime .RAM_DS 1
ALARM_ONE_SOUND:: .MACRO
DI
AND BellStatus,#0fh
OR BellStatus,#SOUND_ONE
EI
.ENDM
ALARM_TWO_SOUND:: .MACRO
DI
AND BellStatus,#0fh
OR BellStatus,#SOUND_TWO
LD BellCycleTime,#BELL_SOUND_TIME+1
EI
.ENDM
ALARM_ONE_CONTINUE:: .MACRO
DI
AND BellStatus,#0fh
OR BellStatus,#SOUND_CONTINUE
EI
.ENDM
ALARM_TWO_CONTINUE:: .MACRO
DI
AND BellStatus,#0fh
OR BellStatus,#SOUND_TWOCONTINUE
EI
.ENDM
ALARM_UNDO:: .MACRO
AND BellStatus,#0fh
ENDM
bell_controll::
LD R15,BellStatus
AND R15,#0Fh
CLR R14
ADD R15,#bell_case_tab%256
ADC R14,#bell_case_tab/256
JP @RR14
bell_case_tab:
JP CaseBELL_IDLE
JP CaseBELL_ON
JP CaseBELL_OFF
CaseBELL_IDLE:
buzzer_on
LD R15,BellStatus
AND R15,#0f0h
CP R15,#SOUND_UNDO
JR EQ,end_CaseBELL_IDLE
AND UserFlag,#~SpkFlag
JP set_bell_on
end_CaseBELL_IDLE:
RET
;------------------------------------
CaseBELL_ON:
CP BellFreeTime,#0
JR NE,skip_change_bell_status
AND BellStatus,#0f0h
OR BellStatus,#BELL_OFF
skip_change_bell_status:
buzzer_off
RET
;------------------------------------
CaseBELL_OFF:
CP BellFreeTime1,BellCycleTime
JR ULT,skip_check_bell_command
LD R15,BellStatus
RR R15
RR R15
RR R15
RR R15
AND R15,#0fh
LD R14,R15
ADD R15,R14
ADD R15,R14
CLR R14
ADD R15,#bell_command_tab%256
ADC R14,#bell_command_tab/256
JP @RR14
bell_command_tab:
JP case_SOUND_UNDO
JP case_SOUND_ONE
JP case_SOUND_TWO
JP case_SOUND_CONTINUE
JP case_SOUND_TWOCONTINUE
case_SOUND_UNDO:
case_SOUND_ONE:
LD BellStatus,#(SOUND_UNDO|BELL_IDLE)
JR set_bell_off
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -