实验七,双机串行通信
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验七、双机串行通信
一、实验目的
1、熟悉微机接口实验装置的结构及使用方法
2、掌握通信接口芯片8251和8250的功能和使用方法
3、学会串行通信程序的编制方法
二、实验仪器
1、PC实验箱及连接线
2、两台计算机
3、9针接头串行电缆
三、芯片介绍(见实验七)
四、实验内容
实验原理图和接线同图4.12和4.13,不同的是要将串行电缆从实验箱上的RS-232接口连接到另外一台计算机上的串口,两台机子通过8250和8251进行字串信息的相互传输。
两台机子分别设置为发送和接收状态,发送端从键盘输入一段字符信息送8250或8251,接收端则从8251或8250接收一段字符。发送和接收结束后回到主选菜单,可进行再次通信。在发送和接收过程中,有一个出错处理过程,采用接收方回传和发送方确认来保证发送和接收正确。
五、预习要求
1、熟悉8250和8251的工作原理
2、熟悉实验原理
3、编制实验要求的汇编语言源程序
五、程序流程图和程序清单
1、主程序
1、发送子程序:
3、接收子程序:
程序清单:
;SY51-2.ASM
TIMCTL EQU 293H
TIMER0 EQU 290H
CLK EQU 3000
BPS EQU 9600
FACTOR EQU 16
DATA51 EQU 280H
CTRL51 EQU 281H
DATA50 EQU 2F8H
DRL50 EQU 2F8H
DRH50 EQU 2F9H
IER50 EQU 2F0H
IIR50 EQU 2FAH
LCR50 EQU 2FBH
MCR50 EQU 2FCH
LSR50 EQU 2FDH
MSR50 EQU 2FEH
DIVL EQU 0CH
DIVH EQU 00H
DATA SEGMENT
MESS1 DB 'PRESS 1 TO SEND MESSAGE!',0AH,0DH
DB 'PRESS 2 TO RECEIVE MESSAGE!',0AH,0DH
DB 'PRESS 3 TO QUIT!',0AH,0DH,0AH,0DH,'$' ERROR DB '*****PLEASE SELECT AGAIN!*****',0AH,0DH,'$'
MES1 DB 'Sending message......',0AH,0DH,0AH,0DH,'$'
MES2 DB 'Receiving message......',0AH,0DH,0AH,0DH,'$'
MESS2 DB 50
DB ?
MES DB 50 DUP(?)
MESS3 DB 50 DUP(?)
BUF1 DB ?
BUF2 DB ?
DATA ENDS
STACK SEGMENT PARA STACK
DB 128 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX
CALL SETTIM
CALL INIT51
CALL INIT50
AG: LEA DX,MESS1
MOV AH,09H
INT 21H
AG1: MOV DL,0FFH ;显示提示信息,
MOV AH,06H ;进行菜单选择
INT 21H
JZ AG1
CMP AL,'1'
JZ SD
CMP AL,'2'
JZ RC
CMP AL,'3'
JZ EXIT
LEA DX,ERROR
MOV AH,09H
INT 21H
JMP AG
SD: CALL SEND
JMP AG
RC: CALL RECE
JMP AG
EXIT: MOV AX,4C00H
INT 21H
SEND PROC ;发送子程序
MOV AH,09H
LEA DX,MES1
INT 21H ;显示提示信息
MOV AH,0AH
LEA DX,MESS2
INT 21H ;从键盘输入字串信息
MOV CL,MESS2[1]
LOP1: MOV AL,CL
MOV BUF1,AL
CALL SED ;发送一个字符(字串长度) CALL REC ;接收回传字符
CMP AL,CL
JZ SKIP1
MOV AL,15H ;回传字符不同于发送字符
MOV BUF1,AL ;有错,发出错标志,重发字符
CALL SED
JMP LOP1
SKIP1: LEA SI,MES ;发送字串内容(含出错处理)
LOP2: MOV AL,[SI]
MOV BUF1,AL
CALL SED
CALL REC
MOV AL,BUF2
CMP AL,[SI]
JZ SKIP2
MOV AL,15H
MOV BUF1,AL
CALL SED
JMP LOP2
SKIP2: DEC CL
JZ EXIT1
INC SI
JMP LOP2
EXIT1: MOV CX,3
LOOP1: MOV AH,06H
MOV DL,0AH
INT 21H
MOV DL,0DH
INT 21H
LOOP LOOP1
RET
SEND ENDP
RECE PROC ;接收子程序
MOV AH,09H
LEA DX,MES2
INT 21H ;显示提示信息
LOP3: CALL REC1 ;接收一个字符;并保存在CL中 MOV CL,BUF2
MOV BUF1,CL
CALL SED1 ;回送字符
CALL REC1 ;接收字符
MOV AL,BUF2
CMP AL,15H
JZ LOP3 ;是出错标志,表明上一个接收
;字符已经出错,需要重现接收
LEA DI,MESS3
LOP4: MOV [DI],AL ;将刚才接收字符送缓冲区
MOV BUF1,AL
CALL SED1 ;回送字符
DEC CL ;判断是否接收完毕,没有则继
JZ EXIT2 ;续进行接收、回传、判断操作
CALL REC1
MOV AL,BUF2
CMP AL,15H