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

📄 serio2a.a51

📁 用于51系列单片机的串口程序源码
💻 A51
字号:
$nomod51	symbols	debug	nolist
$INCLUDE(\i\rg51fb.pdf)
$INCLUDE(charname.a51)
$list
;
;	CONSOLE I/O ROUTINES AND DRIVERS:
;	======= === ======== === =======
; S_INIT - Initializes Serial port.
;
; C_IN   - waits for character from serial port. Returns it in A.
; C_OUT  - sends character in A.
; C_STS  - console status. if char RXD, C=1, A=char, else C=0.
; STROUT - Sends in-line character string to console. String is terminated
;	by last character's MSB set.  Hence, can only handle 7 bit ASCII.
;
;********************************************
;
; Automatically sets baud rate, using TIMER 2
;
;********************************************
;
CODE_SEG	segment	code
public	S_init,C_IN,C_OUT,STROUT
;
	rseg	CODE_SEG
;
S_INIT:
	CLR	TR1
	MOV	SCON,#01011010B	;TI set indicates transmitter ready.
				; mode 1,REN,
	MOV	T2CON,#00110000B; Set to RCLK, TCLK
;			; wait for <space> from console, measure its
;			; speed, and set baud rate in Timer 2 accordingly.
Bauddet:
;
BG1:    CLR     A               ;DO BAUD RATE
        MOV     R3,A
        MOV     R1,A
        MOV     R0,#4
        JB      RXD,$           ;LOOP UNTIL A CHARACTER IS RECEIVED
        ;
BG2:    DJNZ    R0,$            ;Waste 8 clocks initially, 6 in loop
	CLR	C		;1 clock
	MOV	A,R1		;1
	SUBB	A,#1		;1 dec(R3:R1)
	MOV	R1,A		;1
	MOV	A,R3		;1
	SUBB	A,#00H		;1
	MOV	R3,A		;1
        MOV     R0,#3           ;1
        JNB     RXD,BG2         ;2 CLOCKS, LOOP UNTIL DONE
        JB      RXD,$           ;WAIT FOR SPACE TO END
        JNB     RXD,$		; WAIT FOR STOP BIT
        MOV	RCAP2H,R3	; LOAD THE TIMER2 REGISTER.
	MOV	RCAP2L,R1
	SETB	TR2		; turn it on
        ;
	ret
;
;=======
;
C_IN:
;	Console character input routine.
;	Waits for next input from console device and returns with character
;	code in accumulator.
;
        JNB     RI,$            ;Wait until character received.
        MOV     A,SBUF          ;Read input character.
	CLR	RI		;Clear reception flag.
	ret			;
;
;=======
;
C_OUT:
;	Console character output routine.
;	Outputs character received in accumulator to console output device.
;
        JNB     TI,$            ;Wait until transmission completed.
        CLR     TI              ;Clear interrupt flag.
	MOV	SBUF,A		;Write out character.
	RET
;
;=======
;
;Console Status
;
; Returns C=0 if no character is ready
; if character ready, returns C=1 and character in A
; Note: Serial input status can be checked by RI bit, also.
;
C_STS:	MOV	C,RI
	JNC	CNTRET		;Poll whether character has been typed.
	CALL	C_IN
CNTRET:	RET
;
;=======
;
;STROUT
;	Copy in-line character string to console output device.
;	uses:	DPTR,ACC
;
STROUT:	POP	DPH		;get in-line string address from stack
	POP	DPL
STRO_1:	CLR	A
	MOVC	A,@A+DPTR	;Read next byte.
	INC	DPTR		;Bump pointer.
	JBC	ACC.7,STRO_2	;Escape after last character.
	CALL	C_OUT		;Output character.
	SJMP	STRO_1		;Loop until done.
;
STRO_2:	CALL	C_OUT		;Output character.
	CLR	A
	JMP	@A+DPTR		;Return to program.
;
	end

⌨️ 快捷键说明

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