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