接口与通信课程设计Word文档格式.docx

上传人:b****5 文档编号:19216153 上传时间:2023-01-04 格式:DOCX 页数:16 大小:937.70KB
下载 相关 举报
接口与通信课程设计Word文档格式.docx_第1页
第1页 / 共16页
接口与通信课程设计Word文档格式.docx_第2页
第2页 / 共16页
接口与通信课程设计Word文档格式.docx_第3页
第3页 / 共16页
接口与通信课程设计Word文档格式.docx_第4页
第4页 / 共16页
接口与通信课程设计Word文档格式.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

接口与通信课程设计Word文档格式.docx

《接口与通信课程设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《接口与通信课程设计Word文档格式.docx(16页珍藏版)》请在冰豆网上搜索。

接口与通信课程设计Word文档格式.docx

5、接收一个字符流程图

四.实现与测试

1、实现的源码:

ESCAPEEQU1BH

;

定义堆栈

STACKSGSEGMENTSTACK'

S'

DW64DUP(?

STACKSGENDS

DATASEGMENT

CHOICEDB?

ParmDB?

'

$'

COMDW?

TEMPDW?

COM1DW3f0H

COM2DW2f0H

COM3DW3e0H

COM4DW2e0H

TOPDB0DH,0AH,'

------------------------------------------------------------'

DB0DH,0AH,'

ComputerSerialCommunication------Colin'

-----------------------------------------------------------'

OPTMENUDB0DH,0AH,'

1.SendMessage'

2.ReciveMessage'

3.EXIT'

SELECT_STRDB0DH,0AH,'

Pleaseinputyourchoice:

'

0DH,0AH,'

SEND_TIPDB0DH,0AH,'

Pleaseinputyourmessage(esctoexit):

REV_TIPDB0DH,0AH,'

Yourrevmessage:

MAINMENUDB0DH,0AH,'

SelectCOM:

'

1.COM1'

2.COM2'

3.COM3'

4.COM4'

5.EXIT'

DATAENDS

;

定义宏

设置显示颜色(4字节有效)

SETCLRMACROCOLOR

PUSHCX

PUSHBX

PUSHAX

MOVAH,9

MOVAL,'

MOVBH,0

MOVBL,COLOR

MOVCX,4

INT10H

POPAX

POPBX

POPCX

ENDM

;

回显一个字符

PUTSMACROS

PUSHDX

LEADX,S

INT21H

POPDX

输出字符串

OUTPUTMACROS

PUSHDX

PUSHAX

MOVAH,9

LEADX,S

INT21H

POPAX

POPDX

ENDM

将最高位清零

LCRDLMACRO

MOVAL,1FH

MOVDX,COM

MOVTEMP,DX

ADDTEMP,0BH

MOVDX,TEMP

OUTDX,AL

选择

INPUT_SELECTMACRO

MOVAH,0CH

MOVAL,06H

MOVDL,0FFH

MOVAH,01H

MOVParm,AL

CODESEGMENT

MAINPROCFAR

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

OUTPUTMAINMENU

INPUT_SELECT

MOVAL,[Parm]

CMPAL,32H

JLSELECTCOM1

JESELECTCOM2

CMPAL,34H

JLSELECTCOM3

JESELECTCOM4

JGPROOVER

SELECTCOM1:

MOVAX,COM1

MOVCOM,AX

JMPINITC

SELECTCOM2:

MOVAX,COM2

SELECTCOM3:

MOVAX,COM3

SELECTCOM4:

MOVAX,COM4

INITC:

CALLINIT_COM

PROSTART:

OUTPUTTOP

CMPAL,32H

JLCALL_SEND

JECALL_REV

JGPROOVER

CALL_SEND:

CALLNEARPTRSEND_MEG

JMPPROSTART

CALL_REV:

CALLNEARPTRREV_MEG

JMPPROSTART

PROOVER:

MOVAX,4C00H

MAINENDP

初始化端口

INIT_COMPROCNEAR

MOVAL,80H

MOVDX,COM

MOVTEMP,DX

ADDTEMP,0BH

MOVDX,TEMP

OUTDX,AL

MOVAL,0CH

ADDTEMP,08H

MOVAL,0

ADDTEMP,09H

MOVAL,00001110B;

7bitfordata2bitforstop,havatest

MOVAL,0FH

MOVAL,0BH

ADDTEMP,0CH

RET

INIT_COMENDP

发送一个字符

SENDCHPROCNEAR

SETCLR0CH

MOVParm,AL

PUTSParm;

显示[字符]

LCRDL

ADDTEMP,0DH

MOVDX,TEMP;

状态口

SEND:

INAL,DX;

读状态

TESTAL,20H;

发送就绪?

JZSEND

ADDTEMP,08H

数据口

MOVAL,[Parm]

RET

SENDCHENDP

从串口接收一个字符

RECVCHPROCNEAR

TESTAL,01H;

收到数据?

JZNORECV

INAL,DX

SETCLR0AH

MOVParm,AL;

显示<

字符>

PUTSParm

NORECV:

RET;

NOP

RECVCHENDP

发送信息

SEND_MEGPROCNEAR

OUTPUTSEND_TIP

JMPGETKEY

KEYRD:

MOVAH,0CH;

清除键盘缓冲区

MOVAL,06H

MOVDL,0FFH

GETKEY:

MOVAH,1;

读取键盘输入

CMPAL,ESCAPE;

ESC键结束发送

JEOVERSEND

CMPAL,32;

排除不可见字符

JLKEYRD

CMPAL,126

JGKEYRD

CALLSENDCH

JMPKEYRD

OVERSEND:

CALLSENDCH

RET

SEND_MEGENDP

接收信息

REV_MEGPROCNEAR

OUTPUTREV_TIP

REV:

CALLRECVCH

CMPAL,ESCAPE

JEOVERREV

JMPREV

OVERREV:

REV_MEGENDP

CODEENDS

ENDSTART

2、测试:

a)创建虚拟端口

