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

📄 s805g3.src

📁 9454数码管显示交流电压程序,可以做交流电压表用
💻 SRC
📖 第 1 页 / 共 4 页
字号:

         .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 + -