⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 s805g3.src

📁 9454数码管显示交流电压程序,可以做交流电压表用
💻 SRC
📖 第 1 页 / 共 4 页
字号:
         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::

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -