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

📄 s608220v.src

📁 数码显示稳压器程序,是可以做交流稳压器用的
💻 SRC
📖 第 1 页 / 共 4 页
字号:
disp_do:
  	AND	FlagReg,#~FreshDisp
	LD	R7,DispStatus
	CLR	R6
	ADD	R7,R7
	ADC	R6,R6
	ADD	R7,DispStatus
	ADC	R6,#0
	
	ADD	R7,#DISP_CASE_TAB%256
	ADC	R6,#DISP_CASE_TAB/256
	JP	@RR6
DISP_CASE_TAB:
	JP	CaseDISP_NORMAL	
	JP	CaseDISP_INLOW	
	JP	CaseDISP_OUTHIGH
	JP	CaseDISP_DELAY_TIME
	JP	CaseDISP_DELAY_SET
	JP	CaseDISP_OUTUNNORMAL
	;-------------------------------------------------------
CaseDISP_DELAY_SET:	
	
	CP	DispSetTime,#0
	JR	EQ,change_to_disp_normal

	WORK_LED  ON
	DELAY_LED ON
        ERROR_LED OFF
        TM	FlagReg,#BLINK_500ms
        JP      NZ,skip_display_delay_set
        OR 	DispBuf+0,#07Fh	
	OR  	DispBuf+1,#0FFh 
	OR 	DispBuf+2,#0FFh 
   	RET                     

 skip_display_delay_set:
	TM	FlagReg,#delay_short_long_flag
	JR	NZ,disp_long_delay_time
	LD	R6,#_5sec/256
	LD	R7,#_5sec%256
	JP	disp_adc_convert_bcd
	
disp_long_delay_time:
	LD	R6,#_120sec/256
	LD	R7,#_120sec%256
	JP	disp_adc_convert_bcd
	
change_to_disp_normal:
	LD	DispStatus,#DISP_NORMAL
	OR	FlagReg,#FreshDisp 
	RET
	;-------------------------------------------------
CaseDISP_DELAY_TIME:  

	
	WORK_LED  ON
        ERROR_LED OFF
        TM	FlagReg,#BLINK_500ms
	JR      NZ,jump_delay_led_on
	DELAY_LED OFF
	JR      jump_display_led_data
 jump_delay_led_on:
	DELAY_LED ON
 jump_display_led_data:
	
	CLR	R6
	LD	R7,DelayTimeCnt	
	;-------------------------------------------------	
		
 disp_adc_convert_bcd:
   	CALL	BCD_conversion		
   	CALL	set_display_data	
   	RET
   	;--------------------------------------------------------
CaseDISP_NORMAL: 
	TM	FlagReg,#IN_OUT_Volt_flag
	JR	Z,is_disp_out_volt
		
	CP	DispSetTime,#0
	JR	EQ,change_to_disp_out_volt
	TM	FlagReg,#BLINK_500ms
	JR      NZ,send_in_volt
	
	OR 	DispBuf+0,#07Fh	
	OR  	DispBuf+1,#0FFh 
	OR 	DispBuf+2,#0FFh
   	RET                     
send_in_volt:
        WORK_LED  ON  
        DELAY_LED ON  
        ERROR_LED OFF 
	LD	R6,DispInVolt
	LD	R7,DispInVolt+1
   	JP	disp_adc_convert_bcd
   	
   change_to_disp_out_volt:
   	AND	FlagReg,#~IN_OUT_Volt_flag	
   is_disp_out_volt:
	WORK_LED  ON  
        DELAY_LED ON  
        ERROR_LED OFF 
	
   	LD	R6,DispOutVolt
   	LD	R7,DispOutVolt+1
   	CP	R6,#VOLT_201V/256
   	JR	ULT,end_CaseDISP_LLL
   	JR	UGT,cmp_change_up_limit
   	CP	R7,#VOLT_201V%256
   	JR	ULT,end_CaseDISP_LLL
   
   cmp_change_up_limit:
   	CP	R6,#VOLT_237V/256
   	JR	UGT,end_CaseDISP_NORMAL
   	JR	ULT,change_220V_do
   	CP	R7,#VOLT_237V%256
   	JR	UGT,end_CaseDISP_NORMAL
   	
 change_220V_do:
        LD      Cnt300ms,#_300ms   
        
   skip_display_230:  
   	LD	R6,#0
   	LD	R7,#220
	JP	disp_adc_convert_bcd

end_CaseDISP_NORMAL:
        CP      Cnt300ms,#0  
        JR      NE,skip_display_230 
   	
	JP      skip_unnormaldisplay 
