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

📄 newatu.asm

📁 51单片机多串口驱动
💻 ASM
📖 第 1 页 / 共 2 页
字号:


	BEGIN				BIT	0H
	T0_FLAG				BIT	01H
	T1_FLAG				BIT	02H
	SER_FLAG			BIT	03H
	R_FL				BIT	04H
	R_FLB				BIT	05H
	R_RL				BIT	06H
	R_RLB				BIT	07H
	FSK_EN				BIT	08H	
	ONOFFHOOK			BIT	09H
	;
	REC_NUM_H			EQU		6CH
	REC_NUM_T			EQU		6DH
	buf				EQU		17H
	TIMER_1S			EQU		18H
	CARD_NUM			EQU		19H
	CMD_HEAD			EQU		1AH
	CMD_TAIL			EQU		1BH
	MSG_HEAD			EQU		6EH
	MSG_TAIL			EQU		6FH
	MSG_TAIL_H			EQU		60H
	MSG_HEAD_H			EQU		61H
	MSG_SUM				EQU		62H
	BACK_P				EQU		63H
	ONCOUNTL			EQU		64H
	ONCOUNTH			EQU		65H
	OFFCOUNTL			EQU		66H
	OFFCOUNTH			EQU		67H
	SERONL				EQU		68H
	SERONH				EQU		69H
	SEROFFL				EQU		6AH
	SEROFFH				EQU		6BH
	SER_COUNT			EQU		7AH
	CHECK_NUM			EQU		1EH
	FSK_BUF				EQU		2FH
	FLL_BUF				EQU		23H
	FLH_BUF				EQU		24H
	RLL_BUF				EQU		25H
	RLH_BUF				EQU		26H
	FLL_BUFB			EQU		27H
	FLH_BUFB			EQU		28H
	RLL_BUFB			EQU		29H
	RLH_BUFB			EQU		2AH
	OFFHOOKL_BUF			EQU		2BH
	OFFHOOKH_BUF			EQU		2CH
	FSK_ENL_BUF			EQU		2DH
	FSK_ENH_BUF			EQU		2EH
	FSK_D_B				EQU		2FH

	ptr_buf				equ		30h
	CHAN_FLAG			EQU		80H
	;	
	CMD_P_H				EQU		0H
	MSG_P_H				EQU		1H
	SEND				EQU		0B0H
	RECEIVE				EQU		0C0H
	RESET_1				EQU		0D0H
	BEGIN_WORK			EQU		0E0H
	NOTHING				EQU		99H
	OK				EQU		0F0H
	FALSE				EQU		0FH
	MAXSEND				EQU		03H
	NUM_BUFL			DATA		1fH
	PKT1				EQU		70H
	PKT2				EQU		71H
	PKT3				EQU		72H
	PKT4				EQU		73H
	CHANNEL				EQU		74H
	RES1				EQU		75H
	RES2				EQU		76H
	RES3				EQU		77H
	RES4				EQU		78H
	HADDR				EQU		0a1h;P2
	
	OFFHOOKL			EQU	8000H		;
	OFFHOOKH			EQU	8001H		;
	RING_FLL			EQU	8004H		;0-7
	RING_FLH			EQU	8006H		;8-15
	RING_RLL			EQU	8005H		;0-7
	RING_RLH			EQU	8007H		;8-15
	CARD_NUM_ADDR			EQU	8009H		;
	WDT_ADDR			EQU	800BH		;
	FSKENL  			EQU	800CH		;0-7
	FSKENH				EQU	800DH		;8-15
	READ_FSK			EQU	0E000H		;
	FSK_FDRN			EQU	0A000H		;
	BEGFSK_ADDR			EQU	0C000H		;(C000H-C0F0H,)

	OFFHOOK				EQU	1		;
	CALL_OUT			EQU	3		
	ONHOOK				EQU	2		;
	polarity			EQU	10		;
	RING_1				EQU	1
	RING_N				EQU	8
	RING_STOP			EQU	7
	TALKING				EQU	11H
	IDLE				EQU	18H
	CMD_ERR				EQU	0CH
	NUM_ONE				EQU	31H
	NUMB				EQU	32H
	NUM_END				EQU	33H
	;
	LINE_STATE			EQU		30H
	OFF_TIMER			EQU		40H
	ON_TIMER			EQU		50H
	FSK_STA				EQU		0C0H
	NUM_LEN				EQU		0D0H
	TIME_COUNT			EQU		0E0H
	WR_BUF				EQU		0F0H
	;	
	SP_PTR				EQU		80H
	TMOD_VAL              	  	EQU     	11H     ;TIMER0=MODE1,TEMER1=MODE1
	SCON_VAL              	  	EQU     	0B0H    ;SERIAL PORT IS MODE2
	PCON_VAL                	EQU     	0H;80H     ;SMOD BIT=0
	TCON_VAL                	EQU     	50H     ;START  TIMER0
	IE_VAL                  	EQU     	9aH     ;ENABLE SER AND T1 INT
	IP_VAL				EQU		02H	;SER INT IS HIGN 10H
	TH1_VAL                 	EQU     	0b1h;0D8H    ;10MS AT 12MHZ 0D8F0H
	TL1_VAL                 	EQU     	0e0h;0F0H    ;10MS AT 24MHZ IS 0B1E0H
	TH0_VAL                 	EQU     	00f8h;FEH    ;50MS AT 12MHZ IS 03CB0H
	TL0_VAL                 	EQU     	02fh;80H;080H    ;OLD 64
		
