一、单片机串行口简介
串行通信是指构成信息的二进制字符的各位数据一位一位顺序地传送的通信方式,串行通信又分为两种基本通信方式,即异步通信和同步通信。
AT89C51串行口,主要由发送器、接收器和串行控制寄存器组成。串行口中有两个缓冲寄存器SBUF,一个是发送寄存器,一个是接收寄存器,在物理结构上是完全独立的。它们都是字节寻址的寄存器,字节地址均为99H。代码段中SBUF=table[i]都是CPU向SBUF写入数据,同时表示此时是发送状态,temp=SBUF是CPU从SBUF读出数据存放在temp变量,同时表示此时是接收状态。也即0x99H这个重叠的地址靠读/写指令区分。
二、用单片机串口实现双工方式的双机通信硬件电路设计:
用单片机串口实现双工方式的双机通信,简单起见,这里两块单片机都具有收发功能,它们具有相同的电路,双机互相发送0~9,各自在数码管上循环显示。设计电路图如下:

双工通信
三、用单片机串口实现双工方式的双机通信软件设计:
软件编写的设计步骤如下:
1.设置通信速度(定时器TMOD/TH/TL/TR)
9600bit/
2.利用串口发送数据
(1)设置SCON
(2)发送数据放在SBUF
(3)查询TI,TI=1则清0,TI=0则等待
3.利用串行中断来接收数据:
(1)设置SCON,允许接收
(2)设置中断ES/EA
(3)编写中断函数,完成设定的任务。
4.总体代码如下:
defineucharunsignedchar
#defineuintunsignedint
ucharcodebuff[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
voiddelay_1s(void)
{
uinti;
for(i=50000;i0;i--);
}
voidserial()interrupt4using1
{
ES=0;
RI=0;
P0=SBUF;//用P0口驱动LED数码管
ES=1;
}
voidmain()
{
uchari;
TMOD=0X20;//0X20=B(0010,0000),定时器1工作在方式2
TH1=0XFD;
TL1=0XFD;//设置初值为253,两机的波特率就是9600bit/s
SCON=0X50;//0x50=B(0101,0000),串口工作在方式1,允许接收
EA=1;//使能总中断
ES=1;//开启串行口中断
RI=0;
TR1=1;//启动定时器1
while(1)
{
for(i=0;i10;i++)
{
SBUF=buff[i];//发送的内容送SBUF
while(!TI);//等待发送
TI=0;
delay_1s();
}
}
}