CaseDISP_INLOW:   
  
  end_CaseDISP_LLL:  
  
	WORK_LED  ON
	DELAY_LED OFF
        ERROR_LED ON
        TM	FlagReg,#BLINK_500ms
        JP      NZ,skip_display_OFF
        OR 	DispBuf+0,#07Fh	
	OR  	DispBuf+1,#0FFh 
	OR 	DispBuf+2,#0FFh 
   	RET                   
 skip_display_OFF:
        AND	DispBuf+0,#80h   
	AND	DispBuf+1,#80h  
	AND	DispBuf+2,#80h	 
 
	OR 	DispBuf+0,#(LED_OFF&(~80h))	
	OR   	DispBuf+1,#(CHAR_L&(~80h))
	OR 	DispBuf+2,#(LED_OFF&(~80h))
	RET
	;--------------------------------------------------
CaseDISP_OUTUNNORMAL:         
  skip_unnormaldisplay: 
        CP      DispOutVolt,#OUT_255V/256
        JR      UGT,display_outunnormal
        CP      DispOutVolt+1,#OUT_255V%256
        JR      ULT,skip_display_230
 display_outunnormal:
        WORK_LED  ON
	DELAY_LED OFF
        ERROR_LED ON
        TM	FlagReg,#BLINK_500ms
        JP      NZ,skip_display_REAL_VOLT
        OR 	DispBuf+0,#07Fh	
	OR  	DispBuf+1,#0FFh 
	OR 	DispBuf+2,#0FFh 
   	RET                    
   	
 skip_display_REAL_VOLT:
	LD	R6,DispOutVolt
   	LD	R7,DispOutVolt+1
	JP 	disp_adc_convert_bcd
;===============
CaseDISP_OUTHIGH: 

        CP	ProtectStatus,#PRO_WAITNORMAL
        JR      NE,skip_WORK_LED_ON
        OR 	DispBuf+0,#0FFh	
        ERROR_LED ON            
        JR      skip_display_outVOLT_H 
 skip_WORK_LED_ON:
 
        OR 	DispBuf+0,#07Fh	
 
 skip_WORK_LED_OFF:
 
	DELAY_LED OFF
        ERROR_LED ON
        TM	FlagReg,#BLINK_500ms
        JP      NZ,skip_display_outVOLT_H
       
	OR  	DispBuf+1,#0FFh 
	OR 	DispBuf+2,#0FFh 
   	RET                     
   	
 skip_display_outVOLT_H:
        AND	DispBuf+0,#80h   
	AND	DispBuf+1,#80h   
	AND	DispBuf+2,#80h	 

 
	OR 	DispBuf+0,#(LED_OFF&(~80h))	
	OR   	DispBuf+1,#(CHAR_H&(~80h))
	OR 	DispBuf+2,#(LED_OFF&(~80h))
	RET
;=====================================================================
DC_2V:	.EQU	103
MAX_SAMPLE_TIME:	.EQU	211
MIN_SAMPLE_TIME:	.EQU	111
;---------------------------------------------------------------------
;返回ADC:RR0
;--------------------
SampleNew::
wait_first_do:
	CLRWDT	
	TM	UserFlag,#FreshAdc
	JR	Z,wait_first_do
	AND	UserFlag,#~FreshAdc	
	CLR	R8
	CLR	R9
	OR	UserFlag,#BasePoint
	CLR	R4
	CLR	R5	
	
	CLR	R6	
	CLR	R7
wait_adc_act_over:
	AND	UserFlag,#~FreshAdc
wait_adc_act_over_:
	CLRWDT
	TM	UserFlag,#FreshAdc
	JR	Z,wait_adc_act_over_
	LD	R0,AdataH
	LD	R1,AdataL		
	LD	R3,R0
	
	SUB	R3,#DC_2V
	JR	NC,compare_c
	COM	R3
	INC	R3
compare_c:
	CP	R3,#2
	JR	UGT,not_base_point	
	
	TM	UserFlag,#BasePoint
	JR	Z,is_end_point
	AND	UserFlag,#~BasePoint	
	CLR	R8
	CLR	R9
	
	JR	compare_next_p
	;--------------------
is_end_point:	
	
	CP	R8,#MIN_SAMPLE_TIME/256
	JR	UGT,set_adc_over
	JR	ULT,is_continue_sum
	CP	R9,#MIN_SAMPLE_TIME%256
	JR	UGT,set_adc_over
	JR	is_continue_sum
	;---------------
not_base_point:
	TM	UserFlag,#BasePoint
	JR	NZ,base_point_not_found	
is_continue_sum:	
	CLR	R3	
	RCF
	RLC	R0
	RLC	R3
	
	RCF
	RLC	R0
	RLC	R3
	
	OR	R0,R1

	SUB	R0,#415%256 
	SBC	R3,#415/256 
	JR	NC,add_ccongn
	COM	R0
	COM	R3
	ADD	R0,#1
	ADC	R3,#0
	
add_ccongn:
	ADD	R5,R0
	ADC	R4,R3	
	INC	R7	
	JR	NZ,compare_next_p
	INC	R6
	;------------
