目录
1、概述
(1)熟悉单片机串口的应用。
(2)利用单片机串行口,实现两个单片机的串行通讯。其中一个作为发送方,另一侧为接收方。
(3)实现单片机与单片机通信,掌握单片机波特率的设置方法,且设置波特率为9600。
(4)掌握单片机串口与串口通信程序的设计方法。
2、分析(含代码)
(1)结果
甲机读入P1口的八个开关的状态数据后,通过串行口发送到乙机,乙机将接收到的甲机的八个开关的状态数据送入自身的P1口,由乙机P1口的8只发光二极管显示了甲机P1口的八个开关状态。
//甲机串行发送
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
void main()
{
uchar temp=0;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
SCON=0x40;
PCON=0x00;
TR1=1;
P1=0xff;
while(1)
{
temp=P1;
SBUF=temp;
while(TI==0);
TI=0;
}
}
//乙机串口接收
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
void main()
{
uchar temp=0;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
SCON=0x50;
PCON=0x00;
TR1=1;
while(1)
{
while(RI==0);
RI=0;
temp=SBUF;
P1=temp;
}
}
(2)分析
A、双机的REX和TXD相互连接,RXE为接收数据引脚,TXD为发送数据引脚,且把甲机设置为只能发送而不能接收的单工方式,乙机串口为方式1接收,通过乙机二极管就可以判断甲机P1口开关状态。
B、甲机发送方式为查询方式,CPU将一个字节的数据写入串行口的发送缓冲器SBUF时,就启动一帧串行数据的发送,每发送一帧串行数据后,硬件使TI自动置1。
C、乙机接收方式为中断方式,在串行口接收完一个串行数据帧,硬件自动将RI中断请求置1。
D、单片机里面有两个SBUF,但名字都一样,一个只读,一个只写;两个SBUF就是靠读写指令区分,当发送SBUF里面有数据串口就会把数据串行送出,当串口接收数据时,就会把串行数据转换成并行数据存在SBUF里面。