在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > AVR單片機(jī)與上位機(jī)通信協(xié)議的制定

            AVR單片機(jī)與上位機(jī)通信協(xié)議的制定

            作者: 時(shí)間:2013-12-07 來源:網(wǎng)絡(luò) 收藏

            單片機(jī)和的串口分為上行協(xié)議和下行協(xié)議,要分別制定!

            上行協(xié)議,即由單片機(jī)向發(fā)送數(shù)據(jù)。

            下行協(xié)議,即由向單片機(jī)發(fā)送數(shù)據(jù)。

            又要分固定長(zhǎng)度和不定長(zhǎng)度兩種

            本文所介紹的協(xié)議屬于簡(jiǎn)單的固定字長(zhǎng)的

            下行協(xié)議由四個(gè)字節(jié)構(gòu)成

            起始字PRE 命令字ORD 值VAL 結(jié)束字END 附注
            1byte 1byte 1byte 1byte  
            BBH AAH(ORD_SATA)     單片機(jī)狀態(tài)轉(zhuǎn)換命令標(biāo)識(shí)
            01H EEH 模式1:空閑
            02H EEH 模式2:溫度采集
            03H EEH 模式3:溫度采集向上位機(jī)傳送采集值
            04H EEH 模式4:PWM測(cè)試
            BBH DDH(ORD_PWM) value EEH PWM占空比值修改指令
            BBH FFH(ORD_TEM) value EEH 目標(biāo)溫度控制指令

            上表是簡(jiǎn)單的上位機(jī)對(duì)單片機(jī)的控制指令

            下述函數(shù)是C#中封裝的串口通信類中的發(fā)送函數(shù)的封裝

            public void SerSendCommu(byte orderDef, byte data)//參數(shù)1為命令字,參數(shù)二為要發(fā)送的數(shù)

            //據(jù),需要時(shí)可直接調(diào)用
            {
            Byte[] BSendTemp = new Byte[SEND_LENTH];
            BSendTemp[0] = PRE;
            BSendTemp[1] = orderDef;
            BSendTemp[2] = data;
            BSendTemp[3] = END;
            this.serialPort1.Write(BSendTemp, 0, SEND_LENTH);
            }

            下位機(jī)中用中斷方式接收字符,本文用的是GCC語言,下面是串口接收數(shù)據(jù)中斷

            ISR(USART_RXC_vect)//串口接收中斷
            {
            unsigned char status,data;
            status = UCSRA; //**首先讀取UCSRA的值,再讀取UDR值,順序不能顛倒,否則讀取UDR后的UCSRA的

            //值即會(huì)改變**
            data = UDR;
            if(!Uart_RecvFlag)//判斷緩存中的數(shù)據(jù)是否讀完,讀完則接收指令
            {
            if((status((1FE)|(1PE)|(1DOR)))==0)
            {
            rx_buffer[rx_counter]=data;
            rx_counter++;
            switch(rx_counter)
            {
            case 1:
            if(data!=USART_BEGIN_STX)
            rx_counter=0;
            break;
            case 4:
            rx_counter=0;
            if(data==USART_END_STX)
            Uart_RecvFlag=1;
            break;
            }
            }
            }

            }


            上一頁 1 2 下一頁

            評(píng)論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