b)选择端口

c)选择操作

d)发送接收数据

e)发送结束

f)退出

选择3,正常退出

五.分析与总结

本次设计为用汇编编写程序,实现双机串行通信,能正确进行文件或字符的发送和接收。

万事开头难,在设计开始时,完全不知道如果下手。

只能硬着头皮做下去,其中遇到的问题以及解决方法如下:

1、第一步当然是先做界面。

但是因为当时汇编没学好,连编译器怎么用都忘了。

无奈之下,去XX文库下了一份msam5.0的教程,重新学习了msam的编译、执行、调试。

而在编写界面代码之时,才真正受了汇编没学好的苦。

拿着汇编的课本,不断地查指令和DOS系统功能调用表,程序不断出现错误,比如忘了在字符串结束处加入’$’。

经过一个晚上的奋斗,终于初步解决了汇编语言问题。

不得不佩服韩顺平老师的一句话:

“计算机是在做中学的学科”。

2、第二步是把所写的界面代码结构化。

这是在看《王爽的汇编》这本书中得到的启示。

不过在结构化方面,我不知道应该选择宏还是选择子程序。

虽然我倾向于子程序,不过宏在参数传递部分很像C语言,所以我一开始还是选择了宏。

这是我噩梦的开始,因为在调试的时候,编译器无法确定具体的错误位置,使得调试非常麻烦。

不得已,我将一大部分较为复杂的宏改为子程序。

3、第三步是发送数据。

发送数据之前当然是要对串口进行初始化。

这一部分我借鉴了书中的程序,还算成功。

可是在发送数据的时候我蒙了,完全不知道怎么做,把接口与通信的课本中提到8250的知识再看了一遍,发现以前懵懂的地方都清晰了好多,再把一些疑问往XX一贴,大概明白了设计的思路。

就是在一对互连的的端口中,一端发送一端接收,主要用in和out指令,输入输出的地址都是规定好的。

在一开始可以用虚拟串口软件虚拟两个互连的端口。

本着这种思路,我开始画程序流程图,并且将代码结构写出。

4、第四步是测试发送数据是否成功。

因为没有写接收的代码,所以测试方面,我用了一个串口测试软件,将其波特率,数据位,停止位,校验位等设置好,测试是否能接收到。

当然错误是避免不了的,一开始发送时,系统总是出现错误提示,而程序就直接挂了。

怀疑是串口问题,在用其它串口的时候发现每次都要修改代码重新编译,非常麻烦。

所以在程序入口处,加入了串口选择功能。

最后在单步执行的时候发现,是高位清零的宏中,串口地址赋值错误。

改正后,终于发送成功了。

5、第五步是接收数据。

有了前面的经验,这时显得比较轻松,出现的一些代码问题都能解决。

每次的课程设计都是对自己能力的升华。

这次课程设计,然后有了挑战苦难的信心,本来一头雾水的设计,通过一步步做下来,竟然解决了,当时的成就感不言而喻。

而在对于端口的理解和汇编语言的掌握程度,毫无疑问地前进了一大步!

附参考书目

[1]余永权,汤荣江《计算机接口与通信》

[2]王爽《王爽的汇编》

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1