亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? serialcomm.asp

?? 串口通信高級編程 visual c++
?? ASP
?? 第 1 頁 / 共 3 頁
字號:
<%@ Language=VBScript %>
<!-- #include file="../../ArticleAccess.asp" -->
<!-- #include file="../../GetAccessCount.asp" -->
<%
 PrintArticleAccessCount 45
 AccessArticle  45
 %>
 <html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title> Serial Communication in Windows </title>
</head>

<body>

<p align="center">&nbsp;</p>
<p align="center"><font face="Verdana" size="2"><b>[<u> </u></b></font><font size="2" face="Verdana"><b><u>Serial Communication in Windows</u></b></font><font face="Verdana" size="2"><b><u>
</u>]<br>
</b><a href="mailto:ashishdhar@hotmail.com"><i>ashish dhar</i></a></font></p>
<table borderColor="#ffffff" height="4318" cellSpacing="0" borderColorDark="#ffffff" width="99%" borderColorLight="#ffffff" border="1">
  <tbody>
    <tr>
      <td vAlign="top" width="11%" bgColor="#538ab3" height="4314">
        <div align="justify">
          <table borderColor="#538ab3" height="4654" cellSpacing="4" borderColorDark="#000000" width="100%" borderColorLight="#538ab3" border="4">
            <tbody>
              <tr>
                <td vAlign="top" borderColorLight="#538ab3" width="100%" bgColor="#538ab3" borderColorDark="#538ab3" height="4650"><br>
                  <br>
                  <br>
                  <br>
                  <br>
                  <br>
                  <br>
                  <br>
                  <br>
                  <br>
                  <br>
                  <br>
                  <br>
                  <br>
                  <br>
                  <br>
                </td>
              </tr>
            </tbody>
          </table>
        </div>
      </td>
      <td vAlign="top" borderColorLight="#e8e9e2" width="69%" bgColor="#ffffff" borderColorDark="#f0f0f0" height="4314">&nbsp;

<p><font size="2" face="Verdana"><a href="../Source.zip">Source code</a><b><br>
<br>
</b>This article is meant to give you a jump start on doing serial communication
in Windows (NT family). The article will provide a class called
CSerialCommHelper which you can use directly to do serial communication in your
application. The class that is provided here with this article does uses
overlapped IO. You donot need to know much about serial communication or
overlapped IO for this article. However, you need to know some about the
synchronization objects like Events and some Windows APIs like
WaitForSingleObject and WaitForMultipleObject etc. Also some basic understanding
of windows threads is required - like thread creation and <i>termination</i>.</font></p>
<p><font size="2" face="Verdana"><b>Introduction<br>
</b>In order for your computer to be able to do serial communication, computer
has to have a serial port. Most of the computers have at least one serial port
also known as COM port ( communication port ) and are generally called COM1 COM2
etc. Then there are the device drivers for the serial ports. If you think it
over, all you that you need to do in serial communication is either send data or
receive data. In other words, you are doing input/output (IO) to the serial
port. The same IO is done with disk based files. Hence there is no surprise that
the APIs for reading and writing to a file apply to serial ports as well. When
you send data to the serial port its in terms of bytes but when it leaves the
serial port it is in the form of bits. Similarly, when the data arrives at the
serial port, its in bit format and when you get data you get it in bytes.&nbsp;<br>
Without any further discussion lets get started.<br>
<br>
<b>Opening the COM port<br>
</b>The first and the foremost step in doing a serial communication is to open
the desired port. Lets say you have your device hooked to COM1 you can open the
COM port using following API:</font></p>
<table border="0" cellspacing="1" width="100%" bgcolor="#EEE8EE">
  <tr>
    <td width="100%">
      <pre><font size="2">HANDLE m_hCommPort = ::<font color="#0000FF">CreateFile</font>(	szPortName,
					GENERIC_READ|GENERIC_WRITE,//access ( read and write)
					0,	//(share) 0:cannot share the COM port						
					0,	//security  (None)				
					OPEN_EXISTING,// creation : open_existing
					FILE_FLAG_OVERLAPPED,// we want overlapped operation
					0// no templates file for COM port...
					);</font></pre>
    </td>
  </tr>
</table>
<p><font size="2" face="Verdana">The third fifth and seventh parameters have to be what they
are in the above example by law. We want to open the file ( the COM port ) in an
overlapped fashion - that's why the sixth param is FILE_FLAG_OVERLAPPED. We will
get into the details of overlapped IO a bit later. As you must have guessed from
the name , CreateFile() API can be used to create a file (disk based) and also
it can be used to open an existing file.&nbsp;<br>
To Windows a serial port or a disk based file both are IO devices . So, in order
to open an existing file ( serial port ) all we need to know the name of the
device ( COM1) and pass the creation flags as OPEN_EXISTING.<br>
If a COM port is opened successfully, the API returns handle to the com port
just like a handle to a file. However, if the system could not open the COM
port, it would return INVALID_HANDLE_VALUE . And you can get the reason by
calling GetLastError(). One of the common errors while opening a COM port is
that the COM port is already opened by some other application and in that case
you would get ERROR_ACCESS_DENIED (5). Similarly if you by mistake opened a COM
port that doesnot exist , you would get ERROR_FILE_NOT_FOUND&nbsp; as the last
error.<br>
<u>Note: Remember not to do make any function calls (like ASSERT) before calling
GetLastError() or you would get 0</u>.<u><br>
</u>Once you have opened the com port all you need to do now is to start using
it.<br>
<br>
<b>Reading and Writing<br>
</b>Now, once you have a com port open, you may want to send&nbsp; some data to
the connected device. For example, lets say you want to send &quot;Hello&quot;
to the device(e.g., another PC). When you want to send the data across the
serial port, you need to write to the serial port just like you would write to a
file. You would use following API:<br>
</font></p>
<table border="0" cellspacing="1" width="100%">
  <tr>
    <td width="100%" bgcolor="#C0C0C0"><font size="2" face="Verdana">iRet = WriteFile (m_hCommPort,data,dwSize,&amp;dwBytesWritten  ,&amp;ov);&nbsp;&nbsp;&nbsp;&nbsp;</font></td>
  </tr>
</table>
<p><font size="2" face="Verdana">where data contains &quot;Hello&quot; .&nbsp;<br>
Lets say in response to your &quot;Hello&quot; , the device sends you
&quot;Hi&quot; . So you need to read the data. Again ,you would&nbsp; use
following API:</font></p>
<table border="0" cellspacing="1" width="100%">
  <tr>
    <td width="100%" bgcolor="#C0C0C0"><font size="2" face="Verdana">abRet = ::ReadFile(m_hCommPort,szTmp
      ,sizeof(szTmp ),&amp;dwBytesRead,&amp;ovRead) ;</font></td>
  </tr>
</table>
<p><font size="2" face="Verdana"><i>For now do not try to understand everything.We will get to
all this later.<br>
</i>All this sounds very simple. Right? <br>
Now lets start digging into issues. </font></p>
<p><font size="2" face="Verdana"><b>Issues with serial communication</b><br>
Just now I said, in response to your &quot;Hello&quot;, the device may send you
&quot;Hi&quot; back and you would like to read that. But the problem here is
that you don't know when the device is going to respond? Or will it ever
respond? When should you start to read from the port. One option is that as soon
as you made call to WriteFile, you make call to ReadFile . If no data is there
you need to make read again later on. This leads to what is called polling. You
keep polling the port for data. This model does not really&nbsp; seem to be a
good one. It would be nice if somehow you were notified by the system when data
has arrived and only then would you make call to ReadFile. This is event driven
approach and fits well into Windows programming. And good news is that such a
model is possible . <br>
<br>
<br>
<br>
Another issue with the serial communication is that since it always occurs
between two devices, the two devices need to agree on how they talk to each
other. Each side needs to follow certain protocols to conduct business. Since
its the serial port that actually carries out the communication, we need to
configure the serial port. There is an API available for exact same purpose.
Following is the API:</font></p>
<table border="0" cellspacing="1" width="100%" bgcolor="#C0C0C0">
  <tr>
    <td width="100%"><font size="2" face="Verdana">SetCommState ( HANDLE hFile, LPDCB lpDCB)</font></td>
  </tr>
</table>
<p><font size="2" face="Verdana">The first parameter is the handle to COM port and the second
paramter is what is called device control block (DCB) . The DCB is a struct
defined in winbase.h and has 28 data members. For example, we need to specify
baud rate at which the COM port operates, you need to set the <b>BaudRate </b>member
of the struct . Baud rate is usual 9600 (bps) . But the two devices have to use
the same baud rate to conduct business. Similarly if you want to use parity you
need to set <b>Parity</b> member of the struct. Again the two devices have to
use same parity. Some of the data members are reserved and have to be 0. I have
found it easier to get the current DCB struct and then set those members which
we are interested in changing. Following code gets the current dcb and sets some
of the fields:<br>
<br>
</font></p>
<table border="0" cellspacing="1" width="100%" bgcolor="#EEE8EE">
  <tr>
    <td width="100%">
      <pre><font size="2" face="Verdana">DCB dcb = {0};
dcb.DCBlength = sizeof(DCB);

if (!::<font color="#0000FF">GetCommState </font>(m_hCommPort,&amp;dcb))
{
	TRACE ( &quot;CSerialCommHelper : Failed to Get Comm State Reason: %d&quot;,GetLastError());
	return E_FAIL;
}

dcb.BaudRate	= dwBaudRate;
dcb.ByteSize	= byByteSize;
dcb.Parity		= byParity;
if ( byStopBits == 1 )
	dcb.StopBits	= ONESTOPBIT;
else if (byStopBits == 2 ) 
	dcb.StopBits	= TWOSTOPBITS;
else 
	dcb.StopBits	= ONE5STOPBITS;


