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