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

📄 s608220v.src

📁 数码显示稳压器程序,是可以做交流稳压器用的
💻 SRC
📖 第 1 页 / 共 4 页
字号:
	LD	OutVoltValue,R0
	
	CLR     R6
	LD	R7,OutputStatus	
	ADD	R7,#Count_InVolt_TAB%256
	ADC	R6,#Count_InVolt_TAB/256
	CALL	@RR6
        LD	InVoltValue+1,R1
	LD	InVoltValue,R0
        LD	ADCON,#KEYADCON|START_ADC
	LD	R7,#30 ; 30 * 50us=1.5ms
	CLR	R6
	CALL	GetMaxMinData
	LD	KeyAdcValue,R0
	LD	KeyAdcValue+1,R1
        
        
        RET
         
;==============================
Count_InVolt_TAB::
        JP      regelate_method0_InVolt	
	JP	regelate_method1_InVolt       
	JP	regelate_method2_InVolt		
	JP	regelate_method3_InVolt	
        JP      regelate_method4_InVolt	
	JP	regelate_method5_InVolt		
	JP	regelate_method6_InVolt		
	JP	regelate_method7_InVolt	
	
        ;------------
	
regelate_method0_InVolt:
        LD      R3,#77%256 
        LD      R2,#77/256 
        CALL    multiplication
        LD      R3,#120%256 
        LD      R2,#120/256 
        CALL    dbl_divs
        RET
        
        ;------------
        
regelate_method1_InVolt:
        LD      R3,#77%256
        LD      R2,#77/256
        CALL    multiplication
        LD      R3,#109%256
        LD      R2,#109/256
        CALL    dbl_divs
        RET
        
        ;------------
        
regelate_method2_InVolt:
        LD      R3,#90%256
        LD      R2,#90/256
        CALL    multiplication
        LD      R3,#120%256
        LD      R2,#120/256
        CALL    dbl_divs
        RET
        
        ;------------
        
regelate_method3_InVolt:
        LD      R3,#90%256
        LD      R2,#90/256
        CALL    multiplication
        LD      R3,#109%256
        LD      R2,#109/256
        CALL    dbl_divs
        RET
        
        ;------------
        
regelate_method4_InVolt:
        LD      R3,#104%256
        LD      R2,#104/256
        CALL    multiplication
        LD      R3,#120%256
        LD      R2,#120/256
        CALL    dbl_divs
        RET
        
        ;------------
        
regelate_method5_InVolt:
        LD      R3,#104%256
        LD      R2,#104/256
        CALL    multiplication
        LD      R3,#109%256
        LD      R2,#109/256
        CALL    dbl_divs
        RET
        
        ;------------
        
regelate_method6_InVolt:
        LD      R3,#118%256
        LD      R2,#118/256
        CALL    multiplication
        LD      R3,#120%256
        LD      R2,#120/256
        CALL    dbl_divs
        RET
        
        ;------------
        
regelate_method7_InVolt:
        LD      R3,#118%256
        LD      R2,#118/256
        CALL    multiplication
        LD      R3,#109%256
        LD      R2,#109/256
        CALL    dbl_divs
        RET
;========================================
;按键AD当量
delaydeal_f:	  .RAM_DS 1
IN_OUT_KEY:	.equ	209 
DELAY_KEY:	.equ	336 
DIM:		.EQU	45

IN_OUT_KEYB:    .equ	146 
DELAY_KEYB:	.equ	900

read_key::
	CLR	R7
	LD	R2,KeyAdcValue
	LD	R3,KeyAdcValue+1
        TM      delaydeal_f,#80H  
        JR      Z,go_wqe
        SUB	R3,#DELAY_KEYB%256
	SBC	R2,#DELAY_KEYB/256
        JR      NC,delay_6
        LD	RelayOnTime,#_120s
        OR      FlagReg,#delay_short_long_flag
        JR      go_over_ini
  delay_6:
        LD	RelayOnTime,#_6s
        AND     FlagReg,#~delay_short_long_flag
  go_over_ini:
        LD	KeyStatus,#Key_normal
        AND     delaydeal_f,#~80H  
        RET
        
  go_wqe:
	
	SUB	R3,#IN_OUT_KEY%256
	SBC	R2,#IN_OUT_KEY/256
	JR	NC,is_key_large
	COM	R3
	COM	R2
	ADD	R3,#1
	ADC	R2,#0
  is_key_large:
  	SUB	R3,#DIM
  	SBC	R2,#0
  	JR	NC,cmp_inout_keyb	
	JR      in_out_key_press
	
  cmp_inout_keyb:	  
	LD	R2,KeyAdcValue
	LD	R3,KeyAdcValue+1
	SUB	R3,#IN_OUT_KEYB%256
	SBC	R2,#IN_OUT_KEYB/256
	JR	NC,is_key_large_b
	COM	R3
	COM	R2
	ADD	R3,#1
	ADC	R2,#0
  is_key_large_b:
  	SUB	R3,#DIM
  	SBC	R2,#0
  	JR	NC,cmp_nxt_key
	
  in_out_key_press:
  	OR	R7,#K_IN_OUT 
        AND     delaydeal_f,#~01h
        JR      delay_key_not_press 
        ;=================================
