微机串口通信内环自检Word文件下载.docx

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

微机串口通信内环自检Word文件下载.docx

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

微机串口通信内环自检Word文件下载.docx

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

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

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

5)设置MODE控制寄存器

中断方式:

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

查询方式:

D3=0内环自检:

D4=1正常通信:

D4=0

(1)辅串口内环自检

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

有鉴于此,当8350设置为内环自检方式

的时候,只能采用查询方式,而且只能采用对端口直接操作的编程手段,完成数据的发送和接受。

【程序流程图】

(直接访问端口寄存器,如图3-19)

图3-19程序参考流程图

(2)双机通信

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

其一为数据发送程序;

其二为数据接收程序。

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

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

 

开始

保护原寄存器内容

保护原寄存器内

*

显示接收信息

显示提示信

读键盘输入

Y

N

读状态寄存器

接收有错?

1

F

输入缓冲器处读数

接收到数

发送并显示

恢复原寄存器内容

返回

图3-21发送程序

是enter?

显示接收内

—X.

换行

恢复原寄存器内

图3-22接受程序

6.程序代码

源程序:

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

MOVAH,9

MOVDX,OFFSETVAR

INT21H

ENDM

DATASEGMENT

TEXTDB'

THEQUICKBROWNFOXJUMPSOVERLAZYDOG'

0DH,0AHLLLEQU$-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

MENU

-'

|'

1.SENT

2.RECIEVE

CHOICE(1,2):

0DH,0A卜

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旨向的端口中读一个字节到ALTESTAL,20H;

检查发送保持寄存器是否空闲

JZSCANT;

若不空闲,转SCANT俞入检查MOVDX,2F8H;

发送保持寄存器辅串口地址->

DX

MOVAL,[BX]

OUTDX,AL;

将字符送辅串口数据寄存器

MOVSI,0

SCANR:

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

返回DOS

18250PROC

MOVXX,00C7H;

波特率4800,无校验传输,2个停止位,一桢字符有

8个数据位,即为11000111B

MOVDX,1;

对辅串口进行初始化

INT14H

MOVDX,2FCH;

MODEjM制寄存器辅串口地址->

MOVAL,00010000B;

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

OUTDX,AL

RET

I8250ENDP

双机通信

NEXT2:

DISPMESG2;

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

MOVAH,1

JESENDM;

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

2'

JERECEM;

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

JMPNEXT2

SENDM:

发送信息

MAIN:

对8250主串口进行初始化。

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

MOVAL,80H

MOVDX,3FBH

80H->

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

MOVDX,3F9H

MOVAL,0

除数高8位->

除数寄存器高8位

MOVDX,3F8H

MOVAL,18H

除数低8位->

除数寄存器低8位

MOVAL,00000111B;

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

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

WAIT0:

MOVAH,0BH

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

CMPAL,0;

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

JEWAIT0;

当无输入时,返回等待

MOVAH,0

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

PUSHAX

MOVAH,02H

MOVDL,AL

DOS

功能调用,显示一个字符,DL彳寺显示的ASCII码

POPAX

CALLSENTCHAR

JMPWAIT0

传输字符

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

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

SENTCHARPROC

NEAR

PUSHDS

PUSHBX

PUSHCX

PUSHDX

DISPMESG3

显示提示信息

STATUE:

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

MOVDX,3FDH

读通信线状态字

TESTAL,20H

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

JNZKBOARD;

已空,转发送程序

KBOARD:

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

CMPAL,0

JZKBOARD;

无字符输入,循环等待

MOVAH,0;

有字符输入则读取字符

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

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

CMPAL,1BH;

ESC的ASCII码为0011011B

JZDONE1;

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

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

CMPAL,0DH;

继续检查是否是ENTER®

,ENTER勺ASCII码为0001101B

JNZSTATUE;

如果不是ENTER!

则继续输入下一个字符

MOVDL,0AH;

换行的ASCII码为00001010B

显示换行

JMPSTATUE;

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

DONE1:

POPDX;

出栈

POPCX

POPBX

POPDS

SENTCHARENDP

RECEM:

接收信息

START1:

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

止位

80H

->

除数高8位->

除数低8位->

MOVAL,00000111B

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

格式

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

CALLRECEIVE1

MOVAX,4C00H

返回DOS

RECEIVE1PROCNEAR

DISPMESG4;

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

REC:

读通信线路状态寄存器

TESTAL,1EH;

判断接收是否有错

JNZERROR1

有错,则转出错处理

TESTAL,01H

JNZRECEIVE2

准备好转接收程序

JMPREC;

继续读取下个数

RECEIVE2:

从输入缓冲寄存器读数据

ANDAL,7FH;

传送标准ASCII码

PUSHAX;

保存数据

屏幕显示该数据

POPAX;

恢复数据

判断是否为ESC键

JZDONE2;

如果是则退出DOS

CMPAL,0DH

判断是否为回车符

JNZREC;

如果不是ENTER®

,则继续循环

MOVDL,0AH

输出换行

循环,检测下个数

ERROR1:

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

MOVDL,'

?

显示问号

继续查询

DONE2:

POPDX

RECEIVE1ENDP

CODEENDS

ENDSTART

7.主要参考文献:

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

当前位置:首页 > 解决方案 > 工作计划

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

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