?? s805g3.src
字號:
.include "S3c9454.reg"
;================================================
;Register and constant definition
;------------------------------------------------
.RAM_ORG 0
DispBuf: .RAM_DS 3 ; Display buffer
FlagReg: .RAM_DS 1 ; Flag register
FLASH_FLAG: .EQU 80H ; Indicator LED on/off
REFRESH_REGULATE_VOLT: .EQU 02H ; Process relay flag
REFRESH_DISPLAY_VOLT: .EQU 04H ; Process display flag
BASE_POINT: .EQU 08H ; Alternating current zero phase point
OUT_VOLT_PROTECT: .EQU 10H ; Turn off out volt
DELAY_6S: .EQU 20H ; Delay 6 seconds flag
DELAY_6S_YEL_FLASH: .EQU 40H ; Delay 6 seconds yellow indicator LED flash flag
FlagReg2: .RAM_DS 1
BUZZER_255: .EQU 01H ; While out volt more than 255V, the buzzer on flag
BUZZER_245: .EQU 02H
BUZZER_150: .EQU 04H
DISP_HIGH_265_FLAG: .EQU 08H
DISP_HIGH_255_FLAG: .EQU 10H
DISP_HIGH_245_FLAG: .EQU 20H
DISP_NORMAL_FLAG: .EQU 40H
DISP_LOW_150_FLAG: .EQU 80H
Buzzer245Cnt: .RAM_DS 1 ; While out volt more than 255V, the buzzer on and off counter
Buzzer150Cnt: .RAM_DS 1
Delay_6s_Cnt: .RAM_DS 1 ; Delay 6 seconds counter
Cnt_1ms: .RAM_DS 1 ; Time counter
Cnt_6ms: .RAM_DS 1
Cnt_100ms: .RAM_DS 1
Cnt_200ms: .RAM_DS 1
Cnt_500ms: .RAM_DS 1
Cnt_1000ms: .RAM_DS 1
Cnt_2s: .RAM_DS 1 ; While out volt more than 265 protect counter
Cnt_10s: .RAM_DS 1 ; While out volt more than 255 protect counter
Delay10msCnt: .RAM_DS 1
DispNow: .RAM_DS 1
ON: .EQU 1
OFF: .EQU 2
SampleTime: .RAM_DS 1 ; Sample and calculate out volt
FactSampleTime: .RAM_DS 1
MAX_SAMPLE_TIME: .EQU 32 ; Sample time
MIN_SAMPLE_TIME: .EQU 16
OUT_VOLT_ADCON: .EQU 86H ;p2.6 OUT VOLT ADC
AD_CONVERT_START: .EQU 01H
AD_CONVERT_END: .EQU 08H
DC_2V_AD_VALUE: .EQU 409
DC_2V_AD_VALUE_H8: .EQU 102
VOLT_200V: .EQU 200
VOLT_200V_AD_VALUE:.EQU 124 ; 150V AD value: 94; 200V AD value: 124
; 250V AD value: 154; 300V AD value: 184
OutVoltValue: .RAM_DS 2 ; Sample out volt value and display value
RegulateVoltValue: .RAM_DS 2 ; Process regulate
RegulateVoltSum: .RAM_DS 2
RegulateVoltCnt: .RAM_DS 1
DisplayVoltValue: .RAM_DS 2 ; Process display
DisplayVoltValueBackup: .RAM_DS 2
DisplayVoltSum: .RAM_DS 2
DisplayVoltCnt: .RAM_DS 1
RegulateTeam: .RAM_DS 1 ; Regulate out volt
Regulate_1_Time: .RAM_DS 1 ; Regulate delay time
Regulate_2_Time_H: .RAM_DS 1
Regulate_2_Time_L: .RAM_DS 1
Regulate_3_Time_H: .RAM_DS 1
Regulate_3_Time_L: .RAM_DS 1
Regulate_4_Time: .RAM_DS 1
REGULATE_TIME: .EQU 10 ; 10*100ms, control relay delay 1s
OUT_VOLT_210: .EQU 210
OUT_VOLT_240: .EQU 240
OUT_VOLT_203: .EQU 203
OUT_VOLT_236: .EQU 236
OUT_VOLT_205: .EQU 205
OUT_VOLT_238: .EQU 238
Out_Volt_High_265_Time: .RAM_DS 1 ; Display delay time
Out_Volt_High_255_Time: .RAM_DS 1
Out_volt_High_245_Time: .RAM_DS 1
Out_Volt_Normal_Time: .RAM_DS 1
Out_Volt_Less_150_Time: .RAM_DS 1
DISPLAY_TIME: .EQU 12 ; 12*100ms, process display delay 1.2s
OUT_VOLT_265: .EQU 300
OUT_VOLT_255: .EQU 295
OUT_VOLT_245: .EQU 257
OUT_VOLT_150: .EQU 000
;================================================
;Hardware interface and macro definition
;------------------------------------------------
ON_DISPLAY: .MACRO
AND P2, #~38H
.ENDM
OFF_DISPLAY: .MACRO
OR P2, #38H
.ENDM
ON_WORK_LED: .MACRO
AND P2, #~08H
OR P2, #30H
.ENDM
ON_DELAY_LED: .MACRO
AND P2, #~10H
OR P2, #28H
.ENDM
ON_ERROR_LED: .MACRO
AND P2, #~20H
OR P2, #18H
.ENDM
WORK_LED: .MACRO ON_OFF
.IF ON_OFF==ON
AND DispBuf+2, #7FH
.ELSE
OR DispBuf+2, #80H
.ENDIF
.ENDM
DELAY_LED: .MACRO ON_OFF
.IF ON_OFF==ON
AND DispBuf+1,#7FH
.ELSE
OR DispBuf+1,#80H
.ENDIF
.ENDM
ERROR_LED: .MACRO ON_OFF
.IF ON_OFF==ON
AND DispBuf+0,#7FH
.ELSE
OR DispBuf+0,#80H
.ENDIF
.ENDM
ON_RL1: .MACRO
OR P2, #01H
.ENDM
OFF_RL1: .MACRO
AND P2, #~01H
.ENDM
ON_RL2: .MACRO
OR P2, #02H
.ENDM
OFF_RL2: .MACRO
AND P2, #~02H
.ENDM
ON_RL3: .MACRO
OR P2, #04H
.ENDM
OFF_RL3: .MACRO
AND P2, #~04H
.ENDM
REGULATE_TEAM_1: .MACRO ; Team 1: RL1 on; RL2 on; RL3 on
ON_RL2
ON_RL3
LD RegulateTeam, #01
.ENDM
REGULATE_TEAM_2: .MACRO ; Team 2: RL1 on; RL2 off; RL3 on
OFF_RL2
CALL DELAY_10MS
ON_RL3
LD RegulateTeam, #02
.ENDM
REGULATE_TEAM_3: .MACRO ; Team 3: RL1 on; RL2 on; RL3 off
ON_RL2
CALL DELAY_10MS
OFF_RL3
LD RegulateTeam, #03
.ENDM
REGULATE_TEAM_4: .MACRO ; Team 4: RL1 on; RL2 off; RL3 off
OFF_RL2
OFF_RL3
LD RegulateTeam, #04
.ENDM
BUZZER_ON: .MACRO
OR P1, #01H
.ENDM
BUZZER_OFF: .MACRO
AND P1, #~01H
.ENDM
INIT_SYSTEM: .MACRO ; Initialize macro-controller control register and pin
LD SYM, #00H;Disable interrupt
LD PWMCON, #00H
LD SP,#0C0h
LD CLKCON, #18H
LD BTCON, #0A2H
LD T0CON, #8AH
LD T0DATA, #200 ; 500us
LD P0CONL,#10101010b ;P0.0: dled_b
;P0.1: dled_F
;P0.2: dled_a
;P0.3: dled_g
LD P0CONH,#10101010b ;P0.4: dled_c
;P0.5: dled_d
;P0.6: dled_e
;P0.7: led control
LD P2CONL,#10101010b ;P2.0: RL1,out_relay
;P2.1: RL2,out_relay
;P2.2: RL3,in_relay
;P2.3: digit 百位
LD P2CONH,#00111010b ;P2.4: digit 十位
;P2.5: digit 個位
;P2.6: OUT VOLT ADC
LD P1CON,#00001010b ;p1.0: buzzer Push-pull output
;p1.1: Push-pull output
.ENDM
INIT_PARAMETER: .MACRO ; Initialize parameter
LD R0, #00H
CLREAR_RAM:
CLR @R0 ; Clear parameter value
INC R0
CP R0, #0C0h
JR ULT, CLREAR_RAM
LD DispBuf+2,#0FFH ; Turn off all LED
LD DispBuf+1,#0FFH
LD DispBuf+0,#0FFH
OR FlagReg, #DELAY_6S ; Enter delay 6s
LD Delay_6s_Cnt, #00
LD RegulateTeam, #02 ; Input volt equal to output volt
LD DisplayVoltSum+1, #00 ; Prevent after delay 6s,
LD DisplayVoltSum, #220 ; display refresh time coming,
LD DisplayVoltCnt, #01 ; and force out volt value high
.ENDM
;================================================
ORG 0000H
.VECTOR 00H, INT_PROCESS
ORG 003CH
DB 00H
DB 00H
DB 0E7H ;enable LVR 2.3V
DB 03H ;internal RC 3.2MHZ IN VDD 5V
ORG 0100H
JP MAIN
;================================================
INT_PROCESS::
TM T0CON, #01H
JP NZ, INT_TIMER0
IRET
INT_TIMER0:: ; TIMER 0 interrupt, 500us
PUSH R13
PUSH R14
PUSH R15
INC Cnt_1ms
CP Cnt_1ms, #2 ; 1ms
JP ULT, EXIT_INT_TIMER0
CLR Cnt_1ms
CP SampleTime, #50
JR UGT, JUMP_ADD_SAMPLE_TIME
INC SampleTime
JUMP_ADD_SAMPLE_TIME:
CP FactSampleTime, #30
JR UGT, JUMP_ADD_FACT_SAMPLE_TIME
INC FactSampleTime
JUMP_ADD_FACT_SAMPLE_TIME:
INC Cnt_6ms
CP Cnt_6ms, #6 ; 6ms
JR ULT, JUMP_SEND_DISPLAY_DATA
CLR Cnt_6ms
CALL SEND_DISPLAY_DATA
JUMP_SEND_DISPLAY_DATA:
CP Delay10msCnt, #5 ; 10ms
JR UGT, JUMP_ADD_RELAY_10ms_COUNTER
INC Delay10msCnt
JUMP_ADD_RELAY_10ms_COUNTER:
INC Cnt_100ms
CP Cnt_100ms,#100 ; 100ms
JP ULT, EXIT_INT_TIMER0
CLR Cnt_100ms
INC Cnt_2s
CP Cnt_2s, #15 ; While out volt more than 265V, delay 2s.
JR ULT, SKIP_OUT_VOLT_PROTECT_265
LD Cnt_2s, #15
SKIP_OUT_VOLT_PROTECT_265:
CP Regulate_1_Time, #50
JR UGT, JUMP_ADD_REGULATE_1_TIME
INC Regulate_1_Time
JUMP_ADD_REGULATE_1_TIME:
CP Regulate_2_Time_H, #50
JR UGT, JUMP_ADD_REGULATE_2_TIME_H
INC Regulate_2_Time_H
JUMP_ADD_REGULATE_2_TIME_H:
CP Regulate_2_Time_L, #50
JR UGT, JUMP_ADD_REGULATE_2_TIME_L
INC Regulate_2_Time_L
JUMP_ADD_REGULATE_2_TIME_L:
CP Regulate_3_Time_H, #50
JR UGT, JUMP_ADD_REGULATE_3_TIME_H
INC Regulate_3_Time_H
JUMP_ADD_REGULATE_3_TIME_H:
CP Regulate_3_Time_L, #50
JR UGT, JUMP_ADD_REGULATE_3_TIME_L
INC Regulate_3_Time_L
JUMP_ADD_REGULATE_3_TIME_L:
CP Regulate_4_Time, #50
JR UGT, JUMP_ADD_REGULATE_4_TIME
INC Regulate_4_Time
JUMP_ADD_REGULATE_4_TIME:
CP Out_Volt_High_265_Time, #50
JR UGT, JUMP_HIGH_265_TIME
INC Out_Volt_High_265_Time
JUMP_HIGH_265_TIME:
CP Out_Volt_High_255_Time, #50
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -