久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5110|回復: 16
打印 上一主題 下一主題
收起左側

單片機串口如何接收上位機不斷發送的數據幀,并將該幀的有效數據提取出來?

  [復制鏈接]
跳轉到指定樓層
樓主
ID:49578 發表于 2018-8-16 17:29 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
各位大蝦:本人菜鳥請教一個問題,單片機如何接送串口不斷發送的數據幀,并將該幀的有效數據提取出來,請賜教一個完整程序。
注:我用的是89C52,通信115200已經調試成功,我的思路是先接收一完整幀判斷,然后再進行幀數分析,該幀為02 14 30 57 00 64 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 17 03 ,幀頭為02,幀尾03,我要提取的數據是64。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:213173 發表于 2018-8-16 20:21 | 只看該作者
給你一個PM2.5空氣質量檢測模塊的串口測試示例參考,TX-1C實驗板。
//AA 00 10 00 4B 5B FF  用串口助手模擬PM2.5空氣質量檢測模塊發送的數據
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;                        //段選
sbit wela=P2^7;                        //位選
uchar code table[]={                //共陰數碼管0~F數組
        0x3f,0x06,0x5b,0x4f,
        0x66,0x6d,0x7d,0x07,
        0x7f,0x6f,0x77,0x7c,
        0x39,0x5e,0x79,0x71};
uchar table0[] ="OK\n";        //用于串口助手返回驗證
uchar table1[]="ERROR\n";//用于串口助手返回驗證
uchar rec_buf[7];                        //緩存
uint V_data;                                //收到的16位有效數據變量
uint swan,wan,qian,bai,shi,ge;//數碼管顯示位
bit flag=0;                                        //接收完成標
/*************初始化串口**************/
void InitUART()                //9600bps@11.0592MHz
{
        PCON &= 0x7F;                //波特率不倍速
        SCON = 0x50;                //8位數據,可變波特率
        TMOD= 0x20;                        //設定定時器1為8位自動重裝方式
        TL1 = 0xFD;                        //設定定時初值
        TH1 = 0xFD;                        //設定定時器重裝值
        ET1 = 0;                                //禁止定時器1中斷
        TR1 = 1;                                //啟動定時器1
        EA = 1;                                //開總中斷
        ES = 1;                                //開串口中斷
}
/**********串口發送函數*************/
void SendOneByte(uchar c)
{
    SBUF = c;                //發送數據
    while(!TI);        //等待發送完成
    TI = 0;                        //發送中斷請求標志位清0
}
/************數據解析程序*************/
void analysis()
{
        uchar i,j;                //臨時變量
        if(flag==1)                //7位數據串接收完成
        {
                ES=0;                        //關串口中斷
                flag=0;                //接收完成標志清0
                j=rec_buf[1]+rec_buf[2]+rec_buf[3]+rec_buf[4];//數據和
                if(rec_buf[5]==j)//驗證數據和
                {
                        V_data=(rec_buf[1]<<8)|rec_buf[2];//恢復16位有效數據
                        for(i=0;i<3;i++)
                        SendOneByte(table0[i]);//返回OK
                }
                else for(i=0;i<6;i++)
                        SendOneByte(table1[i]);//返回ERROR
                ES=1;                //開串口中斷
        }
}
/*************數據分解***************/
void Transformation()
{
        swan = V_data/100000;                        // 十萬位
        wan  = V_data%100000/10000;                // 萬位
        qian = V_data%10000/1000;                // 千位
        bai  = V_data%1000/100;                        // 百位
        shi  = V_data%100/10;                        // 十位
        ge   = V_data%10;                                        // 個位
}
/**********6位數碼管顯示程序************/
void display()
{
        static uchar k=0;                                //分時顯示變量
        P0=0x00;                                                //消隱
        dula=1;
        dula=0;
        switch(k)
        {
                case 0:
                        P0=0x7e;                                //顯示十萬位碼
                        wela=1;
                        wela=0;
                        P0=table[swan];                        //顯示十萬位段碼
                        dula=1;
                        dula=0;
                        k++;
                 break;       

                case 1:
                        P0=0x7d;                                //顯示萬位位碼
                        wela=1;
                        wela=0;
                       
                        P0=table[wan];                        //顯示萬位段碼
                        dula=1;
                        dula=0;
                        k++;
                 break;       

                case 2:
                        P0=0x7b;                                //顯示千位位碼
                        wela=1;
                        wela=0;
                       
                        P0=table[qian];                        //顯示千位段碼
                        dula=1;
                        dula=0;
                        k++;
                 break;       

                case 3:
                        P0=0x77;                                //顯示百位位碼
                        wela=1;
                        wela=0;
                       
                        P0=table[bai];                        //顯示百位段碼
                        dula=1;
                        dula=0;
                        k++;
                 break;       

                case 4:
                        P0=0xef;                                //顯示十位位碼
                        wela=1;
                        wela=0;
                       
                        P0=table[shi];                        //顯示十位段碼
                        dula=1;
                        dula=0;
                        k++;
                 break;       

                case 5:
                        P0=0xdf;                                //顯示個位位碼
                        wela=1;
                        wela=0;
                       
                        P0=table[ge];                        //顯示個位段碼
                        dula=1;
                        dula=0;
                        k=0;
                 break;       
        }
}
/**************主程序**************/
void main()
{
        InitUART();                //初始化串口
        while(1)
        {
                analysis();        //數據解析
                Transformation();//數據分解
                display();        //數碼管顯示
        }
}
/*********串口中斷服務程序**********/
void UARTInterrupt() interrupt 4
{
        static uchar num=0;                //靜態計數變量
        RI=0;                                        //接收中斷請求標志位清0
        rec_buf[num]=SBUF;                //接收到的數據串保存在緩存數組
        if(rec_buf[0]==0xAA)        //驗證數據頭(起始位)
        {
                num++;
                if(num>=7)
                {
                        flag=1;                        //接收完成標志置1
                        num=0;                        //計數變量清0
                }
        }
}

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

