接口与通信课程设计双击串行通信_第1页
接口与通信课程设计双击串行通信_第2页
接口与通信课程设计双击串行通信_第3页
接口与通信课程设计双击串行通信_第4页
接口与通信课程设计双击串行通信_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课 程 设 计 课程名称_接口与通信_题目名称_双击串行通信 _学生学院_计算机学院_专业班级_计算机科学与技术2班学 号_学生姓名_指导教师_200 年 月 日一. 课程设计的内容编写程序,实现双机串行通信,能正确进行文件或字符的发送和接收。二. 相关技术1、8250串行通信初始化及收发数据2、汇编语言3、虚拟串口软件及串口测试软件的使用4、masm和link编译器的使用三. 方案设计根据8250串行口的发送接收原理,在程序开始时一定要先对8250进行初始化,设置相应的参数,使8250串行口工作在合理的工作状态。进行相关协议的设置即什么时候发送,什么时候接收,接收跟发送通过什么来进行响应,保

2、证数据传送的正确性。我设计的程序所采用的是查询机制,虽然效率不及中断机制高,但是简单易行。 在代码阶段,虽然汇编的可读性和结构性都不是很好,但是我还是希望我的代码能做到清晰易读,所以我采取了两种方案a) 如果需要传递参数,则使用宏使代码结构化b) 如果不需要参数,则使用子程序,使代码结构化的同时,调试简单程序设计如以下流程图1、 程序总流程图2、 发送输入字符流程图3、 发送一个字符流程图4、 接收字符流程图 5、 接收一个字符流程图四. 实现与测试1、实现的源码:escape equ 1bh;定义堆栈stacksg segment stack s dw 64 dup(?)stacksg en

3、dsdata segmentchoice db ?parm db ?,$com dw ?temp dw ?com1 dw 3f0hcom2 dw 2f0hcom3 dw 3e0hcom4 dw 2e0htop db 0dh,0ah,-db 0dh,0ah, computer serial communication -colindb 0dh,0ah,-optmenu db 0dh,0ah, 1.send message db 0dh,0ah, 2.recive message db 0dh,0ah, 3.exit select_str db 0dh,0ah,please input your

4、choice:,0dh,0ah,$send_tip db 0dh,0ah,please input your message(esc to exit):,0dh,0ah,$rev_tip db 0dh,0ah,your rev message:,0dh,0ah,$mainmenu db 0dh,0ah,select com: db 0dh,0ah, 1.com1 db 0dh,0ah, 2.com2 db 0dh,0ah, 3.com3 db 0dh,0ah, 4.com4 db 0dh,0ah, 5.exit db 0dh,0ah,please input your choice:$data

5、 ends;定义宏; 设置显示颜色(4字节有效)setclr macro color push cx push bx push ax mov ah, 9 mov al, mov bh, 0 mov bl, color mov cx, 4 int 10h pop ax pop bx pop cx endm ;回显一个字符 puts macro s push dx push ax mov ah, 9 lea dx, s int 21h pop ax pop dx endm;输出字符串output macro s push dx push ax mov ah, 9 lea dx, s int 21h

6、 pop ax pop dxendm;将最高位清零lcrdl macro push dx mov al,1fh mov dx,com mov temp,dx add temp,0bh mov dx,temp out dx, al pop dx endm;选择input_select macropush axpush dx mov ah, 0ch mov al, 06h mov dl, 0ffh int 21h mov ah,01h int 21h mov parm,al pop dx pop axendmcode segmentmain proc far assume cs:code,ds:d

7、atastart: mov ax,datamov ds,axoutput mainmenuinput_selectmov al,parmcmp al,32hjl selectcom1je selectcom2cmp al,34hjl selectcom3je selectcom4jg prooverselectcom1: mov ax,com1mov com,axjmp initcselectcom2:mov ax,com2mov com,axjmp initcselectcom3:mov ax,com3mov com,axjmp initcselectcom4:mov ax,com4mov

8、com,axjmp initcinitc: call init_comprostart: output topinput_selectmov al,parm cmp al,32h jl call_send je call_rev jg proovercall_send: call near ptr send_megjmp prostartcall_rev: call near ptr rev_meg jmp prostartproover: mov ax, 4c00hint 21hmain endp ;初始化端口init_com proc nearpush axpush dxmov al,80