;############################################################
;start program
;############################################################
			ORG	0000H
			LJMP	BEGIN_PROG	
			ORG	0003H
			NOP
			RETI	
			ORG	000BH
			LJMP	TIMER0_INT	
			ORG	0013H
			NOP
			RETI	
			ORG	001BH
			LJMP	TIMER1_INT	
			ORG	0023H
			
			LJMP	ser_int	
			ORG	002BH
			NOP
			RETI
			ORG 30H
T0_PROC:		JMP	T0_INT10
TIMER0_INT:	;	JMP	T0_INTEND
				PUSH	ACC
				PUSH	DPH
				PUSH	DPL
T0_INT5:			MOV	DPTR,#FSK_FDRN
				MOVX	A,@DPTR
			;	MOV	P2,#0A0H
			;	MOV	R1,#0
			;	MOVX	A,@R1
				JnZ	T0_INT8
				movx	a,@dptr
				jz	T0_PROC;T0_INT10
T0_INT8:
				PUSH	B
				PUSH	PSW
				CLR	RS0
				CLR	RS1
FSK_PROC:			CLR	C	
				RRC	A
				PUSH	ACC
				MOV	B,#10H
				MUL	AB
	;	MOV	R1,A
	;	MOV	P2,#0C0H
	;	MOVX	A,@R1
	;	MOV	P2,#0E0H
	;	MOV	R1,#0
		MOV	DPTR,	#BEGFSK_ADDR	
		MOV	DPL,A
		MOVX	A,	@DPTR
con:	SETB	P1.2
		JB	P1.2,	con		;
		MOV	DPTR,#READ_FSK	
TEST55:MOVX	A,	@DPTR
		MOV	B,A
		MOVX	A,@DPTR
		CJNE	A,0F0H,TEST55
		CJNE	A,#55H,FSK_PROC15
		POP	ACC
		ADD	A,#FSK_STA
		MOV	R1,A
		MOV	@R1,#5
		JMP	FSK_PROCEND
FSK_PROC15:	
		MOV	DPH,#60h
		MOV	DPL,NUM_BUFL
		MOVX	@DPTR,A
		INC	NUM_BUFL
		CJNE	A,#04H,FSK_PROC20
		POP	ACC
		ADD	A,#FSK_STA
		MOV	R1,A
		MOV	A,@R1
		JZ		FSK_PROCEND
		MOV	@R1,#10H
		JMP	FSK_PROCEND
FSK_PROC20:	
		MOV	HADDR,#3
		MOV	R1,rec_num_t
	;	mov	dph,#3
	;	mov	dpl,rec_num_t
	;	movx	@dptr,a
	;	inc	dpl
		MOVX	@R1,A
		INC	R1
		POP	ACC
	;	movx	@dptr,a
		MOVX	@R1,A
		ADD	A,#FSK_STA
		MOV	R1,A
		MOV	A,@R1
		JZ		FSK_PROCEND
		CJNE	A,#10H,FSK_PROC30
		MOV	@R1,#15H
		MOV	A,@R1
		MOV	A,R1
		ADD	A,#10H
		MOV	R1,A	;TIME_COUNT		
		MOV	A,B
		INC	A
		MOV	@R1,A
		MOV	A,R1
		ADD	A,#10H
		MOV	R1,A
		MOV	@R1,#9
		JMP	FSK_PROCEND
FSK_PROC30:
		CJNE	A,#15H,FSK_PROC35
FSK_PROC35:JC	FSK_PROCEND
		MOV	A,#2
		ADD	A,REC_NUM_T
		CJNE	A,#200,FSK_PROC36
		CLR	A
FSK_PROC36:
		MOV	REC_NUM_T,A
FSK_PROCEND:	POP	PSW
				POP	B
				JMP	T0_INT5
T0_INT10:			POP	DPL
				POP	DPH
				POP	ACC
T0_INTEND:			MOV	TL0,#TL0_VAL
				MOV	TH0,#TH0_VAL
				SETB	T0_FLAG
				RETI

TIMER1_INT:	MOV	TL1,#TL1_VAL
		MOV	TH1,#TH1_VAL
		INC	TIMER_1S
		SETB	T1_FLAG
		RETI

SER_INT:	CLR	EA
		PUSH	PSW	
               PUSH    ACC
               PUSH	DPH
               PUSH	DPL
               PUSH	B
		SETB	RS0
		CLR		TI
               JB      RI,     SER_INT1
               CLR     TI              
               JMP     SERINT_END
SER_INT1: 
		CLR	TB8
		JNB     RB8,    XSER_INT1       ;NOT ADDRESS BYTE.
		clr		rb8
              	MOV     A,      SBUF
              	CLR     RI
					MOV	R2,	A
              	ANL     A,    #0FH    ;GET CARD_NO IN FIRST BYTE FROM NOD
;              	add	a,#50h
              	CJNE    A,CARD_NUM,XSER_INT1
              	JMP     SER_INT2
XSER_INT1:    	JMP     SERINT_END
SER_INT2:	CLR	TB8
				CLR	SM2
				MOV	A,	R2
				ANL	A,	#0F0H
				CJNE	A,	#RESET_1,	SER_INT21
				LJMP	BEGIN_PROG
				JMP	RESET_CARD
SER_INT21:			CJNE	A,	#BEGIN_WORK,	SER_INT22
				MOV	A,	CARD_NUM
				add	a,#50h
				MOV	SBUF,	A
				SETB	BEGIN
				JMP	SERINT_END
SER_INT22:			CJNE	A,	#SEND,	SER_INT23
				jnb	begin,	serint_end
				MOV	A,	CARD_NUM
				add	a,#50h
				MOV	SBUF,	A
				CALL	SEND_MSG
				SETB	SER_FLAG
				JMP	SERINT_END
SER_INT23:			CJNE	A,	#RECEIVE,	XSER_INT1
				jnb	begin,	serint_end
				MOV	A,	CARD_NUM
				add	a,#50h
				MOV	SBUF,	A
				CALL	RECEIVE_CMD
				SETB	SER_FLAG						

SERINT_END:			SETB	SM2
				POP	B
				POP	DPL
				POP	DPH
				POP	ACC
				POP	PSW
				CLR	RS0
				CLR	RS1
				SETB	EA
				RETI	

SEND_MSG: 			MOV	SER_COUNT,#0
				MOV	A,MSG_SUM
				JNZ	SEND_MSG1
SEND_MSG01:			CALL	T_DELAY
				JNC	SEND_MSG0
				MOV	A,	#NOTHING
				MOV	SBUF,	A
SENDNOTHING:			JNB	TI,SENDNOTHING
				CLR	TI
				JMP	SENDEND
SEND_MSG0:			JMP	SENDEND
SEND_MSG1:			CJNE	A,#MAXSEND,SEND_MSG5
SEND_MSG5:			JC	SEND_MSG10
				MOV	A,#MAXSEND
SEND_MSG10:			MOV	R4,A		;SEND MSG SUM
				MOV	R2,A				
				CALL	T_DELAY
				JNC	SEND_MSG0
SEND2:				MOV	A,R2
				MOV	SBUF,	A	;SEND MSG_SUM
				MOV	CHECK_NUM,A
			;	MOV	DPH,#MSG_P_H
			;	MOV	DPL,MSG_HEAD
				MOV	DPH,MSG_HEAD_H
				MOV	DPL,MSG_HEAD
				MOV	B,	MSG_HEAD
SEND_LENGH:	
				CALL	T_DELAY		
				JNC	SEND_MSG0
				MOV	A,#3
				MOV	SBUF,	A	;SEND MSG LENGTH
				MOV	R3,A
				XRL	A,CHECK_NUM
				MOV	CHECK_NUM,A
SEND3:				CALL	T_DELAY		
				JNC	SEND_MSG0
				CALL	DELAY10
				MOVX	A,@DPTR	
			;	MOVX	A,@R1
				MOV	SBUF,	A	;SEND MSG
				INC	DPTR
			;	INC	R1
				XRL	A,CHECK_NUM	
				MOV	CHECK_NUM,A
				MOV	A,DPH
				CJNE	A,#30H,SEND35
				MOV	DPH,#20H
SEND35:
				DJNZ	R3,	SEND3
				MOV	A,B
				ADD	A,#4
				MOV	DPL,A
				DJNZ	R2,SEND_LENGH
				CALL	T_DELAY		
				JNC	SEND_MSG0
				MOV	A,CHECK_NUM
				MOV	SBUF,	A
				CALL	T_DELAY
				JNC	SEND_MSG0
				CALL	R_DELAY
				JNC	SEND_MSG0
				MOV	A,	SBUF
				CLR	RI
				CJNE	A,	#OK,	SENDEND1
SEND32:				MOV	A,MSG_SUM
				SUBB	A,R4
				MOV	MSG_SUM,A
				MOV	A,R4
				MOV	B,#4
				MUL	AB
				CLR	C
				ADD	A,MSG_HEAD
				MOV	MSG_HEAD,A
				JNC	SENDEND
				INC	MSG_HEAD_H
				MOV	A,MSG_HEAD_H
				CJNE	A,#30H,SENDEND
				MOV	MSG_HEAD_H,#20H
				JMP	SENDEND
SENDEND1:
SENDEND:			RET
;
RECEIVE_CMD:
				MOV	A,CMD_TAIL	;CMD BUFFER IS OUT RAM 00H-0FFH
				ADD	A,#4
				CJNE	A,CMD_HEAD,RECEIVE_CMD0
RECEIVE0:	JMP	REC_END
RECEIVE_CMD0:;	MOV	DPH,#CMD_P_H
	;	MOV	DPL,CMD_TAIL
		MOV	HADDR,#CMD_P_H
		MOV	R1,CMD_TAIL
		MOV	B,CMD_TAIL	;BACKUP OF CMD_POINT
		CALL	T_DELAY
		JNC	RECEIVE0
		CALL	R_DELAY
		JNC	RECEIVE0
		MOV	A,	SBUF
		CLR	RI
		MOV	R4,	A	;RECEIVE PACKEGE_SUM
		MOV	R2,	A	;RECEIVE PACKGE SUM
		MOV	CHECK_NUM,	A	;CHECK	SUM
REC_CMD:	CALL	R_DELAY
		JNC	RECEIVE0
		MOV	A,	SBUF
		CLR	RI
		MOV	R3,	A	;RECEIVE LENGTH
		XRL	A,	CHECK_NUM
		MOV	CHECK_NUM,	A
REC_CMD1:	CALL	R_DELAY
		JNC	RECEIVE0
      		MOV     A,      SBUF   ;REC CMD
		CLR	RI
;		MOVX	@DPTR,	A
		MOV	P0,R1
		MOVX	@R1,A
		INC	R1
	;	INC	DPL
		XRL	A,	CHECK_NUM
		MOV     CHECK_NUM,     A               
		DJNZ	R3,	REC_CMD1
		MOV	A,B
		ADD	A,#2
		MOV	R1,A
		MOV	B,A
  		DJNZ	R2,	REC_CMD
		CALL	R_DELAY
		JNC	REC_CMD12
		MOV	A,	SBUF	;RECEIVE CHECK_SUM
		CLR	RI
		CJNE	A,	CHECK_NUM,	REC_CMD2
		MOV	A,	#OK
		MOV	SBUF,	A
		MOV	B,#02
		MOV	A,R4
		MUL	AB	
		ADD	A,CMD_TAIL
      		MOV     CMD_TAIL,       A
		CALL	T_DELAY
		JMP	REC_END
REC_CMD12:	JMP	REC_END		
;
REC_CMD2:	MOV	A,	#FALSE	
		MOV	SBUF,	A
		CALL	T_DELAY
REC_END:	RET
;				
R_DELAY:	CLR	A
R_DELAY1:	JB	RI,	R_DELAY5
		INC	A
		CJNE	A,	#40H,	R_DELAY1
		JMP	R_DELAY6
R_DELAY5:	SETB	C
R_DELAY6:	RET						
;
T_DELAY:	CLR	A
T_DELAY1:	JB	TI,	T_DELAY5
		INC	A
		CJNE	A,	#20H,	T_DELAY1
		JMP	T_DELAY6
T_DELAY5:	SETB	C
T_DELAY6:	CLR	TI
		RET
DELAY10:	CLR	A
DELAY15:	INC	A
		CJNE	A,#3,DELAY15
		RET
RESET_CARD:
		CLR		EA
		JMP	RESET_CARD
BEGIN_PROG:       SETB     P1.0
		clr	ea
		mov	psw,#00
		mov 	ptr_buf,#0
		MOV	R0,#0
		MOV	A,#0
BEGIN_PROG5:	mov	a,#0
		MOV	@R0,A
		INC	R0
		CJNE	R0,#0,BEGIN_PROG5
		call	clear_wdt
		MOV	DPTR,#0
BEGIN_PROG10:	clr	a
		MOVX	@DPTR,A
		movx	a,@dptr
		INC	dpl
		mov	a,dpl
		jnz	begin_prog10
		inc	dph
		push	dpl
		push	dph
		call	clear_wdt
		pop	dph
		pop	dpl;
		MOV	a,DPH
		
		CJNE	a,#80h,BEGIN_PROG10
		JMP	CHECK20
	MOV	R4,#0
	MOV	R5,#0
	MOV	A,#7
CHECK10:
	
	MOV	DPTR,#0
	ADD	A,#7
;	MOV	50H,A
CHECK:	ADD	A,#5
	MOVX	@DPTR,A
	MOV	50H,A
	MOV	B,A
	MOVX	A,@DPTR
	CJNE	A,50H,CHECK_ERR
	INC	DPTR
	MOV	R2,DPH
	CJNE	R2,#80H,CHECK
	INC	R4
	CJNE	R4,#0,CHECK10
	INC	R5
	
	JMP	CHECK10
 CHECK_ERR:
		JMP	CHECK10
CHECK20:
		CLR	A
        MOV	DPTR,	#OFFHOOKL		;
	MOVX	@DPTR,	A
	INC     DPL
	MOVX	@DPTR,	A

	MOV	DPTR,	#FSKENL	;
	MOVX	@DPTR,	A
	INC	DPL
	MOVX	@DPTR,	A
	
	MOV	R7,	#0
	MOV	DPTR,	#BEGFSK_ADDR
START85:MOV	B,	#10H
	MOV	A,R7
	MUL	AB
	MOV	DPL,	A
	MOVX	A,	@DPTR
	inc	r7
	CJNE	R7,#10H	,START85
	NOP
	MOV	DPTR,	#READ_FSK
	MOVX	A,	@DPTR	
	CLR	P1.0
	CLR	P1.0
;
        MOV     TMOD,   #11H            ;T01,T11
	MOV	TH1,	#TH1_VAL
	MOV	TL1,	#TL1_VAL
	MOV	TL0,	#TL0_VAL
	MOV	Th0,	#TH0_VAL
		
;
;	MOV	SCON,	#SCON_VAL		;
        MOV     TMOD,   #TMOD_VAL    	;TIMER0 AND TIMER1 IN MODE 1
        MOV     TCON,   #TCON_VAL    	;TIMER0 WORK
        MOV     SCON,   #SCON_VAL;0B8H   	;MODE 2,SET RI UNTIL RECEIVE STOP BIT,
                                        ;  PERMIT RECEIVE,THE NINTH BIT IN MODE 2
        MOV     IP,     #IP_VAL    	;SERIAL INTERRUPT IS HIGH LEVEL
        MOV     87H,	#PCON_VAL  	;PCON, BAUD RATE DO NOT DOUBLE
        MOV			SP,	#SP_PTR
		  MOV		MSG_HEAD,#0
		  MOV		MSG_TAIL,#0
		  MOV		MSG_TAIL_H,#20H
		  MOV		MSG_HEAD_H,#20H
		  MOV		MSG_SUM,#0
        MOV	R2,#10H
        MOV	R0,#LINE_STATE
		call	clear_wdt
        MOV	A,#IDLE
INIT_STATE:	MOV	@R0,A
		INC	R0
		DJNZ	R2,INIT_STATE                
     	MOV     IE,     #IE_VAL    	; ENABLE INTERRUPT