compare_next_p:
base_point_not_found:	
	INC	R9
	JR	NZ,sikip_hgekjhte
	INC	R8
sikip_hgekjhte:
	CP	R8,#MAX_SAMPLE_TIME/256
	JR	UGT,set_adc_over
	JR	ULT,wait_adc_act_over
	CP	R9,#MAX_SAMPLE_TIME%256	
	JR	ULT,wait_adc_act_over	

set_adc_over:
	LD	R3,R6
	OR	R3,R7
	JR	Z,_is_return_zero
	
	LD	R0,R4
	LD	R1,R5
	
	LD	R3,R7
	LD	R2,R6
	
	RCF
	RRC	R2
	RRC	R3
	
	CALL	dbl_divs		;
	RET

_is_return_zero:
	CLR	R6
	CLR	R7
	RET
;=====================================================================

VOLT_200:		.EQU    260  
;入口:ADC RR0 出口:电压 RR0
calc_volt::
	SUB	R1,#VOLT_200%256
	SBC	R0,#VOLT_200/256
	JR	NC,calc_continu_in
	COM	R1
	COM	R0
	ADD	R1,#1
	ADC	R0,#0
	CALL	calc_IN_volt_acture
	COM	R1
	COM	R0
	ADD	R1,#201
	ADC	R0,#0
	JR	NC,ret_zero_volt_in	
	JR	rejtjel_in
calc_continu_in:
	CALL	calc_IN_volt_acture
	ADD	R1,#200
	ADC	R0,#0
rejtjel_in:

	RET
ret_zero_volt_in:
	CLR	R1
	CLR	R0
	RET

;=====================================
calc_IN_volt_acture: 
	LD	R7,R1
	LD	R6,R0
	RCF
	RRC	R6
	RRC	R7
	RCF
	RRC	R6
	RRC	R7
	
	RCF
	RLC	R1
	RLC	R0
	LD	R5,R1
	LD	R4,R0
	ADD	R1,R7
	ADC	R0,R6

	RCF
	RLC	R5
	RLC	R4
	RCF
	RLC	R5
	RLC	R4
	ADD	R1,R5
	ADC	R0,R4
	LD	R3,#13
	CLR	R2
	CALL	dbl_divs	
	RET
;=====================================
;保护处理进程:
;	保护类型:输出超压保护,输入低压保护,可自动恢复保护
;
;---------------------------------------------------------
;保护阀值定义
VOLT_201V:	.equ	180
VOLT_237V:	.equ	245 
OUT_255V:	.equ	245 
OUT_260V:	.equ	255 
OUT_265V:	.equ	265
OUT_180V:	.equ	180 
out_135V_OPEN:	.equ	135 
;保护状态字
PRO_255:	.EQU	0*3
PRO_260:	.EQU	1*3
PRO_265:	.EQU	2*3
PRO_100:	.EQU	3*3
PRO_NORMAL:	.EQU	4*3
PRO_ACTIVE:	.EQU	5*3
PRO_DELAY:	.EQU	6*3
PRO_WAITNORMAL:	.EQU	7*3
PRO255TIME:	.EQU	10 
PRO260TIME:	.EQU	2 
;--------------------------------------------------------------
deal_protect_function::
	TM	UserFlag,#ProtectEable
	JR	NZ,do_JDFJDF
	RET
do_JDFJDF:
	LD	R6,#protect_case_tab/256
	LD	R7,#protect_case_tab%256
	ADD	R7,ProtectStatus
	ADC	R6,#0
	JP	@RR6
protect_case_tab:
	JP	CasePRO_255
	JP	CasePRO_260             
	JP	CasePRO_265                    
	JP	CasePRO_100
	JP	CasePRO_NORMAL
	JP	CasePRO_ACTIVE
	JP	CasePRO_DELAY
	JP	CasePRO_WAITNORMAL
	;---------------------------------------------
CasePRO_255:

	LD	R0,OutVoltValue
	LD	R1,OutVoltValue+1
	CP	R0,#(OUT_255V-4)/256
	JR	UGT,if_change_to_260
	JR	ULT,set_pro_normal
	CP	R1,#(OUT_255V-4)%256
	JR	UGE,if_change_to_260
 set_pro_normal:	
	LD	ProtectStatus,#PRO_NORMAL
	LD	DispStatus,#DISP_NORMAL	
	JR	end_CasePRO_255
	
 if_change_to_260:
 	CP	R0,#OUT_260V/256
 	JR	UGT,set_pro_260
 	JR	ULT,end_CasePRO_255
 	CP	R1,#OUT_260V%256
 	JR	ULT,end_CasePRO_255
 	
 set_pro_260:
 	LD	ProtectStatus,#PRO_260
 	LD	Pro255Time,#PRO255TIME
        LD	DispStatus,#DISP_OUTHIGH
