当前位置:文档之家› 利用PowerBuilder实现LIS系统中的串口通讯

利用PowerBuilder实现LIS系统中的串口通讯

利用PowerBuilder实现LIS系统中的串口通讯
利用PowerBuilder实现LIS系统中的串口通讯

利用PowerBuilder实现LIS系统中的串口通讯

南晓北,书恒

(赤峰学院,内蒙古赤峰024000)

摘要:介绍了如何使用PowerBuilder中的MSComm 控件来实现检验仪器与计算机之间的串口通讯。

关键词:LIS、MSComm 控件、串口通讯

随着医院信息系统技术日趋成熟,如今医院信息系统在医院得到广泛应用。检验信息系统(LIS: Laboratory Information System)是医院信息系统中一个较大组成部分。利用计算机对检验仪器进行数据的自动采集是医院检验科室信息化建设中的重要内容。串口因其速度快所以是目前检验仪器大量采用的一种数据传输端口。PB(PowerBuilder)工具软件是Sybase公司开发的分布式数据库应用程序的前端开发工具,它以功能强大、使用灵活的数据窗口,面向对象的、具有可视图形界面的开发能力等优势,因此深受广大数据库开发人员的青睐。目前使用PB作为大型医院信息系统前端开发工具占据了很大比例,使用PB进行LIS系统串口通讯程序的开发也是被广泛应用的一种方式。

一、MSComm控件常用的属性及通讯方法

在使用PB开发LIS系统串口通讯程序应首先来了解一下微软的Microsoft Communications Control(简称MSComm)控件,MSComm属于Windows下串行通讯编程的ActiveX控件,它为应用程序提供了通过串行端口传输和接收数据,为应用程序提供串行通讯功能。

1、MSComm 控件的常用属性

CommPort:设置用户所选用的通讯端口号。

Settings:以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。

PortOpen:设置通讯端口的状态,可以打开(值为True)或关闭端口(值为False)。

Input:从接收缓冲区返回和删除字符。

Output:向传输缓冲区写一个字符串。

InBufferSize:设置或返回接收缓冲区的大小,缺省为1024 字节。

InBufferCount:返回接收缓冲区内的等代读取的字节个数,设属性为0清除接收缓冲区。

OutBufferSize: 设置或返回发送缓冲区,缺省为512字节。

OutBufferCounter: 返回发送缓冲区内等待发送的字符数,可用0来清空缓冲区。

RThreshold:该属性确定当接收缓冲区内字节个数达或超过该值后就产生代码为ComEventReceive的OnComm事件,设置位0,则不产生OnComm事件。

CommEvent: 有通讯错误或事件发生时产生OnComm事件,CommEvent事件的值可以用来确定引发OnComm事件的具体的错误或事件常用的有以下几种

?ComEventbreak:接受到中断信号。

?ComEventRxOver:接收缓冲区溢出。

?ComEventTxFull:发送缓冲区溢出。

?ComEventReceive:接受到规定的字符数。

?InputLen:设置或返回接收缓冲区内用Input读入的个数。若取0,则读取整个缓

冲区的内容。

2、MSComm 控件的通讯方法

MSComm控件在处理串口通讯上有两种方法:一是事件驱动法;二是查询法。这两种方

法各自的特点如下:

(1)事件驱动法是利用MSComm控件的OnComm事件捕获并处理通讯错误或事件,是处理串行端口交互作用的一种非常有效的方法。当串口接收到或发送完指定数量的数据时,或当状态发生改变时,MSComm控件都将触发OnComm事件,该事件也可以捕获通讯中的错误。当应用程序捕获到这些事件后,可通过检查MSComm控件的CommEvent属性的值来获知所发生的事件或错误,从而执行相应的处理。这种方法具有相应及时,可靠性高等优点。

(2)查询法是在每个重要的程序之后查询MSComm控件的某些属性(比如CommEvent 属性和InBufferCount属性)的值来检测事件和通讯错误。

二、程序实例描述

在前面我们对MSComm控件有所了解之后,我们就可以将MSComm控件引入到程序中。整个LIS系统的数据流程包括HIS开出检验申请信息,LIS主程序读取数据,仪器检验结果数据通过通讯程序写入LIS结果数据表等。本文所要研究的就是仪器检验结果通过通讯程序写入LIS结果数据表这一程序实例。

第一步:选择适合的数据库设计相关数据表(这个主要是根据使用需要和编程人员的使用习惯)就我看来使用中型数据库如:SQL Server就可以。

第二步:设计应用程序界面。在这里主要说一下如何插入MSComm控件,在设计窗口插入MSComm控件的步骤:选中Create OLE Control在Insert Object会话框中选中Insert Control页卡中的Microsoft Communications Control项,这便完成了添加MSComm控件。如下图

第三步:这一步是编写程序的重点与难点,在完成上面的界面设计之后我们就要为界面里的控件编写代码。在界面设计时除MSComm控件外还有两项是必需要设计的。一个是通讯端口选择,因为一台计算机有多个串口(com1,com2,……)如果一台计算机连接两台或更多的仪器时就要凭借通讯端口来区分数据和接收数据。另一个是通讯参数配置,检验仪器进行数据传输时会根据仪器自身的参数来进行通讯,这些参数包括:波特率,数据位,停止位,

校验位。

接下来我们来重点看一下对MSComm控件相关事件及相关函数的编写。

1、为MSComm控件编写Oncomm事件

注:代码中ole_comm_one为MSComm控件的名称

String ls_receipt_data

char lc_char_data

Integer li_len, i

ls_receipt_data = ole_comm_one.object.Input

if gs_status = 'P' then return

li_len = Len(ls_receipt_data)

for i = 1 to li_len

lc_char_data = Mid(ls_receipt_data, i, 1)

f_comm_char_monitor(lc_char_data)

next

2、f_comm_char_monitor函数:

它的功能是当有字符触发则进行接受,代码如下:

Integer li_asc_value

li_asc_value = Asc(lc_data)

CHOOSE CASE li_asc_value

CASE STX

gs_current_result = lc_data

CASE ETX

gs_current_result += String(lc_data)

f_analyse_data(gs_current_result) //对接收的数据进行分析

gs_current_result = ""

CASE ELSE

gs_current_result += String(lc_data)

END CHOOSE

return 0

3、f_analyse_data函数

它的功能是分析结果数据,分离出工作单号及结果(在下面代码中有被注释的定义参数,把它写进来是来讲述如何使用MSComm控件相关参数)。

integer BlockSeqOffset = 2

integer BlockSeqLength = 1

integer FuOffset = 3

integer FuLength = 2

integer SampleNoOffset = 5

//integer SampleNoLength = 5

//integer DiskNoOffset = 10

//integer DiskNoLength = 1

//integer PositionNoOffset = 11

//integer PositionNoLength = 3

//integer IdNoOffset = 14

//integer IdNoLength = 13

//integer AgeOffset = 27

//integer AgeLength = 4

//integer SexOffset = 31

//integer SexLength = 1

//integer BldColTimeOffset = 32

//integer BldColTimeLength = 10

integer ChannelCountOffset = 42

integer ChannelCountLength = 3

integer ResultDataOffset = 45

integer li_channel_count, i

string ls_block_seq, ls_fu, ls_channel_block

String ls_result_data

String ls_property_char

String ls_working_id

String ls_instru_item_code, ls_instru_item_hard_code

String ls_item_result

String ls_indicator

String ls_unit

ls_result_data = ls_data

ls_fu = Mid(ls_result_data, FuOffset, FuLength)

if not (ls_fu = 'N1' or ls_fu = 'N2' or ls_fu = 'n1' or ls_fu = 'n2') then w_main.tab_show.tabpage_current_result.mle_current_result.text = ls_data return 1

end if

ls_block_seq = Mid(ls_result_data, BlockSeqOffset, BlockSeqLength)

li_channel_count = Integer(Trim(Mid(ls_result_data, ChannelCountOffset, ChannelCountLength)))

if ls_block_seq = '1' then //消息开始记录

g_struc_result.count = 0

end if

for i = 0 to li_channel_count - 1

ls_instru_item_hard_code = Trim(Mid(ls_result_data, ResultDataOffset + i * 10 + 1, 3))

ls_instru_item_code = ProfileString(gs_ini_file, 'ItemCodeAlia',

ls_instru_item_hard_code, ls_instru_item_hard_code)

ls_unit = ProfileString(gs_ini_file, 'ItemUnits', ls_instru_item_hard_code, '')

ls_item_result = Trim(Mid(ls_result_data, ResultDataOffset + i * 10 + 4, 6))

ls_indicator = Trim(Mid(ls_result_data, ResultDataOffset + i * 10 + 10, 1)) g_struc_result.count ++

g_struc_result.item_no[g_struc_result.count] = g_struc_result.count

g_struc_result.result[g_struc_result.count] = ls_item_result

g_struc_result.instrument_item_code[g_struc_result.count] = ls_instru_item_code

g_struc_result.normal_indicator[g_struc_result.count] = ls_indicator

g_struc_result.units[g_struc_result.count] = ls_unit

next

if ls_block_seq = ':' then //消息结束记录

g_struc_result.result_datetime = DateTime(Today(),Now())

ls_working_id = String(Integer(Mid(ls_result_data, SampleNoOffset + ( 5 - gi_SampleNoLen), gi_SampleNoLen)), Fill('0', gi_SampleNoLen))

g_struc_result.working_id = ls_working_id

if w_main.ib_display_result then

w_main.wf_display_result(g_struc_result)

end if

w_main.wf_save_result()

g_struc_result.count = 0

end if

Return 0

上面描述的是在程序中最为重要的事件及两个函数,还有其它的细节(如:建立数据窗口向数据库插入检验结果数据等等)因其不是实现检验仪器与计算机通讯的重点所以在这里不作过多累述。

三、结论

在编写LIS通讯程序时除对编程方法熟练外还要对检验仪器有基本的认识,最好是能够掌握其使用方法及检验项目的相关知识。通过上述对MSComm控件使用方法及实例完全可以实现医院检验科检验数据的自动采集,也能够对医院检验方面的信息系统建设起到一定的帮助作用。

参考文献:

[1]刘恩博.组态软件数据采集与串口通信测控应用实战.人民邮电出版社.2010

[2]李朝青.PC机及单片机数据通信技术[M].北京:国防工业出版社,2002

[3]范逸之.Visual Basic 与RS232串行通信控制.北京:中国青年出版社,2000

C#串口通讯编程

C#中串口通信编程收藏 本文将介绍如何在.NET平台下使用C#创建串口通信程序,.NET 2.0提供了串口通信的功能,其命名 空间是System.IO.Ports。这个新的框架不但可以访问计算机上的串口,还可以和串口设备进行通信。 我们将使用标准的RS 232 C 在PC间通信。它工作在全双工模式下,而且我们不打算使用任何的握手 或流控制器,而是使用无modem连接。 命名空间 System.IO.Ports命名空间中最重用的是SerialPort 类。 创建SerialPort 对象 通过创建SerialPort 对象,我们可以在程序中控制串口通信的全过程。 我们将要用到的SerialPort 类的方法: ReadLine():从输入缓冲区读一新行的值,如果没有,会返回NULL WriteLine(string):写入输出缓冲 Open():打开一个新的串口连接 Close():关闭 Code: //create a Serial Port object SerialPort sp = new SerialPort (); 默认情况下,DataBits 值是8,StopBits 是1,通信端口是COM1。这些都可以在下面的属性中重新设置 : BaudRate:串口的波特率 StopBits:每个字节的停止位数量 ReadTimeout:当读操作没有完成时的停止时间。单位,毫秒 还有不少其它公共属性,自己查阅MSDN。 串口的硬件知识

在数据传输的时候,每个字节的数据通过单个的电缆线传输。包包括开始位,数据,结束为。一旦 开始位传出,后面就会传数据,可能是5,6,7或8位,就看你的设定了。发送和接收必须设定同样 的波特率和数据位数。 无猫模式 没有Modem模式的电缆只是简单地交叉传送和接收线。同样DTR & DSR, 和RTS & CTS 也需要交叉。 RS232针图 这里,我们三条线。互连2和3(一段的2pin连接3pin),连接两端的5pin。 [示例程序] 主程序 如果想使用默认属性,按“Save Status”按钮,如果想改变属性按“Property”。它会弹出下图:

1C#中串口通信编程教程

C#中串口通信编程教程 本文将介绍如何在.NET平台下使用C#创建串口通信程序,.NET2.0提供了串口通信的功能,其命名空间是System.IO.Ports。这个新的框架不但可以访问计算机上的串口,还可以和串口设备进行通信。我们将使用标准的RS232C在PC间通信。它工作在全双工模式下,而且我们不打算使用任何的握手或流控制器,而是使用无modem连接。 命名空间 System.IO.Ports命名空间中最重用的是SerialPort类。 创建SerialPort对象 通过创建SerialPort对象,我们可以在程序中控制串口通信的全过程。 我们将要用到的SerialPort类的方法: ReadLine():从输入缓冲区读一新行的值,如果没有,会返回NULL WriteLine(string):写入输出缓冲 Open():打开一个新的串口连接 Close():关闭 Code: //create a Serial Port object SerialPort sp=new SerialPort(); 默认情况下,DataBits值是8,StopBits是1,通信端口是COM1。这些都可以在下面的属性中重新设置 : BaudRate:串口的波特率 StopBits:每个字节的停止位数量 ReadTimeout:当读操作没有完成时的停止时间。单位,毫秒 还有不少其它公共属性,自己查阅MSDN。 串口的硬件知识 在数据传输的时候,每个字节的数据通过单个的电缆线传输。包包括开始位,数据,结束为。一旦开始位传出,后面就会传数据,可能是5,6,7或8位,就看你的设定了。发送和接收必须设定同样的波特率和数据位数。

通用串口通讯程序设计

通用串口通讯程序设计 作者:和光同尘版本:V1.0 序 做硬件开发近20载,花了近十年做基础开发,对硬件开发略知一二,接触的做国防/工业大项目的人才我就是和他们沟通中获取了很多思想;人生已过而立之年,不惑解疑,总想写点什么。从一线研发(做了4年),开发(3年),硬件开发主管(12年),算起来人生从不到弱冠之年(中专毕业)开始接触MCS51、AVR等8位处理器到ARM v7核、CoretxM 核的32位处理器,CPLD/FPGA、PLC…………啰嗦了!! 最近因为工作原因需要把一些自己感悟的记录下来,希望传递给入门的有心沉下心做基础健壮扎实的初学者。

正文 做嵌入式硬件开发一般都会用到通讯数据交互,这就涉及通讯协议/规约的设计。本文从基础的串口(RS232、RS485等)为模型进行讲解。 说道串口通讯,就是编写串口程序,简单的就是1个字节的发送,1个字节的接收,但这不能满足绝大多数实际工作业务需求,实际需要一串字节数据的交互,A发送,B接收……Z 接收;Z机……B机收到根据情况需要回复(ACK)A机,这个过程就叫交互双向通讯(本文不讨论多主机、1主机相对复杂通讯机制。)。这种通讯就需要提前设计好通讯的规约(大家约定好暗号——每个字节代表什么意思)。 接下来编写通信程序(发送/接收),如何写出一个健壮高效串口程序?是否健壮高效其实很大一部分取决于通讯接收程序的架构。 通讯程序编写依据是——通讯规约,通讯帧的设计。 ●I类通用型: ||帧头段|===|数据段|===|校验码|===|帧尾段|| ●II类时隙通讯: ||开始时隙T(T1T2T3T4T5T6)|=|功能码|=|数据段|=|校验码|=|结束时隙T(T1T2T3)|注意:时隙只是纯粹的前后两帧数据的间隔时间,这期间坚决不能有数据产生。 1.1I类通用型 ◆帧头段 帧头段用于鉴别一串字节流中1帧数据起始位置,这个帧头段必须具有足够的特殊标识(易分辨)。 什么样的特殊标识可作为帧头? 根据个人经验: ①具有监测通讯波特率功能特点:0B01010101(55H)、0B10101010(AAH)或0B00000000(00H)、0B11111111(FFH); ②利用ASCII码如MODBUS ASCII规约以冒号‘:’(3AH)作为帧头。也可以采用ASCII ‘U’(55H)、‘@’(40H)等等 只要保证帧头字节数据内容,在所有通讯数据字节流中,除帧头有意为之而出现,那就是帧头。建议最好有两个字节及以上,这样数据出现与帧头一致的概率更加小,才做到独一无二的特殊性。

串行端口程序设计

串行端口程序设计 一、实验目的 了解在linux环境下串行程序设计的基本方法。 掌握终端的主要属性及设置方法,熟悉终端I /O函数的使用。 学习使用多线程来完成串口的收发处理。 二、实验内容 读懂程序源代码,学习终端I /O函数的使用方法,学习将多线程编程应用到串口的接收和发送程序设计中。 三、预备知识 有C语言基础。 掌握在Linux下常用编辑器的使用。 掌握Makefile 的编写和使用。 掌握Linux下的程序编译与交叉编译过程 四、实验设备及工具 硬件:UP-CUP S2410 经典平台、PC机Pentium 500以上, 硬盘10G以上。 软件:PC机操作系统REDHAT LINUX 9.0+MINICOM+ARM-LINUX开发环境 五、实验原理 异步串行I /O方式是将传输数据的每个字符一位接一位(例如先低位、后高位)地传送。数据的各不同位可以分时使用同一传输通道,因此串行I/O可以减少信号连线,最少用一对线即可进行。接收方对于同一根线上一连串的数字信号,首先要分割成位,再按位组成字符。

为了恢复发送的信息,双方必须协调工作。在微型计算机中大量使用异步串行I/O方式,双方使用各自的时钟信号,而且允许时钟频率有一定误差,因此实现较容易。但是由于每个字符都要独立确定起始和结束(即每个字符都要重新同步),字符和字符间还可能有长度不定的空闲时间,因此效率较低。 图2.3.1串行通信字符格式 图2.3.1给出异步串行通信中一个字符的传送格式。开始前,线路处于空闲状态,送出连续“1”。传送开始时首先发一个“0”作为起始位,然后出现在通信线上的是字符的二进制编码数据。每个字符的数据位长可以约定为5位、6位、7位或8位,一般采用ASCII编码。后面是奇偶校验位,根据约定,用奇偶校验位将所传字符中为“1”的位数凑成奇数个或偶数个。也可以约定不要奇偶校验,这样就取消奇偶校验位。最后是表示停止位的“1”信号,这个停止位可以约定持续1位、1.5位或2位的时间宽度。至此一个字符传送完毕,线路又进入空闲,持续为“1”。经过一段随机的时间后,下一个字符开始传送才又发出起始位。每一个数据位的宽度等于传送波特率的倒数。微机异步串行通信中,常用的波特率为50,95,110,150,300,600,1200,2400,4800,9600等。 接收方按约定的格式接收数据,并进行检查,可以查出以下三种错误: ●奇偶错:在约定奇偶检查的情况下,接收到的字符奇偶状态和约定不符。 ●帧格式错:一个字符从起始位到停止位的总位数不对。 ●溢出错:若先接收的字符尚未被微机读取,后面的字符又传送过来,则产生溢出错。 每一种错误都会给出相应的出错信息,提示用户处理。一般串口调试都使用空的MODEM 连接电缆,其连接方式如下:

Java串口通信编程指南

Java串口通信编程指南

1. 概述 在java中,利用Java Communication包可以操作串口,但官方的包在3.0之后就只支持Linux和Solaris平台了,Windows平台的只支持到98年出的2.0版本,不过在XP下还能使用。另外,也可以用开源的Rxtx实现串口通信,这里仅以Java Communication包,在Windows 平台实现串口通信进行说明。 2. 前期准备 2.1. 下载Java Communication包 ?下载地址如下:https://www.doczj.com/doc/625033737.html,/Jolt/javacomm20-win32.zip。 ?如果是非Windows平台,请到Sun网站选择其他版本下载。地址如下: https://www.doczj.com/doc/625033737.html,/download/products.xml?id=43208d3d 2.2. 配置 ?解压缩javacomm20-win32.zip ?把win32com.dll拷贝到{JAVA_HOME}\jre\bin ?把comm.jar拷贝到{JAVA_HOME}\jre\lib\ext ?把https://www.doczj.com/doc/625033737.html,m.properties拷贝到{JAVA_HOME}\jre\lib ?set CLASSPATH={JAVA_HOME}\jre \lib\ext \comm.jar;%classpath%

3. 实现过程 主要步骤包括: ?获得串口标识 ?打开串口 ?设置串行端口通讯参数 ?获取输入(出)流 ?进行读写操作 3.1. 获得串口标识 指定串口的端口号,生成串口的标识类的实例。 https://www.doczj.com/doc/625033737.html,mPortIdentifier是通讯端口管理器,控制访问到通讯端口的中心类。一个应用程序首先使用CommPortIdentifier中的方法,通过相关的驱动去获取那些通讯端口是可用的并且选择一个端口便于开始。它包括如下功能: a. 通过驱动决定通讯端口是可用的。 b. 打开通讯端口为了I/O操作。 c. 决定端口的拥有者。 d. 解析端口拥有者的争夺。 e. 管理事件显示在端口拥有者的中的状态改变。 示例代码如下: 代码: 3.2. 打开串口 示例代码如下: 代码:

串行异步通信程序设计

******************* 实践教学 ******************* 兰州理工大学 计算机与通信学院 2014年秋季学期 《通信系统综合训练》课程设计 题目:串行异步通信程序设计 专业班级:通信工程(1)班 姓名:李银环 学号:11250134 指导教师:王惠琴 成绩:

摘要 在Windows环境下实现通信的方法主要有利用MSComm控件和直接用Windows API编程,软件采用Microsoft Visual C++ 6.0,利用MSComm控件编程相对来说更简单一些,而直接使用Windows API编程更灵活一些。 本次课程设计分析了串行异步通信的基本原理,在VC++6.0的环境下利用MSComm控件实现了两个PC机的COM口间的数据发送和接收。本文通过对COM1口进行初始化编程,以及对建立的工程中的每个对话框和按钮分别进行编程和设置,成功的实现了利用PC机的两个COM口进行异步通信,并能根据设置调整异步传行通信参数。 关键词:VC++6.0;MSComm控件;串行异步通信

目录 前言 (1) 第1章串行异步通信基本原理 (2) 1.1 串行通信协议 (2) 1.2 串口通信的基本概念 (3) 1.3 RS-232简介 (4) 第2章 VC++软件简介 (5) 2.1 VC++6.0简介 (5) 2.2 Microsoft Communications Control 控件 (6) 第3章串行异步通信系统分析 (7) 第4章串行异步通信系统设计 (8) 4.1建立工程 (8) 4.2 在程序中添加MSComm控件 (9) 4.3 初始化串口:设置MSComm控件的属性 (11) 4.4 发送数据 (12) 第5章串行异步通信程序调试 (18) 5.1 计算机串口设置 (18) 5.2 程序运行结果 (18) 参考文献 (20) 附录 (21) 致谢 (29)

C#中串口通信编程

本文将介绍如何在.NET平台下使用C#创建串口通信程序,.NET 2.0提供了串口通信的功能,其命名 空间是System.IO.Ports。这个新的框架不但可以访问计算机上的串口,还可以和串口设备进行通信。 我们将使用标准的RS 232 C 在PC间通信。它工作在全双工模式下,而且我们不打算使用任何的握手或流控制器,而是使用无modem连接。 命名空间 System.IO.Ports命名空间中最重用的是SerialPort 类。 创建SerialPort 对象 通过创建SerialPort 对象,我们可以在程序中控制串口通信的全过程。 我们将要用到的SerialPort 类的方法: ReadLine():从输入缓冲区读一新行的值,如果没有,会返回NULL WriteLine(string):写入输出缓冲 Open():打开一个新的串口连接 Close():关闭 Code: //create a Serial Port object SerialPort sp = new SerialPort (); 默认情况下,DataBits 值是8,StopBits 是1,通信端口是COM1。这些都可以在下面的属性中重新设置: BaudRate:串口的波特率 StopBits:每个字节的停止位数量 ReadTimeout:当读操作没有完成时的停止时间。单位,毫秒 还有不少其它公共属性,自己查阅MSDN。

串口的硬件知识 在数据传输的时候,每个字节的数据通过单个的电缆线传输。包包括开始位,数据,结束为。一旦 开始位传出,后面就会传数据,可能是5,6,7或8位,就看你的设定了。发送和接收必须设定同样 的波特率和数据位数。 无猫模式 没有Modem模式的电缆只是简单地交叉传送和接收线。同样DTR & DSR, 和 RTS & CTS也需要交叉。RS232针图 这里,我们三条线。互连2和3(一段的2pin连接3pin),连接两端的5pin。 [示例程序] 主程序

MFC串口通信编程详解解析