WAIT_BEGIN:     CALL	GET_CARD_NO
		CALL	CLEAR_WDT
		MOV	DPTR,#RING_FLL
		MOVX	A,@DPTR
		MOV	FLL_BUF,A
		MOV	FLL_BUFB,A
		MOV	DPTR,#RING_FLH
		MOVX	A,@DPTR
		MOV	FLH_BUF,A
		MOV	FLH_BUFB,A
		MOV	DPTR,#RING_RLL
		MOVX	A,@DPTR
		MOV	RLL_BUF,A
		MOV	RLL_BUFB,A
		MOV	DPTR,#RING_RLH
		MOVX	A,@DPTR
		MOV	RLH_BUF,A
		MOV	RLH_BUFB,A
		MOV	A,TIMER_1S
		CJNE	A,#25,WAIT_BEGIN5
WAIT_BEGIN5:	JC	WAIT_BEGIN
		MOV	TIMER_1S,#0
		CPL	P1.1
		JNB	BEGIN,WAIT_BEGIN
		MOV	SER_COUNT,#0
	;	MOV	MSG_TAIL,#30H
MAIN:		MOV	A,SER_COUNT
		CJNE	A,#30,MAIN3
MAIN3:		JC		MAIN5
		JMP	BEGIN_PROG
MAIN5:		CALL	CLEAR_WDT
		MOV	A,CMD_HEAD
		CJNE	A,CMD_TAIL,MAIN10
		JMP	MAIN15
MAIN10:		CALL	CMD_PROC
MAIN15:		MOV	A,REC_NUM_H
			CJNE	A,REC_NUM_T,MAIN18
				JMP	MAIN19
MAIN18:	;	CJNE	A,#0FCH,MAINTEST
;				NOP
MAINTEST:	CALL	RECPROC
					CALL	CLEAR_WDT
MAIN19:		
			JNB	T1_FLAG,MAIN
				CLR	T1_FLAG
			CALL	LINE_PROC
				CALL	CLEAR_WDT
			MOV	A,TIMER_1S
			CJNE	A,#100,MAIN20
MAIN20:		JC	MAIN
			MOV	TIMER_1S,#0
			INC	SER_COUNT
			CPL	P1.1
			CLR	P1.0
			JMP	MAIN
RECPROC:	;MOV	DPH,#3
		;MOV	DPL,REC_NUM_H
		MOV	DPH,#3
		MOV	DPL,REC_NUM_H
		MOVX	A,@DPTR			;WRITE A NUMBER PACKET
	;	MOVX	A,@R0
		MOV	RES4,A
		MOV	B,A
;		MOV	RES1,A
		INC	DPTR
	;	INC	R0
		NOP
		MOVX	A,@DPTR
	;	MOVX	A,@R0	
		MOV	CHANNEL,A	
;		mov	RES2,A			;CHANNELEL NUMBER
		ADD	A,#FSK_STA
		MOV	R0,A
		MOV	A,@R0
		CJNE	A,#15H,RECPROC20
		MOV	A,CHANNEL
		ADD	A,#NUM_LEN
		MOV	R0,A
		MOV	A,@R0
		DEC	A
		MOV	@R0,A
		MOV	A,#TIME_COUNT
		ADD	A,CHANNEL	
		MOV	R0,A
		MOV	A,@R0
		DEC	A
		MOV	@R0,A
		JNZ	REC_NUM_END
		MOV	A,CHANNEL								;GET CALLER ID LENGTH
		ADD	A,#FSK_STA
		MOV	R0,A
		MOV	@R0,#20H							;RECEIVE THE FIRST NUMBER
		MOV	A,#10H
		ADD	A,R0
		MOV	R0,A
		MOV	A,@R0
		DEC	A
		MOV	@R0,A
		MOV	PKT1,#NUM_ONE
		MOV	PKT2,CHANNEL
		MOV	A,RES4
		SUBB	A,#30H
		MOV	PKT3,A
		CALL	WRITE_MSG
		JMP	REC_NUM_END
RECPROC20:
		CJNE	A,#20H,REC_NUM_END5
		MOV	PKT1,#NUMB
		MOV	PKT2,CHANNEL
		MOV	A,RES4
		SUBB	A,#30H
		MOV	PKT3,A
;*****************************************
;		CALL	WRITE_MSG
		MOV	A,#NUM_LEN
		ADD	A,CHANNEL
		MOV	R0,A
		MOV	A,@R0
		DEC	A
		MOV	@R0,A
		JNZ	RECPROC30
		MOV	A,CHANNEL			;GET CALLER ID LENGTH
		ADD	A,#FSK_STA
		MOV	R0,A
		MOV	@R0,#0
		MOV	PKT1,#NUM_END

⌨️ 快捷键说明

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