板凳
ID:307391 發表于 2018-8-17 08:25 | 只看該作者
串口接受數據,把接受的數據存進數組,對比校驗的數據是否正確,正確的話取出自己需要的數據

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

地板
ID:387162 發表于 2018-8-17 10:40 | 只看該作者
類似狀態機的設計也可以吧 就是符合條件才進入下一個狀態

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

5#
ID:303383 發表于 2018-8-17 23:14 來自手機 | 只看該作者
提示: 作者被禁止或刪除 內容自動屏蔽
回復

使用道具 舉報

6#
ID:49578 發表于 2018-8-20 15:19 | 只看該作者
wulin 發表于 2018-8-16 20:21
給你一個PM2.5空氣質量檢測模塊的串口測試示例參考,TX-1C實驗板。
//AA 00 10 00 4B 5B FF  用串口助手模 ...

感謝分享
回復

使用道具 舉報

7#
ID:49578 發表于 2018-8-20 15:20 | 只看該作者
小貓貓愛吃魚 發表于 2018-8-17 23:14
枕頭和枕尾是固定的嗎

是的  幀頭,幀尾均固定
                                   02                 //幀頭
                                   14                 //數據長度: 長度=命令+參數+效驗
                                   30 57 00        //命令
                                   64 00        //找零箱內硬幣數
                                   00 00 00 00 00 00 00 00 00 00 00 00 00 00
                                   17                 //XOR :XOR=長度xor命令xor參數
                                   03                 //幀尾   
回復

使用道具 舉報

8#
ID:49578 發表于 2018-8-20 15:21 | 只看該作者
ux4123 發表于 2018-8-17 10:40
類似狀態機的設計也可以吧 就是符合條件才進入下一個狀態

請賜教,我不大懂您說的
回復

使用道具 舉報

9#
ID:388207 發表于 2018-8-20 16:33 | 只看該作者
定好協議,定長發送,定長接收,存放在rxd_buf[]數組中,需要的時候從數組中取出對應的位就行
回復

使用道具 舉報

10#
ID:49578 發表于 2018-8-29 11:18 | 只看該作者
neuangel 發表于 2018-8-20 16:33
定好協議,定長發送,定長接收,存放在rxd_buf[]數組中,需要的時候從數組中取出對應的位就行

我編寫的主程序中LED無法點亮,硬件電路核查過沒問題,void Data_anlysize()函數也沒問題,Data_ok能收到,不清楚問題在哪?
#include "reg52.h"                         //此文件中定義了單片機的一些特殊功能寄存器

#define uint unsigned int         //對數據類型進行聲明定義
#define uchar unsigned char


