串口通信程序设计.docx

上传人:b****1 文档编号:2441625 上传时间:2022-10-29 格式:DOCX 页数:12 大小:116.42KB
下载 相关 举报
串口通信程序设计.docx_第1页
第1页 / 共12页
串口通信程序设计.docx_第2页
第2页 / 共12页
串口通信程序设计.docx_第3页
第3页 / 共12页
串口通信程序设计.docx_第4页
第4页 / 共12页
串口通信程序设计.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

串口通信程序设计.docx

《串口通信程序设计.docx》由会员分享,可在线阅读,更多相关《串口通信程序设计.docx(12页珍藏版)》请在冰豆网上搜索。

串口通信程序设计.docx

串口通信程序设计

1基本理论基础

1.1串行通信的方式

通信的基本方式可以分为并行通信和串行通信两种。

串行通信时数据用一根传输线逐为顺序传送。

串行通信又分为两种类型:

串行异步通信和串行同步通信。

串行异步通信是指通信中两个字符之间的时间间隔是不固定的,而在一个字符内各位的时间间隔是固定的。

同步通信时指在约定的数据通信数率下,发送方和接收方的时钟信号频率和相位始终保持一致,通信双方发送数据和接收数据具有完全一致的定时关系。

1.2串行通信数据传送方式

单工传送:

单工传送时指在通信时只能由一方发送数据,另一方接收数据的通信方式。

半双工传送:

指在通信时双方都能够接收或者发送,但是不能够同时接收和发送的通信方式。

全双工传送:

通信双方之间有两条通路,发送信息和接收信息可以同时进行。

1.3串行通信接口标准RS-232C

RS-232C标准是美国EIA于1969年公布的通信协议。

它的作用是实现不同的厂商的计算机和各种外围设备进行串行连接。

2.INS8250

2.1INS8250的外部引脚和结构

INS8250是通用异步收发器UART,用作异步通信接口电路。

INS8250的引脚信号基本上可以分为两大类:

与CPU系统总线相连的信号线和与通信设备MODEM连接的信号线。

2.2INS的内部寄存器及其编程方法

2.2.1波特率因子寄存器(DLL/DLH)

波特率因子寄存器是用来控制串行数据传输的数率。

波特率因子=1843200÷(分频值×16)内部设置波特率因子寄存器DLL/DLH,在初始化时将选用的波特率因子值的高低、低字节分别放入DLH和DLL中。

若设定通信波特率为1200bps,波特率因子寄存器的初始化程序为:

MOVDX,3FBH

MOVAL,80H

OUTDX,AL

MOVDX,3F8H

MOVAL,60H

OUTDX,AL

MOVDX,3F9H

MOVAL,00H

OUTDX,AL

2.2.2通信线路控制寄存器(LCR)

通信线路控制寄存器LRC主要用来指定异步通信数据格式,即字符长度、停止位位数、奇偶校验。

LRC的控制字如下

D7

D6

D5

D4

D3

D2

D1

D0

DLAB

SB

SP

EPS

PEN

STB

WLS1

WLS0

2.2.3通信线路状态寄存器

通信线路状态寄存器用来表示数据接收和数据发送时8250的状态。

控制字如下

D7

D6

D5

D4

D3

D2

D1

D0

0

TSRE

THRE

BT

FE

PE

OE

DR

2.2.4中断允许寄存器

中断源提出的中断请求被允许还是被禁止是由允许中断寄存器控制。

控制字格式如下

D7

D6

D5

D4

D3

D2

D1

D0

0

0

0

0

EMSI

ELSI

ETBEI

ERBFI

2.2.5中断识别寄存器

为了具体识别时哪种事件引起的中断,直到该中断请求被CPU响应并服务之后,才能接收其他的中断请求。

该寄存器为只读寄存器,内容格式为

D7

D6

D5

D4

D3

D2

D1

D0

0

0

0

0

0

ID2

ID1

IP

2.2.6调制解调控制寄存器

MODEM控制寄存器用来设置对MODEM的联络控制信号和芯片自检,寄存器的各位定义如下:

D7

D6

D5

D4

D3

D2

D1

D0

0

0

0

LOOP

OUT2

OUT1

RTS

DTR

2.2.7MODEM状态寄存器

Modem状态寄存器用来检测和记录来自Modem的联络信号及其状态变化。

此寄存器的各位定义为:

D7

D6

D5

D4

D3

D2

D1

D0

RLSD

RI

DSR

CTS

△RLSD

△RI

△DSR

△CTS

2.2.8发送保持寄存器和接收缓冲寄存器

发送时,CPU首先将待发送的字符写到8250的发送保持寄存器THR中,然后进入发送移位寄存器,在发送始终的作用下,从SOUT引脚输出。

一旦THR的内容送到发送移位寄存器TSR后,THR就变空,同时将LSR的THRE位置“1”,产生中断请求,要求CPU发送下一个字符。

CPU向THR写入下一个字符后,THRE位自动清“0”。

如此重复,直到全部数据发送完毕。

接收时,串行数据在接收时钟的作用下,从SIN引脚先输入到移位寄存器RSR,然后由RSR并行输入到接收缓冲寄存器RBR,一旦RBR变满,将LSR的DR位置“1”,产生中断请求,要求CPU读取数据字符。

CPU从RBR读取该字符后,DR位自动清“0”。

如此重复,直到所有的数据接收完毕。

2.3INS8250的各寄存器的地址

寄存器

COM1端口下的地址

COM2端口下的地址

THR

3F8H

2F8H

RBR

3F8H

2F8H

LSB

3F8H

2F8H

MSB

3F9H1

2F9H1

IER

3F9H

2F9H

IIR

