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

正文內(nèi)容

基于vc60的pc機與單片機串行通信設(shè)計(存儲版)

2024-12-17 21:37上一頁面

下一頁面
  

【正文】 讀操作還是寫操作 讀 寫發(fā)送寫命令,并 監(jiān)視串口發(fā)送讀命令,并監(jiān)視串口串口有數(shù)據(jù)到,并接收完畢 退出通信,并報告連續(xù)三次否?此幀正確否? N Y N等待下一幀命令到來發(fā)重發(fā)命令幀 Y數(shù)據(jù)處理是數(shù)據(jù)幀嗎? Y 命令執(zhí)行完畢,向應(yīng)用程序報告 N是正回應(yīng)幀嗎? Y N等待下一幀信號到來發(fā)重發(fā)命令幀是重發(fā)幀嗎? Y退出通訊,并報告 N為放棄幀 圖5 通信協(xié)議之PC 機流程 VC++VC++,以其強大的功能,友好的界面,32位面向?qū)ο蟮某绦蛟O(shè)計及Active X的靈活性而受廣大軟件開發(fā)者的青睞,被廣泛應(yīng)用于各個領(lǐng)域。以下給出API實現(xiàn)的源代碼。m_OverlappedWrite, 0, sizeof (OVERLAPPED))。m_OverlappedWrite, 0, sizeof (OVERLAPPED))。CommTimeOuts)。dcb. ByteSize= 8。if (!SetCommState(m_hIDComDev, amp。for (int i=0。m_OverlappedWrite, amp。}else{COMMTIMEOUTS CommTimeOuts 。 = 4000 。 //數(shù)據(jù)位 = 0。寫端口的函數(shù)原型為:int _outp(unsigned shot port, int databyte)該函數(shù)向指定端口寫入一個字節(jié)。然后再用ClassWizard 生成相應(yīng)的對象。GetSettings:取得串口參數(shù)。SetOutPut:寫入輸出緩沖區(qū)。if (!()) {(57600,N,8,1)。}void CMyDiaLog::OnTimer(UINT nIDEvent) {if (()=MESSAGELENGTH) {InBuffer=()?! _hCom為文件句柄。   CloseHandle:關(guān)閉串口。   ReadIntervalTimeout:兩字符之間最大的延時,當(dāng)讀取串口數(shù)據(jù)時,一旦兩個字符傳輸?shù)臅r間差超過該時間,讀取函數(shù)將返回現(xiàn)有的數(shù)據(jù)。所以在一次寫入串口的操作中,其超時為WriteTotalTimeoutMultiplier乘以寫入的字節(jié)數(shù)再加上 WriteTotalTimeoutConstant。一般設(shè)置為8。 HANDLE hEvent。DCB dcb。COMMTIMEOUTS CommTimeOuts。 = CreateEvent( NULL, TRUE, FALSE, NULL )。dcb ) ||!SetupComm( m_hComDev, 10000, 10000 ) || == NULL || == NULL ){DWORD dwError = GetLastError()。DWORD dwErrorFlags。DWORD dwErrorFlags。dwBytesRead, amp。bWriteStat = WriteFile( m_hComDev, buffer, dwBytesWritten, amp。串口初始化程序主要是規(guī)定雙方的通信協(xié)議,中斷服務(wù)發(fā)送程序則是完成在上位機發(fā)送采集命令后,發(fā)送采集數(shù)據(jù)的功能。 // 波特率為1200,無校驗,8個數(shù)據(jù)位,1個停止位。讀緩沖區(qū)safearray_inp = variant_inp。 //底數(shù)合并//指數(shù)部分if (BCDdata[0]7)Exp=264BCDdata[0]。InBufferSize:接收緩沖區(qū)的大小,類型:short。 /*串口參數(shù)設(shè)置*/ (0)。發(fā)送二進制數(shù)據(jù),必須傳遞一個包含字節(jié)數(shù)組的Variant 到 Output 屬性。int ReadData( void *, int )。} 串行通信類Cserial 成員函數(shù)簡介(1). CSerial::Cserial是類構(gòu)造函數(shù),不帶參數(shù),負責(zé)初始化所有類成員變量。(6). CSerial:: ReadData函數(shù)從端口接收緩沖區(qū)讀入數(shù)據(jù)。比如說,如果使用DOS所提供的BIOS通訊驅(qū)動程序,那么,這些握手信號則需要做如下處理,因為BIOS的通訊驅(qū)動使用了這些信號。   8250(16550)的寄存器如下表所示:基地址讀/寫寄存器縮寫注 釋Bit6:7=00無FIFOBit6:7=01允許FIFO,但不可用Bit6:7=11允許FIFOBit5允許64字節(jié)FIFO(16750)Bit4未使用Bit316550超時中斷Bit2:1=00MODEM狀態(tài)中斷(CTS/RI/DTR/DCD)Bit2:1=01發(fā)送保持寄存器空中斷Bit2:1=10接收數(shù)據(jù)就緒中斷Bit2:1=11接收線路狀態(tài)中斷Bit0=0有中斷產(chǎn)生Bit0=1無中斷產(chǎn)生Bit6:7用來設(shè)定產(chǎn)生中斷的級別,發(fā)送/接收中斷將在發(fā)送/接收到對應(yīng)字節(jié)數(shù)時產(chǎn)生。Bit7為1指定波特率因子寄存器有效,為0則指定發(fā)送/接收及IER有效。 釋Bit7未使用Bit6未使用Bit5自動流量控制(僅16750)Bit4環(huán)路測試Bit3輔助輸出2Bit2輔助輸出1Bit1設(shè)置RTSBit0設(shè)置DSR 釋Bit7FIFO中接收數(shù)據(jù)錯誤Bit6發(fā)送移位寄存器空Bit5發(fā)送保持寄存器空Bit4間斷Bit3幀格式錯Bit2奇偶錯Bit1超越錯Bit0接收數(shù)據(jù)就緒 以上我們詳細介紹了PC機的串行通訊硬件環(huán)境,以下將分別給出使用查詢及中斷驅(qū)動的方法編寫的串行口驅(qū)動程序。介紹了利用MSComm控件,Pc機與單片機進行串行通信的處理和具體實現(xiàn)方法。感謝指導(dǎo)老師李建齊老師的不辭勞苦的教導(dǎo),利用課余時間為我解答疑難問題,從中我學(xué)到了不少知識。4. 也讓我領(lǐng)略到了現(xiàn)代信息技術(shù)的飛速發(fā)展,網(wǎng)絡(luò)世界的確奧妙無窮,包羅萬象,你可以在極短的時間內(nèi)查到你所要的資料,也可以通過網(wǎng)絡(luò)與別人交流,向別人請教問題。發(fā)出命令,交換數(shù)據(jù)以及監(jiān)視和響應(yīng)串行連接中發(fā)生的事件和錯誤?! ODEM狀態(tài)寄存器(MSR):位注清除接收及發(fā)送FIFO并不影響移位寄存器。 FIFO控制寄存器(FCR):位注   以下幾個表格為8250的寄存器的功能描述:  中斷允許寄存器(IER):位注 PC機支持14個串行口,即COM1COM4,其基地址在BIOS數(shù)據(jù)區(qū)0000:04000000:0406中描述,對應(yīng)地址分別為3F8/2F8/3E8/2E8,COM1及COM3使用PC機中斷4,COM2及COM4使用中斷3。它所帶的第一個參數(shù)是緩沖區(qū)指針,其中包含要被發(fā)送的資料;這個函數(shù)返回已寫到端口的實際字節(jié)數(shù)。OVERLAPPED m_OverlappedRead, m_OverlappedWrite。BOOL Open( int nPort = 2, int nBaud = 9600 )。 /*發(fā)送 “Hello” */注意:SetOutput方法可以傳輸文本數(shù)據(jù)或二進制數(shù)據(jù)。程序示例串口初始化if (!())(TURE)。Input:從接收緩沖區(qū)讀取數(shù)據(jù),類型 VARIANT。 //轉(zhuǎn)換為BYTE型數(shù)據(jù)Data_low=BCDdata[1](BCDdata[1]/16)*6。 //事件2表示:接收緩沖區(qū)內(nèi)有字符 { variant_inp = (0。串口初始化程序m_Comm. SetmPort(1)。}return dwBytesWritten。}DWORD CSerial::SendData( const char *buffer, DWORD dwBytesWritten){if( !m_bOpened || m_hComDev == NULL ) return( 0 )。dwBytesRead = min(dwBytesRead,(DWORD) )。}DWORD CSerial::ReadData( void *buffer, DWORD dwBytesRead){if( !m_bOpened || m_hComDev == NULL ) return 0。return m_bOpened。 = 8。SetCommTimeouts( m_hComDev, amp。memset( amp?! ⊥ㄟ^以上這些函數(shù)和結(jié)構(gòu),我們就可以通過串口進行通訊了,現(xiàn)在我們具體看下面的實例:BOOL CSerial::Open( int nPort, int nBaud ){if( m_bOpened ) return( TRUE )。 DWORD Offset。一般設(shè)置為9600?! riteTotalTimeoutMultiplier:寫入每字符間的超時。 DWORD WriteTotalTimeoutConstant?!  eadFile:讀取串口數(shù)據(jù)。  CreateFile:用指定的方式打開指定的串口。=VT_BSTR。public:}BOOL CMyDiaLog::OnInitDialog(){CDialog::OnInitDialog()。GetInPut:讀取輸入緩沖區(qū)。一般設(shè)為默認參數(shù)9600,N,8,1。(1)Microsoft Communications Contro Microsoft公司在WINDOWS中提供了一個串口通訊控件,用它,我們可以很簡單的利用串口進行通訊。dReadNum, NULL)。 //獲取當(dāng)前參數(shù) =9600。 = 4000 。 //global handlehCom = CreateFile (COM1,GENERIC_READ| GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL)。if (WaitForSingleObject(m_OverlapperWrite, hEvent, 1000))dwBytesWritten = 0。}//發(fā)送數(shù)據(jù)void CSerialAPIView::OnSend(){char szMessage[20] = “thank you very much”。ucSet = (unsigned char) ((FC_RTSCTSamp。dcb)。CommTimeOuts. WriteTotalTimeoutConstant = 5000。m_OverlappedRead, 0, sizeof (OVERLAPPED))。m_OverlappedRead, 0, sizeof (OVERLAPPED))。CloseHandle() 關(guān)
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1