9、hmov dx,commov temp,dxadd temp,0bhmov dx,tempout dx,almov al,0chmov dx,commov temp,dxadd temp,08hmov dx,tempout dx,almov al,0mov dx,commov temp,dxadd temp,09hmov dx,tempout dx,almov al,00001110b ;7bit for data 2bit for stop,hava testmov dx,commov temp,dxadd temp,0bhmov dx,tempout dx,almov al,0fhmov

10、dx,commov temp,dxadd temp,09hmov dx,tempout dx,almov al,0bhmov dx,commov temp,dxadd temp,0chmov dx,tempout dx,alpop dxpop axretinit_com endp ;发送一个字符 sendch proc near setclr 0ch mov parm, al ; puts parm ; 显示字符 lcrdlmov dx,commov temp,dx add temp,0dh mov dx, temp ; 状态口send: in al, dx ; 读状态 test al, 20

11、h ; 发送就绪? jz sendmov dx,commov temp,dx add temp,08h mov dx, temp ; 数据口 mov al, parm out dx, al ret sendch endp ; 从串口接收一个字符 recvch proc near lcrdlmov dx,commov temp,dx add temp,0dh mov dx, temp ; 状态口 in al, dx ; 读状态 test al, 01h ; 收到数据? jz norecvmov dx,commov temp,dx add temp,08h mov dx, temp ; 数据口 i

12、n al, dx setclr 0ah mov parm, al ; 显示 puts parmnorecv: ret ; nop recvch endp;发送信息send_meg proc near push ax push dx output send_tip jmp getkeykeyrd: mov ah, 0ch ; 清除键盘缓冲区 mov al, 06h mov dl, 0ffh int 21hgetkey: mov ah, 1 ; 读取键盘输入 int 21h cmp al,escape ; esc键结束发送 je oversend cmp al, 32 ; 排除不可见字符 jl k

13、eyrd cmp al,126 jg keyrd call sendch jmp keyrd oversend: call sendch pop dx pop ax ret send_meg endp;接收信息rev_meg proc near push ax push dx output rev_tiprev: call recvch cmp al, escape je overrev jmp revoverrev: pop dx pop ax ret rev_meg endpcode endsend start2、测试:a)创建虚拟端口b)选择端口c) 选择操作d) 发送接收数据 e) 发

14、送结束f)退出 选择3,正常退出五分析与总结 本次设计为用汇编编写程序,实现双机串行通信,能正确进行文件或字符的发送和接收。万事开头难,在设计开始时,完全不知道如果下手。只能硬着头皮做下去,其中遇到的问题以及解决方法如下:1、 第一步当然是先做界面。但是因为当时汇编没学好,连编译器怎么用都忘了。无奈之下,去百度文库下了一份msam5.0的教程,重新学习了msam的编译、执行、调试。而在编写界面代码之时,才真正受了汇编没学好的苦。拿着汇编的课本,不断地查指令和dos系统功能调用表,程序不断出现错误,比如忘了在字符串结束处加入$。经过一个晚上的奋斗,终于初步解决了汇编语言问题。不得不佩服韩顺平老师

15、的一句话:“计算机是在做中学的学科”。2、 第二步是把所写的界面代码结构化。这是在看王爽的汇编这本书中得到的启示。不过在结构化方面,我不知道应该选择宏还是选择子程序。虽然我倾向于子程序,不过宏在参数传递部分很像c语言,所以我一开始还是选择了宏。这是我噩梦的开始,因为在调试的时候,编译器无法确定具体的错误位置,使得调试非常麻烦。不得已,我将一大部分较为复杂的宏改为子程序。3、 第三步是发送数据。发送数据之前当然是要对串口进行初始化。这一部分我借鉴了书中的程序,还算成功。可是在发送数据的时候我蒙了,完全不知道怎么做,把接口与通信的课本中提到8250的知识再看了一遍,发现以前懵懂的地方都清晰了好多,再把一些疑问往百度一贴,大概明白了设计的思路。就是在一对互连的的端口中,一端发送一端接收,主要用in和out指令,输入输出的地址都是规定好的。在一开始可以用虚拟串口软件虚拟两个互连的端口。本着这种思路,我开始画程序流程图,并且将代码结构写出。4、 第四步是测试发送数据是否成功。因为没有写接收的代码,所以测试方面,我用了一个串口测试软件,将其波特率,数据位,停止位,校验位等设置好,测试是否能接收到。当然错误是避免不了的,一开始发送时,系统总是出现错误提示,而程序就直接挂了。怀疑是串口问题,在用其它串口的时候发现每次都要修改代码重新

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论