📄 ledavr-5k.src
字号:
VoltDn MACRO ;输出电压高,伺服驱动,1->P2.1
AND P2,#~(_OUT_INC|_OUT_DEC)
OR P2,#_OUT_DEC
ENDM
;-----------------------------------
;-----------------------------------
output_regulate::
CLR R2
LD R6,OutVoltRegulate
LD R7,OutVoltRegulate+1
SUB R7,#OUT_220ADC%256
SBC R6,#OUT_220ADC/256
JR C,out_volneedH
;*******************
LD R1,Vin_valueL
LD R0,Vin_valueH
CJULTRR0L 255,skip_abs
LD RegulateTime,#0;输出电压>=255V时,停止稳压
AND P2,#~(_OUT_INC|_OUT_DEC); regulate stop
RET
;*******************
out_volneedH:
LD R2,#1 ;输出电压低
COM R7
COM R6
ADD R7,#1
ADC R6,#0
skip_abs:
CP R6,#0
JR NZ,start_regulate
CP R7,AccuSW_Input
JR UGT,start_regulate
AND P2,#~(_OUT_INC|_OUT_DEC) ; regulate stop
RET
start_regulate:
;**********************
CALL calc_regulate_time
LD RegulateTime,R0
;**********************
CP R2,#1
JR EQ,set_volt_up
VoltDn
RET
set_volt_up:
VoltUp
RET
;--------------------------------------------------------------------
; Control motor positive/reverse rotate, Output relay switching, and
; buzerr's output
;--------------------------------------------------------------------
Output_Module:
CALL SYS_INIT_OUTPUT
;===================
voltprot:
CP Volt_PStatus,#VOLT_HIGH ;if volt. protect
JR NE,Temp_prot
CP VOLT_PRTdelay,#0
JR NE,Temp_prot
JP sysfail ;电压保护时,不考虑温度保护
Temp_prot:
CP Temp_Status,#TEMP_PROTECTED
JR NE,sys_norm
JP sysfail
;====================
sys_norm:
CP SystemStatus,#SYSTEM_INIT
JR EQ,sysinit
CP SystemStatus,#SYSTEM_FAILED
JR EQ,is_volt_fresh
;*********************************************
keep_output:
OR P2,#_RELAY ;Close output relay
OR P2,#_BUZ
RET
;***********************************************
is_volt_fresh:: ;加入高压保护(或温度保护)后重新延时输出
CP Volt_PStatus,#VOLT_NORMAL
JR NE,keep_output ;高压延时保护保持输出
LD SystemStatus,#SYSTEM_INIT
LD OutputDly_Timer,#SIX_SECOND
AND UserFlag,#~DLYFlag
RET
;***********************************************
sysfail:
AND P2,#~_RELAY ;Open output relay
CP Buzer_Timer,#0
JR NE,buzend
LD Buzer_Timer,#5
XOR P2,#_BUZ
buzend:
RET
sysinit:
AND P2,#~_RELAY ;Open output relay
;LD BuzerStop_Timer,#THIRTY_SECOND
OR P2,#_BUZ ;Bip off buzer
RET
;------------------------------------------------------------------
;------------------------------------------
;调节时间计算
;
;----------------------------------------------
calc_regulate_time::
CLR R0
cal_regulate_time_conti:
CP R6,#0
JR NE,OVER_255_timr
CP R7,#10
JR ULT,set_regulat_low
CP R7,#70
JR UGT,OVER_255_timr
LD R0,R7
RCF
RRC R7
;RCF
;RRC R7
ADD R0,R7
RET
OVER_255_timr:
LD R0,#100
RET
set_regulat_low:
LD R0,#20
RET
;====================================================================
DispStatus: .RAM_DS 1
dispnow: .RAM_DS 1
DispBuf: .RAM_DS 6
DispDig: .RAM_DS 6
DIG_BLINK_Time .RAM_DS 1
ON: .equ 34
OFF: .equ 56
BLINK: .equ 67
SKIP: .equ 89
DELAY_LED: .MACRO Status
.if Status==ON
AND DispBuf+4,#~80H
.else
.if Status==OFF
OR DispBuf+4,#80H
.endif
.endif
.ENDM
;--------------------------------------
UNUSUAL_LED: .MACRO Status
.if Status==ON
AND DispBuf+3,#~80H
.else
.if Status==OFF
OR DispBuf+3,#80H
.endif
.endif
.ENDM
;-------------------------------------
WORKING_LED: .MACRO Status
.if Status==ON
AND DispBuf+5,#~80H
.else
.if Status==OFF
OR DispBuf+5,#80H
.endif
.endif
.ENDM
;------------------------------------------------------------------
Display_Module::
CP SystemStatus,#SYSTEM_INIT
JR EQ,Display_delay_time
CP SystemStatus,#SYSTEM_NORMAL
JR EQ,Display_Voltage
CP SystemStatus,#SYSTEM_FAILED
JP EQ,Display_UNNORMAL
RET
;---------------------------------
Display_delay_time:
WORKING_LED ON
UNUSUAL_LED OFF
CP DIG_BLINK_Time,#0
JR NE,display_time
LD DIG_BLINK_Time,#FOUR_TEN_SECOND
XOR UserFlag,#SelfBlink
TM UserFlag,#SelfBlink
JR Z,set_off_OUTLAMP
DELAY_LED ON
JR display_time
set_off_OUTLAMP:
DELAY_LED OFF
display_time:
CP disp_fresh_time,#0
JR NE,exit_display_time
LD disp_fresh_time,#FOUR_TEN_SECOND
LD R7,OutputDly_Timer
LD R6,#0
CALL BCD_conversion
LD DispDig+0,R3
LD DispDig+1,R4
LD DispDig+2,R5
LD DispDig+3,R3
LD DispDig+4,R4
LD DispDig+5,R5
CALL set_display_data
exit_display_time:
RET
;---------------------------------
Display_Voltage:
CP Volt_PStatus, #VOLT_LOW
JP EQ,Display_UNNORMAL
WORKING_LED ON
UNUSUAL_LED OFF
DELAY_LED OFF
CP disp_fresh_time,#0
JR NE,exit_disData
LD disp_fresh_time,#SIX_TEN_SECOND
LD R7,Vin_valueL
LD R6,Vin_valueH
CALL BCD_conversion
LD DispDig+0,R3
LD DispDig+1,R4
LD DispDig+2,R5
LD R7,Vout_valueL
LD R6,Vout_valueH
CALL BCD_conversion
LD DispDig+3,R3
LD DispDig+4,R4
LD DispDig+5,R5
CALL set_display_data
exit_disData:
RET
set_display_data::
DI
AND DispBuf+0,#80H ;刷新每位七段。
AND DispBuf+1,#80H
AND DispBuf+2,#80H
AND DispBuf+3,#80H
AND DispBuf+4,#80H
AND DispBuf+5,#80H
LD R7,DispDig+0
CALL BCD_TO_LED
AND R7,#~80H
OR DispBuf+0,R7
LD R7,DispDig+1
CALL BCD_TO_LED
AND R7,#~80H
OR DispBuf+1,R7
LD R7,DispDig+2
CALL BCD_TO_LED
AND R7,#~80H
OR DispBuf+2,R7
LD R7,DispDig+3
CALL BCD_TO_LED
AND R7,#~80H
OR DispBuf+3,R7
LD R7,DispDig+4
CALL BCD_TO_LED
AND R7,#~80H
OR DispBuf+4,R7
LD R7,DispDig+5
CALL BCD_TO_LED
AND R7,#~80H
OR DispBuf+5,R7
EI
RET
Display_UNNORMAL:
WORKING_LED ON
DELAY_LED OFF
CP DIG_BLINK_Time,#0
JR NE,exit_disp_UNNORMAL
LD DIG_BLINK_Time,#FOUR_TEN_SECOND
XOR UserFlag,#SelfBlink
TM UserFlag,#SelfBlink
JR NZ,set_disp_off
UNUSUAL_LED ON
CP Volt_PStatus, #VOLT_HIGH
JR EQ,disp_high
CP Volt_PStatus, #VOLT_LOW
JR EQ,disp_low
LD R6,#MSG_TEMP_HIGH/256
LD R7,#MSG_TEMP_HIGH%256
JR disp_string
disp_low:
LD R6,#MSG_VOLT_LOW/256
LD R7,#MSG_VOLT_LOW%256
JR disp_string
disp_high:
LD R6,#MSG_VOLT_HIGH/256
LD R7,#MSG_VOLT_HIGH%256
disp_string:
CALL load_string
exit_disp_UNNORMAL:
RET
set_disp_off:
UNUSUAL_LED OFF
AND DispBuf+0,#80H
AND DispBuf+1,#80H
AND DispBuf+2,#80H
AND DispBuf+3,#80H
AND DispBuf+4,#80H
AND DispBuf+5,#80H
OR DispBuf+0,#(LED_OFF&(~80h))
OR DispBuf+1,#(LED_OFF&(~80h))
OR DispBuf+2,#(LED_OFF&(~80h))
OR DispBuf+3,#(LED_OFF&(~80h))
OR DispBuf+4,#(LED_OFF&(~80h))
OR DispBuf+5,#(LED_OFF&(~80h))
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
LED_SEG_0: .EQU 0C0H ;11000000B
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显示码表,共阳极 ;0开通.
.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
.DB LED_OFF ;space ;16
.DB 0CH&0FH ;17
.DB 00H&0FH ;18
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::
AND DispBuf+0,#80H
AND DispBuf+1,#80H
AND DispBuf+2,#80H
AND DispBuf+3,#80H
AND DispBuf+4,#80H
AND DispBuf+5,#80H
;-------输出显示报警信息---------
LDCI R0,@RR6
AND R0,#~80H
OR DispBuf+3,R0
LDCI R0,@RR6
AND R0,#~80H
OR DispBuf+4,R0
LDCI R0,@RR6
AND R0,#~80H
OR DispBuf+5,R0
;-------输入电压闪烁显示-------
LD R7,Vin_valueL
LD R6,Vin_valueH
CALL BCD_conversion
LD DispDig+0,R3
LD DispDig+1,R4
LD DispDig+2,R5
LD R7,DispDig+0
CALL BCD_TO_LED
AND R7,#~80H
OR DispBuf+0,R7
LD R7,DispDig+1
CALL BCD_TO_LED
AND R7,#~80H
OR DispBuf+1,R7
LD R7,DispDig+2
CALL BCD_TO_LED
AND R7,#~80H
OR DispBuf+2,R7
RET
;=============================================
display::
OFF_DISP
LD R14,dispnow
LD R13,#DispBuf[R14]
DISP_8BIT
SET_LED_SDA
CP R14,#0
JR NE,SW_SEND_OUT_PP
CLR_LED_SDA
SW_SEND_OUT_PP: ;产生时钟,输出位选数据
MAKE_DISP_164_CLOCK
INC dispnow ;指向下一显示缓冲区
CP dispnow,#6
JR ULT,exit_disp
CLR dispnow
exit_disp:
ON_DISP
RET
;========================================
;AVR_LCD 移植
;入口
;=======================================
;
;取当前ADC最大/最小值,用于KEY 和 Temp
;出口: RR0:最大, RR2:最小值
;----------------------------------------------------------------
;*********************************
OUT_220ADC: .EQU 280;285
calc_outvolt:: ;V=(2+1/2+1/4+1/8)AD/8-1.3
;入口:RR6 ADC
; LD OutVoltValue+1,R7
; LD OutVoltValue,R6
; RET
LD R1,R7
LD R0,R6
SUB R1,#OUT_220ADC%256
SBC R0,#OUT_220ADC/256
JR NC,calc_continu_out
COM R1
COM R0
ADD R1,#1
ADC R0,#0
CALL calc_IN_volt_acture;calc_volt_acture
COM R1
COM R0
ADD R1,#221
ADC R0,#0
JR NC,ret_zero_volt
JR rejtjel
calc_continu_out:
CALL calc_IN_volt_acture;calc_volt_acture
ADD R1,#220
ADC R0,#0
rejtjel:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -