單片機(jī)與上位機(jī)通信協(xié)議的制定_第1頁(yè)
單片機(jī)與上位機(jī)通信協(xié)議的制定_第2頁(yè)
單片機(jī)與上位機(jī)通信協(xié)議的制定_第3頁(yè)
單片機(jī)與上位機(jī)通信協(xié)議的制定_第4頁(yè)
單片機(jī)與上位機(jī)通信協(xié)議的制定_第5頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、單片機(jī)與上位機(jī)通信協(xié)議的制定單片機(jī)和上位機(jī)的串口通信協(xié)議分為上行協(xié)議和下行協(xié)議,要分別制定!上行協(xié)議,即由單片機(jī)向上位機(jī)發(fā)送數(shù)據(jù)。下行協(xié)議,即由上位機(jī)向單片機(jī)發(fā)送數(shù)據(jù)。 而通信協(xié)議又要分固定長(zhǎng)度和不定長(zhǎng)度兩種本文所介紹的協(xié)議屬于簡(jiǎn)單的固定字長(zhǎng)的通信協(xié)議! 下行協(xié)議由四個(gè)字節(jié)構(gòu)成 起始字PRE命令字ORD值VAL結(jié)束字END附注1byte1byte1byte1byteBBHAAH(ORD_SATA)單片機(jī)狀態(tài)轉(zhuǎn)換命令標(biāo)識(shí)01HEEH模式1:空閑02HEEH模式2:溫度采集03HEEH模式3:溫度采集向上位機(jī)傳送采集值04HEEH模式4:PWM測(cè)試BBHDDH(ORD

2、_PWM)valueEEHPWM占空比值修改指令BBHFFH(ORD_TEM)valueEEH目標(biāo)溫度控制指令 上表是簡(jiǎn)單的上位機(jī)對(duì)單片機(jī)的控制指令下述函數(shù)是C#中封裝的串口通信類中的發(fā)送函數(shù)的封裝        public void SerSendCommu(byte orderDef, byte data)/參數(shù)1為命令字,參數(shù)二為要發(fā)送的數(shù)下位機(jī)中用中斷方式接收字符,本文用的是GCC語(yǔ)言,下面是串口接收數(shù)據(jù)中斷ISR(USART_RXC_vect)/串口接收中斷 unsigned char sta

3、tus,data; status = UCSRA;     /*首先讀取UCSRA的值,再讀取UDR值,順序不能顛倒,否則讀取UDR后的UCSRA的                                 

4、60;               /值即會(huì)改變*    data = UDR; if(!Uart_RecvFlag)/判斷緩存中的數(shù)據(jù)是否讀完,讀完則接收指令   if(status&(1<<FE)|(1<<PE)|(1<<DOR)=0)     rx_bufferrx_counter=dat

5、a;   rx_counter+;   switch(rx_counter)       case 1:       if(data!=USART_BEGIN_STX)        rx_counter=0;        break;&

6、#160;   case 4:       rx_counter=0;       if(data=USART_END_STX)       Uart_RecvFlag=1;       break;       在單片

7、機(jī)主循環(huán)程序的最前部分進(jìn)行指令譯碼 if(Uart_RecvFlag)/接收到命令        switch(rx_buffer1)       case 0xAA:/單片機(jī)狀態(tài)命令控制;      ucWorkStatue=rx_buffer2;/指令數(shù)據(jù)      OCR2=rx_buffer2; &#

8、160;         break;    case 0xFF:/初始溫度設(shè)定      break;         Uart_RecvFlag=0;  /隨后進(jìn)行執(zhí)行指令  switch(ucWorkStatue)     case

9、1:/空閑模式          break;   case 2:/測(cè)量模式,但不輸出         break;   case 3:/測(cè)量模式,由串口輸出           break;   case 4

10、:/PWM輸出測(cè)試        break;    default:     break;  這樣就可以利用串口對(duì)單片機(jī)進(jìn)行在線命令控制了;上行協(xié)議的制定!和下行協(xié)議基本一致!在AVR單片機(jī)程序中定義了串口通信輸出緩沖區(qū),緩沖區(qū)的字長(zhǎng)正好為協(xié)議的長(zhǎng)度;/串口發(fā)送緩沖區(qū)變量聲明volatile unsigned char tx_bufferTX_BUFFER_SIZE;/定義串口發(fā)送緩沖區(qū)volatile

11、unsigned char tx_wr_index=0,tx_rd_index=0,tx_counter=0;/rx_wr_index寫指針,rx_rd_index讀指針,rx_counter緩沖區(qū)數(shù)據(jù)個(gè)數(shù)/USART發(fā)送函數(shù) void USART_Transmit(unsigned char data)/發(fā)送數(shù)據(jù)函數(shù)   while(tx_counter=TX_BUFFER_SIZE);/輸出緩沖區(qū)滿,等待  asm("cli");  if(tx_counter|(UCSRA & DA

12、TA_REGISTER_EMPTY)=0)      tx_buffertx_wr_index=data;   if(+tx_wr_index=TX_BUFFER_SIZE)    tx_wr_index=0;   +tx_counter;    else   UDR = data;  asm("sei"); 

13、0;/發(fā)送中斷服務(wù)程序ISR(USART_TXC_vect)/USART發(fā)送數(shù)據(jù)中斷 if(tx_counter)   -tx_counter;  UDR=tx_buffertx_rd_index;  if(+tx_rd_index=TX_BUFFER_SIZE)     tx_rd_index=0;      在C#編寫的上位機(jī)中,利用串口接收事件響應(yīng)方法定義serialPort1.ReceivedByt

14、esThreshold = RECEIVE_LENTH;在時(shí)間響應(yīng)事件中調(diào)用協(xié)議分析處理函數(shù)serialPortCaculate()來分析協(xié)議        private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)                  

15、                                                () 

16、0;                                                 

17、0;              break;                                                

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論