MFC串口通信编程介绍 主要介绍了用CreateFile(函数和WriteFile(函数读写串口的实例,以及设置串口属性的实例. 在工业控制中,工控机(一般都基于Windows平台经常需要与智能仪表通过串口 进行通信.串口通信方便易行,应用广泛. 一般情况下,工控机和各智能仪表通过RS485总线进行通信.RS485的通信方式是半双工的,只能由作为主节点的工控PC机依次轮询网络上的各智能控制单元子节点.每次通信都是由PC机通过串口向智能控制单元发布命令,智能控制单元在接收到正确的命令后作出应答. 在Win32下,可以使用两种编程方式实现串口通信,其一是使用ActiveX控件,这种方法程序简单,但欠灵活.其二是调用Windows的API函数,这种方法可以清楚地掌握串口通信的机制,并且自由灵活.下面只介绍API串口通信部分. 串口的操作可以有两种操作方式:同步操作方式和重叠操作方式(又称为异步操作方式.同步操作时,API函数会阻塞直到操作完成以后才能返回(在多线程方式中, 虽然不会阻塞主线程,但是仍然会阻塞监听线程;而重叠操作方式,API函数会立即返回,操作在后台进行,避免线程的阻塞. 无论哪种操作方式,一般都通过四个步骤来完成: (1打开串口 (2配置串口 (3读写串口 (4关闭串口

一打开串口 Win32系统把文件的概念进行了扩展.无论是文件、通信设备、命名管道、邮件槽、磁盘、还是控制台,都是用API函数CreateFile来打开或创建的.该函数的原型为: HANDLE CreateFile( LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDistribution, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile; ?lpFileName:将要打开的串口逻辑名,如“COM1”; ?dwDesiredAccess:指定串口访问的类型,可以是读取、写入或二者并列; ?dwShareMode:指定共享属性,由于串口不能共享,该参数必须置为0; ?lpSecurityAttributes:引用安全性属性结构,缺省值为NULL; ?dwCreationDistribution:创建标志,对串口操作该参数必须置为 OPEN_EXISTING; ?dwFlagsAndAttributes:属性描述,用于指定该串口是否进行异步操作,该值为FILE_FLAG_OVERLAPPED,表示使用异步的I/O;该值为0,表示同步I/O操 作;

VC++串口通信编程

在工业控制中,工控机(一般都基于Windows平台)经常需要与智能仪表通过串口进行通信。串口通信方便易行,应用广泛。 一般情况下,工控机和各智能仪表通过RS485总线进行通信。RS485的通信方式是半双工的,只能由作为主节点的工控PC机依次轮询网络上的各智能控制单元子节点。每次通信都是由PC机通过串口向智能控制单元发布命令,智能控制单元在接收到正确的命令后作出应答。 在Win32下,可以使用两种编程方式实现串口通信,其一是使用ActiveX 控件,这种方法程序简单,但欠灵活。其二是调用Windows的API函数,这种方法可以清楚地掌握串口通信的机制,并且自由灵活。本文我们只介绍API串口通信部分。 串口的操作可以有两种操作方式:同步操作方式和重叠操作方式(又称为异步操作方式)。同步操作时,API函数会阻塞直到操作完成以后才能返回(在多线程方式中,虽然不会阻塞主线程,但是仍然会阻塞监听线程);而重叠操作方式,API函数会立即返回,操作在后台进行,避免线程的阻塞。 无论那种操作方式,一般都通过四个步骤来完成: (1)打开串口 (2)配置串口 (3)读写串口 (4)关闭串口 (1)打开串口 Win32系统把文件的概念进行了扩展。无论是文件、通信设备、命名管道、邮件槽、磁盘、还是控制台,都是用API函数CreateFile来打开或创建的。该函数的原型为: HANDLE CreateFile( LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDistribution, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile); ?lpFileName:将要打开的串口逻辑名,如“COM1”; ?dwDesiredAccess:指定串口访问的类型,可以是读取、写入或二者并列; ?dwShareMode:指定共享属性,由于串口不能共享,该参数必须置为0; ?lpSecurityAttributes:引用安全性属性结构,缺省值为NULL; ?dwCreationDistribution:创建标志,对串口操作该参数必须置为OPEN_EXISTING; ?dwFlagsAndAttributes:属性描述,用于指定该串口是否进行异步操作,该值为FILE_FLAG_OVERLAPPED,表示使用异步的I/O;该值为0,表示同 步I/O操作; ?hTemplateFile:对串口而言该参数必须置为NULL;

串行通信程序设计

课程设计任务书 学生姓名: xxx 专业班级: xxx 指导教师: xxx 工作单位: xxx 题目: 串行通信程序设计 初始条件: 用汇编语言编写程序,实现两台计算机之间的通信。 要求完成的主要任务: ①制作RS-232C通信线,并用它连接两台计算机; ②在计算机上用不同的颜色设置接收、发送区域; ③能设置发送、接收的数据长度,并能显示接收的数据; ④能选择通信校验方式(奇校验、偶校验或无校验); ⑤可以将接收的数据作为文件保存起来; ⑥撰写设计说明书及调试心得。 时间安排: 第一阶段: 查阅相关资料 第二阶段: 课程设计 第三阶段: 撰写课程设计报告 第四阶段: 课程设计答辩 指导教师签名:年月日系主任(或责任教师)签名:年月日

串行通信程序设计 1方案论证 首先,要能进行串行通信,串口是基础。使用RS-232 DB-9串口,实现基本通信时,只需将其5号线(地线)相连,2、3号线(接收、发送数据线)分别交叉相连即可。 根据要求,此程序可分为界面显示、参数设置、发送数据、接收数据和保存文件五部分。以下将从这五个方面进行方案论证。 1.1 界面显示 一般情况下显示器的屏幕为25行、82列,不妨把整个屏幕看成25*80个存储单元。屏幕坐上角存储单元的坐标为(0,0),即行号为0,列号为0。因此可通过设置不同的行号和列号定位屏幕上的存储单元。 用不同颜色设置发送和接收区域,即用不同颜色的空格填充发送和接收区域。这就需要调用BIOS系统中断,先置光标位置,再写当前字符和属性。这两项功能都可调用BIOS显示输出10H号中断服务程序实现,详见表1-1 10H号中断服务程序部分功能。 表1-1 10H号中断服务程序部分功能 IBM PC的标准显示器适配器,有单色和彩色之分,其中后者能以文本和图形两种工作方式,既可以显示黑白图形又可以显示有16种颜色的彩色图形。彩色文本方式下,设置不同的属性字节即可实现不同前景和不同背景的组合。例如,0111表示灰白,1110表示黄,设置灰白底黄字的属性为01111110,十六进制表示为7EH。 显示发送和接收两个区域的方案大体分两种,一是两个带状区域,一是两个并排的矩形。从美观的角度来讲,后者更胜一筹。显示标题、提示、设置等信息时,只需先将光标定到合

C#使用SerialPort类设计串口通讯程序

使用SerialPort类设计串口通讯程序 一.概述 输送带控制模块的核心技术是与PLC的串口通讯,在Visual Studio 6.0中编写串口通讯程序,一般都使用Microsoft Communication Control(简称MSComm)的通讯控件,只要通过对此控件的属性和事件进行相应编程操作,就可以轻松地实现串口通讯。但在https://www.doczj.com/doc/625033737.html,技术广泛应用的今天,Visual S https://www.doczj.com/doc/625033737.html,没有将此控件加入控件库,所以人们采用了许多方法在Visual https://www.doczj.com/doc/625033737.html,来编写串口通讯程序:第一种方法是通过采用Visual Studio 6.0中原来的MSComm控件这是最简单的,最方便的方法,但需要注册;第二种方法是采用微软在.NET推出了一个串口控件,基于.NET的P/Invoke调用方法实现;第三种方法是自己用API写串口通信,虽然难度高,但可以方便实现自己想要的各种功能。 现在微软推出了最新版本的Visual Studio 2005开发工具,可以不再采用第三方控件的方法来设计 串口通讯程序。NET Framework 2.0类库包含了SerialPort类,方便地实现了所需要串口通讯的多种功能,为了使MSComm编程方法快速转换到以SerialPort类为核心的串口通讯的设计方法,这里着重讨论了Visu al Studio 6.0的MSComm控件和SerialPort类设计方法的异同点。 二.SerialPort常用属性、方法和事件 1.命名空间 System.IO.Ports命名空间包含了控制串口重要的SerialPort类,该类提供了同步I/O 和事件驱动的I/ O、对管脚和中断状态的访问以及对串行驱动程序属性的访问,所以在程序代码起始位置需加入Using Sys tem.IO.Ports。 2.串口的通讯参数 串口通讯最常用的参数就是通讯端口号及通讯格式(波特率、数据位、停止位和校验位),在MSComm 中相关的属性是CommPort和Settings。SerialPort类与MSComm有一些区别: ?通讯端口号 [PortName]属性获取或设置通信端口,包括但不限于所有可用的COM 端口,请注意该属性返回类型为String,不是https://www.doczj.com/doc/625033737.html,mPort的short类型。通常情况下,PortName正常返 回的值为COM1、COM2……,SerialPort类最大支持的端口数突破了CommPort控件中CommPor t属性不能超过16的限止,大大方便了用户串口设备的配置。 ?通讯格式 SerialPort类对分别用[BaudRate]、[Parity] 、[DataBits]、[StopBits]属性设置通讯格式中的波特率、校验位、数据位和停止位,其中[Parity]和[StopBits]分别是枚举类型Parity、StopBits,Parit y类型中枚举了Odd(奇)、Even(偶)、Mark、None、Space,Parity枚举了None、One、OnePointFi ve、Two。 SerialPort类提供了七个重载的构造函数,既可以对已经实例化的SerialPort对象设置上述相关属性的值,也可以使用指定的端口名称、波特率和奇偶校验位数据位和停止位直接初始化Seri alPort 类的新实例。 3.串口的打开和关闭 SerialPort类没有采用MSComm.PortOpen=True/False设置属性值打开关闭串口,相应的是调用类的Op en()和Close()方法。 4. 数据的发送和读取

串行通信及数据校验程序设计.

中北大学 单片机原理及接口技术 课程设计说明书 学生姓名:学号: 学院:计算机与控制工程学院 专业:自动化 题目:串行通信及数据校验程序设计 指导教师:职称: 2013年12月22日

中北大学 单片机及其接口技术课程设计任务书 12/13 学年第一学期 学院:计算机与控制工程学院 专业:自动化 学生姓名:学号 课程设计题目:串行通信及数据校验程序设计 起迄日期:12月16 日~12月20 日 课程设计地点:中北大学 指导教师:沈小林 下达任务书日期: 2013年12月16日

课程设计任务书

课程设计任务书

目录 一、设计任务 (2) 1.任务 (2) 2.通信技术要求 (2) 二、基本原理 (2) 1. AT89C51单片机的串行接口结构 (2) 2.串行口方式1的发送和接收 (4) 3.设置串行通信寄存器 (4) 三、系统方案比较与论证 (5) 1.汇编语言和C语言的特点及选择 (5) 2.并行通信与串行通信的比较 (5) 3.串行通信程序设计的比较 (6) 4.同步通信与异步通信的区别 (6) 四、系统电路设计 (6) 五、软件设计 (7) 1.发送程序设计 (7) 2.接收程序设计 (7) 3.校验程序设计 (8) 4.系统软件总体流程图 (9) 六、总结 (11) 七、参考文献 (11)

一、设计任务 1.任务 通过对单片机串行通信程序设计掌握单片机串行数据通讯的实现及数据校验的原理。 2.通信技术要求 (1)串行通信波特率:9600bps; (2)数据长度:20字节 二、基本原理 1.AT89C51单片机的串行接口结构 51单片机的串行接口是一个全双工的接口,它可以作为UART用,也可以作为同步移位寄存器用。51单片机串行接口的结构如下: (1)数据缓冲器(SBUF) 接受或发送的数据都要先送到SBUF缓存。接收SBUF和发送SBUF用同一直接地址99H,两者在物理结构上是相互独立的,单片机用它们来接收和发送数据,发送时用指令将数据送到SBUF即可启动发送;接收时用指令将SBUF中接收到的数据取出。 (2)串行控制寄存器(SCON) SCON用于串行通信方式的选择,收发控制及状态指示,各位含义如下: SM0,SM1:串行接口工作方式选择位,这两位组合成00,01,10,11对应于工作方式

串口通信程序设计

1基本理论基础 1.1串行通信的方式 通信的基本方式可以分为并行通信和串行通信两种。串行通信时数据用一根传输线逐为顺序传送。串行通信又分为两种类型:串行异步通信和串行同步通信。 串行异步通信是指通信中两个字符之间的时间间隔是不固定的,而在一个字符内各位的时间间隔是固定的。 同步通信时指在约定的数据通信数率下,发送方和接收方的时钟信号频率和相位始终保持一致,通信双方发送数据和接收数据具有完全一致的定时关系。 1.2串行通信数据传送方式 单工传送:单工传送时指在通信时只能由一方发送数据,另一方接收数据的通信方式。 半双工传送:指在通信时双方都能够接收或者发送,但是不能够同时接收和发送的通信方式。 全双工传送:通信双方之间有两条通路,发送信息和接收信息可以同时进行。 1.3串行通信接口标准RS-232C RS-232C标准是美国EIA于1969年公布的通信协议。它的作用是实现不同的厂商的计算机和各种外围设备进行串行连接。 2.INS 8250 2.1INS 8250的外部引脚和结构 INS 8250是通用异步收发器UART,用作异步通信接口电路。INS 8250的引脚信号基本上可以分为两大类:与CPU系统总线相连的信号线和与通信设备MODEM连接的信号线。

2.2INS的内部寄存器及其编程方法 2.2.1波特率因子寄存器(DLL/DLH) 波特率因子寄存器是用来控制串行数据传输的数率。波特率因子=1843200÷(分频值×16)内部设置波特率因子寄存器DLL/DLH,在初始化时将选用的波特率因子值的高低、低字节分别放入DLH和DLL中。 若设定通信波特率为1200bps,波特率因子寄存器的初始化程序为: MOV DX,3FBH MOV AL,80H OUT DX,AL MOV DX,3F8H MOV AL,60H OUT DX,AL MOV DX,3F9H MOV AL,00H OUT DX,AL 2.2.2通信线路控制寄存器(LCR) 通信线路控制寄存器LRC主要用来指定异步通信数据格式,即字符长度、停止位位数、奇偶校验。LRC的控制字如下 2.2.3通信线路状态寄存器 通信线路状态寄存器用来表示数据接收和数据发送时8250的状态。控制字如下 中断源提出的中断请求被允许还是被禁止是由允许中断寄存器控制。控制字格式如下

串行通信程序设计微机原理课设

摘要 计算机与外部进行信息交换的方式有两种,一种是并行通信,另一种是串行通信。其中串行通信时,数据和控制信息是一位接一位串行传输,这样虽然速度会慢一些,但是传输距离长,硬件电路也相对简单。因此在长距离通信系统及各类计算机网中,串行传输方式是主要的通信方式。计算机提供给用户的RS-232C接口就是一个标准的串行通信接口,主要用来把数据处理装置与数据通信装置连接在一起。RS-232C标准包括接口的机械,电气及功能方面的内容,许多场合都以这种借口规范作为连接标准。 串行通信是指计算机主机与外设之间以及主机系统与主机系统之间数据的串行传送。使用串口通信时,发送和接收到的每一个字符实际上都是一次一位的传送的,每一位为1或者为0,每一位数据占据一个固定的时间长度。 汇编语言是用指令的助记符,符号地址,标号等书写程序的语言,实际上是机器语言的一种符号表示,主要特点是可以使用助记符来表示机器指令的操作码和操作数,可以用标号和符号来代替地址,常量和变量。汇编语言是与机器语言密切相关的,是面向机器的语言。CPU不同的计算机有着不同的汇编语言,汇编语言源程序不能直接在计算机上运行,需要翻译成机器语言程序。 本次课程设计要求制作RS-232C通信线,用其实现两台计算机之间的通信。要求在计算机上用不同颜色设置接收和发送区域,能设置发送和接收的数据长度,显示接收数据,并能选择通信校验方式,将接收的数据作为文件保存起来。 关键字:汇编语言串行通信 RS-232C通信线源程序CPU

串行通信程序设计 1.串行通信的基本原理 1.1串行通信的基本概念 串行通信有两种工作方式:异步通信和同步通信。异步通信由于不需要同步信号,硬件连接简单而被广泛使用于串行部件,计算机与计算机,计算机于单片机及其仪表之间的数据交换。 (1)异步通信 所谓异步通信,是指以字符为单位传输数据,用起始位和停止位标志每个字符的开始和结束,两次传输时间间隔不固定。异步通信不需要同步信号,为了实现异步通信的要求,CPU与外设之间有两项规定,及字符格式和波特率的规定。在一个串行通信系统工作时,应该设定接收方和放松放的比特率相同;在异步通信方式中,任何一组数据总是以起始位开始,停止位结束,在起始位和停止位之间才是有效数据位,另外数据位的末尾是否用奇偶校验,起始位和停止位选用宽度等都有一定的规定。 (2)同步通信 异步通信为了可靠地传输数据,在每次传输数据时附加一些标志位。在大量数据传输时,为了提高速度,就去掉这些标志,这就是同步通信。采用同步传输,数据块开始处要用同步字符来指示,且在发送端和接收端之间要用时钟来实现同步。同步通信中使用的数据格式根据所采用的控制规程而定。 1.2串行通信中的数据传输方向 通常,串行通信数据在两个站之间是双向传输的,A站可作为发送端,B站作为接收端,也可以A站作为接收端,B站作为发送端,根据要求可分为半双工和全双工。 半双工:每次只能有一个站发送,即只能有A站发送到B站,或者有B站发送到A 站,A站和B站不能同时发送。 全双工:两个站都能同时发送成为全双工,数据传输方向示意图如图1-1所示。

串口通信原理与编程

在Windows应用程序的开发中,我们常常需要面临与外围数据源设备通信的问题。计算机和单片机(如MCS-51)都具有串行通信口,可以设计相应的串口通信程序,完成二者之间的数据通信任务。 实际工作中利用串口完成通信任务的时候非常之多。已有一些文章介绍串口编程的文章在计算机杂志上发表。但总的感觉说来不太全面,特别是介绍32位下编程的更少,且很不详细。笔者在实际工作中积累了较多经验,结合硬件、软件,重点提及比较新的技术,及需要注意的要点作一番探讨。希望对各位需要编写串口通信程序的朋友有一些帮助。 一.串行通信的基本原理 串行端口的本质功能是作为CPU和串行设备间的编码转换器。当数据从CPU经过串行端口发送出去时,字节数据转换为串行的位。在接收数据时,串行的位被转换为字节数据。 在Windows环境(Windows NT、Win98、Windows2000)下,串口是系统资源的一部分。 应用程序要使用串口进行通信,必须在使用之前向操作系统提出资源申请要求(打开串口),通信完成后必须释放资源(关闭串口)。 串口通信程序的流程如下图: 二.串口信号线的接法 一个完整的RS-232C接口有22根线,采用标准的25芯插头座(或者9芯插头座)。25芯和9芯的主要信号线相同。以下的介绍是以25芯的RS-232C为例。 ①主要信号线定义: 2脚:发送数据TXD;3脚:接收数据RXD;4脚:请求发送RTS;5脚:清除发送CTS; 6脚:数据设备就绪DSR;20脚:数据终端就绪DTR;8脚:数据载波检测DCD; 1脚:保护地;7脚:信号地。 ②电气特性: 数据传输速率最大可到20K bps,最大距离仅15m. 注:看了微软的MSDN 6.0,其Windows API中关于串行通讯设备(不一定都是串口RS-232C或RS-422或RS-449)速率的设置,最大可支持到RS_256000,即256K bps! 也不知道到底是什么串行通讯设备?但不管怎样,一般主机和单片机的串口通讯大多都在9600 bps,可以满足通讯需求。 ③接口的典型应用: 大多数计算机应用系统与智能单元之间只需使用3到5根信号线即可工作。这时,除了TXD、RXD以外,

串口通信Windows程序设计

串口通信Windows程序设计 一.工作环境 硬件连接好的串口设备(虚拟串口软件VSPM),Visual Studio 2008 二.基本知识 1.串口通信 串行口通信,IDE,USB,RS232,主要讲RS232接口,理论传输距离可以 达到50m,实际应用只有15m左右,传输速度较慢,波特率115200bps 时,速度才有14KB/S 2.串口通信传输方式 a)异步传输:异步传输将比特分成小组进行传送,小组可以 是8位的1个字符或更长。发送方可以在任何时刻发送这 些比特组,而接收方从不知道它们会在什么时候到达。双 机通讯需要设定开始位,数据位,校验位,停止位,双机 不需要同步时钟,速率慢。 b)同步传输:数据以帧的形式发送,双机时钟必须同步,否 则会出现传输错误,速度比异步传输快。 三.Windows串口程序设计基础 在Win32下,可以使用两种编程方式实现串口通信,其一是使用ActiveX控件,这种方法程序简单,但欠灵活。其二是调用Windows的API函数,这种方法可以清楚地掌握串口通信的机制,并且自由灵活。我们只介绍API串口通信部分。 同步操作时,API函数会阻塞直到操作完成以后才能返回(在多线程方式中,虽然不会阻塞主线程,但是仍然会阻塞监听线程);而异步操作方式,API函数会立即返回,操作在后台进行,避免线程的阻塞。

无论那种操作方式,一般都通过四个步骤来完成: 1.打开串口 2.配置串口 3.读写串口 4.关闭串口 (1)打开串口 HANDLE CreateFile( LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDistribution, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile); lpFileName:将要打开的串口逻辑名,如“COM1”;dwDesiredAccess:指定串口访问的类型,可以是读取、写入或二者并列;dwShareMode:指定共享属性,由于串口不能共享,该参数必须置为0;lpSecurityAttributes:引用安全性属性结构,缺省值为NULL; dwCreationDistribution:创建标志,对串口操作该参数必须置为OPEN_EXISTING; dwFlagsAndAttributes:属性描述,用于指定该串口是否进行异步操作,该值为FILE_FLAG_OVERLAPPED,表示使用异步的I/O;该值为0,表示同步I/O 操作; hTemplateFile:对串口而言该参数必须置为NULL;

单片机与PC机串行通信系统设计

随着计算机技术特别是单片机技术的发展,单片机的应用领域越来越广泛,单片机在工业控制、数据采集以及仪器仪表自动化等许多领域都起着十分重要的作用。但在实际应用中,在要求响应速度快、实时性强、控制量多的应用场合,单个单片机往往难以胜任,这时使用多个单片机接合PC机组成分布式系统是一个比较好的解决方案。这样,单片机的数据通信技术就变得十分重要,在某种程度上说,掌握了单片机的数据通信技术也就是掌握了单片机的核心应用技术。 现在单片机及PC机在结构、性能和经济上为实现远程串行通信提供了很好的条件,串行通信是指按照逐位顺序传递数据的通信方式,由于仅需三根传输线传送信息且通信距离相对较远,所以在控制领域的现场监测、分布控制等场合有着重要的应用价值。 本论文运用单片机系统的设计方法,对单片机与PC机的串行通信系统进行设计,通过总体方案的分析与设计,确定了所采用单片机的型号,并明确硬件设计与软件设计的内容,硬件设计方面需要对单片机控制系统的硬件电路,如时钟电路、复位电路进行设计,串口部分确定了以定时器T1工作在方式2作为波特率发生器,单片机与PC机采用了标准的RS-232C接口进行连接,其中存在着电平转换电路的设计,利用了PROTEL99SE软件进行通信系统硬件电路原理图的绘制,并生成报表。软件设计方面,利用VB的MSComm控件进行串口通信软件的开发,根据系统的功能要求,利用汇编程序进行单片机收发数据的程序编制,利用51汇编集成开发环境和STC-ISPV13下载型编程器对单片机汇编程序进行烧录。在系统软硬件调试的过程中,采用AT89C51单片机试验开发板进行功能测试。最后进行分析,验证系统的可行性。 关键词:PC机与单片机的串行通信;VB程序设计;AT89C51实验板

基本串口通信程序设计

基本串口通信程序设计 实验要求: 用TC对计算机的串口进行编程,并作一个简单的串口查询通讯程序。 实验方案: 用RS-232串口通讯线将两台计算机A、B的串口相连。 实验步骤: 1、首先对计算机串口通讯控制芯片8250的控制寄存器进行初始化和设置; 2、对计算机B的串口发送一个数据前,查询计算机A的串口的发送移位寄存器是否为空,如果是则发送数据,如果为否则继续查询,直到条件成立;执行完发送指令后,再次查询计算机A的口的发送移位寄存器是否为空,如果是则结束发送;如果为否,则继续查询,直到条件成立。 3、从计算机A的串口接受刚才从计算机B的串口发送的数据前,先查询计算机A的口的接收数据标志位是否为1,如果是则表示计算机A的口接收数据准备就绪,执行接收指令,即从计算机A的口读入数据,若否则表示没有准备好接收,继续查询计算机A的口的接收数据标志位,直到为1;接收完数据后,再次查询计算机A的串口的接受寄存器是否为空的标志位的状态,如果为1则程序转入计算机B的串口的数据发送程序;如果否,则继续查询等待,直到接收。 实验内容: 1.在COMDEBUG中针对串口通信各寄存器进行设置,掌握各寄存器在串口通信中 的作用及各参数的含义。 Com1口中的10各可编程寄存器 地址寄存器名称备注3F8H 发送保持寄存器(THR)DLAB=0 3F8H 接收缓冲寄存器(RBR)DLAB=0 3F8H 波特率因子寄存器[低](DLL)DLAB=1 3F9H 波特率因子寄存器[高](DLM)DLAB=1 3F9H 中断允许寄存器(IER)DLAB=0 3FAH 中断识别寄存器(IIR) 3FBH 线路控制寄存器(LCR) 3FCH Modem控制寄存器(MCR) 3FDH 线路状态寄存器(LSR) 3FEH Modem状态寄存器(MSR) 注:com1口的基地址为:3F8; com2口的基地址为:2F8。 在上表中,10个可编程寄存器,使用了7个地址,其中部分寄存器共用一个地址,由DLAB=0/1来区分,在DLAB=1,用于设定通讯所需的波特率; 8250的控制寄存器控制/状态字: 1)接收缓冲寄存器(RBR)和发送保持寄存器(THR) RBR暂存从线路上接收到的有效字符,等待本地读取。THR暂存等待发向线路的数据。它们共用同意I/O地址,在半双工工作环境下,互不干扰。 2)中断识别寄存器(IIR)和中断允许寄存器(IER)

相关主题
文本预览
相关文档 最新文档