欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 單片機串口通信協議怎么寫 求幫助 [打印本頁]

作者: 問問121    時間: 2019-6-17 17:24
標題: 單片機串口通信協議怎么寫 求幫助
計算機從串口發送自己的學號(十六進制),單片機收到后,如果和自己的學號比較相等,則延時100ms后應答0xAA,如果不是自己的學號,則應答0x55;


作者: charles11    時間: 2019-6-17 21:46
先把串口初始化,然后定義一個串口中斷函數,把自己的學號定義為宏,把接受到的數賦給一個變量,用if語句判斷是不是等于,如果是延時發送0xAA,不是就發送0x55.
作者: lwh999995    時間: 2019-6-17 21:57
這論壇 伸手黨 還真不少
百度的答案比論壇快多了

作者: suncat0504    時間: 2019-6-17 22:17
樓主口中的協議,是不是指上層協議。基本的串口協議就是9600,n,8,1之類的。你想要的,需要自己建立一個協議,組織代碼實現。你可以根據學號的長度,聲明一個串口接收數據的緩沖區,長度要超過學號的長度。當串口收到某個特殊字符的時候,認為來自上位機的串口數據已經發完整了,然后下位機去對接收緩沖區的數據進行檢查。基本思路就是這樣。
作者: suncat0504    時間: 2019-6-17 22:21
我建議還是采用ASCII+特殊字符的方式發送學號,避免數據干擾,比如學號使用特殊字母數字,加上校驗數據,最后是發送結束標志(比如\0字符)。這樣做雖然麻煩,但數據收發比較穩妥。你可以參考工業用到的一種串口協議MODBUS。
作者: yzwzfyz    時間: 2019-6-18 08:30
協議:就是一份雙方約定共同遵守合同。只要雙方能共同遵守,怎么寫都可以。
如果你個性強,不必與別人相同。

作者: 色弟弟    時間: 2020-6-8 13:27
請問這個實驗你有做出來嗎
作者: 色弟弟    時間: 2020-6-8 13:28
計算機從串口發送自己的學號(十六進制),單片機收到后,如果和自己的學號比較相等,則延時100ms后應答0xAA,如果不是自己的學號,則應答0x55;
作者: 碼不止    時間: 2020-6-8 20:24
你可以拿本單片機的書先看一下,不要把它想得多復雜,幾個例子就明白了
作者: 渣渣馬    時間: 2020-6-8 22:08
師兄,你的16進制,具體指的啥?
作者: 渣渣馬    時間: 2020-6-8 22:21
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define ID    0xf2    //不知道學號是不是這個樣子?
int code DATA[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};  //CA12Ñô¶ÎÂë
void DelayMs(int x)  //Ñóê±
{
        int i;
        while(x--)        for(i=0;i<120;i++);
}
double pow(int a,int b)  //Ö¸êyÔËËã
{
        double y=1;
        if(b==0)        return y;
        while(b--)        y*=a;
        return y;
}
void Trasmit(uchar a)  //·¢Ëíêy¾Y
{
        SBUF=a;
        while(!TI);  //μè′y·¢Ëííê3é
        TI=0;
}
void init()
{
        IE=0xa0;  //¿a′®¿úoíT0ÖD¶Ï
        TI=RI=0;
        SCON=0x50;   //′®¿ú·½ê½1,RENÖÃ1ÔêDí½óêÕ
        PCON=0x00;    //2¨ìØÂê2»±¶Ôö
        TMOD=0x20;   //T0¶¨ê±·½ê½0oíT1¶¨ê±·½ê½2
        TH1=0xfd;
        TR1=1;  //¿aÆô¶¨ê±Æ÷
}
void main()
{
        init();
        while(1);
}
void RS_inter() interrupt 4   //PC·¢à′μÄêy¾Y′|àí
{
        if(RI)
        {
                if(SBUF==ID)        DelayMs(100),Trasmit(0xAA);
                else        Trasmit(0x55);
        }
}
/*不知道對不對*/




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1