学习笔记——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;
    }
}

 

posted on 2020-11-08 17:31  chaina_家长  阅读(1579)  评论(0编辑  收藏  举报