<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

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

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

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

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

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

又要分固定長(cháng)度和不定長(cháng)度兩種

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

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

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

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

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

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

//據,需要時(shí)可直接調用
{
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);
}

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

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

//值即會(huì )改變**
data = UDR;
if(!Uart_RecvFlag)//判斷緩存中的數據是否讀完,讀完則接收指令
{
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;
}
}
}

}


上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>