cmp_nxt_key:
        TM    	FlagReg,#delay_short_long_flag
        JR      NZ,cmp_delaykeyB
	LD	R2,KeyAdcValue
	LD	R3,KeyAdcValue+1
	SUB	R3,#DELAY_KEY%256
	SBC	R2,#DELAY_KEY/256
	JR	NC,is_key_large_a
	COM	R3
	COM	R2
	ADD	R3,#1
	ADC	R2,#0
  is_key_large_a:
  	SUB	R3,#DIM
  	SBC	R2,#0
  	JR	NC,delay_key_not_press	
  	OR      delaydeal_f,#02H  
        JR      delay_key_press
        
  cmp_delaykeyB:
        LD	R2,KeyAdcValue
	LD	R3,KeyAdcValue+1
	SUB	R3,#DELAY_KEYB%256
	SBC	R2,#DELAY_KEYB/256
	JR	C,delay_key_not_press
        AND      delaydeal_f,#~02H  
        
  delay_key_press:
  	OR	R7,#K_DELAY      
        OR      delaydeal_f,#01h

  delay_key_not_press:
		
 	LD	R5,#key_status_tab%256
 	LD	R4,#key_status_tab/256
 	ADD	R5,KeyStatus
 	ADC	R4,#0
 	JP	@RR4
key_status_tab:
	JP	CaseKey_uncertain	
	JP	CaseKey_wait_release	
	JP	CaseKey_normal		
	JP	CaseKey_continue 
	;------------------------
CaseKey_uncertain:
  	CP	key_uncertain_time,#0	
  	JR	EQ,return_key_first
  	LD	key_old,R7		
  	CLR	R7		
  	RET	
  return_key_first:			
  	
  	TM      delaydeal_f,#01h  
        JR      Z,go_mmmm        
        
        AND     delaydeal_f,#~01h 
	LD	KeyStatus,#Key_normal
	
	RET     
		
   go_mmmm:
  	       
  	
  	LD	KeyStatus,#Key_continue 
  	LD	key_old,R7
  	LD	key_three_sec_cnt,#key3sec  
	RET     
	;---------------------------
CaseKey_wait_release:	
	CP	R7,#0
	JR	NE,key_not_release
	LD	KeyStatus,#Key_normal
  key_not_release:
	CLR	R7
	RET	
	;-------------------------------------------------------
CaseKey_normal:	
	CP	R7,#0
	JR	EQ,end_of_CaseKey_normal
	LD	KeyStatus,#Key_uncertain	
	LD	key_uncertain_time,#_UNCERTAINTIME
	LD	key_old,R7
  end_of_CaseKey_normal:
  	CLR	R7
  	RET
CaseKey_continue:             
	CP	R7,key_old
	JR	NE,new_key_press	
	CP	key_three_sec_cnt,#0	
	JR	NE,exit_CaseKey_continue
	LD	KeyStatus,#Key_wait_release
	CP	R7,#K_IN_OUT    
	JR	EQ,ret_K_inout3s
	CLR	R7              
	RET                     
	
   ret_K_inout3s:
   	LD	R7,#K_INOUT3s
   	RET

   new_key_press:	
   	LD	key_uncertain_time,#_UNCERTAINTIME
   	LD	KeyStatus,#Key_uncertain
exit_CaseKey_continue:	
	CLR	R7
	RET
        
;-------------------------------------------------------------------
  ;返回键值:
