资源描述
石河子大学
信息科学与技术学院
<微机原理与接口技术>课程设计报告
2013—2014学年第二学期
题目名称: 通过串口实现双机通信
专 业: 计算机科学与技术
班 级: 计算机科学与技术2012( 4 )班
学 号: 2012620192 、2012620193
学生姓名: 魏 绍 钰 、黄 河
指导教师: 李栓明
【实验目的】 2
【实验要求】 2
【实验设备】 2
【实验内容】 3
【设计思想】 3
【程序模块介绍】 5
发送方程序模块: 5
接收方程序模块: 5
代码 6
一号机实验程序 6
二号机实验程序 7
【实验步骤】 9
【心得体会】 9
双机通讯实验
【实验目的】
1.进行全面综合,系统的训练,巩固课堂教学内容。
2.熟练掌握汇编语言常用指令及主法规则。
3.掌握汇编语言程序结构,提高调试能力。
4.软件与硬件配合使用,熟悉常用接口芯片。
【实验要求】
用串口8250,编程实现两台计算机近距离通信,一台为发送方,另一台为接收方
【实验设备】
1、TDN86/88微机教学系统两台。
2、一组排线。
【实验内容】
用排线将两台仪器相连,具体连线如下图所示。
其中一号机用作接收机,二号机用作发送机。实验目的是将二号机
中的3000~3009H十个单元中的代码传送到一号机的3000~3009H
单元中,1、2号机各自的实验程序如下:
【设计思想】
用串口电缆将两台机算机的COM2连接起来,把计算机设置成空MODEM方式,并为此编制了两个汇编语言程序:其一为数据发送程序;其二为数据接收程序。为了确保每个字符发送出去,并且被接收,发送接收双方的波特率设置一致,并且均采取查询方式进行下一步操作。接收数据程序只需执行一次,即驻留在内存中,此后,只要Ⅱ号计算机有数据要发送,则Ⅰ号机随时接收并显示在屏幕上。
本次设计中信息的传送采取查询方式,并且两台计算机是单工工作方式(一方发送,一方接收),这样简化了程序设计过程。
换行
开始
程序初始
显示提示信息
初始化8250,设定传输率
有键入?
选1?
选2?
Y
N
N
Y
提示出错
Y
N
调用程序1,发送字符
返回dos状态
发送方程序
开 始
保护原寄存器内容
显示提示信息
发送器为空?
有键入?
Y
读键盘输入
发送并显示
是esc键?
是enter?
Y
N
N
子程序1,发送字符
恢复原寄存器内容
返回
【程序流程图】
N
Y
开 始
程序初始化
初始化8250,设定相同的传输率
写入通信线路控制寄存器
禁止所有中断
调用接收子程序
返回dos
接收方程序
错误处理
开 始
保护原寄存器内容
显示接收信息
读状态寄存器,接收有错?
接收到数据?
N
N
Y
输入缓冲器处读数据
显示接收内容
是esc?
是enter?
Y
换 行
N
Y
恢复原寄存器内容
返回
N
接收子程序
【程序模块介绍】
发送方程序模块:
主程序(main)模块:实现发送方8250对串口1的初始化,主要包括:
1、对波特率的设置(本实验中用9600bps),其实现方式是通过设置和写入分频系数。
2、对通信线路控制寄存器(LCR)的初始化,本实践中采取的是一个起始位,8个数据位,两个停止位起止时数据传送方式(设置8个数据位,为了是简化数据写入及读取的过程,内存一个单元存8个二进制位,不采用奇偶校验位也是为了简化过程)。
3、键盘输入要选择的功能,主要是用INT 21 的0B号功能监测键盘输入,有输入就读取数据,没有则等待。误操作则提示有关信息,提示重新选择。
点对点传送字符(sentchar)模块:
1、 实现发送要传输的字符,并且在已方显示器上显示,用来与对方接收的进行对比。
2、 输入回车符时,按习惯自动输入一个换行符,并且也向对方发送。
3、 当输入ESC时,将通知对方发送过程结束,通知其做好保存及退出程序准备。
此后发送方返回主程序选择界面。
通知模块(informate)和延时(delay)模块
主要是在文件发送结束以后,显示相关信息,并通知对方这一过程结束,退出系统。在必要时进行适当的软件延时。
接收方程序模块:
接收方对两个过程采用的是执行两个不同的程序来完成,没有集成到一起
接收字符模块(receive)
接收到发送方从键盘输入的字符,并显示在显示器上,并进行存盘。当接收到发送方的通知时退出该程序。
简单的错误处理:
1、 在发送方,主要是在选择功能时,考虑到用户可能会进行误操作。处理方式为显示提示信息,提醒用户重新选择。
2、 在接收方,主要是对接收到数据进行判断,看在传送过程中是否发生帧错误,溢出错误等,如果有则显示一个问号。
代码
一号机实验程序
CODE SEGMENT
ASSUME CS:CODE
START: MOV AL,76H
OUT 43H,AL
MOV AL,0CH
OUT 41H,AL
MOV AL,00H
OUT 41H,AL
CLI
CALL INIT
CALL DALLY
MOV AL,7EH
OUT 81H,AL
CALL DALLY
MOV AL,34H ;清除出错标志,允许接收
OUT 81H,AL
CALL DALLY
MOV AX,0152H ;显示'R'
INT 10H
MOV DI,3000H
MOV CX,000AH
A1: IN AL,81H
AND AL,02H
JZ A1
IN AL,80H
AND AL,7FH
MOV [DI],AL
INC DI
LOOP A1
MOV AL,00H
MOV SI,300AH
MOV [SI],AL
MOV AH,06H
MOV BX,3000H
INT 10H
STI
A2: JMP A2
INIT: MOV AL,00H
OUT 81H,AL
CALL DALLY
;OUT 81H,AL
; CALL DALLY
; OUT 81H,AL
; CALL DALLY
OUT 80H,AL
CALL DALLY
OUT 80H,AL
CALL DALLY
MOV AL,40H
OUT 81H,AL
RET
DALLY: PUSH CX
MOV CX,5000H
A3: LOOP A3
POP CX
RET
CODE ENDS
END START;
二号机实验程序
CODE SEGMENT
ASSUME CS:CODE
START: MOV AL,76H
OUT 43H,AL
MOV AL,0CH
OUT 41H,AL
MOV AL,00H
OUT 41H,AL
CALL INIT
CALL DALLY
MOV AL,7EH
OUT 81H,AL
CALL DALLY
; MOV AL,34H
MOV AL,31H ;允许发送
OUT 81H,AL
CALL DALLY
MOV DI,3000H
MOV CX,000AH
A1: MOV AL,[DI]
CALL SEND
CALL DALLY
INC DI
LOOP A1
A2: JMP A2 ;键入CTRL-BREAK退出
INIT: MOV AL,00H
OUT 81H,AL
CALL DALLY
; OUT 81H,AL
; CALL DALLY
; OUT 81H,AL
; CALL DALLY
OUT 80H,AL
CALL DALLY
OUT 80H,AL
CALL DALLY
MOV AL,40H
OUT 81H,AL
RET
DALLY :PUSH CX
MOV CX,5000H
A4: LOOP A4
POP CX
RET
SEND: PUSH AX
MOV AL,31H
OUT 81H,AL
POP AX
OUT 80H,AL
A3: IN AL,81H
AND AL,01H
JZ A3
RET
CODE ENDS
END START
【实验步骤】
(1)写出程序的流程图。
(2)按图将1、2号机连接起来。
(3)输入程序,并要求2号机用E命令在3000~3009H填入10个字符,
如:30 31 32 33 34 35 36 37 38 39
(4)先运行1号机程序,等待接收数据,然后运行2号机程序,当数据
传送完毕时,1号机显示:R0123456789,用CTRL+C返回监控。
(5)检查1号机的3000~3009H,应和2号机一致。
【心得体会】
通过此次课程设计,对汇编语言的认识,掌握都提高到一个新的水平,熟悉了8088基本指令的使用,掌握了用masm进行编译、连接并模拟运行,对课堂知识起到了很好的补充和巩固。
实验心得有以下几个方面:
1、对程序结构有了更深刻的了解,知道程序运行的基本顺序,对程序的三个部分以及它们之间的连续性理解更加透彻。
2、对汇编语言的运用和认识上:汇编语言的代码虽然简洁,但是程序结构不够清晰,语句使用比较烦,程序可读性不如高级语言。一个简单的操作可能在汇编里面要用好几条语句才能实现。汇编语言的文件操作很难,调试困难,主要是其不具有可视化,内部发生的错误并不可见,而必须通过查看内存来发现。
3、在实验过程中,曾经出现过不同的问题,经过不断的调试、跟踪和修改,部分的问题得到解决,有些问题仍然无法解释,例如在具体操作过程中,使用emu8086调试,曾经遇到程序没有错误,但是却不能实现预期的结果。
4、通过对程序的编写,知道只有亲身动手编写程序、了解程序、读懂程序才能对程序编写过程中出现的问题有所了解,才能更好的解决问题,完善程序的编写。
展开阅读全文