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

📄 zj927.s43

📁 这是一个电脉冲治疗仪的实用程序
💻 S43
📖 第 1 页 / 共 3 页
字号:
DIV2		RLC	R12
		JC	DIV4
		DEC	R10
		JZ	DIV4
		RLA	R14	
		RLC	R15
		JNC	DIV1
		SUB	R11,R15
		SETC
		JMP	DIV2
DIV4		RET	

;******************************************************************
;
;               BIN4 TO BCD2
;
;		INPUT	R5
;		OUTPUT	R6
;******************************************************************
BIN4_BCD2	MOV	#8,R7				;BIN4 TO BCD2 SUB PROGRAM
		CLR	R6
BIN4LOOP	RLA.B	R5
		DADD	R6,R6
		DEC	R7
		JNZ	BIN4LOOP
		RET
		
	
;******************************************************************
;
;               DELAY10MS
;
;******************************************************************	
DELAY10MS       					;DELAY 10MS, MCLK=800KHz
DELAY10MSLOOP   TST	&DELAYTIME			;DELAYDATA : (0.01/(1/800000))/3=2666
                JNZ     DELAY10MSLOOP
                RET
                

;******************************************************************
;
;               DELAYMS
;
;		INPUT	R10
;		DELAY	R10*10US
;******************************************************************	

DELAYMS	        DEC	R10				;MCLK=800KHz, 1 STEP = 1.25US
		NOP					;TOTEL 8 STEP A LOOP
		NOP
		NOP
		NOP
		NOP
		JNZ	DELAYMS
                RET
                

;******************************************************************
;
;               DELAYMS
;
;		INPUT	R10
;		DELAY	R10*0.1S
;******************************************************************	

DELAY01MS	PUSH	R14				;DELAY R10*0.1MS, MCLK=800KHz			
DELAY01MSLOOP1	MOV     #4444,R14			;(0.1/(1/800000))/3=26666
DELAY01MSLOOP	DEC     R14
                JNZ     DELAY01MSLOOP
                DEC	R10
                JNZ	DELAY01MSLOOP1
                POP	R14
                RET   
                
                             
;******************************************************************
;
;		TIMER_A  INTERRUPT
;
;******************************************************************
TA0_ISR		PUSH	R10
		PUSH	R11
		PUSH	R12
		PUSH	R13
		PUSH	R14
		PUSH	R15
		XOR.B	#80H,&P4OUT
		

		TST	&DELAYTIME
		JZ	TA0_DEL
		DEC	&DELAYTIME
TA0_DEL				
		BIT	#S_START,&STATE			;TIMER_A INTERRUPT SUB PROGRAM
		JC	TA0_ISR1
		JMP	TA0_EXIT
TA0_ISR1	CMP	#250,&DOT
		JGE	DOTY
		INC	&DOT
		JMP	TA0_ISR2
DOTY		MOV	#0,&DOT
		XOR.B	#080H,&251H
TA0_ISR2	
		BIT	#S_HELP,&STATE
		JC	HELP_OUT1
		BIT	#S_INPHASE,&STATE
		JC	INPHASE_OUT1
		BIT	#S_POINT,&STATE		
		JC	POINT_OUT1
		JMP	TA0_EXIT
HELP_OUT1	CALL	#HELP_OUT
		JMP	TA0_EXIT
INPHASE_OUT1	CALL	#INPHASE_OUT
		JMP	TA0_EXIT
POINT_OUT1	CALL	#POINT_OUT
TA0_EXIT	POP	R15
		POP	R14
		POP	R13
		POP	R12
		POP	R11
		POP	R10
		RETI		
;-----------------------------------------------------------------
HELP_OUT	
HELP_CH1	INC	&CH1TIME
		CMP	&CH1FREQ,&CH1TIME
		JL	HELP_CH3
		MOV	#0,&CH1TIME
		MOV.B	&CH1RANGE,&DADATA
		MOV.B	#0,&DACONT
		MOV.B	&P2OUT,R15
		BIC.B	#A,R15
		BIC.B	#B,R15
		MOV.B	R15,&P2OUT
		CALL	#DA
		MOV.B	&CH1WIDTH,R10
		CALL	#DELAYMS
		MOV.B	&0FFH,&DADATA
		CALL	#DA
		MOV.B	&P2OUT,R15
		BIS.B	#A,R15
		BIC.B	#B,R15
		MOV.B	R15,&P2OUT
		NOP
		
