freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于vc60的pc機(jī)與單片機(jī)串行通信設(shè)計(jì)(編輯修改稿)

2024-12-13 21:37 本頁面
 

【文章內(nèi)容簡(jiǎn)介】 URGE_TXABORT| PURGE_RXABORT | PURGE_TXCLEAR| PURGE_RXCLEAR ) 。 //清收發(fā)緩沖區(qū)//以下初始化結(jié)構(gòu)變量CommTimeOuts, 設(shè)置超時(shí)參數(shù) = 0FFFFFFFF 。 = 0 。 = 4000 。 = 0。 = 4000 。SetCommTimeouts(hCom, amp。CommTimeOuts )。 //設(shè)置超時(shí)參數(shù) = sizeof( DCB ) 。GetCommState( hCom, amp。ComDcb ) 。 //獲取當(dāng)前參數(shù) =9600。 //波特率 = 8。 //數(shù)據(jù)位 = 0。 /*校驗(yàn) 0~4=no, odd, even, mark, space */SetCommState(hCom, amp。ComDcb ) 。} //設(shè)置新的通信參數(shù)接收可用定時(shí)器或線程等DWORD dRead,dReadNum。unsigned char buff [200]。dRead=ReadFile(hCom, buff, 100, amp。dReadNum, NULL)。 //接收100個(gè)字符,//dReadNum為實(shí)際接收字節(jié)數(shù) 利用端口函數(shù)直接操作這種方式主要是采用兩個(gè)端口函數(shù)_inp(), _outp()實(shí)現(xiàn)對(duì)串口的讀寫,其中讀端口函數(shù)的原型為:int _inp(unsigned shot port)該函數(shù)從端口讀取一個(gè)字節(jié),端口號(hào)為0~65535。寫端口的函數(shù)原型為:int _outp(unsigned shot port, int databyte)該函數(shù)向指定端口寫入一個(gè)字節(jié)。不同的計(jì)算機(jī)串口地址可能不一樣,通過向串口的控制及收發(fā)寄存器進(jìn)行讀寫,可以實(shí)現(xiàn)靈活的串口通信功能,由于涉及具體的硬件電路討論比較復(fù)雜,在此不加贅述。3.3程序設(shè)計(jì)VC++中有兩種方法可以進(jìn)行串口通信。一種是利用Microsoft公司提供的ActiveX控件 Microsoft Communications Control。另一種是直接用VC++訪問串口。下面將簡(jiǎn)述這兩種方法。(1)Microsoft Communications Contro Microsoft公司在WINDOWS中提供了一個(gè)串口通訊控件,用它,我們可以很簡(jiǎn)單的利用串口進(jìn)行通訊。在使用它之前,應(yīng)將控件加在應(yīng)用程序的對(duì)話框上。然后再用ClassWizard 生成相應(yīng)的對(duì)象?,F(xiàn)在我們可以使用它了。該控件有很多自己的屬性,你可以通過它的屬性窗口來設(shè)置,也可以用程序設(shè)置。SetCommPort:指定使用的串口。GetCommPort:得到當(dāng)前使用的串口。SetSettings:指定串口的參數(shù)。一般設(shè)為默認(rèn)參數(shù)9600,N,8,1。這樣方便與其他串口進(jìn)行通訊。GetSettings:取得串口參數(shù)。SetPortOpen:打開或關(guān)閉串口,當(dāng)一個(gè)程序打開串口時(shí),另外的程序?qū)o法使用該串口。GetPortOpen:取得串口狀態(tài)?!etInBufferCount:輸入緩沖區(qū)中接受到的字符數(shù)?!  etInPutLen:一次讀取輸入緩沖區(qū)的字符數(shù)。設(shè)置為0時(shí),程序?qū)⒆x取緩沖區(qū)的全部字符。GetInPut:讀取輸入緩沖區(qū)。GetOutBufferCount:輸出緩沖區(qū)中待發(fā)送的字符數(shù)。SetOutPut:寫入輸出緩沖區(qū)。一般而言,使用上述函數(shù)和屬性就可以進(jìn)行串口通訊了。以下是一個(gè)范例。define MESSAGELENGTH 100class CMyDialog : public CDialog{protected: VARIANT InBuffer。VARIANT OutBuffer。CMSComm m_Com。public:}BOOL CMyDiaLog::OnInitDialog(){CDialog::OnInitDialog()。(1)。if (!()) {(57600,N,8,1)。(true)。(0)。SetTimer(1,10,NULL)。=new unsigned short[MESSAGELENGTH]。=new unsigned short[MESSAGELENGTH]。=VT_BSTR。}return true。}void CMyDiaLog::OnTimer(UINT nIDEvent) {if (()=MESSAGELENGTH) {InBuffer=()。// handle the InBuffer. // Fill the OutBuffer. (OutBuffer)。}CDialog::OnTimer(nIDEvent)。} ?。?)直接用VC++訪問串口?! ≡赩C++中,串口和磁盤文件可以統(tǒng)一的方式來簡(jiǎn)單讀寫。這兩者幾乎沒有什么不同,只是在WINDOWS 9X下磁盤文件只能做同步訪問,而串口只能做異步訪問?! reateFile:用指定的方式打開指定的串口。通常的方式為  m_hCom = CreateFile( COM1, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL )。  m_hCom為文件句柄。GENERIC_READ | GENERIC_WRITE指定可以對(duì)串口進(jìn)行讀寫操作。第三個(gè)參數(shù)0表示串口為獨(dú)占打開。OPEN_EXISTING表示當(dāng)指定串口不存在時(shí),程序?qū)⒎祷厥 ?FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED則表示文件屬性。當(dāng)打開串口時(shí),必須指定 FILE_FLAG_OVERLAPPED,它表示文件或設(shè)備不會(huì)維護(hù)訪問指針,則在讀寫時(shí),必須使用OVERLAPPED 結(jié)構(gòu)指定訪問的文件偏移量。   ReadFile:讀取串口數(shù)據(jù)?!  riteFile:向串口寫數(shù)據(jù)?!  loseHandle:關(guān)閉串口。  COMMTIMEOUTS:COMMTIMEOUTS主要用于串口超時(shí)參數(shù)設(shè)置。COMMTIMEOUTS結(jié)構(gòu)如下:typedef struct _COMMTIMEOUTS { DWORD ReadIntervalTimeout。 DWORD ReadTotalTimeoutMultiplier。 DWORD ReadTotalTimeoutConstant。 DWORD WriteTotalTimeoutMultiplier。 DWORD WriteTotalTimeoutConstant。 } COMMTIMEOUTS,*LPCOMMTIMEOUTS。   ReadIntervalTimeout:兩字符之間最大的延時(shí),當(dāng)讀取串口數(shù)據(jù)時(shí),一旦兩個(gè)字符傳輸?shù)臅r(shí)間差超過該時(shí)間,讀取函數(shù)將返回現(xiàn)有的數(shù)據(jù)。設(shè)置為0表示該參數(shù)不起作用。   ReadTotalTimeoutMultiplier:讀取每字符間的超時(shí)?! eadTotalTimeoutConstant:一次讀取串口數(shù)據(jù)的固定超時(shí)。所以在一次讀取串口的操作中,其超時(shí)為ReadTotalTimeoutMultiplier乘以讀取的字節(jié)數(shù)再加上 ReadTotalTimeoutConstant。將ReadIntervalTimeout設(shè)置為MAXDWORD,并將ReadTotalTimeoutMultiplier 和ReadTotalTimeoutConstant設(shè)置為0,表示讀取操作將立即返回存放在輸入緩沖區(qū)的字符?! riteTotalTimeoutMultiplier:寫入每字符間的超時(shí)。 MSComm控WriteTotalTimeoutConstant:一次寫入串口數(shù)據(jù)的固定超時(shí)。所以在一次寫入串口的操作中,其超時(shí)為WriteTotalTimeoutMultiplier乘以寫入的字節(jié)數(shù)再加上 WriteTotalTimeoutConstant。  SetCommTimeouts函數(shù)可以設(shè)置某設(shè)備句柄的超時(shí)參數(shù),要得到某設(shè)備句柄的超時(shí)參數(shù)可以用GetCommTimeouts函數(shù)?! CB:DCB結(jié)構(gòu)主要用于串口參數(shù)設(shè)置。該結(jié)構(gòu)太龐大,這里就不一一講述了,有興趣者可查看MSDN關(guān)于DCB的描述。其中下面兩個(gè)是比較重要的屬性?! audRate:串口的通訊速度。一般設(shè)置為9600。  ByteSize:字節(jié)位數(shù)。一般設(shè)置為8。  DCB結(jié)構(gòu)可以用SetCommState函數(shù)來設(shè)置,并可以用GetCommState來得到現(xiàn)有串口的屬性?! etupComm:設(shè)置串口輸入、輸出緩沖區(qū)?! VERLAPPED:保存串口異步通訊的信息。具體結(jié)構(gòu)如下:typedef struct _OVERLAPPED { DWORD Internal。 DWORD InternalHigh。 DWORD Offset。 DWORD OffsetHigh。 HANDLE hEvent。 } OVERLAPPED。   Internal,InternalHigh是保留給系統(tǒng)使用的,用戶不需要設(shè)置?! ffset,OffsetHigh是讀寫串口的偏移量,一般設(shè)置OffsetHigh為NULL,可以支持2GB數(shù)據(jù)?! Event讀寫事件,因?yàn)榇谑钱惒酵ㄓ?,操作可能被其他進(jìn)程堵塞,程序可以通過檢查該時(shí)間來得知是否讀寫完畢。事件將在讀寫完成后,自動(dòng)設(shè)置為有效?! ⊥ㄟ^以上這些函數(shù)和結(jié)構(gòu),我們就可以通過串口進(jìn)行通訊了,現(xiàn)在我們具體看下面的實(shí)例:BOOL CSerial::Open( int nPort, int nBaud ){if( m_bOpened ) return( TRUE )。char szPort[15]。DCB dcb。wsprintf( szPort, COM%d, nPort )。m_hComDev = CreateFile( szPort, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL )。if( m_hComDev == NULL ) return( FALSE )。memset( amp。m_OverlappedRead, 0, sizeof( OVERLAPPED ) )。memset( amp。m_OverlappedWrite, 0, sizeof( OVERLAPPED ) )。COMMTIMEOUTS CommTimeOuts。 = 0xFFFFFFFF。 = 0。 = 0。 = 0。 = 5000。SetCommTimeouts( m_hComDev, amp。CommTimeOuts )。 = CreateEvent( NULL, TRUE, FALSE, NULL )。 = CreateEvent( NULL, TRUE, FALSE, NULL )。 = sizeof( DCB )。GetCommState( m_hComDev, amp。dcb )。 = nBaud。 = 8。if( !SetCommState( m_hComDev, amp。dcb ) ||!SetupComm( m_hComDev, 10000, 10000 ) || == NULL || == NULL ){DWORD dwError = GetLastError()。if( != NULL ) CloseHandle( )。if( != NULL ) CloseHandle( )。CloseHandle( m_hComDev )。return FALSE。}m_bOpened = TRUE。return m_bOpened。}int CSerial::InBuffer
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1