最新微机串口通信内环自检Word文档格式.docx

上传人:b****5 文档编号:20665012 上传时间:2023-01-24 格式:DOCX 页数:16 大小:104.25KB
下载 相关 举报
最新微机串口通信内环自检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

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

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

||'

|1.COM2INTERNALLOOP|'

|2.SHUANGJI|'

|3.EXIT|'

||'

CHOICE(1,2,3):

$'

MESG2DB0DH,0AH

DBN,'

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

|1.SENT|'

|2.RECIEVE|'

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

CHOICE(1,2):

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,转测辅串口内环自检

2'

JENEXT2;

如果输入2,转双机通信

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;

接收缓冲器辅串口地址->

接收一个数据

MOVAH,2

MOVDL,AL

送屏幕显示一个字符

INCBX

LOOPSCANT;

一个电文长度计数

JMPAGAIN;

重复内环自检

DISPERR:

DISPERROR;

显示出错信息

EXIT:

MOVAH,4CH

INT21H;

返回DOS

I8250PROC

MOVAX,00C7H;

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

MOVDX,1;

对辅串口进行初始化

INT14H

MOVDX,2FCH;

MODEM控制寄存器辅串口地址->

MOVAL,00010000B;

D4=1,8250工作在内部自环方式

OUTDX,AL

RET

I8250ENDP

双机通信

NEXT2:

DISPMESG2;

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

MOVAH,1

JESENDM;

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

JERECEM;

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

JMPNEXT2

SENDM:

;

发送信息

MAIN:

对8250主串口进行初始化。

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

MOVAL,80H

MOVDX,3FBH

OUTDX,AL;

80H->

通信线控制寄存器,使寻址位为1

MOVDX,3F9H

MOVAL,0

除数高8位->

除数寄存器高8位

MOVDX,3F8H

MOVAL,18H

除数低8位->

除数寄存器低8位

MOVAL,00000111B;

把命令字写入通信线控制寄存器

MOVDX,3FBH

OUTDX,AL

MOVDX,3F9H

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

WAIT0:

MOVAH,0BH

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

CMPAL,0;

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

JEWAIT0;

当无输入时,返回等待

MOVAH,0

INT16H;

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

PUSHAX

MOVAH,02H

MOVDL,AL

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

POPAX

CALLSENTCHAR

JMPWAIT0

传输字符

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

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

SENTCHARPROCNEAR

PUSHDS

PUSHBX

PUSHCX

PUSHDX

DISPMESG3;

显示提示信息

STATUE:

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

MOVDX,3FDH

INAL,DX;

读通信线状态字

检测发送保持寄存器是否为空

JNZKBOARD;

已空,转发送程序

KBOARD:

CMPAL,0

JZKBOARD;

无字符输入,循环等待

MOVAH,0;

有字符输入则读取字符

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

MOVDX,3F8H

将字符写入到发送保持寄存器

CMPAL,1BH;

ESC的ASCII码为0011011B

JZDONE1;

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

PUSHAX

MOVDL,AL

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

POPAX

CMPAL,0DH;

继续检查是否是ENTER键,ENTER的ASCII码为0001101B

JNZSTATUE;

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

MOVDL,0AH;

换行的ASCII码为00001010B

MOVAH,02H

显示换行

JMPSTATUE;

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

DONE1:

POPDX;

出栈

POPCX

POPBX

POPDS

RET

SENTCHARENDP

RECEM:

接收信息

START1:

MOVAL,80H

除数寄存器低8位

MOVAL,00000111B

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

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

CALLRECEIVE1

MOVAX,4C00H;

RECEIVE1PROCNEAR

PUSHDX

DISPMESG4;

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

REC:

读通信线路状态寄存器

TESTAL,1EH;

判断接收是否有错

JNZERROR1;

有错,则转出错处理

TESTAL,01H;

JNZRECEIVE2;

准备好转接收程序

JMPREC;

继续读取下个数

RECEIVE2:

从输入缓冲寄存器读数据

ANDAL,7FH;

传送标准ASCII码

PUSHAX;

保存数据

屏幕显示该数据

POPAX;

恢复数据

判断是否为ESC键

JZDONE2;

如果是则退出DOS

判断是否为回车符

JNZREC;

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

MOVDL,0AH

输出换行

循环,检测下个数

ERROR1:

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

MOVDL,'

?

显示问号

继续查询

DONE2:

POPDX

RECEIVE1ENDP

CODEENDS

ENDSTART

7.主要参考文献:

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

当前位置:首页 >

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

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