K_NULL:          .equ	00h
K_IN_OUT:        .equ	01H
K_DELAY:         .equ	02H
K_INOUT3s        .equ	03H 
deal_keyboard::
	CALL	read_key
	CLR	R6
	LD	R4,R7
	ADD	R7,R4
	ADC	R6,#0
	ADD	R7,R4,
	ADC	R6,#0
	ADD	R7,#key_case_tab%256
	ADC	R6,#key_case_tab/256
	JP	@RR6
key_case_tab:
	JP	CaseK_NULL       
	JP	CaseK_IN_OUT     	
	JP	CaseK_DELAY
CaseK_NULL:
	RET
	;=================================
CaseK_DELAY:
        TM      delaydeal_f,#02H  
        JR      NZ,go_hhh
        AND     FlagReg,#~delay_short_long_flag
        JR      go_vvvvv  
        
  go_hhh:
  
        OR       FlagReg,#delay_short_long_flag
        
  go_vvvvv:      

 	LD	R6,UserFlag
        
        TM	FlagReg,#delay_short_long_flag
        JR	NZ,check_set_bak_high
        AND	UserFlag,#~delay_set_bak
        TM	R6,#delay_set_bak
        JR	NZ,delay_key_change
        RET
check_set_bak_high:
	OR	UserFlag,#delay_set_bak
	TM	R6,#delay_set_bak
	JR	Z,delay_key_change
	RET
	
delay_key_change:        	
	CP	DispStatus,#DISP_DELAY_TIME
	JR	NE,other_disp_status
	TM	FlagReg,#delay_short_long_flag
	JR	NZ,long_delay_time
	LD	DelayTimeCnt,#_5sec
	JR	end_CaseK_DELAY
    long_delay_time:
    	LD	DelayTimeCnt,#_120sec
    	JR	end_CaseK_DELAY
    	
    other_disp_status:
    	;异常显示时无效
    	CP	DispStatus,#DISP_INLOW
    	JR	EQ,end_CaseK_DELAY
	
      	
    	CP	DispStatus,#DISP_OUTHIGH
    	JR	EQ,end_CaseK_DELAY
    	

    		
    	LD	DispStatus,#DISP_DELAY_SET
    	JR	set_disp_time

    set_disp_time:
    	LD	DispSetTime,#_4sec 	
end_CaseK_DELAY:
	RET
 	
        ;================================= 	
  	
CaseK_IN_OUT:

        
        CP	DispStatus,#DISP_DELAY_TIME
	JR	EQ,end_CaseK_IN_OUT
	CP	DispStatus,#DISP_INLOW
	JR	EQ,end_CaseK_IN_OUT
	CP	DispStatus,#DISP_OUTHIGH
	JR	EQ,end_CaseK_IN_OUT
	CP	DispStatus,#DISP_DELAY_SET
	JR	EQ,set_disp_normal
	CP	DispStatus,#DISP_NORMAL
	JR	NE,end_CaseK_IN_OUT
	XOR	FlagReg,#IN_OUT_Volt_flag;
	
	LD	DispSetTime,#_4sec
set_disp_normal:
	LD	DispStatus,#DISP_NORMAL
	OR 	FlagReg,#FreshDisp
end_CaseK_IN_OUT:
	RET
        ;=================================
GetMaxMinData::
	
	AND	UserFlag,#~FreshAdc
	
watie_djfdkfjDSL:
	CLRWDT	
	TM	UserFlag,#FreshAdc
	JR	Z,watie_djfdkfjDSL
	CLR	R0
	CLR	R1	
	
	LD	R2,#0FFH
	LD	R3,#0FFH 
	
	
start_get_:
	AND	UserFlag,#~FreshAdc
	
waite_over__:	
	CLRWDT
	TM	UserFlag,#FreshAdc
	JR	Z,waite_over__
	
	CLR	R4
	LD	R5,AdataH
	LD	R8,AdataL
	AND	R8,#03H
	RCF
	RLC	R5
	RLC	R4
	RCF
	RLC	R5
	RLC	R4
	OR	R5,R8

	;===========		
	CP	R4,R0
	JR	UGT,set_max
	JR	ULT,check_min
	CP	R5,R1
	JR	ULE,check_min
set_max:
	LD	R0,R4
	LD	R1,R5
	JR	check_min
check_over_time:
	SUB	R7,#1
	SBC	R6,#0
	JR	NC,waite_over__
	RET
	;===========		
check_min:	
	CP	R4,R2
	JR	UGT,check_over_time
	JR	ULT,set_min
	CP	R5,R3
	JR	UGE,check_over_time