end_CasePRO_255:	
	RET
	;-------------------------------
set_protect_active:
	LD	ProtectStatus,#PRO_ACTIVE
	RET
	;-----------------------------
CasePRO_260:
	CP	Pro255Time,#0
	JR	EQ,set_protect_active
	CP	Pro255Time,#0
	JR	EQ,set_protect_active
	
	LD	R0,OutVoltValue
	LD	R1,OutVoltValue+1
	CP	R0,#(OUT_260V-4)/256
	JR	UGT,if_change_to_265
	JR	ULT,set_pro_255
	CP	R1,#(OUT_260V-4)%256
	JR	UGE,if_change_to_265
  set_pro_255:
	LD	ProtectStatus,#PRO_255
	LD	DispStatus,#DISP_NORMAL
	JR	end_CasePRO_260
	
 if_change_to_265:
 	CP	R0,#OUT_265V/256
 	JR	UGT,set_pro_265
 	JR	ULT,end_CasePRO_260
 	CP	R1,#OUT_265V%256
 	JR	ULT,end_CasePRO_260
 	
 set_pro_265:
 	LD	ProtectStatus,#PRO_265
 	LD	Pro260Time,#PRO260TIME
end_CasePRO_260:	
	RET
	;---------------------------------
CasePRO_265:
        CP	Pro260Time,#0          
	JR	EQ,set_protect_active  
	CP	OutVoltValue,#(OUT_265V-4)/256
	JR	ULT,change_to_pro_260
	JR	UGT,GO_NEXTone123
	
	CP	OutVoltValue+1,#(OUT_265V-4)%256
	JR	UGT,GO_NEXTone123
    change_to_pro_260:
    	LD	ProtectStatus,#PRO_260
    	RET
  GO_NEXTone123:
        RET
	
CasePRO_100:
	CP	OutVoltValue,#(OUT_180V+8)/256
	JR	UGT,change_to_pro_normal
	JR	ULT,end_CasePRO_100
	CP	OutVoltValue+1,#(OUT_180V+8)%256
	JR	ULT,end_CasePRO_100
  change_to_pro_normal:
	LD	ProtectStatus,#PRO_NORMAL
	LD	DispStatus,#DISP_NORMAL	
end_CasePRO_100:
	RET
	;---------------------------------------------------
CasePRO_NORMAL:
	CP	OutVoltValue,#(OUT_180V)/256
	JR	UGT,if_change_to_255
	JR	ULT,set_pro_100
	CP	OutVoltValue+1,#(OUT_180V)%256
	JR	UGT,if_change_to_255
   set_pro_100:
        TM      DELAY_300_display_flag,#01H
        JR      NZ,GO_disp_inlow
        CP      DELAY_time_display,#0
        JR      NZ,end_CasePRO_NORMAL
        LD      DELAY_time_display,#200    
   GO_disp_inlow:
        CLR     DELAY_300_display_flag
	LD	ProtectStatus,#PRO_100
	LD	DispStatus,#DISP_INLOW	
  	
	JR	end_CasePRO_NORMAL
	
    if_change_to_255:
    	CP	OutVoltValue,#OUT_255V/256
    	JR	ULT,end_CasePRO_NORMAL
    	JR	UGT,set_pr0_255
	CP	OutVoltValue+1,#OUT_255V%256
	JR	ULT,end_CasePRO_NORMAL
   set_pr0_255:
        TM      DELAY_300_display_flag,#01H  
        JR      NZ,GO_disp_OUTUNNORMAL
        CP      DELAY_time_display,#0
        JR      NZ,end_CasePRO_NORMAL
        LD      DELAY_time_display,#200    
   GO_disp_OUTUNNORMAL:
        CLR     DELAY_300_display_flag
   	LD	DispStatus,#DISP_OUTUNNORMAL	
	
   	LD	ProtectStatus,#PRO_255
   	LD	Pro255Time,#PRO255TIME
end_CasePRO_NORMAL:
   	RET		
	;---------------------------------------------------
CasePRO_ACTIVE:
	RL1	OFF
	LD	ProtectStatus,#PRO_WAITNORMAL
end_CasePRO_ACTIVE: 
	RET
	;---------------------------------------
CasePRO_DELAY:
	CP	OutVoltValue,#OUT_255V/256
    	JR	ULT,IS_LOW_InVoltValue 
    	JR	UGT,change_to_wait_normal
	CP	OutVoltValue+1,#OUT_255V%256
	JR	UGE,change_to_wait_normal
  IS_LOW_InVoltValue:	
	CP	OutVoltValue,#out_135V_OPEN/256 	
	JR	ULT,change_to_wait_normal
	JR	UGT,delay_continue

⌨️ 快捷键说明

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