學習筆記——51單片機 單片機與單片機之間的通訊


雖然單片機串口通訊的內容老早學過,但當時只是粗略的過了一遍,記了一下SCON以及其工作方式。但是測試也僅限於單片機和電腦串口測試軟件之間,這里發送一串內容,那里顯示出來。總感覺不得勁。

這次在其他知識過程中用了串口通訊,不是很熟練,就回過頭了學一遍。

 

單片機與單片機之間的通訊,接線方面,只需要將A的RXD接B的TXD,B的RXD接A的TXD,就可以了。(P30接P31,P31接P30)

 

兩個單片機用兩個不同的程序。我這里打算通訊后,實現P2口燈全亮。

執行中,因為我的單片機只是簡單的發送一條指令到另一方,實際上,接一條杜邦線就可以。

 

萬丈高樓平地起,通過這個簡單的程序,實現了A-->B的串口通訊,接下來會琢磨稍微復雜一點的。

-----------------------------------------發送端程序------------------------------------------------

#include"reg52.h"

typedef unsigned char uchar;

void init()                //初始化函數
{
    SCON=0X50;            //設置工作方式為工作方式1
    TMOD=0X20;           //計時器工作方式2
    PCON=0X80;          //波特率加倍
    TH1=0Xf3;             //設定初值
    TL1=0Xf3;
    TR1=1;                 //啟動計數器
    EA=1;                  //啟動總中斷
    ES=1;                 //啟動串口通訊
}

void t_send(uchar state)           //數據發送
{
    SBUF=state;                       //把state的值賦給SBUF發送緩沖器
    while(TI==0);                      //發送沒結束,TI=0;發送結束,內部硬件會自動將TI置1;
    TI=0;                                  //必須用軟件將TI置0;
}
void main()
{
    P2=0x00;                          //要發送的數據,作用:使LED燈亮
    init();
    while(1)
    {
        t_send(P2);
    }
}

 

-----------------------------------------接收端程序------------------------------------------------

#include"reg52.h"

typedef unsigned char uchar;

uchar state;

void init()
{
    SCON=0X50;
    TMOD=0X20;
    PCON=0X80;
    TH1=0Xf3;
    TL1=0Xf3;
    TR1=1;
    EA=1;
    ES=1;    
}

void r_receive()
{
    while(RI==0);
    state=SBUF;
    RI=0;
}

void main()
{
    init();
    while(1)
    {
        r_receive();
        P2=state;
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM