最新微机串口通信内环自检.docx

上传人:b****5 文档编号:7551410 上传时间:2023-01-24 格式:DOCX 页数:16 大小:104.25KB
下载 相关 举报
最新微机串口通信内环自检.docx_第1页
第1页 / 共16页
最新微机串口通信内环自检.docx_第2页
第2页 / 共16页
最新微机串口通信内环自检.docx_第3页
第3页 / 共16页
最新微机串口通信内环自检.docx_第4页
第4页 / 共16页
最新微机串口通信内环自检.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

最新微机串口通信内环自检.docx

《最新微机串口通信内环自检.docx》由会员分享,可在线阅读,更多相关《最新微机串口通信内环自检.docx(16页珍藏版)》请在冰豆网上搜索。

最新微机串口通信内环自检.docx

最新微机串口通信内环自检

 

微机串口通信内环自检

等级评定:

课程设计报告

题目:

微机串口通信内环自检

系(院):

专业:

软件工程

学生姓名:

学号:

起迄日期:

2008年6月8日~6月19日

课程设计地点:

硬件综合室、多媒体技术室

设计评语:

(评阅教师填写)

 

评阅人:

年月日

课程设计说明书

1.课程设计题目:

微机串口通信内环自检

2.课程设计内容:

对PC机辅串口进行内环自动测试,并实现两台PC机之间的通信。

3.课程设计目的:

了解PC机串口的工作原理,掌握PC机串口自动测试的编程方法。

课程设计说明书

4.课程设计要求:

(1)采用查询方式将下列测试电文送到辅串口发送器,经过内部自环接受,显示在屏幕上,通信速率选用4800波特,无校验传输,一帧字符有8个数据位,2个停止位,按下任意键时测试结束。

测试电文如下:

THEQUICKBROWNFOXJUMPSOVERLAZYDOG

(2)用一条串口线将两台计算机直接相连,实现两台计算机近距离通信。

在一台PC机键入字符,从8250的发送端发送给另一台PC机,另一台PC机的8250的接收端接收,然后在屏幕上显示出来。

5.设计详细说明(包括硬件原理图、流程图)

利用微机系统串行口设计串行通信程序的时候,应首先根据课题要求(自发自收、单工通信还是双工通信)和欲采用的编程手段(对端口直接操作还是调用BIOS通信软件),完成RS-232连接线的连接,创建正确的串行通信外部环境。

8250初始化编程的步骤:

1)80H—>通信线控制寄存器,是寻址位为1。

2)除数高8位/低8位->除数寄存器高8位/低8位,确定通信速率。

3)把D7=0的命令字写入通信线控制寄存器,确定一帧数据的格式。

4)设置中断允许命令字:

查询方式,置中断允许命令字为0

中断方式,置中断允许寄存器的相应位为1

5)设置MODEM控制寄存器

中断方式:

D3=1,允许8250送出中断请求信号。

查询方式:

D3=0

内环自检:

D4=1

正常通信:

D4=0

(1)辅串口内环自检

当8250设置为内环自检方式时,8250无法提出中断请求,而且引脚/TRS、/CTS、/DTR、/DSR在芯片内部似乎是被“切断”了。

有鉴于此,当8350设置为内环自检方式的时候,只能采用查询方式,而且只能采用对端口直接操作的编程手段,完成数据的发送和接受。

 

【程序流程图】(直接访问端口寄存器,如图3-19)

(2)双机通信

用串口电缆将两台机算机的COM2连接起来,把计算机设置成空MODEM方式,并为此编制了两个汇编语言程序:

其一为数据发送程序;其二为数据接收程序。

为了确保每个字符发送出去,并且被接收,发送接收双方的波特率设置一致,并且均采取查询方式进行下一步操作。

接收数据程序只需执行一次,即驻留在内存中,此后,只要Ⅱ号计算机有数据要发送,则Ⅰ号机随时接收并显示在屏幕上。

课程设计说明书

5.设计详细说明(包括硬件原理图、流程图)续2

【程序流程图】(如图3-20、3-21、3-22)

 

课程设计说明书

6.程序代码

源程序:

DISPMACROVAR;定义宏,完成字符串的输出

MOVAH,9

MOVDX,OFFSETVAR

INT21H

ENDM

DATASEGMENT

TEXTDB'THEQUICKBROWNFOXJUMPSOVERLAZYDOG',0DH,0AH

LLLEQU$-TEXT;电文长度->LLL

ERRORDB'COMBAD!

',0DH,0AH,'$'

NEQU24DUP('')

MESG1DB0DH,0AH

DBN,'MENU',0DH,0AH

DBN,'-----------------------------',0DH,0AH

DBN,'||',0DH,0AH

DBN,'|1.COM2INTERNALLOOP|',0DH,0AH

DBN,'|2.SHUANGJI|',0DH,0AH

DBN,'|3.EXIT|',0DH,0AH

DBN,'||',0DH,0AH

DBN,'-----------------------------',0DH,0AH

DBN,'CHOICE(1,2,3):

$',0DH,0AH

MESG2DB0DH,0AH

DBN,'MENU',0DH,0AH

DBN,'------------------------------',0DH,0AH

DBN,'||',0DH,0AH

DBN,'|1.SENT|',0DH,0AH

DBN,'|2.RECIEVE|',0DH,0AH

DBN,'||',0DH,0AH

DBN,'------------------------------',0DH,0AH

DBN,'CHOICE(1,2):

$',0DH,0AH

MESG3DB0DH,0AH,'PLEASEINPUTTHEMESSEGE:

',0DH,0AH,'$'

MESG4DB0DH,0AH,'THEMESSAGEYOUINPUTARE:

',0DH,0AH,"$"

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

LAST:

DISPMESG1;显示操作信息,选择是内环自检还是双机通信

MOVAH,01H

INT21H;等待键入一个字符,有回显,响应Ctrl_C

CMPAL,'1'

JENEXT1;如果输入1,转测辅串口内环自检

CMPAL,'2'

JENEXT2;如果输入2,转双机通信

CMPAL,'3'

JNELAST

JMPEXIT;测试结束,退出

;PC机辅串口的内环自检

NEXT1:

CALLI8250;辅串口初始化

AGAIN:

MOVCX,LLL;电文长度→CX

MOVBX,OFFSETTEXT;BX指向TEXT的首地址

SCANT:

MOVAH,01H

INT16H;查询键盘缓冲区

JNZEXIT;有键入,转退出

MOVDX,2FDH

INAL,DX;从DX指向的端口中读一个字节到AL

TESTAL,20H;检查发送保持寄存器是否空闲

JZSCANT;若不空闲,转SCANT输入检查

MOVDX,2F8H;发送保持寄存器辅串口地址->DX

MOVAL,[BX]

OUTDX,AL;将字符送辅串口数据寄存器

MOVSI,0

SCANR:

MOVDX,2FDH

INAL,DX;读取通信线状态字

TESTAL,00011110B;检查有无错误标志

JNZDISPERR;有错,显示出错信息

TESTAL,01H;无错,检查接收数据是否准备好

JNZRECEIVE;准备好,转接收程序

DECSI

JNZSCANR

JMPDISPERR

RECEIVE:

MOVDX,2F8H;接收缓冲器辅串口地址->DX

INAL,DX;接收一个数据

MOVAH,2

MOVDL,AL

INT21H;送屏幕显示一个字符

INCBX

LOOPSCANT;一个电文长度计数

JMPAGAIN;重复内环自检

DISPERR:

DISPERROR;显示出错信息

EXIT:

MOVAH,4CH

INT21H;返回DOS

I8250PROC

MOVAX,00C7H;波特率4800,无校验传输,2个停止位,一桢字符有8个数据位,即为11000111B

MOVDX,1;对辅串口进行初始化

INT14H

MOVDX,2FCH;MODEM控制寄存器辅串口地址->DX

MOVAL,00010000B;D4=1,8250工作在内部自环方式

OUTDX,AL

RET

I8250ENDP

;双机通信

NEXT2:

DISPMESG2;显示操作信息,发送还是接收信息

MOVAH,1

INT21H;等待键入一个字符,有回显,响应Ctrl_C

CMPAL,'1'

JESENDM;当输入为1时,转发送信息

CMPAL,'2'

JERECEM;当接受为2时,转接收信息

JMPNEXT2

SENDM:

;发送信息

MAIN:

;对8250主串口进行初始化。

通信速率选用4800波特,无校验传输,一桢字符有8个数据位,2个停止位

MOVAL,80H

MOVDX,3FBH

OUTDX,AL;80H->通信线控制寄存器,使寻址位为1

MOVDX,3F9H

MOVAL,0

OUTDX,AL;除数高8位->除数寄存器高8位

MOVDX,3F8H

MOVAL,18H

OUTDX,AL;除数低8位->除数寄存器低8位

MOVAL,00000111B;把命令字写入通信线控制寄存器

MOVDX,3FBH

OUTDX,AL

MOVDX,3F9H

MOVAL,0

OUTDX,AL;查询方式,置中断允许命令字为0