HELP_CH3	INC	&CH3TIME
		CMP	&CH3FREQ,&CH3TIME
		JL	HELP_CH4
		MOV	#0,&CH3TIME
		MOV.B	&CH3RANGE,&DADATA
		MOV.B	#0,&DACONT
		MOV.B	&P2OUT,R15
		BIS.B	#B,R15
		BIC.B	#A,R15
		MOV.B	R15,&P2OUT
		CALL	#DA
		MOV.B	&CH3WIDTH,R10
		CALL	#DELAYMS
		MOV.B	&0FFH,&DADATA
		CALL	#DA
		MOV.B	&P2OUT,R15
		BIS.B	#A,R15
		BIC.B	#B,R15
		MOV.B	R15,&P2OUT
		NOP


HELP_CH4	INC	&CH4TIME
		CMP	&CH4FREQ,&CH4TIME
		JL	HELP_CH2
		MOV	#0,&CH4TIME
		MOV.B	&CH4RANGE,&DADATA
		MOV.B	#0,&DACONT
		MOV.B	&P2OUT,R15
		BIS.B	#A,R15
		BIS.B	#B,R15
		MOV.B	R15,&P2OUT
		CALL	#DA
		MOV.B	&CH4WIDTH,R10
		CALL	#DELAYMS
		MOV.B	&0FFH,&DADATA
		CALL	#DA
		MOV.B	&P2OUT,R15
		BIS.B	#A,R15
		BIC.B	#B,R15
		MOV.B	R15,&P2OUT
		NOP
		
HELP_CH2	INC	&CH2TIME
		CMP	&CH2FREQ,&CH2TIME
		JL	HELP_CH21
		MOV	#0,&CH2TIME
		MOV	#5,&CH2PULSE
		MOV	#0,&CH2RANGE
		MOV.B	&CH2RANGE,&DADATA
		MOV.B	#1,&DACONT
		CALL	#DA
		MOV.B	&CH2WIDTH,R10
		CALL	#DELAYMS
		MOV.B	#0FFH,&DADATA
		CALL	#DA
		JMP	HELP_EXIT
HELP_CH21	CMP	&CH2PULSE,&CH2TIME
		JEQ	HELP_CH22
		JMP	HELP_EXIT
HELP_CH22	CMP	#0FFH,&CH2RANGE
		JGE	HELP_CH23
		
		ADD	#5,&CH2PULSE
		MOV.B	&CH2RANGE,&DADATA
		MOV.B	#1,&DACONT
		CALL	#DA
		MOV.B	&CH2WIDTH,R10
		CALL	#DELAYMS
		MOV.B	#0FFH,&DADATA
		CALL	#DA
		JMP	HELP_EXIT
HELP_CH23	MOV	#0FFH,&CH2RANGE
		
HELP_EXIT	RET
			
;-----------------------------------------------------------------	
INPHASE_OUT	
INPHASE_CH1	INC	&CH1TIME
		CMP	&CH1FREQ,&CH1TIME
		JL	INPHASE_CH3
		MOV	#0,&CH1TIME
		MOV.B	&CH1RANGE,&DADATA
		MOV.B	#0,&DACONT
		MOV.B	&P2OUT,R15
		BIC.B	#A,R15
		BIC.B	#B,R15
		MOV.B	R15,&P2OUT
		CALL	#DA
		MOV.B	&CH1WIDTH,R10
		CALL	#DELAYMS
		MOV.B	&0FFH,&DADATA
		CALL	#DA
		MOV.B	&P2OUT,R15
		BIS.B	#A,R15
		BIC.B	#B,R15
		MOV.B	R15,&P2OUT
		NOP
INPHASE_CH3	INC	&WAVETIME
		INC	&CH3TIME
		CMP	&WAVEFREQ,&WAVETIME
		JL	INPHASE_CH31
		MOV	#0,&WAVETIME
		MOV	#0,CH3TIME
		XOR.B	#S_WAVEGAP,&STATE
INPHASE_CH31	MOV.B	&CH3RANGE,&DADATA
		MOV.B	#0,&DACONT
		CALL	#DA
		BIT	#S_WAVEGAP,&STATE
		JC	INPHASE_CH32
		CMP	#WAVEGAPI,&CH3TIME
		JL	INPHASE_CH34
		JMP	INPHASE_CH33
INPHASE_CH32	CMP	#WAVEGAPII,&CH3TIME
		JL	INPHASE_CH34
