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

📄 new.asm

📁 完整的89c52程序源码
💻 ASM
📖 第 1 页 / 共 2 页
字号:
		RET					;24
;************************************************************
;中断响应子程序
X0_ZHD:		;中断处理
		JNB	X0_BZ,X0_ZHDE
		JB	CTL_UI,DIANLIU

		;电压控制
		MOV	A,ADC_CV
		MOV	R2,ADC_FV
X0_ZHD3:	LCALL	CTL_VA
X0_ZHDE:	CLR	X0_BZ
		RET
DIANLIU:	;电流控制
		MOV	A,ADC_CV
		MOV	R2,ADC_FI
		LJMP	X0_ZHD3
;0000000000000000000000000000000000000000000000000000
VA0_COM:	;调整0值	qxwcn
		CLR	CY
		MOV	A,qxwcn
		SUBB	A,#01H
		JC	VA0_END
		MOV	qxwcn,#00H
		;如果移相已经到达或者超过最大移相时,零电平输出调整结束
		MOV	A,TX_H
		CJNE	A,MAX_XYH,VA0_COM3
		MOV	A,TX_L
		CJNE	A,MAX_XYL,VA0_COM3
		MOV	A,#01H
		MOV	R1,UMIN_H
		LCALL	C46_WD
		MOV	A,#02H
		MOV	R1,UMIN_L
		LCALL	C46_WD
		CLR	A
		MOV	R1,#0A5H
		LCALL	C46_WD
		LJMP	BEGIN

VA0_END:	RET		
VA0_COM3:	;保存最小值及触发点数值
		MOV	A,UMIN	;R2
		CLR	C
		SUBB	A,R2	;UMIN
		JC	VA0_COM2
		MOV	UMIN,R2
		MOV	UMIN_H,TX_H
		MOV	UMIN_L,TX_L

VA0_COM2:	MOV	R3,#01H
		LJMP	CTL_UP
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
;控制量控制过程,控制电压或者控制电流在运算器A中,反馈量在R2中
CTL_VA:		JB	OUT0_BZ,VA0_COM	;
		MOV	R3,A
		CLR	CY
		SUBB	A,R2
		JC	CTL_VA02		;控制电压小于反馈电压
		;控制电压大于反馈电压
		MOV	R3,A
CTL_UP:		MOV	A,TX_L
		CLR	CY
		ADD	A,R3
		MOV	DPL,A
		MOV	A,TX_H
		ADDC	A,#00H
		MOV	DPH,A
		JC	CTL_VA3		;出现回绕
		MOV	A,DPH
;		CLR	CY
		SUBB	A,MAX_XYH
		JC	CTL_VA1		;未到达电压最大量TH_H>=MAX_XYH
		MOV	A,DPL
		CLR	CY
		SUBB	A,MAX_XYL
		JC	CTL_VA1		;未到达电压最大量
CTL_VA3:	MOV	DPL,MAX_XYL
		MOV	DPH,MAX_XYH
CTL_VA1:	MOV	TX_L,DPL
		MOV	TX_H,DPH
	;但不得小于最小电压
		RET
CTL_VA02:	;控制电压小于反馈电压
		MOV	A,R2
		CLR	CY
		SUBB	A,R3
		MOV	R3,A
CTL_DOWN:	CLR	CY
		MOV	A,TX_L
		SUBB	A,R3
		MOV	DPL,A
		MOV	A,TX_H
		SUBB	A,#00H
		MOV	DPH,A
		JC	CTL_VA03	;出现回绕
		MOV	A,MIN_XYH
		SUBB	A,DPH
		JC	CTL_VA11		;未到达电压最小量
		MOV	A,MIN_XYL
		SUBB	A,DPL
		JC	CTL_VA11
CTL_VA03:	MOV	DPH,MIN_XYH
		MOV	DPL,MIN_XYL
CTL_VA11:	MOV	TX_L,DPL
		MOV	TX_H,DPH
		RET
;==========================================================================
;==========================================================================
T_RETI:		RETI
;T0中断###################################
T0_00:		LCALL	T_RETI
		CLR   ET0	;关闭T0中断
		CLR	TR0	;关闭T0计数
		SETB	T0ZHD_BZ
T0_T1:        SETB  EX0	;允许外部INT0中断
		SETB	EA
                PUSH  PSW
                PUSH  ACC
                PUSH  B
                PUSH  DPH
                PUSH  DPL

                JNB	T0ZHD_BZ,T0_T11
		MOV   TL0,#T3msL	;3.3mS计时T0中断
                MOV   TH0,#T3msH
		CLR	TF0
		SETB	TR0	
                SETB  ET0		;开启T0中断
                INC   T0_jsh		;
                MOV   A,T0_jsh
		LJMP	T0_T12

T0_T11:		JNB	T1ZHD_BZ,T0_0e
		MOV   TL1,#T3msL	;3.3mS计时T0中断
                MOV   TH1,#T3msH
		CLR	TF1
		SETB	TR1	
                SETB  ET1		;开启T0中断
                INC   T1_jsh		;
                MOV   A,T1_jsh

		
T0_T12:		JNB	XWEI_BZ,Fxwei	;相位判别 正相位xwei=0:执行T1_02~T1_07
		clr CY			;反相位xwei=1:执行T1_102~T1_107
		ADD	A,#06H
Fxwei:          MOV   B,#03H
                MUL   AB
                MOV   DPTR,#go_0tab
             JMP   @A+DPTR
go_0tab:            NOP
                   NOP
                   NOP
                   LJMP  T0_02
;==========================================================================
                   LJMP  T0_03
;==========================================================================
                   LJMP  T0_04
;==========================================================================
                   LJMP  T0_05
;==========================================================================
                   LJMP  T0_06
;==========================================================================
                   LJMP  T0_07
;==========================================================================
                   LJMP  T0_102
;==========================================================================
                   LJMP  T0_103
;==========================================================================
                   LJMP  T0_104
;==========================================================================
                   LJMP  T0_105
;==========================================================================
                   LJMP  T0_106
;==========================================================================
                   LJMP  T0_107
;==========================================================================
T0_02:		LCALL	TOUT_NA
		JNB	CHUFA_BZ,T0_0e
		LCALL	TOUT_C
T0_0e:		POP   DPL      
                POP   DPH                          ;0549   D0 83
                POP   B                            ;054B   D0 F0
                POP   ACC                          ;054D   D0 E0
                POP   PSW                          ;054F   D0 D0
                RET                               ;0551   32
;==========================================================================
T0_03:          LCALL	TOUT_C
		JNB	CHUFA_BZ,T0_031
             	LCALL	TOUT_NB
T0_031:         LJMP  T0_0e
;==========================================================================
T0_04:          LCALL	TOUT_NB
		JNB	CHUFA_BZ,T0_041
             	LCALL	TOUT_A
T0_041:         LJMP  T0_0e
;==========================================================================
T0_05:          LCALL	TOUT_A
		JNB	CHUFA_BZ,T0_051
             	LCALL	TOUT_NC
T0_051:         LJMP  T0_0e
;==========================================================================
T0_06:          LCALL	TOUT_NC
		JNB	CHUFA_BZ,T0_061
             	LCALL	TOUT_B
T0_061:         LJMP  T0_0e
;==========================================================================
T0_07:          LCALL	TOUT_B
		JNB	CHUFA_BZ,T0_08
             	LCALL	TOUT_NA
T0_08:		JNB	T0ZHD_BZ,T0_081
		MOV   T0_jsh,#00H 
		INC   qxwcn
		CLR   	ET0	;关闭T0中断
		CLR	TR0	;关闭T0计数
		CLR	TF0
		CLR	T0ZHD_BZ
                LJMP  T0_0e
T0_081:         JNB	T1ZHD_BZ,T0_082
		MOV   T1_jsh,#00H 
		INC   qxwcn
		CLR   	ET1	;关闭T0中断
		CLR	TR1	;关闭T0计数
		CLR	TF1
		CLR	T1ZHD_BZ
