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

📄 s597g1.src

📁 数码管显示交流稳压器,使用9454单片机编写,汇编言语
💻 SRC
📖 第 1 页 / 共 3 页
字号:
 	;===
 case_SOUND_TWO:
 	AND	BellStatus,#0FH
 	OR	BellStatus,#SOUND_ONE
 	 	
 case_SOUND_CONTINUE:				
 set_bell_on:
 	LD	BellFreeTime,#BELL_SOUND_TIME
 set_bell_status_on:
 	CLR	BellFreeTime1		
 	AND	BellStatus,#0F0H
 	OR	BellStatus,#BELL_ON	
 skip_check_bell_command:
 set_bell_off:
 	buzzer_on       
	RET
	;=======
 case_SOUND_TWOCONTINUE:			
 	LD	BellFreeTime,#2			
 	XOR	UserFlag,#SpkFlag
  	TM	UserFlag,#SpkFlag
 	JR	Z,is_sec_sound
 	LD	BellCycleTime,#3		
 	JR	set_bell_status_on
is_sec_sound:
   	LD	BellCycleTime,#10		
 	JR	set_bell_status_on
;=================================
OUT_80:		.EQU	80
OUT_110:	.EQU	110
OUT_115:	.EQU	115
OUT_120:	.EQU	120
OUT_125:	.EQU	125

VOLT_180V:	.EQU	0*3     
VOLT_250V:	.EQU	1*3
VOLT_255V:	.EQU	2*3
VOLT_265V:	.EQU	3*3
VOLT_275V:	.EQU	4*3
VOLT_NORMAL:	.EQU	5*3
_180V:	.EQU	000
_250V:	.EQU	300
_255V:	.EQU	300
_265V:	.EQU	300
_275V:	.EQU	300

CJUGER0L:	.MACRO L,addr
	CP	R0,#L/256
	JP	UGT,addr
	JR	ULT,nxt
	CP	R1,#L%256
	JP	UGT,addr
nxt:
	.ENDM
	
CJULER0L:	.MACRO L,addr
	CP	R0,#L/256
	JP	ULT,addr
	JR	UGT,nxt
	CP	R1,#L%256
	JP	ULT,addr
nxt:
	.ENDM
	
set_out_voltage_status::
	LD	R0,OutVoltValue
	LD	R1,OutVoltValue+1
	CJUGER0L _275V,ret_out_volt_highist
	CJUGER0L _265V,set_volt_VOLT_265V
	CJUGER0L _255V,set_volt_255
	CJUGER0L _250V,set_volt_250
	
	CJULER0L _180V,set_volt_180V
	
	LD	R7,#VOLT_NORMAL	
 no_protect:
	LD	VoltProtect10s,#_10s
	LD	VoltProtect5s,#_5s
	LD	VoltProtect3s,#_3s
	RET
ret_out_volt_highist:
	LD	R7,#VOLT_275V	
	OR	FlagReg,#VoltHigh
	RET
set_volt_180V:
	LD	R7,#VOLT_180V
	AND	FlagReg,#~VoltHigh
	JR      no_protect       

set_volt_VOLT_265V:
	LD	R7,#VOLT_265V
	OR	FlagReg,#VoltHigh	
protect_5s:
	LD	VoltProtect3s,#_3s	
	RET

set_volt_255:
	LD	R7,#VOLT_255V
	OR	FlagReg,#VoltHigh
protect_10S:
	LD	VoltProtect5s,#_5s	
	LD	VoltProtect3s,#_3s
	RET
set_volt_250:
	LD	R7,#VOLT_250V
	OR	FlagReg,#VoltHigh
	JR	no_protect

;=================================
fan_flag:       .RAM_DS 1 
fan_on_temp:  	.EQU	01H

setfan_fortemp::
        LD	R0,TempValue
	LD	R1,TempValue+1
	TM      fan_flag,#fan_on_temp
	JR      NZ,If_fan_off
	RCF
	SUB     R1,#TEMP_FAN_ON%256
	SBC     R0,#TEMP_FAN_ON/256
	JR      NC,test_temp_pro
        OR      fan_flag,#fan_on_temp
	JR      test_temp_pro
	   ;----------
 If_fan_off:
        RCF
	SUB     R1,#TEMP_FAN_OFF%256
	SBC     R0,#TEMP_FAN_OFF/256
	JR      C,test_temp_pro	
        AND     fan_flag,#~fan_on_temp
 test_temp_pro:
	RET 