INPHASE_CH33	MOV.B	&P2OUT,R15
		BIC.B	#A,R15
		BIS.B	#B,R15
		MOV.B	R15,&P2OUT
		MOV	#0,&CH3TIME
INPHASE_CH34	MOV.B	&CH3WIDTH,R10
		CALL	#DELAYMS
		MOV.B	&P2OUT,R15
		BIS.B	#A,R15
		BIC.B	#B,R15
		MOV.B	R15,&P2OUT
		MOV.B	#0FFH,&DADATA
		CALL	#DA

INPHASE_CH4	INC	&CH4TIME
		CMP	&CH4FREQ,&CH4TIME
		JL	INPHASE_CH2
		MOV	#0,&CH4TIME
		MOV.B	&CH4RANGE,&DADATA
		MOV.B	#0,&DACONT
		MOV.B	&P2OUT,R15
		BIS.B	#A,R15
		BIS.B	#B,R15
		MOV.B	R15,&P2OUT
		CALL	#DA
		MOV.B	&CH4WIDTH,R10
		CALL	#DELAYMS
		MOV.B	&0FFH,&DADATA
		CALL	#DA
		MOV.B	&P2OUT,R15
		BIS.B	#A,R15
		BIC.B	#B,R15
		MOV.B	R15,&P2OUT
		NOP
		
INPHASE_CH2	INC	&CH2TIME
		CMP	&CH2FREQ,&CH2TIME
		JL	INPHASE_CH21
		MOV	#0,&CH2TIME
		MOV	#5,&CH2PULSE
		MOV	#0,&CH2RANGE
		MOV.B	&CH2RANGE,&DADATA
		MOV.B	#1,&DACONT
		CALL	#DA
		MOV.B	&CH2WIDTH,R10
		CALL	#DELAYMS
		MOV.B	#0FFH,&DADATA
		CALL	#DA
		JMP	INPHASE_EXIT
INPHASE_CH21	CMP	&CH2PULSE,&CH2TIME
		JEQ	INPHASE_CH22
		JMP	INPHASE_EXIT
INPHASE_CH22	CMP	#0FFH,&CH2RANGE
		JGE	INPHASE_CH23
		
		ADD	#5,&CH2PULSE
		MOV.B	&CH2RANGE,&DADATA
		MOV.B	#1,&DACONT
		CALL	#DA
		MOV.B	&CH2WIDTH,R10
		CALL	#DELAYMS
		MOV.B	#0FFH,&DADATA
		CALL	#DA
		JMP	INPHASE_EXIT
INPHASE_CH23	MOV	#0FFH,&CH2RANGE


INPHASE_EXIT	RET

;------------------------------------------------------------------
POINT_OUT	BIT	#S_WAVE,&STATE
		JC	POINT_WAVE
		INC	&CH1TIME
		CMP	&CH1FREQ,&CH1TIME
		JL	POINT_EXIT
POINT_DA	MOV	#0,&CH1TIME
		MOV.B	&CH1RANGE,&DADATA
		MOV.B	#0,&DACONT
		CALL	#DA
		MOV.B	&P2OUT,R15
		BIC.B	#A,R15
		BIC.B	#B,R15
		MOV.B	R15,&P2OUT
		MOV.B	&CH1WIDTH,R10
		CALL	#DELAYMS
		MOV.B	&P2OUT,R15
		BIS.B	#A,R15
		BIC.B	#B,R15
		MOV.B	R15,&P2OUT
		MOV.B	#0FFH,&DADATA
		CALL	#DA
		MOV.B	#5,R10
		CALL	#DELAYMS
		MOV.B	&CH3RANGE,&DADATA
		CALL	#DA
		MOV.B	&P2OUT,R15
		BIC.B	#A,R15
		BIS.B	#B,R15
		MOV.B	R15,&P2OUT
		MOV.B	&CH1WIDTH,R10
		CALL	#DELAYMS
		MOV.B	&P2OUT,R15
		BIS.B	#A,R15
		BIC.B	#B,R15
		MOV.B	R15,&P2OUT
		MOV.B	#0FFH,&DADATA
		CALL	#DA
		MOV.B	#5,R10
		CALL	#DELAYMS
		MOV.B	&CH4RANGE,&DADATA
		CALL	#DA
		MOV.B	&P2OUT,R15
		BIS.B	#A,R15
		BIS.B	#B,R15
		MOV.B	R15,&P2OUT
		MOV.B	&CH1WIDTH,R10
		CALL	#DELAYMS
		MOV.B	&P2OUT,R15
		BIS.B	#A,R15
		BIC.B	#B,R15
		MOV.B	R15,&P2OUT
		MOV.B	#0FFH,&DADATA
		CALL	#DA
		MOV.B	#5,R10
		CALL	#DELAYMS
		MOV.B	&CH2RANGE,&DADATA
		MOV.B	#1,&DACONT
		CALL	#DA
		MOV.B	&CH1WIDTH,R10
		CALL	#DELAYMS
		MOV.B	#0FFH,&DADATA
		CALL	#DA
		
		JMP	POINT_EXIT
		
