VC实现串口通信例程文档格式.docx

上传人:b****5 文档编号:19452616 上传时间:2023-01-06 格式:DOCX 页数:13 大小:23.28KB
下载 相关 举报
VC实现串口通信例程文档格式.docx_第1页
第1页 / 共13页
VC实现串口通信例程文档格式.docx_第2页
第2页 / 共13页
VC实现串口通信例程文档格式.docx_第3页
第3页 / 共13页
VC实现串口通信例程文档格式.docx_第4页
第4页 / 共13页
VC实现串口通信例程文档格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

VC实现串口通信例程文档格式.docx

《VC实现串口通信例程文档格式.docx》由会员分享,可在线阅读,更多相关《VC实现串口通信例程文档格式.docx(13页珍藏版)》请在冰豆网上搜索。

VC实现串口通信例程文档格式.docx

3.设置缓冲区长度:

  BOOLSetupComm(

  HANDLEhFile,//handleofcommunicationsdevice

  DWORDdwInQueue,//sizeofinputbuffer

  DWORDdwOutQueue//sizeofoutputbuffer

4.COMMPROP结构:

  可使用GetCommProperties()取得COMMPROP结构,COMMPROP结构中记载了系统支持的各项设置。

  typedefstruct_COMMPROP{//cmmp

  WORDwPacketLength;

//packetsize,inbytes

  WORDwPacketVersion;

//packetversion

  DWORDdwServiceMask;

//servicesimplemented

  DWORDdwReserved1;

//reserved

  DWORDdwMaxTxQueue;

//maxTxbufsize,inbytes

  DWORDdwMaxRxQueue;

//maxRxbufsize,inbytes

  DWORDdwMaxBaud;

//maxbaudrate,inbps

  DWORDdwProvSubType;

//specificprovidertype

  DWORDdwProvCapabilities;

//capabilitiessupported

  DWORDdwSettableParams;

//changeableparameters

  DWORDdwSettableBaud;

//allowablebaudrates

  WORDwSettableData;

//allowablebytesizes

  WORDwSettableStopParity;

//stopbits/parityallowed

  DWORDdwCurrentTxQueue;

//Txbuffersize,inbytes

  DWORDdwCurrentRxQueue;

//Rxbuffersize,inbytes

  DWORDdwProvSpec1;

//provider-specificdata

  DWORDdwProvSpec2;

  WCHARwcProvChar[1];

  }COMMPROP;

  dwMaxBaud:

  BAUD_07575bps

  BAUD_110110bps

  BAUD_134_5134.5bps

  BAUD_150150bps

  BAUD_300300bps

  BAUD_600600bps

  BAUD_12001200bps

  BAUD_18001800bps

  BAUD_24002400bps

  BAUD_48004800bps

  BAUD_72007200bps

  BAUD_96009600bps

  BAUD_1440014400bps

  BAUD_1920019200bps

  BAUD_3840038400bps

  BAUD_56K56Kbps

  BAUD_5760057600bps

  BAUD_115200115200bps

  BAUD_128K128Kbps

  BAUD_USERProgrammablebaudratesavailable

  dwProvSubType:

  PST_FAX传真设备

  PST_LATLAT协议

  PST_MODEM调制解调器设备

  PST_NETWORK_BRIDGE未指定的网桥

  PST_PARALLELPORT并口

  PST_RS232RS-232口

  PST_RS422RS-422口

  PST_RS423RS-432口

  PST_RS449RS-449口

  PST_SCANNER扫描仪设备

  PST_TCPIP_TELNETTCP/IPTelnet协议

  PST_UNSPECIFIED未指定

  PST_X25X.25标准

  dwProvCapabilities

  PCF_16BITMODE支持特殊的16位模式

  PCF_DTRDSR支持DTR(数据终端就绪)/DSR(数据设备就绪)

  PCF_INTTIMEOUTS支持区间超时

  PCF_PARITY_CHECK支持奇偶校验

  PCF_RLSD支持RLSD(接收线信号检测)

  PCF_RTSCTS支持RTS(请求发送)/CTS(清除发送)

  PCF_SETXCHAR支持可设置的XON/XOFF

  PCF_SPECIALCHARS支持特殊字符

  PCF_TOTALTIMEOUTS支持总(占用时间)超时

  PCF_XONXOFF支持XON/XOFF流控制

  标准RS-232和WINDOW支持除PCF_16BITMODE和PCF_SPECIALCHAR外的所有功能

  dwSettableParams

  SP_BAUD可配置波特率

  SP_DATABITS可配置数据位个数

  SP_HANDSHAKING可配置握手(流控制)

  SP_PARITY可配置奇偶校验模式

  SP_PARITY_CHECK可配置奇偶校验允许/禁止

  SP_RLSD可配置RLSD(接收信号检测)

  SP_STOPBITS可配置停止位个数

  标准RS-232和WINDOW支持以上所有功能

  wSettableData

  DATABITS_55个数据位

  DATABITS_66个数据位

  DATABITS_77个数据位

  DATABITS_88个数据位

  DATABITS_1616个数据位

  DATABITS_16X通过串行硬件线路的特殊宽度路径

  WINDOWS95支持16的所有设置

5.DCB结构:

  typedefstruct_DCB{//dcb

  DWORDDCBlength;

//sizeof(DCB)

  DWORDBaudRate;

//currentbaudrate

  指定当前的波特率

  DWORDfBinary:

1;

//binarymode,noEOFcheck

  指定是否允许二进制模式,

  WINDOWS95中必须为TRUE

  DWORDfParity:

//enableparitychecking

  指定奇偶校验是否允许

  DWORDfOutxCtsFlow:

1;

//CTSoutputflowcontrol

  指定CTS是否用于检测发送控制。

  当为TRUE是CTS为OFF,发送将被挂起。

  DWORDfOutxDsrFlow:

//DSRoutputflowcontrol

  DWORDfDtrControl:

2;

//DTRflowcontroltype

  DTR_CONTROL_DISABLE值将DTR置为OFF,DTR_CONTROL_ENABLE值将DTR置为ON,DTR_CONTROL_HANDSHAKE允许DTR"

握手"

DWORDfDsrSensitivity:

//DSRsensitivity当该值为TRUE时DSR为OFF时接收的字节被忽略

  DWORDfTXContinueOnXoff:

//XOFFcontinuesTx

  指定当接收缓冲区已满,并且驱动程序已经发

  送出XoffChar字符时发送是否停止。

  TRUE时,在接收缓冲区接收到缓冲区已满的字节XoffLim且驱动程序已经发送出XoffChar字符中止接收字节之后,发送继续进行。

  FALSE时,在接收缓冲区接收到代表缓冲区已空的字节XonChar且驱动程序已经发送出恢复发送的XonChar之后,发送继续进行。

  DWORDfOutX:

//XON/XOFFoutflowcontrol

  TRUE时,接收到XoffChar之后便停止发送

  接收到XonChar之后将重新开始

  DWORDfInX:

//XON/XOFFinflowcontrol

  TRUE时,接收缓冲区接收到代表缓冲区满的XoffLim之后,XoffChar发送出去

  接收缓冲区接收到代表缓冲区空的XonLim之后,XonChar发送出去

  DWORDfErrorChar:

//enableerrorreplacement

  该值为TRUE且fParity为TRUE时,用ErrorChar成员指定的字符代替奇偶校验错误的接收字符

  DWORDfNull:

//enablenullstripping

  TRUE时,接收时去掉空(0值)字节

  DWORDfRtsControl:

//RTSflowcontrol

  RTS_CONTROL_DISABLE时,RTS置为OFF

  RTS_CONTROL_ENABLE时,RTS置为ON

  RTS_CONTROL_HANDSHAKE时,

  当接收缓冲区小于半满时RTS为ON

  当接收缓冲区超过四分之三满时RTS为OFF

  RTS_CONTROL_TOGGLE时,

  当接收缓冲区仍有剩余字节时RTS为ON,否则缺省为OFF

  DWORDfAbortOnError:

//abortreads/writesonerror

  TRUE时,有错误发生时中止读和写操作

  DWORDfDummy2:

17;

  未使用

  WORDwReserved;

//notcurrentlyused

  未使用,必须为0

  WORDXonLim;

//transmitXONthreshold

  指定在XON字符发送这前接收缓冲区中可允许的最小字节数

  WORDXoffLim;

//transmitXOFFthreshold

  指定在XOFF字符发送这前接收缓冲区中可允许的最小字节数

  BYTEByteSize;

//numberofbits/byte,4-8

  指定端口当前使用的数据位

  BYTEParity;

//0-4=no,odd,even,mark,space

  指定端口当前使用的奇偶校验方法,可能为:

  EVENPARITY,MARKPARITY,NOPARITY,ODDPARITY

  BYTEStopBits;

//0,1,2=1,1.5,2

  指定端口当前使用的停止位数,可能为:

  ONESTOPBIT,ONE5STOPBITS,TWOSTOPBITS

  charXonChar;

//TxandRxXONcharacter

  指定用于发送和接收字符XON的值

  charXoffChar;

//TxandRxXOFFcharacter

  指定用于发送和接收字符XOFF值

  charErrorChar;

//errorreplacementcharacter

  本字符用来代替接收到的奇偶校验发生错误时的值

  charEofChar;

//endofinputcharacter

  当没有使用二进制模式时,本字符可用来指示数据的结束

  charEvtChar;

//receivedeventcharacter

  当接收到此字符时,会产生一个事件

  WORDwReserved1;

//reserved;

donotuse未使用

  }DCB;

6.改变端口设置

  使用如下的两个方法

  BOOLGetCommState(hComm,&

dcb);

  BOOLSetCommState(hComm,&

7.改变普通设置

  BuildCommDCB(szSettings,&

DCB);

  szSettings的格式:

baudparitydatastop

  例:

"

baud=96parity=ndata=8stop=1"

  简写:

"

96,N,8,1"

  szSettings的有效值

  baud:

  11or110=110bps

  15or150=150bps

  30or300=300bps

  60or600=600bps

  12or1200=1200bps

  24or2400=2400bps

  48or4800=4800bps

  96or9600=9600bps

  19or19200=19200bps

  parity:

  n=none

  e=even

  o=odd

  m=mark

  s=space

  data:

  5,6,7,8

  StopBit

  1,1.5,2

8.COMMCONFIG结构:

  typedefstruct_COMM_CONFIG{

  DWORDdwSize;

  WORDwVersion;

  DCBdcb;

  DWORDdwProviderSubType;

  DWORDdwProviderOffset;

  DWORDdwProviderSize;

  WCHARwcProviderData[1];

  }COMMCONFIG,*LPCOMMCONFIG;

  可方便的使用BOOLCommConfigDialog(

  LPTSTRlpszName,

  HWNDhWnd,

  LPCOMMCONFIGlpCC);

  来设置串行口。

9.超时设置:

  可通过COMMTIMEOUTS结构设置超时,

  typedefstruct_COMMTIMEOUTS{

  DWORDReadIntervalTimeout;

  DWORDReadTotalTimeoutMultiplier;

  DWORDReadTotalTimeoutConstant;

  DWORDWriteTotalTimeoutMultiplier;

  DWORDWriteTotalTimeoutConstant;

  }COMMTIMEOUTS,*LPCOMMTIMEOUTS;

  区间超时:

(仅对从端口中读取数据有用)它指定在读取两个字符之间要经历的时间

  总超时:

当读或写特定的字节数需要的总时间超过某一阈值时,超时触发.

  超时公式:

  ReadTotalTimeout=(ReadTotalTimeoutMultiplier*bytes_to_read)

  +ReadToTaltimeoutConstant

  WriteTotalTimeout=(WriteTotalTimeoutMuliplier*bytes_to_write)

  +WritetoTotalTimeoutConstant

  NOTE:

在设置超时时参数0为无限等待,既无超时

  参数MAXDWORD为立即返回

  超时设置:

  GetCommTimeouts(hComm,&

timeouts);

  SetCommTimeouts(hComm,&

10.查询方式读写数据

  例程:

  COMMTIMEOUTSto;

  DWORDReadThread(LPDWORDlpdwParam)

  {

  BYTEinbuff[100];

  DWORDnBytesRead;

  if(!

(cp.dwProvCapabilities&

PCF_INTTIMEOUTS))

  return1L;

  memset(&

to,0,sizeof(to));

  to.ReadIntervalTimeout=MAXDWORD;

to);

  while(bReading)

ReadFile(hComm,inbuff,100,&

nBytesRead,NULL))

  locProcessCommError(GetLastError());

  else

  if(nBytesRead)

  locProcessBytes(inbuff,nBytesRead);

  }

  PurgeComm(hComm,PURGE_RXCLEAR);

  return0L;

  PurgeComm()是一个清除函数,它可以中止任何未决的后台读或写,并且可以冲掉I/O缓冲区.

  BOOLPurgeComm(HANDLEhFile,DWORDdwFlags);

  dwFlages的有效值:

  PURGE_TXABORT:

中止后台写操作

  PRUGE_RXABORT:

中止后台读操作

  PRUGE_TXCLEAR:

清除发送缓冲区

  PRUGE_RXCLEAR:

清除接收缓冲区

  技巧:

  可通过ClearCommError()来确定接收缓区中处于等待的字节数。

  BOOLClearCommError(

  HANDLEhFile,//handletocommunicationsdevice

  LPDWORDlpErrors,//pointertovariabletoreceiveerrorcodes

  LPCOMSTATlpStat//pointertobufferforcommunicationsstatus

  ClearCommError()将返回一个COMSTAT结构:

  typedefstruct_COMSTAT{//cst

  DWORDfCtsHold:

//TxwaitingforCTSsignal

  DWORDfDsrHold:

//TxwaitingforDSRsignal

  DWORDfRlsdHold:

//TxwaitingforRLSDsignal

  DWORDfXoffHold:

//Txwaiting,XOFFcharrec`d

  DWORDfXoffSent:

//Txwaiting,XOFFcharsent

  DWORDfEof:

//EOFcharactersent

  DWORDfTxim:

//characterwaitingforTx

  DWORDfReserved:

25;

  DWORDcbInQue;

//bytesininputbuffer

  DWORDcbOutQue;

//bytesinoutputbuffer

  }COMSTAT,*LPCOMSTAT;

  其中的cbInQue和cbOutQue中即为缓冲区字节。

11.同步I/O读写数据

  COMMTIOMOUTSto;

  DWORDnByteRead,dwErrorMask,nToRead;

  COMSTATcomstat;

cp.dwProvCapabilities&

PCF_TOTALTIMEOUTS)

  to.ReadT

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

当前位置:首页 > IT计算机 > 电脑基础知识

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

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