;=================================
CurrStatus:	.RAM_DS 1
deal_protect::
        CLRWDT
	CALL    setfan_fortemp
	
	CP      fan_flag,#0
	JR      NE,skip_open_fan
	FAN_off
        JR      skip_off_fan
  skip_open_fan:
        FAN_on
        
  skip_off_fan:
	
	LD	R0,TempValue
	LD	R1,TempValue+1
	SCF
	SBC	R1,#TEMP_OVER_LIMIT%256
	SBC	R0,#TEMP_OVER_LIMIT/256
	JP	C,halt_function_temp
	
	CALL	set_out_voltage_status
	CP	R7,#VOLT_NORMAL
	JP	EQ,detect_isvolt_normal
	TM	FlagReg,#RelayStatus
	JR	NZ,skip_is_RelayOff 
	
	TM	UserFlag,#DispUnchange
	JP	NZ,check_off_relay
	LD	DispStatus,#DISP_UNNORMAL
	       
	TM      UserFlag,#haltalarmFLAG2
	JR      NZ,nogiveHALTSPKTIME2
	LD	HaltAlarmTime,#HALTSPKTIME 
	OR      UserFlag,#haltalarmFLAG2
  nogiveHALTSPKTIME2:
        CP      HaltAlarmTime,#0
        JR      EQ,noalarmtwocontinu
	ALARM_TWO_CONTINUE 
	JR      continuasdfgh
  noalarmtwocontinu:
         ALARM_UNDO
         
  continuasdfgh:
	TM	FlagReg,#VoltHigh    
	JR	Z,set_disp_out_l       
check_off_relay:
        CLRWDT
        TM	FlagReg,#VoltHigh    
	JR	Z,is_DispUnchange_and_is_low_volt
	CP	VoltProtect10s,#0
	JR	EQ,set_output_relay_off_of_volt

	CP	VoltProtect5s,#0
	JR	EQ,set_output_relay_off_of_volt

	CP	VoltProtect3s,#0
	JR	EQ,set_output_relay_off_of_volt
 is_DispUnchange_and_is_low_volt:
	RET
	
 set_output_relay_off_of_volt:
	LD	DispStatus,#DISP_VOLT_HIGH
	LD	HaltAlarmTime,#HALTSPKTIME  
	RelayOff
	OR	FlagReg,#RelayStatus	
	AND	UserFlag,#~DispUnchange	
	                              
	RET
	;-------
  set_disp_out_l:
	LD	DispStatus,#DISP_VOLT_L
	RET
;=============================
skip_is_RelayOff:  
        CP	HaltAlarmTime,#0     
 	JR	EQ,set_no_sound_volt 
 	ALARM_TWO_CONTINUE           
 	JR	skip_chkee_volt      
 set_no_sound_volt:                  
        ALARM_UNDO                   
 skip_chkee_volt:                    
        TM	FlagReg,#VoltHigh
        JR      Z,Skip_boot_display_L
  	CLR	VoltProtect3s		
 	CLR	VoltProtect5s		
 	CLR	VoltProtect10s
 	LD	DispStatus,#DISP_VOLT_HIGH 
 	JR      set_boot_delay_value   
        ;----
  Skip_boot_display_L:
        LD	DispStatus,#DISP_VOLT_L
  set_boot_delay_value:               
        TM	FlagReg,#DELAY_FLAG   
 	JR	NZ,boot_set_delay_long
 	LD	RelayOnTime,#_6s      
 	JR	skip_boot_long_here   
 boot_set_delay_long:                 
 	LD	RelayOnTime,#_120s    
 skip_boot_long_here:                 
        RET                           
;=============================
detect_isvolt_normal:           
        AND     UserFlag,#~haltalarmFLAG2
        ALARM_UNDO 
   	TM	FlagReg,#RelayStatus
   	JR	Z,set_disp_normal
   	LD	DispStatus,#DISP_DELAY
   	CP	RelayOnTime,#0        
	JR	NE,skip_to_output_on  
	RelayOn                       
	AND	FlagReg,#~RelayStatus  
        LD	DispStatus,#DISP_NORMAL 
 skip_to_output_on:                   
 	RET                           
   	;-----------------------
 set_disp_normal:
   	CP	DispStatus,#DISP_PREC_PRESS
   	JR	EQ,skip_normal
   	CP	DispStatus,#DISP_INVOLT
   	JR	EQ,skip_normal
   	LD	DispStatus,#DISP_NORMAL
 skip_normal:
        RET
