www.pudn.com > GSM.rar > gsm.asm


;============================================= 
;CS1接CS50 	 
;============================================= 
		ADDR1	EQU		0CFA8H	;8250 
        ADDR2	EQU		0CFA9H 
        INTR	EQU		0CFAAH 
        LCR		EQU		0CFABH 
        MCR		EQU		0CFACH 
        LSR		EQU		0CFADH 
        MSR		EQU		0CFAEH 
;============================================= 
		STSF	EQU		20H 
		BUF		EQU		21H 
;=============================================	 
		RIF		EQU		00H		;STSF BIT 
		TIF		EQU		04H	 
;=============================================		 
        ORG     4000H 
        LJMP  	START 
;=============================================		 
		ORG    	4100H 
START:  MOV		DPTR,#LCR 
		MOV		A,#80H 
		MOVX	@DPTR,A 
		MOV		DPTR,#ADDR1 
		MOV		A,#12			;9600 
		MOVX	@DPTR,A 
		MOV		DPTR,#ADDR2 
		MOV		A,#0 
		MOVX	@DPTR,A 
		MOV		DPTR,#LCR 
		MOV		A,#7			 
		MOVX	@DPTR,A			;no pe, 8 bit, 1 stop 
		MOV		DPTR,#ADDR2 
		MOV		A,#0 
		MOVX	@DPTR,A			;no interupt 
		MOV		DPTR,#LSR 
		MOVX	A,@DPTR 
		MOV		DPTR,#ADDR1 
		MOVX	A,@DPTR 
		MOV		R0,#30H 
		 
		ACALL	ATT 
		ACALL	DELAY 
		ACALL	ATT 
		ACALL	DELAY 
		ACALL	CLEAR_STATUS 
MAIN:	ACALL	CLEAR 
		ACALL	ATE 
		ACALL	RECV 
		NOP						;关闭回显,设断点观察内部数据存储器从30H开始的单元 
		ACALL	ATT 
		ACALL	DELAY 
		ACALL	CLEAR_STATUS 
		ACALL	CLEAR 
		ACALL	ATT 
		ACALL	RECV 
		NOP						;发命令AT,设断点观察内部数据存储器从30H开始的单元 
		ACALL	ATT 
		ACALL	DELAY 
		ACALL	CLEAR_STATUS 
		ACALL	CLEAR 
		ACALL	CGMI 
		ACALL	RECV 
		NOP						;读取厂商信息,设断点观察内部数据存储器从30H开始的单元 
		LJMP	START		 
;=============================================		 
SEND:	MOV		BUF,A 
WTSD:	MOV		DPTR,#LSR 
		MOVX	A,@DPTR 
		JBC		ACC.5,SDOK 
		AJMP	WTSD 
SDOK:	MOV		DPTR,#ADDR1 
		MOV		A,BUF 
		MOVX	@DPTR,A 
		RET					 
;=============================================		 
RECV:	MOV		R0,#30H 
WTRC0:	MOV		DPTR,#LSR 
		MOVX	A,@DPTR 
		;MOV		STSF,A 
		JBC		ACC.0,RCOK 
		AJMP	WTRC0 
WTRC:	MOV		DPTR,#LSR 
		MOVX	A,@DPTR 
		;MOV		STSF,A 
		JBC		ACC.0,RCOK 
		DJNZ	R1,WTRC 
		RET		 
RCOK:	MOV		DPTR,#ADDR1 
		MOVX	A,@DPTR 
		MOV		@R0,A 
		INC		R0 
		MOV		R1,#0 
		;RET 
		AJMP	WTRC 
;=============================================		 
CLEAR:	MOV		R0,#30h 
		MOV		R1,#30H 
CLR1:	MOV		@R0,#0 
		INC		R0 
		DJNZ	R1,CLR1 
		RET 
;=============================================		 
DELAY: 	MOV R4,#10 
	    MOV R5,#0 
DLY:    DJNZ R4,DLY 
		DJNZ R5,DLY 
		RET 
;=============================================		 
ATT:	MOV		A,#'A' 
		ACALL	SEND 
		MOV		A,#'T' 
		ACALL	SEND 
		MOV		A,#0DH 
		ACALL	SEND 
		RET 
;=============================================		 
ATE:	MOV		A,#'A' 
		ACALL	SEND 
		MOV		A,#'T' 
		ACALL	SEND 
		MOV		A,#'E' 
		ACALL	SEND 
		MOV		A,#'0' 
		ACALL	SEND 
		MOV		A,#0DH 
		ACALL	SEND 
		RET 
;=============================================	 
CGMI:	MOV		A,#'A' 
		ACALL	SEND 
		MOV		A,#'T' 
		ACALL	SEND 
		MOV		A,#'+' 
		ACALL	SEND 
		MOV		A,#'C' 
		ACALL	SEND	 
		MOV		A,#'G' 
		ACALL	SEND 
		MOV		A,#'M' 
		ACALL	SEND 
		MOV		A,#'I' 
		ACALL	SEND 
		MOV		A,#0DH 
		ACALL	SEND	 
		RET	      
;=============================================	 
CGMM:	MOV		A,#'A' 
		ACALL	SEND 
		MOV		A,#'T' 
		ACALL	SEND 
		MOV		A,#'+' 
		ACALL	SEND 
		MOV		A,#'C' 
		ACALL	SEND	 
		MOV		A,#'G' 
		ACALL	SEND 
		MOV		A,#'M' 
		ACALL	SEND 
		MOV		A,#'M' 
		ACALL	SEND 
		MOV		A,#0DH 
		ACALL	SEND	 
		RET 
;=============================================	 
CGMR:	MOV		A,#'A' 
		ACALL	SEND 
		MOV		A,#'T' 
		ACALL	SEND 
		MOV		A,#'+' 
		ACALL	SEND 
		MOV		A,#'C' 
		ACALL	SEND	 
		MOV		A,#'G' 
		ACALL	SEND 
		MOV		A,#'M' 
		ACALL	SEND 
		MOV		A,#'R' 
		ACALL	SEND 
		MOV		A,#0DH 
		ACALL	SEND	 
		RET 
;=============================================	 
 
CLEAR_STATUS: 
		MOV		DPTR,#LSR 
		MOVX	A,@DPTR 
		MOV		DPTR,#ADDR1 
		MOVX	A,@DPTR 
		;MOV		R0,#30H 
		RET		 
END