T0_082:         LJMP  T0_0e
;==========================================================================
;*******************************************************************
T0_102:         LCALL	TOUT_NA
		JNB	CHUFA_BZ,T0_1021
             	LCALL	TOUT_B
T0_1021:        LJMP	T0_0e
;==========================================================================
T0_103:         LCALL	TOUT_B
        	JNB	CHUFA_BZ,T0_1031
             	LCALL	TOUT_NC
T0_1031:        LJMP  T0_0e
;==========================================================================
T0_104:         LCALL	TOUT_NC
        	JNB	CHUFA_BZ,T0_1041
             	LCALL	TOUT_A
T0_1041:        LJMP  T0_0e
;==========================================================================
T0_105:         LCALL	TOUT_A
        	JNB	CHUFA_BZ,T0_1051
             	LCALL	TOUT_NB
T0_1051:        LJMP  T0_0e
;==========================================================================
T0_106:         LCALL	TOUT_NB
        	JNB	CHUFA_BZ,T0_1061
             	LCALL	TOUT_C
T0_1061:        LJMP  T0_0e
;==========================================================================
T0_107:         LCALL	TOUT_C
        	JNB	CHUFA_BZ,T0_1071
             	LCALL	TOUT_NA
T0_1071:        LJMP  T0_08
;==========================================================================
TOUT_A:         SETB  out_a
                LCALL ych_64us
                CLR out_a                         ;截至输出
                LCALL ych_24us
                SETB  out_a                         ;输出有效
                LCALL ych_64us
                CLR out_a                         ;截至输出
		RET
;////////////////////////////

TOUT_B:         SETB   out_b
                LCALL ych_64us
                CLR  out_b
                LCALL ych_24us
                SETB   out_b
                LCALL ych_64us
                CLR  out_b
		RET
;///////////////////////
TOUT_C:         SETB   out_c
                LCALL ych_64us
                CLR  out_c
                LCALL ych_24us
                SETB   out_c
                LCALL ych_64us
                CLR  out_c
		RET
;////////////////////////////
TOUT_NA:        SETB   out_na
                LCALL ych_64us
                CLR  out_na
                LCALL ych_24us
                SETB   out_na
                LCALL ych_64us
                CLR  out_na
		RET
;////////////////////
TOUT_NB:        SETB   out_nb
                LCALL ych_64us
                CLR  out_nb
                LCALL ych_24us
                SETB   out_nb
                LCALL ych_64us
                CLR  out_nb
		RET
;/////////////////
TOUT_NC:	SETB  out_nc                         ;输出有效
                LCALL ych_64us
                CLR out_nc
                LCALL ych_24us
                SETB  out_nc 
                LCALL ych_64us
                CLR out_nc
		RET
;==========================================================================
;T1中断
T1_00:		LCALL	T_RETI
		CLR   ET1	;关闭T1中断
		CLR	TR1	;关闭T1计数
		SETB	T1ZHD_BZ
		LJMP	T0_T1

;==========================================================================

ych_24us:             NOP
                   NOP
                   NOP
                   NOP
                   NOP
                   NOP
                   NOP
                   NOP
                   RET
;==========================================================================
ych_64us:             LCALL ych_24us
                   LCALL ych_24us
                   NOP
                   NOP
                   NOP
                   NOP
                   RET
;==========================================================================
;RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
;93c46操作程序,初始化C46_SK=0,C46_CS=0,C46_DI=0,C46_DO=1
;93C46读操作
C46_RD:		;地址=A,取回数据在=A
		LCALL	C46_STR
		LCALL	CMD_RD
		LCALL	C46_ADD
		nop
		nop
		nop
		MOV	R0,#80H
C46_RD2:	JNB	C46_DO,C46_RD3
		DJNZ	R0,C46_RD2
		SETB	C46_FAL
		CLR	C46_CS
		RET
C46_RD3:	MOV	R0,#08H
C46_RD1:	LCALL	RD_BIT
		RLC	A
		DJNZ	R0,C46_RD1
		CLR	C46_CS
		RET
;WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
;写入数据
C46_WD:		;地址=A,数据=R1,使用R0,R1,R2
		LCALL	C46_WY
		LCALL	C46_WD0
		LCALL	C46_WN
		RET
;93C46写入的允许10011、禁止10000
C46_WY:		LCALL	C46_STR
		SETB	C
		LCALL	WD_BIT
		CLR	C
		LCALL	WD_BIT
		LCALL	WD_BIT
		SETB	C
		MOV	R0,#07H
C46_WY1:	LCALL	WD_BIT
		DJNZ	R0,C46_WY1
		CLR	C46_CS
		RET
;93C46写入的允许10011、禁止10000
C46_WN:		LCALL	C46_STR
		SETB	C
		LCALL	WD_BIT
		CLR	C
		MOV	R0,#09H
C46_WN1:	LCALL	WD_BIT
		DJNZ	R0,C46_WN1
		CLR	C46_CS
		RET
;93C46写入操作
C46_WD0:		;地址=A,数据=R1,使用R0,R1,R2
		MOV	R2,A
		LCALL	C46_STR
		LCALL	CMD_WD
		LCALL	C46_ADD
		MOV	R0,#08H
		MOV	A,R1
C46_WD1:	RLC	A
		LCALL	WD_BIT
		DJNZ	R0,C46_WD1
		CLR	C46_CS		;保持0.5
		mov	r0,#04h
		DJNZ	R0,$	
		SETB	C46_CS
		mov	r0,#04h
		DJNZ	R0,$
		MOV	R0,#80H
C46_WD2:	JNB	C46_DO,C46_WD5		;2*0.83μ需要5ms
		DJNZ	R0,C46_WD2		;2	=5ms*Fosc/(12*N)
C46_WD4:	CLR	C46_CS
		MOV	A,R2
		LCALL	C46_RD
		CLR	C
		SUBB	A,R1
		JZ	C46_WD8
C46_WD3:	SETB	C46_FAL
C46_WD8:	CLR	C46_CS
		RET
C46_WD5:	MOV	A,#10H
		mov	r0,#0E2H
C46_WD6:	JB	C46_DO,C46_WD4		;2
		DJNZ	R0,C46_WD6		;2
		djnz	ACC,c46_wd6		;2
		LJMP	C46_WD4

C46_ADD:	MOV	R0,#07H
		RLC	A
C46_ADD1:	RLC	A
		LCALL	WD_BIT
		DJNZ	R0,C46_ADD1
		RET
C46_STR:	SETB	C46_DO
		CLR	C46_SK
		SETB	C46_CS
		RET
CMD_RD:		SETB	CY
		LCALL	WD_BIT
		LCALL	WD_BIT
		CLR	CY
		LCALL	WD_BIT
		RET
CMD_WD:		SETB	C
		LCALL	WD_BIT
		CLR	C
		LCALL	WD_BIT
		SETB	C
		LCALL	WD_BIT
		RET
WD_BIT:		MOV	C46_DI,C
		SETB	C46_SK
		NOP
		NOP
		NOP
		CLR	C46_SK
		RET
RD_BIT:		SETB	C46_SK
		NOP
		NOP
		NOP
		CLR	C46_SK
		MOV	C,C46_DO
		RET
;LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
YUSHE:		;初始预置
		CLR	A
		LCALL	C46_RD
		CJNE	A,#0A5H,YUSHE1
		MOV	A,#01H
		LCALL	C46_RD
		MOV	MIN_XYH,A
		MOV	A,#02H
		LCALL	C46_RD
		MOV	MIN_XYL,A
		ADD	A,#T10msL
		MOV	MAX_XYL,A
		MOV	A,MIN_XYH
		ADDC	A,#T10msH
		MOV	MAX_XYH,A
		JNC	YUSHE2
YUSHE1:		SETB	C46_FAL
YUSHE2:		RET
;UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU

		END

⌨️ 快捷键说明

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