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

正文內(nèi)容

基于vc60的pc機(jī)與單片機(jī)串行通信設(shè)計-文庫吧資料

2024-11-15 21:37本頁面
  

【正文】   hEvent讀寫事件,因為串口是異步通訊,操作可能被其他進(jìn)程堵塞,程序可以通過檢查該時間來得知是否讀寫完畢。   Internal,InternalHigh是保留給系統(tǒng)使用的,用戶不需要設(shè)置。 HANDLE hEvent。 DWORD Offset。具體結(jié)構(gòu)如下:typedef struct _OVERLAPPED { DWORD Internal?! etupComm:設(shè)置串口輸入、輸出緩沖區(qū)。一般設(shè)置為8。一般設(shè)置為9600。其中下面兩個是比較重要的屬性?! CB:DCB結(jié)構(gòu)主要用于串口參數(shù)設(shè)置。所以在一次寫入串口的操作中,其超時為WriteTotalTimeoutMultiplier乘以寫入的字節(jié)數(shù)再加上 WriteTotalTimeoutConstant?! riteTotalTimeoutMultiplier:寫入每字符間的超時。所以在一次讀取串口的操作中,其超時為ReadTotalTimeoutMultiplier乘以讀取的字節(jié)數(shù)再加上 ReadTotalTimeoutConstant。   ReadTotalTimeoutMultiplier:讀取每字符間的超時。   ReadIntervalTimeout:兩字符之間最大的延時,當(dāng)讀取串口數(shù)據(jù)時,一旦兩個字符傳輸?shù)臅r間差超過該時間,讀取函數(shù)將返回現(xiàn)有的數(shù)據(jù)。 DWORD WriteTotalTimeoutConstant。 DWORD ReadTotalTimeoutConstant。COMMTIMEOUTS結(jié)構(gòu)如下:typedef struct _COMMTIMEOUTS { DWORD ReadIntervalTimeout?!  loseHandle:關(guān)閉串口?!  eadFile:讀取串口數(shù)據(jù)。 FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED則表示文件屬性。第三個參數(shù)0表示串口為獨占打開。  m_hCom為文件句柄?! reateFile:用指定的方式打開指定的串口?! ≡赩C++中,串口和磁盤文件可以統(tǒng)一的方式來簡單讀寫。}CDialog::OnTimer(nIDEvent)。}void CMyDiaLog::OnTimer(UINT nIDEvent) {if (()=MESSAGELENGTH) {InBuffer=()。=VT_BSTR。=new unsigned short[MESSAGELENGTH]。(0)。if (!()) {(57600,N,8,1)。public:}BOOL CMyDiaLog::OnInitDialog(){CDialog::OnInitDialog()。VARIANT OutBuffer。以下是一個范例。SetOutPut:寫入輸出緩沖區(qū)。GetInPut:讀取輸入緩沖區(qū)?!  etInPutLen:一次讀取輸入緩沖區(qū)的字符數(shù)。GetPortOpen:取得串口狀態(tài)。GetSettings:取得串口參數(shù)。一般設(shè)為默認(rèn)參數(shù)9600,N,8,1。GetCommPort:得到當(dāng)前使用的串口。該控件有很多自己的屬性,你可以通過它的屬性窗口來設(shè)置,也可以用程序設(shè)置。然后再用ClassWizard 生成相應(yīng)的對象。(1)Microsoft Communications Contro Microsoft公司在WINDOWS中提供了一個串口通訊控件,用它,我們可以很簡單的利用串口進(jìn)行通訊。另一種是直接用VC++訪問串口。3.3程序設(shè)計VC++中有兩種方法可以進(jìn)行串口通信。寫端口的函數(shù)原型為:int _outp(unsigned shot port, int databyte)該函數(shù)向指定端口寫入一個字節(jié)。dReadNum, NULL)。unsigned char buff [200]。ComDcb ) 。 //數(shù)據(jù)位 = 0。 //獲取當(dāng)前參數(shù) =9600。GetCommState( hCom, amp。CommTimeOuts )。 = 4000 。 = 4000 。 //清收發(fā)緩沖區(qū)//以下初始化結(jié)構(gòu)變量CommTimeOuts, 設(shè)置超時參數(shù) = 0FFFFFFFF 。SetupComm(hCom, 4096, 4096 ) 。}else{COMMTIMEOUTS CommTimeOuts 。 //global handlehCom = CreateFile (COM1,GENERIC_READ| GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL)。}= 接收例程DCB ComDcb。m_OverlappedWrite. Offset += dwBytesWritten。m_OverlappedWrite, amp。if (WaitForSingleObject(m_OverlapperWrite, hEvent, 1000))dwBytesWritten = 0。dwBytesWritten, amp。 i++={WriteFile(m_hIDComDev, (LPSTR)amp。for (int i=0。}//發(fā)送數(shù)據(jù)void CSerialAPIView::OnSend(){char szMessage[20] = “thank you very much”。CloseHandle(m_hIDComDev)。if (m_OverlappedRead. hEvent != NULL) CloseHandle(m_OverlappedRead. hEvent)。if (!SetCommState(m_hIDComDev, amp。ucSet = (unsigned char) ((FC_RTSCTSamp。ucSet = (unsigned char) ((FC_RTSCTSamp。ucSet = (unsigned char) ((FC_RTSCTSamp。dcb. ByteSize= 8。dcb)。dcb. DCBlength = sizeof(DCB)。m_OverlappedRead. hEvent = CreateEvent(NULL, TRUE, FALSE, NULL)。CommTimeOuts)。CommTimeOuts. WriteTotalTimeoutConstant = 5000。CommTimeOuts. ReadTotalTimeoutConstant = 0。CommTimeOuts. ReadIntervalTimeout=0FFFFFFFF。m_OverlappedWrite, 0, sizeof (OVERLAPPED))。m_OverlappedRead, 0, sizeof (OVERLAPPED))。goto endd。m_hIDComDev = CreateFile(“COM2”, GENERIC_READ│GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL│FILE_FLAG_OVERLAPPED, NULL)。m_OverlappedWrite, 0, sizeof (OVERLAPPED))。m_OverlappedRead, 0, sizeof (OVERLAPPED))。DCB dcb。初始化串口void CSerialAPIView::OnInitialUpdate(){CView::OnInitialUpdate()。以下給出API實現(xiàn)的源代碼。CloseHandle() 關(guān)閉串口句柄。ReadFile() 讀串口。以上幾種方法中第一種使用面較廣,但由于比較復(fù)雜,專業(yè)化程度較高,使用較困難;第二種需要了解硬件電路結(jié)構(gòu)原理;第三種方法看來較簡單,只需要對串口進(jìn)行簡單配置,但是由于使用令人費解的VARIANT 類,使用也不是很容易;第四種方法是利用一種用于串行通信的CSerial類(這種類是由第三方提供),只要理解這種類的幾個成員函數(shù)。 通信協(xié)議的設(shè)計 通信協(xié)議概述在設(shè)計PC MCU 通信協(xié)議時,需說明一點:在本系統(tǒng)的實際通信中,PC 機(jī)永遠(yuǎn)是主控者,通信協(xié)議較雙方互為主控者時簡單.本通信協(xié)議的設(shè)計思想是基于幀傳輸方式:即在向RS232 串口發(fā)送命令信號,應(yīng)答信號及數(shù)據(jù)信號時,將每一幀數(shù)據(jù)唯一對應(yīng)一命令幀,:(1) 在PC讀數(shù)據(jù)時,等待接收數(shù)據(jù),再據(jù)所接收數(shù)據(jù)的正誤向應(yīng)用程序報告此命令的執(zhí)行情況.(2) 在PC寫數(shù)據(jù)時,(此時所要寫的數(shù)據(jù)含于此命令中),等待單片機(jī)發(fā)來的已正確接收的回應(yīng)信號,并向應(yīng)用程序報告此命令執(zhí)行完畢.(3) 如果在轉(zhuǎn)輸過程中,其間PC 或MCU 所接收任何一幀信號出現(xiàn)錯誤時,均會向?qū)Ψ桨l(fā)送重發(fā)此幀信號的請求,如果連續(xù)三次轉(zhuǎn)輸失敗則退出通信并向應(yīng)用程序報告 通信協(xié)議詳細(xì)說明1 信號幀分類在數(shù)據(jù)通信時所使用的信號幀可分以下幾類:(1) 讀命令幀:當(dāng)PC讀數(shù)據(jù)時,PC 向MCU發(fā)送的命令信號.(2) 寫命令幀:當(dāng)PC寫數(shù)據(jù)時,PC 向MCU發(fā)送的命令信號內(nèi)含所要寫的數(shù)據(jù).(3) 數(shù)據(jù)幀:當(dāng)PC讀數(shù)據(jù)時,MCU 向PC發(fā)送的內(nèi)含數(shù)據(jù)信息的信號.(4) 正回應(yīng)幀:當(dāng)PC寫數(shù)據(jù)時,MCU 向PC報告數(shù)據(jù)已正確接收的信號.(5) 重發(fā)命令幀:當(dāng)PC 讀/ 寫數(shù)據(jù)時, MCU 所接收的信號幀(讀/ 寫命令幀)有誤時向PC發(fā)出的請求重發(fā)信號.(6) 放棄命令幀:當(dāng)PC 讀/ 寫數(shù)據(jù)時,出現(xiàn)了使程序無法正常執(zhí)行時,PC或MCU向?qū)Ψ桨l(fā)出的退出通信的通知信號.2 信號幀格式(1)讀命令幀格式幀頭標(biāo)志幀類型器件地址起始地址長 度校驗和幀尾標(biāo)志幀頭標(biāo)志(1Byte):表示此數(shù)據(jù)包屬于本串口通信協(xié)議,并為是否接收此包數(shù)據(jù)的標(biāo)志.幀類型(1Byte):所用信號幀的識別標(biāo)志,.器件地址(1Byte):PC所要訪問的外部器件的地址,即是哪一個外部器件.起始地址(2Byte):PC所要訪問的器件的存貯器起始地址.長 度 (1Byte): 一次命令所轉(zhuǎn)輸?shù)臄?shù)據(jù)長度.校驗和(1Byte): 此幀信號的校驗字節(jié)為異或校驗.幀尾標(biāo)志(1Byte): 此幀信號的結(jié)束標(biāo)志.(2)寫命令幀幀頭標(biāo)志幀類型器件地址起始地址長 度數(shù)據(jù)區(qū)校驗和幀尾標(biāo)志數(shù)據(jù)區(qū):要寫的數(shù)據(jù)信息.其它分析同上.(3)數(shù)據(jù)幀幀頭標(biāo)志幀類型長 度數(shù)據(jù)區(qū)校驗 字幀尾標(biāo)志長度:轉(zhuǎn)輸數(shù)據(jù)的長度.數(shù)據(jù)區(qū):轉(zhuǎn)輸?shù)臄?shù)據(jù)信息.其它分析同上.(4)正響應(yīng)幀幀頭標(biāo)志幀類型空校驗字幀尾標(biāo)志空: 編程的方便而加入.其它分析同上.(5)重發(fā)幀幀頭標(biāo)志幀類型空校驗字幀尾標(biāo)志分析同上.(6)放棄幀幀頭標(biāo)志幀類型錯誤碼校驗字幀尾標(biāo)志錯誤碼:00H:執(zhí)行PC命令,發(fā)放棄幀回應(yīng)被動退出通訊01H:MCU 方寫入芯片發(fā)生錯誤,主動通知PC退出通訊. 通信協(xié)議處理流程(1)數(shù)據(jù)分幀與數(shù)據(jù)重組應(yīng)用程序發(fā)送過來的數(shù)據(jù)作為一個流放在發(fā)送緩沖區(qū)中, 由通信協(xié)議進(jìn)行分幀, 切割進(jìn)行發(fā)送, 在接收端, 分幀的數(shù)據(jù)去掉幀頭重新組合到接收緩沖區(qū)中, 交給應(yīng)用程序處理.發(fā)送過程的示意圖如下:發(fā)送緩沖區(qū)1 2 11 2 11 2 11. 附加信息2. 數(shù)據(jù) 圖2 發(fā)送示意圖接收過程的示意圖如下:1 2
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1