uchar Data_buf[22];          //串口接收數據緩存數組
uint  Data_recieve[22];      //串口接收到完整幀
uint  flag;                                         //串口接收結束標志
uint  Data_ok;                             //有效數據提取標志

sbit ticket=P1^0;                            //將單片機的P1.0端口定義為乘客購票檢測
sbit voice=P1^4;                            //將單片機的P1.4端口定義為語音提示開關
sbit led=P0^0;                     //將單片機的P0.0端口定義bug檢測

void UsartInit();            //串口初始化
void Data_anlysize();                 //數據分析

/*******************************************************************************
* 函 數 名       : main
* 函數功能                 : 主函數
* 輸    入       : 無
* 輸    出             : 無
*******************************************************************************/
void main()
{        
        UsartInit();                   //串口初始化
        while(1)
        {
                voice=0;
            Data_anlysize();            //數據分析
                if(Data_ok==1&&ticket==0)  //判斷乘客有購票行為
                {
                         voice=1;              //開語音提示
                         led=0;
                }        
        }               
}
/*******************************************************************************
* 函數名         : Usart() interrupt 4
* 函數功能                 : 串口通信中斷函數
* 輸入           : 無
* 輸出                  : 無
*******************************************************************************/
void Usart() interrupt 4
{
        static uchar count=0;                //靜態計數變量
    RI=0;                                //接收中斷請求標志位清0
    Data_buf[count]=SBUF;                //接收到的數據串保存在緩存數組
    if(Data_buf[0]==0x02)                //驗證數據頭(起始位)
    {
        count++;
        if(count>=23)
        {
            flag=1;                        //接收完成標志置1
            count=0;                        //計數變量清0
        }
     }
}
/*******************************************************************************
* 函數名         :UsartInit()
* 函數功能                 :串口初始化
* 輸入           : 無
* 輸出                  : 無
*******************************************************************************/
void UsartInit()
{
        SCON=0X50;                        //設置為串口工作方式1(SM0=0,SM0=1),允許接收 (REN=1)
        T2CON=0X34;                        //設置T2為波特率發生器工作方式(TCLK=1,RCLK=1,TR2=1),T2為定時器(C_T2=0 )
        //T2MOD=0X00;                        //設置T2為加法計數DCEN=0,時鐘輸出不使能T2OE=0
        TH2=0XFF;                    
        TL2=0XFD;
        RCAP2H=0XFF;
        RCAP2L=0XFD;            //計數器T2初始值設置,波特率115200
        EA=1;                                //打開總中斷
        ES=1;                                //設置中斷允許控制寄存器IE,允許串行中斷   
}
/*******************************************************************************
* 函數名         :Data_anlysis()
* 函數功能                 :串口協議分析
* 輸入           : 無
* 輸出                  : 無
* 備注                  : 幀結構
                   02                 //幀頭
                                   14                 //數據長度: 長度=命令+參數+效驗
                                   30 57 00        //命令
                                   64 00        //找零箱內硬幣數
                                   00 00 00 00 00 00 00 00 00 00 00 00 00 00
                                   17                 //XOR :XOR=長度xor命令xor參數
                                   03                 //幀尾      
*******************************************************************************/
void Data_anlysize()
{
        uchar i,j;                //臨時變量
        if(flag==1)               //23位數據串接收完成
        {
            ES=0;                 //關串口中斷
            flag=0;               //接收完成標志清0
            j=Data_buf[2]^Data_buf[3]^Data_buf[4]^Data_buf[5]^Data_buf[6]^Data_buf[7]^Data_buf[8]^Data_buf[9]^Data_buf[10]^Data_buf[11]^Data_buf[12]^Data_buf[13]^Data_buf[14]^Data_buf[15]^Data_buf[16]^Data_buf[17]^Data_buf[18]^Data_buf[19]^Data_buf[20];//XOR校驗
            if(Data_buf[21]==j)  //校驗通過
            {
               for(i=0;i<=22;i++)
                                   Data_recieve=Data_buf;//接收完整幀
                           if(Data_recieve[5]==0x64)
                               Data_ok=1;
            }
            ES=1;                //開串口中斷
          }
}
回復

使用道具 舉報

11#
ID:49578 發表于 2018-8-29 11:19 | 只看該作者
ux4123 發表于 2018-8-17 10:40
類似狀態機的設計也可以吧 就是符合條件才進入下一個狀態

我編寫的主程序中LED無法點亮,硬件電路核查過沒問題,void Data_anlysize()函數也沒問題,Data_ok能收到,不清楚問題在哪?
#include "reg52.h"                         //此文件中定義了單片機的一些特殊功能寄存器

#define uint unsigned int         //對數據類型進行聲明定義
#define uchar unsigned char


uchar Data_buf[22];          //串口接收數據緩存數組
uint  Data_recieve[22];      //串口接收到完整幀
uint  flag;                                         //串口接收結束標志
uint  Data_ok;                             //有效數據提取標志

sbit ticket=P1^0;                            //將單片機的P1.0端口定義為乘客購票檢測
sbit voice=P1^4;                            //將單片機的P1.4端口定義為語音提示開關
sbit led=P0^0;                     //將單片機的P0.0端口定義bug檢測

void UsartInit();            //串口初始化
void Data_anlysize();                 //數據分析

/*******************************************************************************
* 函 數 名       : main
* 函數功能                 : 主函數
* 輸    入       : 無
* 輸    出             : 無
*******************************************************************************/
void main()
{        
        UsartInit();                   //串口初始化
        while(1)
        {
                voice=0;
            Data_anlysize();            //數據分析
                if(Data_ok==1&&ticket==0)  //判斷乘客有購票行為
                {
                         voice=1;              //開語音提示
                         led=0;
                }        
        }               
}
/*******************************************************************************
* 函數名         : Usart() interrupt 4
* 函數功能                 : 串口通信中斷函數
* 輸入           : 無
* 輸出                  : 無
*******************************************************************************/
void Usart() interrupt 4
{
        static uchar count=0;                //靜態計數變量
    RI=0;                                //接收中斷請求標志位清0
    Data_buf[count]=SBUF;                //接收到的數據串保存在緩存數組
    if(Data_buf[0]==0x02)                //驗證數據頭(起始位)
    {
        count++;
        if(count>=23)
        {
            flag=1;                        //接收完成標志置1
            count=0;                        //計數變量清0
        }
     }
}
/*******************************************************************************
* 函數名         :UsartInit()
* 函數功能                 :串口初始化
* 輸入           : 無
* 輸出                  : 無
*******************************************************************************/
void UsartInit()
{
        SCON=0X50;                        //設置為串口工作方式1(SM0=0,SM0=1),允許接收 (REN=1)
        T2CON=0X34;                        //設置T2為波特率發生器工作方式(TCLK=1,RCLK=1,TR2=1),T2為定時器(C_T2=0 )
        //T2MOD=0X00;                        //設置T2為加法計數DCEN=0,時鐘輸出不使能T2OE=0
        TH2=0XFF;                    
        TL2=0XFD;
        RCAP2H=0XFF;
        RCAP2L=0XFD;            //計數器T2初始值設置,波特率115200
        EA=1;                                //打開總中斷
        ES=1;                                //設置中斷允許控制寄存器IE,允許串行中斷   
}
/*******************************************************************************
* 函數名         :Data_anlysis()
* 函數功能                 :串口協議分析
* 輸入           : 無
* 輸出                  : 無
* 備注                  : 幀結構
                   02                 //幀頭
                                   14                 //數據長度: 長度=命令+參數+效驗
                                   30 57 00        //命令
                                   64 00        //找零箱內硬幣數
                                   00 00 00 00 00 00 00 00 00 00 00 00 00 00
                                   17                 //XOR :XOR=長度xor命令xor參數
                                   03                 //幀尾      
*******************************************************************************/
void Data_anlysize()
{
        uchar i,j;                //臨時變量
        if(flag==1)               //23位數據串接收完成
        {
            ES=0;                 //關串口中斷
            flag=0;               //接收完成標志清0
            j=Data_buf[2]^Data_buf[3]^Data_buf[4]^Data_buf[5]^Data_buf[6]^Data_buf[7]^Data_buf[8]^Data_buf[9]^Data_buf[10]^Data_buf[11]^Data_buf[12]^Data_buf[13]^Data_buf[14]^Data_buf[15]^Data_buf[16]^Data_buf[17]^Data_buf[18]^Data_buf[19]^Data_buf[20];//XOR校驗
            if(Data_buf[21]==j)  //校驗通過
            {
               for(i=0;i<=22;i++)
                                   Data_recieve=Data_buf;//接收完整幀
                           if(Data_recieve[5]==0x64)
                               Data_ok=1;
            }
            ES=1;                //開串口中斷
          }
}
回復

使用道具 舉報

12#
ID:382067 發表于 2018-8-30 16:34 來自手機 | 只看該作者
判斷起始位,如果符合要求,則設置一個接收開始的標志位,然后直到接收到停止位就可以將接收停止位復位。如果不設立停止位,判斷一下接收時間也可以,大概超過30ms就表示下一個數據就是下一幀的了
回復

使用道具 舉報

13#
ID:213173 發表于 2018-8-31 19:42 | 只看該作者
本帖最后由 wulin 于 2018-9-1 17:39 編輯
zfeng45 發表于 2018-8-29 11:18
我編寫的主程序中LED無法點亮,硬件電路核查過沒問題,void Data_anlysize()函數也沒問題,Data_ok能收到 ...

給你把程序改了,你試試
#include "reg52.h"           //此文件中定義了單片機的一些特殊功能寄存器

#define uint unsigned int    //對數據類型進行聲明定義
#define uchar unsigned char

uchar Data_buf[23];          //串口接收數據緩存數組
uint  Data_recieve[23];      //串口接收到完整幀
uint  flag;                  //串口接收結束標志
uint  Data_ok;               //有效數據提取標志

//sbit ticket=P1^0;            //將單片機的P1.0端口定義為乘客購票檢測
//sbit voice=P1^4;             //將單片機的P1.4端口定義為語音提示開關
//sbit led=P0^0;               //將單片機的P0.0端口定義bug檢測

sbit ticket=P3^4;            //按鍵開關模擬乘客購票檢測
sbit voice=P1^4;             //LED顯示模擬語音提示
sbit led=P1^0;               //LED顯示

void UsartInit();            //串口初始化
void Data_anlysize();        //數據分析
void delayms(uint k);
/*-------------------------------
  1ms延時子程序
-------------------------------*/
void delayms(uint k)
{
        uint i,j;
        for(i=k;i>0;i--)
                for(j=110;j>0;j--);
}
/*******************************************************************************
* 函 數 名       : main
* 函數功能       : 主函數
* 輸    入       : 無
* 輸    出       : 無
*******************************************************************************/
void main()
{        
        UsartInit();                   //串口初始化
        while(1)
        {

                Data_anlysize();            //數據解析
                if((Data_ok==1)&&(ticket==0))  //判斷乘客有購票行為
                {
                        voice=0;              //開語音提示
                        led=0;                                                //LED亮
/********延時觀察LED********************/
                        delayms(1000);                                //延時1秒,
                        voice=1;              //關語音提示
                        led=1;                                                //LED熄
                        Data_ok=0;                                //有效數據提取標志復位
                }        
        }               
}
/*******************************************************************************
* 函數名         : Usart() interrupt 4
* 函數功能                 : 串口通信中斷函數
* 輸入           : 無
* 輸出                  : 無
*******************************************************************************/
void Usart() interrupt 4
{
        static uchar count=0;                //靜態計數變量
        uchar i;
        RI=0;                                //接收中斷請求標志位清0
        Data_buf[count]=SBUF;                //接收到的數據串保存在緩存數組
        if(Data_buf[0]==0x02)                //驗證數據頭(起始位)
        {
                count++;
                if(count>=23)
                {
                        if(Data_buf[22]==0x03)                        //驗證數據尾(結束位)
                                flag=1;                    //接收完成標志置1
                        else
                                for(i=0;i<23;i++)
                                        Data_buf=0x00;                        //緩存數組清0
                        count=0;                      //計數變量清0
                }
        }
}
/*******************************************************************************
* 函數名         :UsartInit()
* 函數功能       :串口初始化
* 輸入           : 無
* 輸出           : 無
*******************************************************************************/
void UsartInit()        //晶振頻率11.0592MHz
{
        SCON=0X50;      //設置為串口工作方式1(SM0=0,SM0=1),允許接收 (REN=1)
        T2CON=0X34;     //設置T2為波特率發生器工作方式(TCLK=1,RCLK=1,TR2=1),T2為定時器(C_T2=0 )
        //T2MOD=0X00;   //設置T2為加法計數DCEN=0,時鐘輸出不使能T2OE=0
        TL2 = RCAP2L =0XFD;//計數器T2初始值設置,波特率115200
        TH2 = RCAP2H =0XFF;                     
        EA=1;           //打開總中斷
        ES=1;           //設置中斷允許控制寄存器IE,允許串行中斷   
}
/*******************************************************************************
* 函數名         :Data_anlysis()
* 函數功能       :串口協議分析
* 輸入           : 無
* 輸出           : 無
* 備注           : 幀結構
                   02           //幀頭
                   14           //數據長度: 長度=命令+參數+效驗
                   30 57 00     //命令
                   64 00        //找零箱內硬幣數
                   00 00 00 00 00 00 00 00 00 00 00 00 00 00
                   17           //XOR :XOR=長度xor命令xor參數
                   03           //幀尾      
*******************************************************************************/
void Data_anlysize()
{
        uchar i,j;                //臨時變量
        if(flag==1)               //23字節數據串接收完成
        {
                ES=0;                 //關串口中斷
                flag=0;               //接收完成標志清0
                j=0;
                for(i=0;i<20;i++)
                        j=j^Data_buf[i+1];//XOR校驗
                if(Data_buf[21]==j)  //校驗通過
                {
                        for(i=0;i<23;i++)
                                Data_recieve=Data_buf;//接收完整幀
                        if(Data_recieve[5]==0x64)
                                Data_ok=1;
                        for(i=0;i<23;i++)
                                Data_buf=0x00;                        //緩存數組清0
                }
                ES=1;                //開串口中斷
        }
}
//02 14 30 57 00 64 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 17 03

回復

使用道具 舉報

14#
ID:49578 發表于 2018-9-4 08:29 | 只看該作者
wulin 發表于 2018-8-31 19:42
給你把程序改了,你試試
#include "reg52.h"           //此文件中定義了單片機的一些特殊功能寄存器

...

非常感謝
回復

使用道具 舉報

15#
ID:283332 發表于 2021-12-18 15:41 | 只看該作者
我將"給你一個PM2.5空氣質量檢測模塊的串口測試示例參考,TX-1C實驗板"的程序作了部分移植,總體沒什么問題,在analysis()函數內調用發送 SendOneByte(table0[i]),應放在ES=1 之后
回復

使用道具 舉報

16#
ID:883242 發表于 2021-12-18 16:22 | 只看該作者
上位機實時性太差了,我定義通訊協議都是用ASCII碼的形式,比如冒號是幀頭標志,\r\n是幀尾標志,中間數字是'0'~'9','A'~'Z'的可打印字符。

單片機之間的通訊,因為實時性好,可以定成總線空閑3.5字節的時間,下面來的第一個字符就是幀頭,不需要特殊字符來區別。
回復

使用道具 舉報

17#
ID:811253 發表于 2021-12-18 16:23 | 只看該作者
一般都是把數據封裝成具有一定格式的數據包來發送,收發雙方按協議打包或是解釋數據。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91精品国产自产精品男人的天堂 | 一区二区不卡视频 | 日韩一区二区三区在线 | 九九av | 国产激情小视频 | 中文字幕亚洲视频 | 97超碰站 | 国产精品亚洲综合 | 欧美日韩亚洲二区 | 激情欧美一区二区三区中文字幕 | 九九热精品在线 | 国产人成在线观看 | 国产一区二区毛片 | 真人一级毛片 | 欧美视频精品 | 色视频网站在线观看 | 国产成人精品一区二区三区视频 | 国产精品亚洲成在人线 | 成人毛片网站 | 亚洲视频一区在线播放 | 天堂网中文 | 国产欧美日韩精品一区 | 91视频日本| 国产成人精品一区 | 成人免费视频网站在线观看 | 天天操操操操操 | 亚洲国产精品日韩av不卡在线 | 中文字幕一区二区三区在线观看 | 日韩一区二区在线免费观看 | 日韩在线视频一区 | 人人玩人人干 | 国产精品毛片一区二区三区 | 国产91丝袜在线播放 | 精品国产乱码久久久久久果冻传媒 | 中文字幕一区二区三区四区 | 欧洲亚洲一区 | 中文字幕在线观看一区二区 | 欧美成视频 | 欧美日韩精品综合 | 亚洲一区二区久久 | 曰韩一二三区 |