串口通信例程.rtf
《串口通信例程.rtf》由会员分享,可在线阅读,更多相关《串口通信例程.rtf(9页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、Window 95 串口通讯函数集合(只适用于 32 位)需要说明的是:这是我程序的一部分,因此有一些与具体应用无关的部分。但我觉得关键是原理,而不是程序本身.后面有些使用介绍,帮助理解这长的程序。头文件(.H)#include StdAfx.h#define GWL_PGPSINFO 0#define GPSEXTRABYTES sizeof(LONG)#define MAXPORTS 4#define CN_SEND WM_USER+100#define RXQUEUE 4096#define TXQUEUE 4096/cursor states#define CS_HIDE 0 x00#
2、define CS_SHOW 0 x01/Flow control flags#define FC_DTRDSR 0 x01#define FC_RTSCTS 0 x02#define FC_XONXOFF 0 x04/ascii definitions#define ASCII_BEL 0 x07#define ASCII_BS 0 x08#define ASCII_LF 0 x0A#define ASCII_CR 0 x0D#define ASCII_XON 0 x11#define ASCII_XOFF 0 x13/data structurestypedef struct tagGPS
3、INFO HANDLE idComDev;BYTE bPort;BOOL fConnected;BYTE bByteSize,bParity,bStopBits;DWORD dwBaudRate;HANDLE hPostEvent,hWatchThread,hWatchEvent;HWND hTermWnd;DWORD dwThreadID;OVERLAPPED osWrite,osRead;GPSINFO,*PGPSINFO;#define COMDEV(x)(x-idComDev)#define PORT(x)(x-bPort)#define CONNECTED(x)(x-fConnect
4、ed)#define BYTESIZE(x)(x-bByteSize)#define PARITY(x)(x-bParity)#define STOPBITS(x)(x-bStopBits)#define BAUDRATE(x)(x-dwBaudRate)#define POSTEVENT(x)(x-hPostEvent)#define HTHREAD(x)(x-hWatchThread)#define THREADID(x)(x-dwThreadID)#define WRITE_OS(x)(x-osWrite)#define READ_OS(x)(x-osRead)/function pro
5、totypes(private)LRESULT NEAR CreateGPSInfo(HWND,BYTE nPort=1);BOOL NEAR DestroyGPSInfo();int NEAR ReadCommBlock(LPSTR,int);BOOL NEAR WriteCommBlock(LPSTR,DWORD);BOOL NEAR OpenConnection();BOOL NEAR SetupConnection();BOOL NEAR CloseConnection();/function prototypes(public)DWORD FAR PASCAL CommWatchPr
6、oc(LPSTR);具体实现请看下文(为了这文章,我都段线 2 次了)CPP 实现部分:#include StdAfx.h#include Com.hHWND hGPSWnd=NULL;PGPSINFO npGPSInfo=NULL;LRESULT NEAR CreateGPSInfo(HWND hWnd,BYTE nPort)if(NULL=(npGPSInfo=(PGPSINFO)LocalAlloc(LPTR,sizeof(GPSINFO)return(LRESULT)-1);hGPSWnd=hWnd;COMDEV(npGPSInfo)=0;CONNECTED(npGPSInfo)=FA
7、LSE;PORT(npGPSInfo)=nPort;BAUDRATE(npGPSInfo)=CBR_9600;BYTESIZE(npGPSInfo)=8;PARITY(npGPSInfo)=NOPARITY;STOPBITS(npGPSInfo)=ONESTOPBIT;WRITE_OS(npGPSInfo).Offset=0;WRITE_OS(npGPSInfo).OffsetHigh=0;READ_OS(npGPSInfo).Offset=0;READ_OS(npGPSInfo).OffsetHigh=0;/create I/O event used for overlapped reads
8、/writes READ_OS(npGPSInfo).hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);if(READ_OS(npGPSInfo).hEvent=NULL)LocalFree(npGPSInfo);return(-1);WRITE_OS(npGPSInfo).hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);if(NULL=WRITE_OS(npGPSInfo).hEvent)CloseHandle(READ_OS(npGPSInfo).hEvent);LocalFree(npGPSInfo);return(-1)
9、;return(LRESULT)TRUE);BOOL NEAR DestroyGPSInfo()if(!npGPSInfo)return(FALSE);if(CONNECTED(npGPSInfo)CloseConnection();CloseHandle(READ_OS(npGPSInfo).hEvent);CloseHandle(WRITE_OS(npGPSInfo).hEvent);CloseHandle(POSTEVENT(npGPSInfo);LocalFree(npGPSInfo);return(TRUE);BOOL NEAR OpenConnection()char szPort
10、15;BOOL fRetVal;HCURSOR hOldCursor,hWaitCursor;HANDLE hCommWatchThread;DWORD dwThreadID;COMMTIMEOUTS CommTimeOuts;if(!npGPSInfo)return(FALSE);hWaitCursor=LoadCursor(NULL,IDC_WAIT);hOldCursor=SetCursor(hWaitCursor);wsprintf(szPort,COM%d,PORT(npGPSInfo);if(COMDEV(npGPSInfo)=CreateFile(szPort,GENERIC_R
11、EAD|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,NULL)=(HANDLE)-1)return(FALSE);else SetCommMask(COMDEV(npGPSInfo),EV_RXCHAR);SetupComm(COMDEV(npGPSInfo),4096,4096);PurgeComm(COMDEV(npGPSInfo),PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);CommTimeOuts.Read
12、IntervalTimeout=0 xFFFFFFFF;CommTimeOuts.ReadTotalTimeoutMultiplier=0;CommTimeOuts.ReadTotalTimeoutConstant=1000;CommTimeOuts.WriteTotalTimeoutMultiplier=0;CommTimeOuts.WriteTotalTimeoutConstant=1000;SetCommTimeouts(COMDEV(npGPSInfo),&CommTimeOuts);fRetVal=SetupConnection();if(fRetVal)CONNECTED(npGP
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 串口 通信 例程
限制150内