3FAH

2FAH

LCR

3FBH

2FBH

MCR

3FCH

2FCH

LSR

3FDH

2FDH

MSR

3FEH

2FEH

3程序设计

3.1程序设计思路

根据设计要求,要实现通过串口进行通信,就必须有一个发送端和一个接收端,因此要编写两个程序,在发送端编写发送程序,在接受端编写接收程序。

发送PC机和接收PC机通过RS-232C的3根信号线(TXD、RXD、GND)进行相连。

我决定采用查询方式编写发送程序和接收程序。

编写接收程序的时候,首先要初始化段寄存器,设置发送缓冲区指针。

然后初始化8250,通过初始化8250来设置串口的参数。

再根据线路状态寄存器的内容,测试发送保持寄存器是否为空,如果不为空,继续读线状态寄存器的内容,判断发送保持寄存器是否为空,如果为空的话,读取按键字符并显示和发送它。

我事先规定当输入某一个字符的时候发送结束,这时候我就要判断按键是否为该字符,是该字符的时候结束程序。

编写接收程序的时候首先要设置接收缓冲区,设置接收错信息,初始段寄存器,设置接收缓冲寄存器地址指针然后初始化8250,初始设置和接收端的保持一置。

以上完成后开始接收,在屏幕上显示接收开始。

然后读线状态寄存器,判断是否接收错,在屏幕上显示接收错误,继续读线状态寄存器,如果接收无误,则测试接收数据是否准备好了,为准备好则循环测试,准备好了则接收字符。

判断接收的字符是否为规定的结束字符,如果是结束程序,如果不是显示字符。

两台机器的连接图如下。

3.2程序流程图

3.2.1发送端程序流程图

3.2.2接收端的程序流程图

3.3具体的程序

3.3.1发送端的程序代码

DATASEGMENT

DISPDB'TRANSMISSIONSTART:

',0AH,0DH,'$'

DATAENDS

STACKSEGMENTPARASTACK'STACK'

DB200DUP(0)

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

START:

MOVAX,DATA

MOVDS,AX

MOVAX,STACK

MOVSS,AX

MOVDX,3FBH;置DLAB=1

MOVAL,80H

OUTDX,AL

MOVDX,3F8H;置波特率因子寄存器

MOVAL,60H;波特率因子低字节

OUTDX,AL

MOVDX,3F9H

MOVAL,0;波特率因子高字节

OUTDX,AL

MOVDX,3FBH;置线路控制寄存器

MOVAL,0AH;数据位7位,停止位1位、奇校验

OUTDX,AL

MOVDX,3FCH;置MODEM控制寄存器

MOVAL,02H;禁止中断

OUTDX,AL

MOVDX,3F9H;置中断允许寄存器

MOVAL,0;屏蔽所有中断

OUTDX,AL

MOVDX,OFFSETDISP;显示发送提示信息

MOVAH,9

INT21H

LOP:

MOVDX,3FDH;读线路状态寄存器

INAL,DX

TESTAL,20H;测试发送保持寄存器

JZLOP;不空,则循环测试

MOVAH,1;读取按键字符并显示

INT21H

MOVDX,3F8H;发送该字符

OUTDX,AL

CMPAL,'P;判断按下的字符是否为P

JZOVER;是,则结束

JMPLOP;不是继续循环

OVER:

MOVAH,4CH;返回DOS

INT21H

CODEENDS

ENDSTART

3.3.2接收端的程序源代码

DATASEGMENT

RBUFDB30DUP(0)

DISPDB'RECEIVESTART:

',0AH,0DH,'$'

ERRORDB'RECEIVEERRO!

',0AH,0DH,'$'

DATAENDS

STACKSEGMENTPARASTACK'STACK'

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

START:

MOVAX,DATA

MOVDS,AX

MOVAX,STACK

MOVSS,AX

LEASI,RBUF;置接收缓冲区地址指针

MOVDX,3FBH;置DLAB=1

MOVAL,80H

OUTDX,AL

MOVDX,3F8H;置波特率因子寄存器

MOVAL,60H;波特率因子低字节

OUTDX,AL

MOVDX,3F9H

MOVAL,0;波特率因子高字节

OUTDX,AL

MOVDX,3FBH;置通信线路控制寄存器

MOVAL,0AH;数据位7位、停止位1位、奇校验

OUTDX,AL

MOVDX,3FCH;置MODEM控制寄存器

MOVAL,02;禁止中断

OUTDX,AL

MOVDX,3F9H;置中断允许寄存器

MOVAL,0;屏蔽所有中断

OUTDX,AL

MOVDX,OFFSETDISP;显示接收提示信息

MOVAH,9

INT21H

MOVDX,3F8H;读接收缓冲器内容,不处理

INAL,DX

LOP:

MOVDX,3FDH;读线路状态寄存器

INAL,DX

TESTAL,1EH;测试接收错误?

JNZER;有,转错误显示

TESTAL,01H;无,则测试接收数据准备好

JZLOP;未准备好则循环测试

MOVDX,3F8H

INAL,DX

ANDAL,7FH

CMPAL,'P;判断接收结束吗?

JZOVER;结束转OVER

MOV[SI],AL;未结束则存入缓冲区

INCSI

MOVDL,AL;显示该字符

MOVAH,02

INT21H

JMPLOP

ER:

MOVDX,3F8H;清标志位

INAL,DX

MOVDX,OFFSETERROR;显示错误信息

MOVAH,9

INT21H

JMPLOP

OVER:

MOVDL,AL

MOVAH,2

INT21H

MOVAH,4CH;返回DOS

INT21H

CODE

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

当前位置:首页 > PPT模板 > 动物植物

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

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