if (!::<font color="#0000FF">SetCommState</font> (m_hCommPort,&amp;dcb))
{
	ASSERT(0);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人手机在线| 看片网站欧美日韩| 狠狠网亚洲精品| 色悠久久久久综合欧美99| 精品动漫一区二区三区在线观看| 亚洲另类在线视频| 成人免费毛片a| 日韩欧美第一区| 日韩精品一卡二卡三卡四卡无卡| 波多野结衣视频一区| 亚洲精品在线观看网站| 亚洲成人先锋电影| 91久久久免费一区二区| 一区二区中文字幕在线| 国产一区二区在线视频| 欧美一区二区三区人| 亚洲午夜日本在线观看| 91在线视频播放地址| 日本一区二区三区视频视频| 美日韩一区二区三区| 911精品产国品一二三产区| 亚洲精品视频在线看| 不卡视频一二三| 国产精品久久三| 成人三级在线视频| 亚洲国产精品传媒在线观看| 国产精品夜夜嗨| 久久无码av三级| 国产麻豆9l精品三级站| 欧美sm极限捆绑bd| 国产麻豆视频精品| 国产三级精品视频| 国产福利不卡视频| 国产精品三级久久久久三级| 国产成人av福利| 国产精品乱人伦| a在线播放不卡| 亚洲精品伦理在线| 91精品1区2区| 午夜电影一区二区三区| 欧美一区二区三区性视频| 日本女优在线视频一区二区| 日韩欧美在线影院| 国产在线精品免费av| 国产日产欧美一区二区三区| 高清国产一区二区| 亚洲美女屁股眼交| 欧美日韩的一区二区| 免费一区二区视频| 国产视频亚洲色图| 91在线视频网址| 日日夜夜一区二区| 久久久久久一级片| 色婷婷国产精品久久包臀 | 91久久久免费一区二区| 午夜影院久久久| 日韩精品一区二区三区四区| 久久国产精品99精品国产| 欧美国产欧美亚州国产日韩mv天天看完整| 成人一区二区三区视频| 亚洲精品欧美在线| 欧美一区二区三区免费视频| 极品少妇一区二区| 最新国产成人在线观看| 欧美久久久久免费| 国产精品18久久久久久久久久久久 | 亚洲国产岛国毛片在线| 欧美在线观看视频在线| 精品亚洲aⅴ乱码一区二区三区| 国产精品电影一区二区| 88在线观看91蜜桃国自产| 精品一区二区三区在线播放视频| 国产精品久久久久一区二区三区共| 欧美主播一区二区三区| 国产精品1区2区3区| 亚洲午夜av在线| 中文字幕电影一区| 欧美一区二区免费观在线| 99久久精品一区二区| 韩国女主播一区二区三区| 亚洲精品欧美在线| 国产精品嫩草影院av蜜臀| 欧美一二三区在线| 91福利区一区二区三区| 国产91在线|亚洲| 日韩av在线免费观看不卡| 中文字幕在线免费不卡| 精品日韩一区二区| 欧美性xxxxxxxx| 99久久婷婷国产| 成人性生交大合| 国产一区二区主播在线| 美日韩一区二区三区| 午夜av一区二区三区| 亚洲乱码中文字幕| 国产精品国模大尺度视频| 日韩欧美国产高清| 51久久夜色精品国产麻豆| 在线观看成人小视频| av中文字幕在线不卡| 国产精品夜夜嗨| 精品亚洲成av人在线观看| 美腿丝袜在线亚洲一区| 免费欧美在线视频| 爽好久久久欧美精品| 亚洲小说欧美激情另类| 亚洲毛片av在线| 综合久久综合久久| 亚洲欧洲日产国产综合网| 国产日韩v精品一区二区| 国产视频在线观看一区二区三区| 精品国产一二三| 精品国产乱码久久久久久夜甘婷婷| 91麻豆精品久久久久蜜臀| 欧美三级电影在线看| 欧美性xxxxxxxx| 欧美精品在线观看播放| 6080午夜不卡| 日韩三级高清在线| 日韩欧美亚洲国产另类| 欧美tickling挠脚心丨vk| 精品成人在线观看| 中文字幕高清一区| 亚洲日韩欧美一区二区在线| 亚洲免费看黄网站| 亚洲国产精品天堂| 石原莉奈在线亚洲三区| 精品亚洲国内自在自线福利| 国产老肥熟一区二区三区| 成人性生交大片免费看在线播放| 成+人+亚洲+综合天堂| 97国产一区二区| 欧美视频三区在线播放| 91精品国模一区二区三区| 久久午夜国产精品| 国产精品国产三级国产普通话蜜臀 | 丝袜美腿高跟呻吟高潮一区| 蜜桃av一区二区三区电影| 国产精品自在在线| av电影在线观看完整版一区二区| 色94色欧美sute亚洲线路二| 欧美夫妻性生活| 久久久久亚洲综合| 一级精品视频在线观看宜春院| 亚洲成人在线网站| 国产成人午夜99999| 欧美专区日韩专区| 欧美tk—视频vk| 综合自拍亚洲综合图不卡区| 亚洲妇女屁股眼交7| 国产一区二区在线观看视频| 94-欧美-setu| 欧美一区二区视频在线观看2020| 亚洲国产精品精华液ab| 亚洲国产另类精品专区| 国产91精品免费| 欧美高清www午色夜在线视频| 国产三级精品三级在线专区| 亚洲123区在线观看| 成人永久免费视频| 91麻豆精品国产91久久久久| 国产精品视频第一区| 日本麻豆一区二区三区视频| 不卡一区在线观看| 精品三级在线观看| 亚洲成年人网站在线观看| 国产99一区视频免费| 在线电影院国产精品| 日韩一区欧美小说| 国产在线看一区| 欧美欧美欧美欧美| 亚洲精品国产第一综合99久久| 激情综合网av| 欧美精品日韩一区| 亚洲人成小说网站色在线| 国产一区二区三区免费看| 欧美另类久久久品| 亚洲私人黄色宅男| 国产99久久久国产精品潘金网站| 日韩一区国产二区欧美三区| 亚洲成人一区在线| 欧美写真视频网站| 亚洲欧美福利一区二区| eeuss鲁片一区二区三区| 久久精品亚洲一区二区三区浴池| 日韩精品免费专区| 欧美日韩视频专区在线播放| 一区二区三区四区在线| 99久久婷婷国产综合精品| 久久精品人人做| 韩国成人精品a∨在线观看| 91精品国产免费| 日韩精品一二三四| 337p亚洲精品色噜噜噜| 亚洲高清免费在线| 欧美日韩国产成人在线91| 日本中文字幕一区二区视频| 欧美喷潮久久久xxxxx| 天堂蜜桃91精品| 555夜色666亚洲国产免|