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

正文內(nèi)容

基于vc60的pc機與單片機串行通信設計(參考版)

2024-11-11 21:37本頁面
  

【正文】 還感謝同學們對我的幫助,在畢業(yè)設計期間,非常感謝全班同學對我的支持。感謝指導老師李建齊老師的不辭勞苦的教導,利用課余時間為我解答疑難問題,從中我學到了不少知識。4. 也讓我領略到了現(xiàn)代信息技術(shù)的飛速發(fā)展,網(wǎng)絡世界的確奧妙無窮,包羅萬象,你可以在極短的時間內(nèi)查到你所要的資料,也可以通過網(wǎng)絡與別人交流,向別人請教問題。3. 本次設計也讓我明白了一個道理:做什么事都應該全力以赴、認真負責,不可馬虎。總之,在本次畢業(yè)設計中,我得到了很多收獲,主要表現(xiàn)在以下幾方面:1. 加深了對所學知識的鞏固,尤其是單片機編程,由理論到實踐,讓我不在眼高手低.2. 提高了我的自學能力,也培養(yǎng)了我辦事獨立性。介紹了利用MSComm控件,Pc機與單片機進行串行通信的處理和具體實現(xiàn)方法。發(fā)出命令,交換數(shù)據(jù)以及監(jiān)視和響應串行連接中發(fā)生的事件和錯誤。它提供了一系列標準通信命令的使用接口。五.總結(jié)在單片機應用系統(tǒng)中,經(jīng)常要通過RS232串口與微機進行通信。 以上我們詳細介紹了PC機的串行通訊硬件環(huán)境,以下將分別給出使用查詢及中斷驅(qū)動的方法編寫的串行口驅(qū)動程序。   MSR寄存器的高4位分別對應MODEM的狀態(tài)線,低4位表示MODEM的狀態(tài)線是否發(fā)生了變化。  MODEM狀態(tài)寄存器(MSR):位注當線路狀態(tài)為0時Bit4置位為1,幀格式錯時Bit3置位為1,奇偶錯和超越錯分別將Bit2及Bit1置位為1。 釋Bit7FIFO中接收數(shù)據(jù)錯誤Bit6發(fā)送移位寄存器空Bit5發(fā)送保持寄存器空Bit4間斷Bit3幀格式錯Bit2奇偶錯Bit1超越錯Bit0接收數(shù)據(jù)就緒Bit30用來控制對應的管腳。 釋Bit7未使用Bit6未使用Bit5自動流量控制(僅16750)Bit4環(huán)路測試Bit3輔助輸出2Bit2輔助輸出1Bit1設置RTSBit0設置DSRBit0:1用來設定數(shù)據(jù)長度。Bit35用來設定是否使用奇偶校驗以及奇偶校驗的類型,Bit3=1時使用校驗,Bit4為0則為奇校驗,1為偶校驗,而Bit5則強制校驗為1或0,并由Bit4決定具體為0或1。Bit7為1指定波特率因子寄存器有效,為0則指定發(fā)送/接收及IER有效。 釋Bit7=1允許訪問波特率因子寄存器Bit7=0允許訪問接收/發(fā)送及中斷允許寄存器Bit6設置間斷,0禁止,1設置Bit5:3=XX0無校驗Bit5:3=001奇校驗Bit5:3=011偶校驗Bit5:3=101奇偶保持為1Bit5:3=111奇偶保持為0Bit2=01位停止位Bit2=12位停止位(數(shù)據(jù)位68位),(5位數(shù)據(jù)位)Bit1:0=005位數(shù)據(jù)位Bit1:0=016位數(shù)據(jù)位Bit1:0=107位數(shù)據(jù)位Bit1:0=118位數(shù)據(jù)位Bit6:7用來設定產(chǎn)生中斷的級別,發(fā)送/接收中斷將在發(fā)送/接收到對應字節(jié)數(shù)時產(chǎn)生。清除接收及發(fā)送FIFO并不影響移位寄存器。   FCR可寫但不可以讀,該寄存器用來控制16550或16750的FIFO寄存器。 FIFO控制寄存器(FCR):位注Bit3用來指示超時中斷(16550/16750)。 釋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)生   Bit0置1將允許接收到數(shù)據(jù)時產(chǎn)生中斷,Bit1置1時允許發(fā)送保持寄存器空時產(chǎn)生中斷,Bit2置1將在LSR變化時產(chǎn)生中斷,相應的Bit3置位將在MSR變化時產(chǎn)生中斷。   以下幾個表格為8250的寄存器的功能描述:  中斷允許寄存器(IER):位注   在上表中,8250共有12個寄存器,使用了8個地址,其中部分寄存器共用一個地址,由DLAB=0/1來區(qū)分,在DLAB=1用于設定通訊所需的波特率。 PC機支持14個串行口,即COM1COM4,其基地址在BIOS數(shù)據(jù)區(qū)0000:04000000:0406中描述,對應地址分別為3F8/2F8/3E8/2E8,COM1及COM3使用PC機中斷4,COM2及COM4使用中斷3。   8250(16550)的寄存器如下表所示:基地址讀/寫寄存器縮寫注比如說,如果使用DOS所提供的BIOS通訊驅(qū)動程序,那么,這些握手信號則需要做如下處理,因為BIOS的通訊驅(qū)動使用了這些信號。該插座的信號定義如下:DB25DB9信號名稱方向含.RS232C介紹與PC硬件:我們選用的用VC++類實現(xiàn)的上位機和下位機的串行通信方法具有使用簡單、編寫程序方便的特點。(6). CSerial:: ReadData函數(shù)從端口接收緩沖區(qū)讀入數(shù)據(jù)。它所帶的第一個參數(shù)是緩沖區(qū)指針,其中包含要被發(fā)送的資料;這個函數(shù)返回已寫到端口的實際字節(jié)數(shù)。類析構(gòu)函數(shù)調(diào)用這個函數(shù),所以可不用顯式調(diào)用這個函數(shù)。帶兩個參數(shù),第一個是埠號,有效值是1到4,第二個參數(shù)是波特率,返回一個布爾量。} 串行通信類Cserial 成員函數(shù)簡介(1). CSerial::Cserial是類構(gòu)造函數(shù),不帶參數(shù),負責初始化所有類成員變量。OVERLAPPED m_OverlappedRead, m_OverlappedWrite。 }protected:BOOL WriteCommByte( unsigned char )。int ReadDataWaiting( void )。int ReadData( void *, int )。BOOL Open( int nPort = 2, int nBaud = 9600 )。class CSerial{public:CSerial()。如果發(fā)送包含嵌入控制字符、Null 字符等的數(shù)據(jù),要以二進制形式發(fā)送. VC++類CSerial 串行通信類CSerial簡介Cserial 是由MuMega Technologies公司提供的一個免費的VC++類,可方便地實現(xiàn)串行通信。發(fā)送二進制數(shù)據(jù),必須傳遞一個包含字節(jié)數(shù)組的Variant 到 Output 屬性。 /*發(fā)送 “Hello” */注意:SetOutput方法可以傳輸文本數(shù)據(jù)或二進制數(shù)據(jù)。 /*讀入字符*/m_V1=。 /*每接收一個字符則激發(fā)OnComm()事件*/接收數(shù)據(jù)(1)。 /*串口參數(shù)設置*/ (0)。程序示例串口初始化if (!())(TURE)。InputLen:設置或返回Input讀出的字節(jié)數(shù),類型:short。OutBufferCount:發(fā)送緩沖區(qū)中的字節(jié)數(shù),類型:short。InBufferSize:接收緩沖區(qū)的大小,類型:short。Input:從接收緩沖區(qū)讀取數(shù)據(jù),類型 VARIANT。PortOpen:設置或返回串口狀態(tài),類型 BOOL:TURE打開,F(xiàn)ALSE關(guān)閉。 //指數(shù)為0到7Data=Data_Base*pow(10,Exp)/10。 //底數(shù)合并//指數(shù)部分if (BCDdata[0]7)Exp=264BCDdata[0]。 //轉(zhuǎn)換為BYTE型數(shù)據(jù)Data_low=BCDdata[1](BCDdata[1]/16)*6。k++)(amp。 //有效數(shù)據(jù)長度for(k=0。讀緩沖區(qū)safearray_inp = variant_inp。 //事件2表示:接收緩沖區(qū)內(nèi)有字符 { variant_inp = (0。 //當前接收區(qū)數(shù)據(jù)長度為0m_Comm. GetInput(), // 清除垃圾數(shù)據(jù)發(fā)送采集命令m_Comm. SetOutput(Cole Variant(“?”))。 //1:表示以二進制方式讀取數(shù)據(jù)m_Comm. SetRThreshold(3)。 // 波特率為1200,無校驗,8個數(shù)據(jù)位,1個停止位。串口初始化程序m_Comm. SetmPort(1)。通信控件的工作原理類似于中斷方式,當有通信事件發(fā)生時,如發(fā)送,接收數(shù)據(jù),就會觸發(fā)OnComm事件。中斷服務程序首先判斷程序是否發(fā)來命令,接收到命令后,按次序發(fā)送采集數(shù)據(jù)的各個組成部分,發(fā)送的數(shù)據(jù)塊分3個字節(jié)發(fā)送。串口初始化程序主要是規(guī)定雙方的通信協(xié)議,中斷服務發(fā)送程序則是完成在上位機發(fā)送采集命令后,發(fā)送采集數(shù)據(jù)的功能。}return dwBytesWritten。return dwBytesWritten。m_OverlappedWrite )。bWriteStat = WriteFile( m_hComDev, buffer, dwBytesWritten, amp。}DWORD CSerial::SendData( const char *buffer, DWORD dwBytesWritten){if( !m_bOpened || m_hComDev == NULL ) return( 0 )。}return 0。if( !bReadStatus ){if( GetLastError() == ERROR_IO_PENDING ){WaitForSingleObject( , 2000 )。dwBytesRead, amp。dwBytesRead = min(dwBytesRead,(DWORD) )。ComStat )。ClearCommError( m_hComDev, amp。DWORD dwErrorFlags。}DWORD CSerial::ReadData( void *buffer, DWORD dwBytesRead){if( !m_bOpened || m_hComDev == NULL ) return 0。ComStat )。ClearCommError( m_hIDComDev, amp。DWORD dwErrorFlags。return m_bOpened。return FALSE。if( != NULL ) CloseHandle( )。dcb ) ||!SetupComm( m_hComDev, 10000, 10000 ) || == NULL || == NULL ){DWORD dwError = GetLastError()。 = 8。dcb )。 = sizeof( DCB )。 = CreateEvent( NULL, TRUE, FALSE, NULL )。SetCommTimeouts( m_hComDev, amp。 = 0。 = 0。COMMTIMEOUTS CommTimeOuts。memset( amp。memset( amp。m_hComDev = CreateFile( szPort, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL )。DCB dcb?! ⊥ㄟ^以上這些函數(shù)和結(jié)構(gòu),我們就可以通過串口進行通訊了,現(xiàn)在我們具體看下面的實例:BOOL CSerial::Open( int nPort, int nBaud ){if( m_bOpened ) return( TRUE )。
點擊復制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1