POINT_WAVE	INC	&WAVETIME
		INC	&CH1TIME
		CMP	&WAVEFREQ,&WAVETIME
		JL	POINT_WAVE1
		MOV	#0,&CH1TIME
		MOV	#3,&WAVETIME
		XOR.B	#S_WAVEGAP,&STATE
POINT_WAVE1	BIT	#S_WAVEGAP,&STATE
		JC	POINT_WAVE2
		CMP	#WAVEGAPI,&CH1TIME
		JL	POINT_EXIT
		JMP	POINT_WAVE3
POINT_WAVE2	CMP	#WAVEGAPII,&CH1TIME
		JL	POINT_EXIT
POINT_WAVE3	MOV	#0,&CH1TIME
		JMP	POINT_DA
					
POINT_EXIT	RET		

;******************************************************************
;
;		TIMER_B  INTERRUPT
;
;******************************************************************
TB0_ISR		PUSH	R10
		BIT	#S_START,&STATE			;TIMER_B INTERRUPT SUB PROGRAM
		JZ	TBNEXT
		;XOR.B	#080H,&251H
		CALL	#TBNEXT1
TBNEXT		POP	R10
		RETI

;-----------------------------------------------------------------
TBNEXT1		BIT	#S_HELP,&STATE
		JC	TIMER_H
		BIT	#S_INPHASE,&STATE
		JC	TIMER_H
		BIT	#S_POINT,&STATE
		JC	TIMER_P
		RET
				
;-----------------------------------------------------------------				
TIMER_H		INC.B	&TIMER1
		CMP.B	#60,&TIMER1		
		JL	TIMER_H1
		MOV.B	#0,&TIMER1
		INC.B	TIMER2
		MOV.B	&TIMER2,&254H
		CMP.B	#99,&TIMER2
		JL	TIMER_H1
		MOV.B	#0,TIMER2
TIMER_H1	RET
		
;------------------------------------------------------------------
TIMER_P		DEC.B	&TIMER1
		TST.B	&TIMER1
		JNZ	TIMER_P1
		MOV.B	#60,&TIMER1
		DEC.B	&TIMER2
		MOV.B	&TIMER2,&254H
		TST.B	&TIMER2
		JNZ	TIMER_P1
		MOV.B	&POINTTIMER,TIMER2
		MOV.B	&POINTTIMER,&254H
		CALL	#STOP
TIMER_P1	RET

;------------------------------------------------------------------
STOP		BIC.B	&S_START,&STATE
		BIC.B	&04H,&LED_CODE
		BIS.B	#POWER,&P3OUT				;STOP THE DC-DC
		BIC.B	#0F0H,&P2OUT				;STOP THE RELAY
		BIC.B	#080H,&251H
		MOV	#02H,R10
		CALL	#BZ
		MOV	#02H,R10
		CALL	#DELAY01MS
		MOV	#02H,R10
		CALL	#BZ
		MOV	#02H,R10
		CALL	#DELAY01MS
		MOV	#10,R10
		CALL	#BZ	
		RET
;******************************************************************
;
;		TABLE
;
;******************************************************************
DIS_TAB

		DB	07DH,060H,03EH,07AH,063H        ;0,1,2,3,4
		DB	05BH,05FH,070H,07FH,07BH        ;5,6,7,8,9	
		DB	000H,000H,000H,000H,000H	;[]

;------------------------------------------------------------------
;
;		中断向量
;
;------------------------------------------------------------------
		ORG	0FFFEH
		DW	RESET
		ORG	0FFECH
		DW	TA0_ISR
		ORG	0FFFAH
		DW	TB0_ISR
		END
		

⌨️ 快捷键说明

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