;====================
halt_function_temp::
	LD	DispStatus,#DISP_TEMP_TOO_HIGH
	LD	BellCycleTime,#10    
	LD	HaltAlarmTime,#HALTSPKTIME
 halt_function:
 	CLRWDT
	CP	HaltAlarmTime,#0
 	JR	EQ,set_no_sound
 	ALARM_ONE_CONTINUE
 	JR	skip_chkee
 set_no_sound:
        ALARM_UNDO
 skip_chkee:
 	OR	FlagReg,#RelayStatus  	
 	RelayOff
 	CALL	deal_input
 	CALL	auto_regulate
        CALL	deal_display
	LD	R0,TempValue
	LD	R1,TempValue+1
	SCF
	SBC	R1,#TEMP_RESET_LIMIT%256
	SBC	R0,#TEMP_RESET_LIMIT/256
	JR	C,halt_function
	LD	DispStatus,#DISP_DELAY
 	TM	FlagReg,#DELAY_FLAG  
 	JR	NZ,is_set_delay_long 
 	LD	RelayOnTime,#_6s     
 	JR	skip_long_here       
 is_set_delay_long:                  
 	LD	RelayOnTime,#_120s   
 skip_long_here:                     
        RET                          
;=================================
DispStatus:	.RAM_DS	1
DISP_UNNORMAL:		.EQU	0*3
DISP_NORMAL:		.EQU	1*3
DISP_INVOLT:		.EQU	2*3
DISP_PREC_PRESS:	.EQU	3*3
DISP_DELAY:		.EQU	4*3
DISP_TEMP_TOO_HIGH:	.EQU	5*3
DISP_VOLT_HIGH:		.EQU	6*3
DISP_VOLT_L:		.EQU	7*3
;-------------------------------------------------------------------
InVoltForDisp:		.RAM_DS 2
OutVoltForDisp:		.RAM_DS 2
DispCnt:		.RAM_DS 1

checkallfordisp:
	LD	R1,InVoltForDisp+1
	LD	R0,InVoltForDisp
	LD	R3,DispCnt
	CLR	R2
	CALL	dbl_divs
	LD	InVoltValue+1,R1
	LD	InVoltValue,R0
	
	
	LD	R1,OutVoltForDisp+1
	LD	R0,OutVoltForDisp
	LD	R3,DispCnt
	CLR	R2
	CALL	dbl_divs
	LD	OutVoltValue+1,R1
	LD	OutVoltValue,R0

	CLR	DispCnt
	CLR	InVoltForDisp+1
	CLR	InVoltForDisp
	CLR	OutVoltForDisp+1
	CLR	OutVoltForDisp
	RET
	
sumallfordisp:
	ADD	InVoltForDisp+1,InVoltValue+1
	ADC	InVoltForDisp,InVoltValue

	ADD	OutVoltForDisp+1,OutVoltValue+1
	ADC	OutVoltForDisp,OutVoltValue

	INC	DispCnt
	
	RET
;===================================
deal_display::
        CLRWDT
	TM	FlagReg,#FreshDisp	
	JR	NZ,deal_disp_goon
	CALL	sumallfordisp
	RET
 deal_disp_goon:
 	AND	FlagReg,#~FreshDisp 
	CALL	sumallfordisp
	CALL    checkallfordisp
	LD	R6,#disp_status_function/256
	LD	R7,#disp_status_function%256
	ADD	R7,DispStatus
	ADC	R6,#0
	JP	@RR6
  disp_status_function: 
  	JP	case_DISP_UNNORMAL 	;0
  	JP	case_DISP_NORMAL 	;1
  	JP	case_DISP_INVOLT	;2
  	JP	case_DISP_PREC_PRESS	;3
  	JP	case_DISP_DELAY		;4
  	JP	case_DISP_TEMP_TOO_HIGH ;5
  	JP	case_DISP_VOLT_HIGH	;6
  	JP	case_DISP_VOLT_L        ;7
  	;------------------------------------------------
case_DISP_UNNORMAL 	;0 
	WORKING_LED ON
	INPUT_LED OFF
	OUTPUT_LED BLINK
	XOR	UserFlag,#SelfBlink
	TM	UserFlag,#SelfBlink
	JR	Z,set_disp_off_bk
set_disp_normal_data:
	LD	R7,OutVoltValue+1
	LD	R6,OutVoltValue
	JP	number_display
        ;---------------
 set_disp_off_bk:
        AND	DispBuf+2,#80H
	AND	DispBuf+0,#80H
	AND	DispBuf+1,#80H
	OR 	DispBuf+0,#(LED_OFF&(~80h))	
	OR  	DispBuf+1,#(LED_OFF&(~80h))
	OR 	DispBuf+2,#(LED_OFF&(~80h))
	RET
        ;=================================