set_min:
	LD	R2,R4
	LD	R3,R5
	JR	check_over_time	
;-------------------------------------------------------------
DISP_NORMAL:	        .EQU	0;3
DISP_INLOW:	        .EQU	1;4
DISP_OUTHIGH:	        .EQU	2;5
DISP_DELAY_TIME:	.EQU	3;7
DISP_DELAY_SET:		.equ	4;8
DISP_OUTUNNORMAL:	.equ	5;10
;--------------------------------------------------
SumInVolt:	.RAM_DS 2
SumOutVolt:	.RAM_DS 2
SumCnt:		.RAM_DS 1
DispInVolt:	.RAM_DS 2
DispOutVolt:	.RAM_DS 2

SumOutReg:	.RAM_DS 2
SumOutCnt:	.RAM_DS 1

check_regulate_volt::
	ADD	SumOutReg+1,InVoltValue+1
	ADC	SumOutReg,InVoltValue   
	DEC	SumOutCnt
	JR	NZ,skip_regule
	LD	SumOutCnt,#8
	LD	R1,SumOutReg+1
	LD	R0,SumOutReg
	CLR	SumOutReg+1
	CLR	SumOutReg
	RCF
	RRC	R0
	RRC	R1
	
	RCF
	RRC	R0
	RRC	R1
	
	RCF
	RRC	R0
	RRC	R1
	
	
	CALL	regulate_deal
	CALL	deal_protect_function
skip_regule:
	RET
;------------------------------------------
check_disp_volt::
sum_volt_do:
	TM	UserFlag,#FreshVolt
	JR	NZ,check_sum_do
	ADD	SumInVolt+1,InVoltValue+1
	ADC	SumInVolt,InVoltValue
	
	ADD	SumOutVolt+1,OutVoltValue+1
	ADC	SumOutVolt,OutVoltValue
	INC	SumCnt
	RET
;-------------------------------------------	
check_sum_do:
	AND	UserFlag,#~FreshVolt
	LD	R1,SumInVolt+1
	LD	R0,SumInVolt
	LD	R3,SumCnt
	CLR	R2
	CALL	dbl_divs
	LD	DispInVolt,R0
	LD	DispInVolt+1,R1
	
	LD	R1,SumOutVolt+1
	LD	R0,SumOutVolt
	LD	R3,SumCnt
	CLR	R2
	CALL	dbl_divs
	LD      R7,R1
	LD      R6,R0
	SUB     R7,BEFOREOutVoltValue+1
	SBC     R6,BEFOREOutVoltValue
	JR	NC,if_unnormal
	COM	R7
	COM	R6
	ADD	R7,#1
	ADC	R6,#0
 if_unnormal:
        SUB     R7,#10;15
        SBC     R6,#0
        JR      NC,is_unnormal
 skip_normal_OutVoltValue:
        LD     BEFOREOutVoltValue+1,R1
	LD     BEFOREOutVoltValue,R0
	LD     UNNORMALOutVoltValue+1,#0
	LD     UNNORMALOutVoltValue,#0
	CLR    UNNORMALOutVolt_count
	JR     give_OutVoltValue
 is_unnormal:
        CP     UNNORMALOutVoltValue,#0
        JR     NE,is_sure_normal
        CP     UNNORMALOutVoltValue+1,#0
        JR     NE,is_sure_normal
 continue_unnormal:           
        LD     UNNORMALOutVoltValue+1,R1
	LD     UNNORMALOutVoltValue,R0
	LD     R1,BEFOREOutVoltValue+1
	LD     R0,BEFOREOutVoltValue
        JR     give_OutVoltValue   
        
 is_sure_normal:
        INC    UNNORMALOutVolt_count
        CP     UNNORMALOutVolt_count,#3
        JR     ULT,continue_unnormal
        JR     skip_normal_OutVoltValue 
                                        
 give_OutVoltValue:
	LD	DispOutVolt,R0
	LD	DispOutVolt+1,R1
	CLR	SumOutVolt+1
	CLR	SumOutVolt
	CLR	SumInVolt
	CLR	SumInVolt+1
	CLR	SumCnt
	RET
;=====================================================	
deal_display::
	CALL	check_disp_volt
	TM	FlagReg,#FreshDisp
	JR	NZ,disp_do
	RET
	

⌨️ 快捷键说明

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