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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機串口通信協議怎么寫 求幫助

[復制鏈接]
跳轉到指定樓層
樓主
ID:564822 發表于 2019-6-17 17:24 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
計算機從串口發送自己的學號(十六進制),單片機收到后,如果和自己的學號比較相等,則延時100ms后應答0xAA,如果不是自己的學號,則應答0x55;

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:552614 發表于 2019-6-17 21:46 | 只看該作者
先把串口初始化,然后定義一個串口中斷函數,把自己的學號定義為宏,把接受到的數賦給一個變量,用if語句判斷是不是等于,如果是延時發送0xAA,不是就發送0x55.
回復

使用道具 舉報

板凳
ID:207421 發表于 2019-6-17 21:57 | 只看該作者
這論壇 伸手黨 還真不少
百度的答案比論壇快多了
回復

使用道具 舉報

地板
ID:517466 發表于 2019-6-17 22:17 | 只看該作者
樓主口中的協議,是不是指上層協議。基本的串口協議就是9600,n,8,1之類的。你想要的,需要自己建立一個協議,組織代碼實現。你可以根據學號的長度,聲明一個串口接收數據的緩沖區,長度要超過學號的長度。當串口收到某個特殊字符的時候,認為來自上位機的串口數據已經發完整了,然后下位機去對接收緩沖區的數據進行檢查。基本思路就是這樣。
回復

使用道具 舉報

5#
ID:517466 發表于 2019-6-17 22:21 | 只看該作者
我建議還是采用ASCII+特殊字符的方式發送學號,避免數據干擾,比如學號使用特殊字母數字,加上校驗數據,最后是發送結束標志(比如\0字符)。這樣做雖然麻煩,但數據收發比較穩妥。你可以參考工業用到的一種串口協議MODBUS。
回復

使用道具 舉報

6#
ID:123289 發表于 2019-6-18 08:30 | 只看該作者
協議:就是一份雙方約定共同遵守合同。只要雙方能共同遵守,怎么寫都可以。
如果你個性強,不必與別人相同。
回復

使用道具 舉報

7#
ID:772750 發表于 2020-6-8 13:27 來自觸屏版 | 只看該作者
請問這個實驗你有做出來嗎
回復

使用道具 舉報

8#
ID:772750 發表于 2020-6-8 13:28 來自觸屏版 | 只看該作者
計算機從串口發送自己的學號(十六進制),單片機收到后,如果和自己的學號比較相等,則延時100ms后應答0xAA,如果不是自己的學號,則應答0x55;
回復

使用道具 舉報

9#
ID:773058 發表于 2020-6-8 20:24 | 只看該作者
你可以拿本單片機的書先看一下,不要把它想得多復雜,幾個例子就明白了
回復

使用道具 舉報

10#
ID:715652 發表于 2020-6-8 22:08 | 只看該作者
師兄,你的16進制,具體指的啥?
回復

使用道具 舉報

11#
ID:715652 發表于 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);
        }
}
/*不知道對不對*/
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表