WAIT0:

MOVAH,0BH

INT21H;查询有无键盘输入,响应Ctrl_C

CMPAL,0;AL=0时无输入,AL=0FFH时有输入

JEWAIT0;当无输入时,返回等待

MOVAH,0

INT16H;读取键入的一个字符,无回显,响应Ctrl_C,无键入则等待

PUSHAX

MOVAH,02H

MOVDL,AL

INT21H;DOS功能调用,显示一个字符,DL=待显示的ASCII码

POPAX

CALLSENTCHAR

JMPWAIT0

;传输字符

;从本机向对方发送字符串,同时在两个屏幕上都显示

;按回车键,则双方都换行,按ESC键,双方都退出。

SENTCHARPROCNEAR

PUSHAX

PUSHDS

MOVAX,DATA

MOVDS,AX

PUSHBX

PUSHCX

PUSHDX

DISPMESG3;显示提示信息

STATUE:

;读取通信线路状态,查询工作

MOVDX,3FDH

INAL,DX;读通信线状态字

TESTAL,20H;检测发送保持寄存器是否为空

JNZKBOARD;已空,转发送程序

KBOARD:

MOVAH,0BH

INT21H;查询有无键盘输入,响应Ctrl_C

CMPAL,0

JZKBOARD;无字符输入,循环等待

MOVAH,0;有字符输入则读取字符

INT16H;读取键入的一个字符,无回显,响应Ctrl_C

MOVDX,3F8H

OUTDX,AL;将字符写入到发送保持寄存器

CMPAL,1BH;ESC的ASCII码为0011011B

JZDONE1;输入为ESC键,则退出程序返回DOS,同时对方也返回DOS

PUSHAX

MOVAH,02H

MOVDL,AL

INT21H;DOS功能调用,显示输一个字符

POPAX

CMPAL,0DH;继续检查是否是ENTER键,ENTER的ASCII码为0001101B

JNZSTATUE;如果不是ENTER键则继续输入下一个字符

MOVDL,0AH;换行的ASCII码为00001010B

MOVAH,02H

INT21H;显示换行

JMPSTATUE;换行后继续输入下一个字符

DONE1:

POPDX;出栈

POPCX

POPBX

POPDS

POPAX

RET

SENTCHARENDP

RECEM:

;接收信息

START1:

;通信速率选用4800波特,无校验传输,一桢字符有8个数据位,2个停止位

MOVAL,80H

MOVDX,3FBH

OUTDX,AL;80H->通信线控制寄存器,使寻址位为1

MOVDX,3F9H

MOVAL,0

OUTDX,AL;除数高8位->除数寄存器高8位

MOVDX,3F8H

MOVAL,18H

OUTDX,AL;除数低8位->除数寄存器低8位

MOVAL,00000111B

MOVDX,3FBH

OUTDX,AL;把D7=0的命令字写入通信线控制寄存器,确定一帧数据的格式

MOVDX,3F9H

MOVAL,0

OUTDX,AL;查询方式,置中断允许命令字为0

CALLRECEIVE1

MOVAX,4C00H;返回DOS

INT21H

RECEIVE1PROCNEAR

PUSHAX

PUSHBX

PUSHDX

DISPMESG4;屏幕显示信息,接收到得字符串

REC:

MOVDX,3FDH

INAL,DX;读通信线路状态寄存器

TESTAL,1EH;判断接收是否有错

JNZERROR1;有错,则转出错处理

TESTAL,01H;无错,检查接收数据是否准备好

JNZRECEIVE2;准备好转接收程序

JMPREC;继续读取下个数

RECEIVE2:

MOVDX,3F8H

INAL,DX;从输入缓冲寄存器读数据

ANDAL,7FH;传送标准ASCII码

PUSHAX;保存数据

MOVDL,AL

MOVAH,02H

INT21H;屏幕显示该数据

POPAX;恢复数据

CMPAL,1BH;判断是否为ESC键

JZDONE2;如果是则退出DOS

CMPAL,0DH;判断是否为回车符

JNZREC;如果不是ENTER键,则继续循环

MOVDL,0AH

MOVAH,02H

INT21H;输出换行

JMPREC;循环,检测下个数

ERROR1:

MOVDX,3F8H

INAL,DX;读出接收有误的数据,丢掉

MOVDL,'?

'

MOVAH,02H

INT21H;显示问号

JMPREC;继续查询

DONE2:

POPDX

POPBX

POPAX

RET

RECEIVE1ENDP

CODEENDS

ENDSTART

 

课程设计说明书

7.主要参考文献:

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

当前位置:首页 >

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

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