利用兩片 8251A 通過標(biāo)準(zhǔn)串行接口 RS-232C 實(shí)現(xiàn)兩臺(tái) 微機(jī)之間的串行通信,可采用異步工作方式。
程序:
D8251 EQU 460H ;2號(hào)機(jī)改為464H
Z8251 EQU 462H ;2號(hào)機(jī)改為466H
DATA SEGMENT
MESS DB '按下!后返回DOS.',0DH,0AH,'$'
DATA ENDS
STACK SEGMENT
STA DW 32DUP(?)
TOP DW ?
STACK ENDS
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
NOP ;INIT 8251 START
LEA DX,MESS
MOV AH,09H
INT 21H
MOV CX,100
LOOP $
MOV DX,Z8251 ;送00
MOV AL,00H
OUT DX,AL
MOV CX,100
LOOP $
MOV DX,Z8251 ;送00
MOV AL,00H
OUT DX,AL
MOV CX,100
LOOP $
MOV DX,Z8251 ;送00
MOV AL,00H
OUT DX,AL
MOV CX,100
LOOP $
MOV DX,Z8251 ;初始化8251
MOV AL,40H
OUT DX,AL
MOV CX,100
LOOP $
MOV AL,0CEH ;設(shè)置為8個(gè)數(shù)據(jù)位,兩個(gè)停止位波特率因子為16
OUT DX,AL ;無(wú)奇偶校驗(yàn)位
MOV CX,100
LOOP $
MOV AL,25H ;設(shè)為請(qǐng)求發(fā)送,允許發(fā)送,允許接收狀態(tài)
OUT DX,AL
MOV CX,100
LOOP $
NOP ;INIT 8251 END
REC: MOV DX,Z8251
MOV AH,02H
WAIT9: IN AL,DX ;有數(shù)據(jù)送到嗎?
AND AL,AH
JZ SEND ;沒有數(shù)據(jù)送到則跳轉(zhuǎn)至發(fā)送
MOV DX,D8251 ;有數(shù)據(jù)送到則從數(shù)據(jù)緩沖區(qū)讀入
IN AL,DX
MOV DL,AL
MOV AH,02H ;顯示在屏幕上
INT 21H
CMP AL,'!'
JE ED ;接收到結(jié)束符則返回DOS
JMP REC ;不是結(jié)束符則繼續(xù)接收
ED: MOV AX,4C00H
INT 21H
SEND: MOV CX,10
LOOP $
MOV DX,Z8251
MOV AH,01H
WAIT8: IN AL,DX
AND AL,AH
JZ WAIT8 ;發(fā)送緩沖器不空則等待
MOV DL,0FFH
MOV AH,06H
INT 21H
JZ REC ;無(wú)鍵按下則跳回"接收"處
MOV DX,D8251 ;有鍵按下則發(fā)送相應(yīng)字符
OUT DX,AL
CMP AL,'!' ;是結(jié)束字符則返回DOS
JE ED1
JMP REC ;不是結(jié)束字符則跳回"接收"處
ED1: MOV AX,4C00H
INT 21H
MAIN ENDP
CODE ENDS
END START