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






