最新微机串口通信内环自检.docx
- 文档编号:7551410
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:16
- 大小:104.25KB
最新微机串口通信内环自检.docx
《最新微机串口通信内环自检.docx》由会员分享,可在线阅读,更多相关《最新微机串口通信内环自检.docx(16页珍藏版)》请在冰豆网上搜索。
最新微机串口通信内环自检
微机串口通信内环自检
等级评定:
课程设计报告
题目:
微机串口通信内环自检
系(院):
专业:
软件工程
学生姓名:
学号:
起迄日期:
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.主要参考文献:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 微机 串口 通信 内环 自检