📄 ledavr-5k.src
字号:
;--------------------------------------------------------------------
;主要功能描述
;1. 输入电压140-250VAC,输出电压220VAC±3%
;2. 采用两个3位的数码管分别显示输入电压和输出电压
;使用单片机:三星S3F9454BZZ
;--------------------------------------------------------------------
;Use 4MHz RC osillator
.include "S3c9454.reg"
;-------------------- Timer 0 define
TMR0_CLOCK: .EQU 40H ;00H: Fosc/4096
;40H: Fosc/256
;80H: Fosc/8
;C0H: T0CK
HIGHO EQU 99
LOWO EQU 31
HIGH: .EQU 11
LOW: .EQU 22
TMR0_CLR: .EQU 08H
TMR0_NOTCLR: .EQU 00H
TMR0_INT_ENA: .EQU 02H
TMR0_INT_DIS: .EQU 00H
TMR0_INT_CLR: .EQU 00h
TMR0_EVENT_VALUE: .EQU 31 ;Interval interrupt time=5ms
;-------------------- Buzer define
;----------------------<< Define system timer count value
_5_ms: .EQU 1 ;5ms
TWO_TEN_SECOND: .EQU 1 ;0.2s
FOUR_TEN_SECOND: .EQU 2 ;0.4s
SIX_TEN_SECOND: .EQU 3 ;0.6s
EIGHT_TEN_SECOND: .EQU 4 ;0.8s
ONE_SECOND: .EQU 5 ;1s
THREE_TWO_SECOND: .EQU 7
TWO_SECOND: .EQU 10 ;2s
THREE_SECOND: .EQU 15 ;3s
FOUR_SECOND: .EQU 20 ;4s
FIVE_SECOND: .EQU 25 ;5s
SIX_SECOND: .EQU 6 ;6s
TEN_SECOND: .EQU 50 ;10s
THIRTY_SECOND: .EQU 150 ;30s
THREE_MINUTE: .EQU 25;58
FIVE_MINUTE: .EQU 4
THIRTY_MINUTE: .EQU 35
SIXTY_MINUTE: .EQU 70
;---------------------<< Define delay output status
; inc/dec break status
;---------------------<< Define temperature protect and voltage regulating
; active point value
T_PROTECT_VALUE: .EQU 210;125;140-110;Temp. protect point A/D value
T_RESTAR_VALUE .EQU 300;210
; value=266H
;;3 -> 14/6
V_DIFF_VALUE: .EQU 9 ;Voltage regulating point +/- value
; value=266H
V_DIFF_VALUE1: .EQU 18
;;3 -> 14/6
TEMP_NORMAL: .EQU 00H
TEMP_PROTECTED: .EQU 55H
TEMP_NOPROTECTED: .EQU 00H
VOLT_NORMAL: .EQU 00H
VOLT_OVER: .EQU 55H
VOLT_UNDER: .EQU 0AAH
VOLT_REGULATED_INC: .EQU 55H
VOLT_REGULATED_DEC: .EQU 0AAH
VOLT_NOREGULATED: .EQU 00H
DLY_INIT: .EQU 00H
DLY_SHORT: .EQU 55H
DLY_LONG: .EQU 0AAH
DLY_SKIP: .EQU 0BBH
DLY_CLR: .EQU 0DDH
DLY_UNCHANGE: .EQU 00H
DLY_CHANGED: .EQU 55H
;Over voltage protect reverse delay define
;Output Vlot.: <190V 264V 274V 284V 294V 304V 314V
;protect delay: 5s 5s 3s 1s 0.4s 100ms 30ms
VHIGH_PROTECT_VALUE: .EQU 0D3H ;264V->3.63V=2E7H
VLOW_PROTECT_VALUE: .EQU 84H ;190V->2.58V=210H
V_220V_VALUE: .EQU 98H ;220V->3.00V=266H
VHIGH_274V_VALUE: .EQU 0DEH ;274V->3.73V=310H
VHIGH_284V_VALUE: .EQU 0EAH ;284V->3.89V=32DH
VHIGH_294V_VALUE: .EQU 0F7H ;294V->4.03V=349H
VHIGH_304V_VALUE: .EQU 0DCH;0D5H ;304V->4.16V=364H
VHIGH_314V_VALUE: .EQU 0DCH;0DCH ;314V->4.30V=381H
VOLT_2VDC: .EQU 80H
;--------------------------------
;VOLT_PROTECTED: .EQU 55H
;VOLT_NOPROTECTED: .EQU 00H
CURR_AD_STOP: .EQU 00H
CURR_AD_START: .EQU 55H
VOLT_HIGH: .EQU 55H
VOLT_LOW: .EQU 0AAH
SYSTEM_NORMAL: .EQU 55H
SYSTEM_FAILED: .EQU 0AAH
SYSTEM_INIT: .EQU 00H
ACCU_LOW220: .EQU 8;10;12
DETECT_START: .EQU 55H
DETECT_STOP: .EQU 0AAH
KEY_READY: .EQU 00H
KEY_FAIL: .EQU 0BBH
;---------------------------------
LOAD_NORMAL: .EQU 00H
LOAD_OVER1: .EQU 10H
LOAD_OVER2: .EQU 20H
LOAD_OVER3: .EQU 30H
LOAD_OVER4: .EQU 40H
LOAD_OVER5: .EQU 50H
LOAD_PROT: .EQU 0AAH
OUT_INIT: .EQU 00H
OUT_SHORT: .EQU 55H
OVER_500LOADH: .EQU 1h;(((0320H*2)/5)/256)
OVER_500LOADL: .EQU 4ch;(((0320H*2)/5)%256)
OVER_300LOADH: .EQU 01H;(CHANGED25A), 27A(((02ECH*2)/5)/256); 12BH
OVER_300LOADL: .EQU 23H; 27A(((02ECH*2)/5)%256)
OVER_180LOADH: .EQU 00H;(CHANGED20A), 16A(((01C2H*2)/5)/256); 0B4H
OVER_180LOADL: .EQU 0E9H; 16A(((01C2H*2)/5)%256)
OVER_120LOADH: .EQU 0H ;(CHANGED16A);11A(((0129H*2)/5)/256); 076H
OVER_120LOADL: .EQU 0BBH
;---------------------------------
VOUT_REG_DIM: .EQU 3
REG_DIM: .EQU 2
VOUT_REG_DIM1: .EQU 6
REG_DIM1: .EQU 1
VIN_DIM: .EQU 1
Standard_Volt_Select .EQU 140
VOUT_220V: .EQU 98H
VOUT_DIM: .EQU 3
;------------------------Display parameter defination
DLY_INPUT_COM: .equ 42H
DLY_CON_CODE: .equ 00001000B
KEY_INPUT_COM: .equ 43H
DLY_VOLTAGE: .equ 00H
DLY_CURRENT: .equ 55H
ACCU_SEL: .equ 04H
DELAY_SW: .equ 80H
DLY_DEC: .equ 55H
DLY_INC: .equ 0AAH
DLY_VIN_220VH: .equ 02H
DLY_VIN_220VL: .equ 02H
DLY_VOUT_220VH: .equ 02H
DLY_VOUT_220VL: .equ 69H
;---------------------<< P0 bit define
;_ACCU_SEL: .EQU 01H ;08H ;p0.0
;---------------------<< P1 bit define
;_DELAY_SW: .EQU 20H ;10H ;P0.5;
;---------------------<< P2 bit define
_OUT_DEC: .EQU 01H ;P2.0
_OUT_INC: .EQU 02H ;P2.1
_RELAY: .EQU 20h ;P2.5;
_BUZ: .EQU 04H ;P2.2
_FAN: .EQU 08H ;P2.3
;--------<< Interrupt Vector Address
.ORG 0000H
.VECTOR 00H,INT_Handler
;------------------
.ORG 003CH
DB 00H
DB 00H
DB 0E7H
DB 01H
;------------------
;=================================
;This Is The HT1621 Control Command
;将12 BIT COMMAND分成8+4位方式存放 high bits used
SYS_DIS .EQU 0
SYS_EN .EQU 1
LCD_OFF .EQU 2
LCD_ON .EQU 3
TIMER_DIS .EQU 4
WDT_DIS .EQU 5
TIMER_EN .EQU 6
WDT_EN .EQU 7
TONE_OFF .EQU 8
CLR_TIMER .EQU 9
CLR_WDT .EQU 10
RC_32K .EQU 11
XTAL_32K .EQU 12
TONE_4K .EQU 13
TONE_2K .EQU 14
IRQ_DIS .EQU 15
DRQ_EN .EQU 16
F1 .EQU 17
F2 .EQU 18
F4 .EQU 19
F8 .EQU 20
F16 .EQU 21
F32 .EQU 22
F64 .EQU 23
F128 .EQU 24
TEST .EQU 25
NORMAL_MODE .EQU 26
BIAS_3_DUTY_4: .EQU 27
COMMAND_ID_TAB:
.DB 80h,00h ;0,SYS DIS
.DB 80h,20h ;1,SYS EN
.DB 80h,40h ;2,LCD OFF
.DB 80h,60h ;3,LCD ON
.DB 80h,80h ;4 TIMER DIS
.DB 80h,0a0h ;5 wdt dis
.DB 80h,0c0h ;6,timer en
.DB 80h,0e0h ;7,wdt en
.DB 81H,00H ;8,TONE OFF
.DB 81H,080H ;9,CLR TIMER
.DB 81H,0C0H ;10,CLRWDT
.DB 83h,00h ;11,RC_32k
.DB 82H,80H ;12,XTAL 32K
.DB 88H,00H ;13,TONE 4K
.DB 8CH,00H ;14,TONE 2K
.DB 90H,00H ;15,IRQDIS
.DB 91H,00H ;16,DRQ EN
.DB 94H,00H ;17,F1 TIME BASE CLOCK OUPUT 2Hz,
.DB 94H,20H ;18,F2
.DB 94H,40H ;19,F4
.DB 94H,60H ;20,F8
.DB 94H,80H ;21,F16
.DB 94H,0A0H ;22,F32
.DB 94H,0C0H ;23,F64
.DB 94H,0E0H ;24,F128
.DB 9CH,00H ;25,TEST
.DB 9CH,60H ;26,NORMAL
.DB 85H,20H ;27,1/3BIAS; 1/4DUTY
;--------------------------------------------------------------------
; DATA SEGMENT cont....
;--------------------------------------
.RAM_ORG 00H
;Input_Timer: .RAM_DS 1 ;10h
System_Timer: .RAM_DS 1 ;11h
;Startup_Timer: .RAM_DS 1 ;12h
OutputDly_Timer: .RAM_DS 1 ;13h
;TempDly_Timer: .RAM_DS 1 ;14h
VoltProtDly_Timer: .RAM_DS 1 ;16h
LCDBlink_Timer: .RAM_DS 1
Buzer_Timer: .RAM_DS 1 ;19h
BuzerStop_Timer: .RAM_DS 1 ;1ah
;Aux_Timer: .RAM_DS 1 ;1bh
;DlyLong_Timer: .RAM_DS 1
OutVoltRegulate .RAM_DS 2
;DLYDelay_Timer: .RAM_DS 1
RegulateTime: .RAM_DS 1
DelaySW_Input: .RAM_DS 1 ;1ch
DelaySW_Save: .RAM_DS 1
AccuSW_Input: .RAM_DS 1 ;1dh
T_ADValueH: .RAM_DS 1 ;1fh
T_ADValueL: .RAM_DS 1
Vout_ADValueH: .RAM_DS 1 ;23h
Vout_ADValueL: .RAM_DS 1 ;24h
Vout_valueH: .RAM_DS 1 ;23h
Vout_valueL: .RAM_DS 1 ;24h
Vin_valueH: .RAM_DS 1
Vin_valueL: .RAM_DS 1
SystemStatus: .RAM_DS 1 ;25h
;??H: Over temperature
Temp_Status_Save: .RAM_DS 1 ;27h
Temp_Status: .RAM_DS 1 ;??H: NO protect ;28h
FAN_STATUS: .RAM_DS 1
;??H: Protect
Volt_Protect: .RAM_DS 1 ;??H: NO protect ;2bh
;??H: Protect on high/low voltage
Volt_PStatus: .RAM_DS 1 ;??H: Within protect point range ;2ch
;??H: Overrange protect point range
VOLT_PRTdelay: .RAM_DS 1
ADC_Buffer: .RAM_DS 16 ;21 ;32h
VoltIn_Value1: .RAM_DS 1
VoltIn_Value2: .RAM_DS 1
VoltIn_Value3: .RAM_DS 1
VoltOut_Value1: .RAM_DS 1
VoltOut_Value2: .RAM_DS 1
VoltOut_Value3: .RAM_DS 1
CURROut_Value1: .RAM_DS 1
CURROut_Value2: .RAM_DS 1
DLYINIT_Counter: .RAM_DS 1
CURR_ADValueH: .RAM_DS 1
CURR_ADValueL: .RAM_DS 1
VIn_ADValueH: .RAM_DS 1
VIn_ADValueL: .RAM_DS 1
display_set1: .RAM_DS 1
display_set2: .RAM_DS 1
display_set3: .RAM_DS 1
system_timer1s: .RAM_DS 1
AccuSW_Save: .RAM_DS 1
KeyState1: .RAM_DS 1
;KeyState2: .RAM_DS 1
CurrADFlag: .RAM_DS 1
LoadState: .RAM_DS 1
;HighProtTime .RAM_DS 1
;========================================================
;2001-12-12 8:42 加入
; By Ted Chen
START_ADC .EQU 01H
ADC_OEC .EQU 08H
TEMP_ADCONTROL .EQU 00110110B ;00100110B;温度采样控制字,P0.3,clock=Foc/8,not start adc;
CURR_ADCONTROL .EQU 00100110B ;00010110B;电流采样控制字,P0.2,其他同上
INVOLT_ADCONTROL .EQU 01100110B ;00000110B;输入电压AD采样控制字节,P0.6
OUTVOLT_ADCONTROL .EQU 01000110B ;00110110B;输出电压采样控制字节,P0.4
CLRWDT: .MACRO
OR BTCON,#00000010b
.ENDM
YuanLaiShiJian: .RAM_DS 1 ;不改变原来定时结构2ms
__2ms: .EQU (2000/80)
;
AdataH: .RAM_DS 1
AdataL: .RAM_DS 1
UserFlag: .RAM_DS 1
LedDispFresh: .EQU 1
FreshAdc: .EQU 2
BasePoint: .EQU 4
FreshDispVolt: .equ 8
DetectFlag: .equ 10h
SelfBlink: .EQU 20h
DLYFlag: .EQU 40h
FreshDipsTime: .ram_ds 1
__600ms: .equ 3
;--------------------------------------------------------------------
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
.ENDM
MAKE_IO_CLK: .MACRO
OR P2,#01000000B
NOP
NOP
NOP
NOP
AND P2,#~01000000B
NOP
.ENDM
MAKE_DISP_164_CLOCK .MACRO
OR P0,#00000001B
NOP
NOP
NOP
NOP
AND P0,#~00000001B
NOP
.ENDM
;显示数据总线
DISP_DATA_BUS .MACRO HighLow ;P0.7
.IF HighLow==HIGH
OR P0,#10000000B
.ELSE
AND P0,#~10000000B
.ENDIF
.ENDM
SET_LED_SDA .MACRO
NOP
DISP_DATA_BUS HIGH
NOP
.ENDM
CLR_LED_SDA .MACRO
NOP
DISP_DATA_BUS LOW
NOP
.ENDM
OFF_DISP .MACRO
OR P0,#20H ;P0.5
.ENDM
ON_DISP .MACRO
AND P0,#~20H
.ENDM
;指示灯控制。
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
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
SystemTimer:: .RAM_DS 1
LedBlinkTimer: .RAM_DS 1
disp_fresh_time .RAM_DS 1
;fastOut_Voltbuffer .RAM_DS 2
_4ms: .EQU 50
_200ms: .EQU 50
;--------------------------------------------------------------------
.ORG 0100H
cold_start:
DI
LD BTCON, #11110011B ;禁止WATCHDOG,清 basic timer(本程序未用)
LD CLKCON,#00011000B ;CPU时钟不分频,
LD SP,#0C0h
LD T0DATA,#40 ;80us定时常数
LD T0CON,#10001010B ;fosc/8
OR P2,#_BUZ
LD P0CONL,#11000110B ;
LD P0CONH,#10111011B ;
LD P1CON,#00001010B
LD P2CONL,#10101010B
LD P2CONH,#11001001B
;----------<< RAM Area Clear
LD R0,#0
RAM_Clear:
CLR @R0
INC R0
CP R0,#0BFH
JR ULE,RAM_Clear
LD system_timer1s,#5
LD AccuSW_Input,#ACCU_LOW220;ACCU_HIGH;
LD YuanLaiShiJian,#__2ms ;4ms定时
LD FreshDipsTime,#__600ms
LD VOLT_PRTdelay,#3
LD OutputDly_Timer,#SIX_SECOND
AND UserFlag,#~DLYFlag
LD SystemStatus,#SYSTEM_INIT
AND P2,#~_RELAY
;----------<< Timer 0
EI ;Enable interrupt
;-----------------------------------------------------------------
Main_loop::
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -