国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 學院 > 開發(fā)設計 > 正文

在CB6下基于api函數(shù)編寫串口通信程序簡介

2019-11-17 05:28:56
字體:
供稿:網(wǎng)友

  1-在C++ Builder 6.0下基于api函數(shù)編寫串口通信程序簡介:
在dos/win95/win98的年代,操作系統(tǒng)對串口是不保護的,也就是說將串口的的資源完全
開放給用戶,用戶可以用直接操作硬件的函數(shù)(比如說TC2.0下的inport()和outport()函數(shù))
跟串口直接打交道,這時候用戶使用直接操作串口的函數(shù)怎樣"折磨"串口都是沒有問題的,
操作系統(tǒng)根本就不管不問,對串口操作所造成的一切后果都是用戶一個人承擔的,這時候用
戶對串口具有高度自由的支配權(quán);但是,這種情況好景不長,從win2000操作系統(tǒng)開始,微軟
為了"照顧好"計算機上的硬件,開始實施了對硬件的保護策略,也就是說任何用戶在他的操作
系統(tǒng)下企圖操縱串口時必須經(jīng)過他的同意方可進行,其實也就是變相的將用戶往必須使用他的
通信api函數(shù)才能操作串口這條"羊腸小路"上趕(當然也有別的方法操作串口,但那些并非我等
普通用戶能研究明白的),形象一點說就似乎你想怎樣操作串口的意圖必須經(jīng)過win2000的翻譯
(其實是win2000的設備驅(qū)動程序)才能轉(zhuǎn)達給串口一樣,基于這一點我們說(其實是很多資料上
說的)win2000下通過api函數(shù)操作串口是具有"設備無關性的",什么意思呢?就是說你想怎樣
操作串口就用相應的api函數(shù)告訴操作系統(tǒng)你想對串口干什么,然后操作系統(tǒng)就把你的意思轉(zhuǎn)
告給串口讓其做出相應的動作,相對于dos/win95/win98下來說,據(jù)我理解也就相當于你原來
寫的直接操作串口的函數(shù)在win2000下他替你完成了,但是你必須用win2000通信api函數(shù)清楚
地向操作系統(tǒng)表達清楚你到底想干什么,所以說在這種情況下要想寫好串口驅(qū)動程序你就必須
至少弄明白win2000下的通信api函數(shù)都是干什么的方可,啰里啰唆嘮叨了這么多... ...sorry,
還沒完呢,至少還有一件事我想說,原來在dos/win95/win98系統(tǒng)下有好多高手用c/c++對串口
進行直接操作是非常熟練的,尤其是dos時代的turbo 2.0操作串口的高手他們寫的串口驅(qū)動程
序直到win98的時候還用的非常洋洋自得,但是到了win2000的時候,他們的程序忽然不好使了
,而他們有的可能還會因為知識結(jié)構(gòu)上的滯后始終弄不明白怎么回事兒,兄弟們,你們該明白
了吧?閑話少敘,下面介紹筆者寫串口通信函數(shù)時用到的各個api函數(shù)---------
2-CreateFile()
用途:打開串口
原型:HANDLE CreateFile(LPCTSTR lpFileName,
DWord dwDesiredaccess,
DWORD dwShareMode,
LPSECUR99vY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDistribution,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile);
參數(shù)說明:
-lpFileName:要打開的文件名稱。對串口通信來說就是COM1或COM2。
-dwDesiredAccess:讀寫模式設置。此處應該用GENERIC_READ及GENERIC_WR99vE。
-dwShareMode:串口共享模式。此處不答應其他應用程序共享,應為0。
-lpSecurityAttributes:串口的安全屬性,應為0,表示該串口不可被子程序繼續(xù)。
-dwCreationDistribution:創(chuàng)建文件的性質(zhì),此處為OPEN_EXISTING.
-dwFlagsAndAttributes:屬性及相關標志,這里使用異步方式應該用FILE_FLAG_OVERLAPPED。
-hTemplateFile:此處為0。
操作說明:若文件打開成功,串口即可使用了,該函數(shù)返回串口的句柄,以后對串口操作時
即可使用該句柄。
舉例:HANDLE hComm;
hComm=CreateFile("COM1", //串口號
GENERIC_READGENERIC_WR99vE, //答應讀寫
0, //通訊設備必須以獨占方式打開
NULL, //無安全屬性
OPEN_EXISTING, //通訊設備已存在
FILE_FLAG_OVERLAPPED, //異步I/O
0); //通訊設備不能用模板打開
hComm即為函數(shù)返回的串口1的句柄。
3-CloseHandle()
用途:關閉串口

原型:BOOL CloseHandle(HANDLE hObjedt)
參數(shù)說明:
-hObjedt:串口句柄
操作說明:成功關閉串口時返回true,否則返回false
舉例:CloseHandle(hComm);
4-GetCommState()
用途:取得串口當前狀態(tài)
原型:BOOL GetCommState(HANDLE hFile,
LPDCB lpDCB);
參數(shù)說明:
-hFile:串口句柄
-lpDCB:設備控制塊(Device Control Block)結(jié)構(gòu)地址。此結(jié)構(gòu)中含有和設備相關的
參數(shù)。此處是與串口相關的參數(shù)。由于參數(shù)非常多,當需要設置串口參數(shù)
時,通常是先取得串口的參數(shù)結(jié)構(gòu),修改部分參數(shù)后再將參數(shù)結(jié)構(gòu)寫入。
在此僅介紹少數(shù)的幾個常用的參數(shù):
DWORD BaudRate:串口波特率
DWORD fParity:為1的話激活奇偶校驗檢查
DWORD Parity:校驗方式,值0~4分別對應無校驗、奇校驗、偶校驗、校驗
置位、校驗清零
DWORD ByteSize:一個字節(jié)的數(shù)據(jù)位個數(shù),范圍是5~8
DWORD StopBits:停止位個數(shù),0~2分別對應1位、1.5位、2位停止位
操作舉例:DCB ComDCB; //串口設備控制塊
GetCommState(hComm,&ComDCB);
5-SetCommState()
用途:設置串口狀態(tài),包括常用的更改串口號、波特率、奇偶校驗方式、數(shù)據(jù)位數(shù)等
原型:BOOL SetCommState(HANDLE hFile,
LPDCB lpDCB);
參數(shù)說明:
-hFile:串口句柄
-lpDCB:設備控制塊(Device Control Block)結(jié)構(gòu)地址。要更改的串口參數(shù)包含在此結(jié)構(gòu)中。
操作舉例:DCB ComDCB;
GetCommState(hComm,&ComDCB);//取得當前串口狀態(tài)
ComDCB.BaudRate=9600;//更改為9600bps,該值即為你要修改后的波特率
SetCommState(hComm,&ComDCB;//將更改后的參數(shù)寫入串口
6-WriteFile()
用途:向串口寫數(shù)據(jù)
原型:BOOL WriteFile(HANDLE hFile,
LPCVOID lpBuffer,
DWORD nNumberOfBytesToWrite,
LPDWORD lpNumberOfBytesWritten,
LPOVERLAPPED lpOverlapped);
參數(shù)說明:
-hFile:串口句柄
-lpBuffer:待寫入數(shù)據(jù)的首地址
-nNumberOfBytesToWrite:待寫入數(shù)據(jù)的字節(jié)數(shù)長度
-lpNumberOfBytesWritten:函數(shù)返回的實際寫入串口的數(shù)據(jù)個數(shù)的地址,利用此變量可判定
實際寫入的字節(jié)數(shù)和預備寫入的字節(jié)數(shù)是否相同。
-lpOverlapped:重疊I/O結(jié)構(gòu)的指針
操作舉例:DWORD BytesSent=0;
unsigned char SendBytes[5]={1,2,3,4,5};
OVERLAPPED ov_Write;
ov_Write.Offset=0;
ov_Write.OffsetHigh=0;
WriteFile(hComm, //調(diào)用成功返回非零,失敗返回零
SendBytes, //輸出緩沖區(qū)
5, //預備發(fā)送的字符長度
&BytesSent, //實際發(fā)出的字符數(shù)
&ov_Write); //重疊結(jié)構(gòu)
假如函數(shù)執(zhí)行成功的話檢查BytesSent的值應該為5,此函數(shù)是WriteFile函數(shù)執(zhí)行完畢后
自行填充的,利用此變量的填充值可以用來檢查該函數(shù)是否將所有的數(shù)據(jù)成功寫入串口
7-ReadFile()
用途:讀串口數(shù)據(jù)
原型:BOOL ReadFile(HANDLE hFile,
LPVOID lpBuffer,
DWORD nNumberOfBytesToRead,
lpNumberOfBytesRead,
lpOverlapped);
參數(shù)說明:
-hFile:串口句柄
-lpBuffer:存儲被讀出數(shù)據(jù)的首地址
-nNumberOfBytesToRead:預備讀出的字節(jié)個數(shù)
-NumberOfBytesRead:實際讀出的字節(jié)個數(shù)
-lpOverlapped:異步I/O結(jié)構(gòu),
操作舉例:unsigned char UCRxBuff[20];
COMSTAT ComStat;
DWORD dwError=0;
DWORD BytesRead=0;
OVERLAPPED ov_Read;
ov_Read.hEvent=CreateEvent(NULL, true, false, NULL);//必須創(chuàng)建有效事件

ClearCommError(hComm,&dwError,&ComStat);//檢查串口接收緩沖區(qū)中的數(shù)據(jù)個數(shù)

bResult=ReadFile(hComm, //串口句柄
ucRxBuff, //輸入緩沖區(qū)地址
ComStat.cbInQue, //想讀入的字符數(shù)
&BytesRead, //實際讀出的字節(jié)數(shù)的變量指針
&ov_Read); //重疊結(jié)構(gòu)指針
假如當前串口中有5個字節(jié)數(shù)據(jù)的話,那么執(zhí)行完ClearCommError()函數(shù)后,ComStat
結(jié)構(gòu)中的ComStat.cbInQue將被填充為5,此值在ReadFile函數(shù)中可被直接利用。
8-ClearCommError()
用途:清除串口錯誤或者讀取串口現(xiàn)在的狀態(tài)
原型:BOOL ClearCommError(HANDLE hFile,
LPDWORD lpErrors,
LPCOMATAT lpStat
);
參數(shù)說明:
-hFile:串口句柄
-lpErrors:返回錯誤數(shù)值,錯誤常數(shù)如下:
1-CE_BREAK:檢測到中斷信號。意思是說檢測到某個字節(jié)數(shù)據(jù)缺少合法的停止位。
2-CE_FRAME:硬件檢測到幀錯誤。
3-CE_IOE:通信設備發(fā)生輸入/輸出錯誤。
4-CE_MODE:設置模式錯誤,或是hFile值錯誤。
5-CE_OVERRUN:溢出錯誤,緩沖區(qū)容量不足,數(shù)據(jù)將丟失。
6-CE_RXOVER:溢出錯誤。
7-CE_RXPAR99vY:硬件檢查到校驗位錯誤。
8-CE_TXFULL:發(fā)送緩沖區(qū)已滿。
-lpStat:指向通信端口狀態(tài)的結(jié)構(gòu)變量,原型如下:
typedef struct _COMSTAT{
...
...
DWORD cbInQue; //輸入緩沖區(qū)中的字節(jié)數(shù)
DWORD cbOutQue;//輸出緩沖區(qū)中的字節(jié)數(shù)
}

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
国产激情在线观看| 国产黄色免费电影| 国产在线视频精品视频免费看| av中文天堂在线| 国产精品18久久久久久久久久| 国产激情自拍| 久热av在线| 91超碰国产在线| 午夜不卡视频| 国产视频福利在线| 国产三级视频在线看| 精品国产福利一区二区在线| 精品国产二区三区| www.操操操| 最新中文字幕av专区| 国产福利小视频在线| 国产导航在线| 超碰免费在线观看| 国产精品入口麻豆完整版| 9色在线视频网站| 九九99九九精彩| 国产福利三区| 成年午夜在线| 亚洲成人在线播放| 国产视频精选在线| 亚洲高清在线免费| 国产色婷婷在线| 精品999视频| 日本天堂影院在线视频| 日本中文字幕在线视频| 国产娇喘精品一区二区三区图片| 夜夜操com| 国产裸舞福利在线视频合集 | 国产美女极品在线| 久久五月精品| 国产成a人亚洲精v品| 免费a级人成a大片在线观看| 国产精品视频一区二区图片| sm国产在线调教视频| 国产精品18久久久久久久久久| 国产精品亚洲第五区在线| 国产精品一区二区婷婷| 日日夜夜中文字幕| 久久av少妇| 国产精品美女一区二区视频| 欧美艹逼视频| 久草国产视频| 国产免费av在线| 国产福利图片| 97在线超碰| 在线伊人免费视频| 精品国产二区三区| 香蕉视频网站在线播放| 在线中文字幕视频观看| 国产69精品久久久久孕妇国产69久久 | 国产福利在线看| 99视频免费| 免费在线看v| 国产精品69xx| 亚洲视频手机在线观看| 91在线网站| 91xx在线观看| 九九精品九九| 国产精品伦一区二区三区视频 | 五月天婷婷基地| 国产黄网站在线观看| 日本高清不卡中文字幕| 自拍亚洲国产| 国产精品自拍在线观看| 精品国语对白精品自拍视 | 国产尤物视频| 国产中文字幕网| 天天操夜夜做| 另类高清dbsm日本tvav| 国产免费一级片| 2021av在线| 伊人狠狠av| 人人在线视频| 四虎成人精品在永久免费| 日本中文字幕高清视频| 国产在线更新| 精品一区二区三区免费站| 四虎精品视频| 国产高清免费在线播放| av在线日韩国产精品| 国产精品久久久久久久牛牛| eeuss影影院www在线播放| 国产三级在线看| 亚洲综合色视频在线观看| jlzzjlzz欧美大全| 国产黄色网页| 九九热在线免费视频| 亚洲最新永久观看在线| 久久久久久77777| 亚洲欧美精品日韩欧美| 国产香蕉免费精品视频| 久久精品免视着国产成人| 亚洲午夜久久久久中文字幕| 国产盗摄一区二区| 97一区二区三区| 久久精品无码一区二区日韩av| 天天操人人爽| www.夜夜操| 伊人网站在线| 国产日韩欧美一区二区三区视频| 国产图片综合| 日本综合一区二区三区| 69国产精品视频| 香蕉视频网站在线观看| 精品久久久久一区二区三区| 国产精品69xx| 在线视频中文字幕| 69国产精品视频| av网址在线免费观看| 亚洲精品一区中文字幕电影| 国产经典自拍视频在线观看| 国产视频你懂的| 国产三级视频在线| 18 激情视频在线| 国产精品剧情一区二区在线观看| 国产免费麻豆视频| 黄色av网站在线| 黄色在线视频观看网站| 香蕉视频在线观看www| 九九在线观看免费视频| 国产精品入口麻豆完整版| 国产乱精品一区二区三区| 国产三级视频在线播放线观看| 国产成人综合亚洲欧美在| 中文字幕在线免费看| 国产美女高潮| 国产黄色一级电影| 99色在线观看| 亚洲夜夜综合| 激情视频国产| 在线免费国产视频| 天天操中文字幕视频| 国产小视频在线观看| 91涩漫在线观看c| 国产在线观看91| 91涩漫在线观看c| 国产一二三四| gogogogo高清视频在线| 综合蜜桃精品| 人日人天天爽| 国产午夜三区视频在线| 国产xxx在线| 懂色一区二区三区| 成人无遮挡免费网站视频在线观看| 久久99精品久久久久久野外| 四虎成人免费| 在线免费看av| 国产深夜福利| jizz国产| 中文在线视频| 中文字幕国产欧美| www.九九热.com| 亚洲人av在线| 国产porny蝌蚪视频| 国产无遮挡在线视频免费观看| eeuss影院在线观看| 综合图区亚洲白拍在线 | 国产小视频在线| 国产福利热线视频| 国产性色视频| 国产三级在线| 国产视频2区| 中文字幕中文字幕在线中高清免费版| 在线视频观看亚洲| 国产人成在线观看| 国产婷婷视频在线| 超碰人人在线| www.色五月| 狠狠操视频网| 亚洲伊人网在线观看| 四虎中文字幕| 麻豆网站在线免费观看| 九九在线免费视频| 超碰在线免费播放| 二区三区中文字幕| 国产精品伦一区二区三区级视频频| 国产精品自拍在线观看| 性色视频在线| 国产资源在线看| 国产小视频免费在线观看| 国产精美视频| 日本动漫理论片在线观看网站| 久热中文字幕| 亚洲成人福利| 好男人社区在线视频| 国产在线免费观看| 国产福利在线免费观看| 国产在线视频自拍| 国产极品一区二区三区 | 日本啊v在线| 免费在线看v| 91精品专区| 精品一区二区91| 国产在线看片| eeuss影院在线播放|