case_DISP_NORMAL: 
    
	WORKING_LED	ON
	INPUT_LED OFF
	OUTPUT_LED ON	
	LD	R7,OutVoltValue+1
	LD	R6,OutVoltValue
	TM	UserFlag,#DispUnchange
	JR	Z,send_disp_volt_FAIL
	WORKING_LED	BLINK
	INPUT_LED OFF
	OUTPUT_LED BLINK	
	
	JR	send_disp_volt
send_disp_volt_FAIL:	
	CP	R6,#0
	JR	NE,send_disp_volt
	LD	R5,R7
	SUB	R5,#220
	JR	NC,is_dfjdDJF
	COM	R5
	INC	R5
 is_dfjdDJF:
 	CP	R5,#5 
 	JR	UGE,send_disp_volt
 	LD	R7,#220
 	
 send_disp_volt:
   
	CALL	BCD_conversion
   	CALL	set_display_data
	RET
	
	;=================================
case_DISP_INVOLT:	
	TM	UserFlag,#DispUnchange
	JR	NZ,is_verify_model
		
     	CP	SetDispTime,#SETDISPTIME_LIMIT
     	JR	UGE,chang_to_disp_out_volt
	WORKING_LED    ON
	INPUT_LED	ON
	OUTPUT_LED	OFF
	JR	set_in_volt_disp
	
is_verify_model:	
	WORKING_LED	BLINK
	INPUT_LED	BLINK
	OUTPUT_LED	OFF
 set_in_volt_disp:		
	LD	R7,InVoltValue+1
	LD	R6,InVoltValue
	JR	number_display	
chang_to_disp_out_volt:
	LD	DispStatus,#DISP_NORMAL
	JP	case_DISP_NORMAL
	
number_display:
 
	CALL	BCD_conversion	
   	CALL	set_display_data

	RET
	
        ;=================================
case_DISP_PREC_PRESS:
	CP	SetDispTime,#SETDISPTIME_LIMIT
	JR	UGE,chang_to_disp_out_volt 
	WORKING_LED BLINK
	INPUT_LED OFF
	OUTPUT_LED OFF
	  TM	FlagReg,#PRECTION_FLAG
	  JR	NZ,_need_disp_msg_prec_high
	  LD	R7,#MSG_PRECISION_L%256
	  LD	R6,#MSG_PRECISION_L/256
	  JP	load_message
	  ;----------------------

  _need_disp_msg_prec_high:
  	  LD	R7,#MSG_PRECISION_H%256
	  LD	R6,#MSG_PRECISION_H/256
	  JP	load_message
	
	  ;=================================

case_DISP_DELAY:
	WORKING_LED BLINK
	INPUT_LED OFF
	OUTPUT_LED OFF
	LD	R7,RelayOnTime
	CLR	R6
	JP	number_display
	
	;=================================
case_DISP_TEMP_TOO_HIGH
	WORKING_LED BLINK
	INPUT_LED   BLINK
	OUTPUT_LED  BLINK
	XOR	UserFlag,#SelfBlink
	TM	UserFlag,#SelfBlink
	JP	Z,set_disp_off_bk
	LD	R7,#MSG_TEMP_HIGH%256
	LD	R6,#MSG_TEMP_HIGH/256
	JP	load_message
	
	;=================================
case_DISP_VOLT_HIGH:
        WORKING_LED ON
	INPUT_LED  OFF
	OUTPUT_LED BLINK
	XOR	UserFlag,#SelfBlink
	TM	UserFlag,#SelfBlink
	JP	Z,set_disp_off_bk
	LD	R7,#MSG_VOLT_HIGH%256
	LD	R6,#MSG_VOLT_HIGH/256
	JP	load_message
   	;=================================
case_DISP_VOLT_L:  
        WORKING_LED ON
	INPUT_LED  OFF
	OUTPUT_LED BLINK
	XOR	UserFlag,#SelfBlink
	TM	UserFlag,#SelfBlink
	JP	Z,set_disp_off_bk
        LD	R7,#MSG_VOLT_LOW%256
	LD	R6,#MSG_VOLT_LOW/256
load_message:
         CALL	load_string
	 RET
;=================================
delaydeal_f:	  .RAM_DS 1

IN_OUT_KEY:	.equ	338
DELAY_KEY:	.equ	210
DIM:		.EQU	45

IN_OUT_KEYB:    .equ	148
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_FLAG
        LD	precision,#PREC_H
        OR	FlagReg,#PRECTION_FLAG
        JR      go_over_ini
  delay_6:
        LD	RelayOnTime,#_6s
        AND	FlagReg,#~DELAY_FLAG
	LD	precision,#PREC_L
        AND	FlagReg,#~PRECTION_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_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

⌨️ 快捷键说明

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