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

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

?? serialcomm.asp

?? 一個串口通信的程序
?? 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一区二区三区免费野_久草精品视频
欧美精选午夜久久久乱码6080| 97超碰欧美中文字幕| 亚洲午夜在线观看视频在线| 亚洲四区在线观看| 国产精品成人一区二区三区夜夜夜| 国产欧美一二三区| 久久精品水蜜桃av综合天堂| 亚洲精品一区二区三区香蕉| 欧美成人精品1314www| 日韩欧美激情在线| 久久久久国产一区二区三区四区| 久久久国产精华| 中文字幕国产一区| 亚洲日本成人在线观看| 一区二区在线观看免费视频播放| 一区二区三区波多野结衣在线观看| 亚洲美女在线国产| 天天综合色天天综合| 久久超碰97中文字幕| 国产一区二区三区蝌蚪| 成人精品一区二区三区四区| 99久久久久久| 欧美午夜在线观看| 欧美一区二区三区人| 久久人人爽人人爽| 国产精品久99| 亚洲午夜视频在线| 蜜桃精品视频在线观看| 国产精品自拍网站| 97se狠狠狠综合亚洲狠狠| 欧美日韩三级视频| 精品福利一区二区三区免费视频| 国产欧美一区二区精品婷婷| 亚洲综合小说图片| 精品一区二区三区在线视频| 国产成人精品1024| 欧美四级电影在线观看| 精品久久久影院| 欧美国产乱子伦 | 亚洲国产精品av| 自拍偷拍亚洲欧美日韩| 亚洲成人高清在线| 国产真实精品久久二三区| aaa亚洲精品| 日韩免费性生活视频播放| 国产精品视频yy9299一区| 亚洲1区2区3区4区| 丁香网亚洲国际| 欧美一级在线观看| 国产精品美女一区二区| 日本一区中文字幕| av一区二区三区黑人| 日韩欧美国产一区二区在线播放| 国产精品毛片a∨一区二区三区| 午夜激情一区二区三区| 高清不卡在线观看| 91精品国产综合久久久蜜臀图片| 国产精品污污网站在线观看| 日韩av一级片| 色婷婷综合视频在线观看| 日韩美女视频一区二区在线观看| 亚洲丝袜精品丝袜在线| 国产一区视频网站| 在线电影欧美成精品| 亚洲视频你懂的| 国产精品一二三| 91麻豆精品国产91久久久使用方法 | 91麻豆精品国产自产在线观看一区| 国产精品乱子久久久久| 亚洲sss视频在线视频| 成人激情小说网站| 精品免费一区二区三区| 偷窥国产亚洲免费视频| 一本色道综合亚洲| 国产女人aaa级久久久级| 奇米精品一区二区三区在线观看| 99国产精品久久| 国产日韩视频一区二区三区| 日韩成人免费电影| 欧美曰成人黄网| 亚洲欧美日韩久久| 成人久久18免费网站麻豆| 久久久久久久久伊人| 奇米精品一区二区三区在线观看| 欧美色网站导航| 亚洲欧美电影一区二区| av中文字幕在线不卡| 国产亚洲短视频| 国产一区二区伦理片| 日韩一区二区三区在线观看| 亚洲成人高清在线| 欧美性淫爽ww久久久久无| 亚洲女人小视频在线观看| 91美女福利视频| 亚洲日本在线观看| 99国产精品99久久久久久| 国产精品电影一区二区| 99久久99久久免费精品蜜臀| 国产精品婷婷午夜在线观看| 激情五月婷婷综合网| 精品欧美黑人一区二区三区| 九一久久久久久| 精品系列免费在线观看| 一区二区三区久久| 日本精品裸体写真集在线观看| 国产成人综合自拍| 精品伊人久久久久7777人| 欧美肥妇free| 日韩成人一级大片| 欧美一级艳片视频免费观看| 青青草原综合久久大伊人精品 | 久久av资源网| 精品久久久久久久久久久久久久久久久| 午夜视频久久久久久| 91精品国产91久久久久久一区二区 | 7777精品伊人久久久大香线蕉| 亚洲va在线va天堂| 日韩三级视频在线观看| 精品一区二区三区蜜桃| 久久久久88色偷偷免费| 不卡视频一二三| 亚洲激情校园春色| 欧美日产国产精品| 激情亚洲综合在线| 中文字幕一区二区在线播放 | 中文字幕中文在线不卡住| 91丨porny丨最新| 婷婷久久综合九色综合伊人色| 91精品国产综合久久久久久漫画 | 香蕉久久一区二区不卡无毒影院 | 国产精品三级av在线播放| 色婷婷激情一区二区三区| 午夜免费久久看| 久久久久久久免费视频了| 99re热这里只有精品免费视频| 亚洲午夜在线视频| 精品成人一区二区| jlzzjlzz亚洲女人18| 亚洲444eee在线观看| 久久久蜜桃精品| 91黄色小视频| 久久国产精品区| 中文字幕欧美一| 91麻豆精品国产91久久久资源速度| 国产一区二区三区四区在线观看| 精品国产1区二区| 国产精品美女久久久久久久久久久| 中文在线一区二区| 亚洲一区在线看| 这里只有精品99re| www.日韩精品| 日韩高清不卡在线| 国产精品区一区二区三区| 欧美三级日本三级少妇99| 国产一区二区美女| 亚洲一区二区三区四区在线| 久久久久国产精品麻豆| 欧美性生活大片视频| 国产成人综合网| 丝袜a∨在线一区二区三区不卡| 国产无一区二区| 91精品综合久久久久久| 91美女片黄在线观看91美女| 国产一区二区视频在线播放| 亚洲午夜在线观看视频在线| 中文字幕成人网| 欧美一区2区视频在线观看| 91免费国产视频网站| 国产专区欧美精品| 日日夜夜免费精品| 亚洲精品va在线观看| 国产视频一区不卡| 欧美成人女星排行榜| 色国产综合视频| 成人美女视频在线观看18| 狠狠色丁香婷综合久久| 亚洲福利视频导航| 亚洲视频每日更新| 欧美经典一区二区| 精品少妇一区二区三区| 欧美精品三级在线观看| 一本久久精品一区二区| 国产69精品久久99不卡| 久久不见久久见免费视频1| 亚洲高清一区二区三区| 亚洲三级在线免费观看| 国产精品国产三级国产三级人妇| 精品福利一二区| 精品三级在线观看| 日韩欧美一级特黄在线播放| 欧美日韩午夜在线视频| 欧美天堂亚洲电影院在线播放| 91欧美激情一区二区三区成人| 国产成人av电影在线播放| 国产在线视频精品一区| 美女久久久精品| 日本欧美一区二区| 日韩在线a电影| 琪琪久久久久日韩精品| 五月婷婷久久综合|