51单片机串行通信的浅显认识

串行通信是一种将二进制数据按位传送的通信,所需的传输线少,适用于分层,分级和分布式控制系统以及远程通信的应用场合。与串行通信相对应的有并行通信。,
串行通信主要解决两个 问题:数据串并转换问题,设备同步问题。
串行通信分成 两种基本的方式:异步通信和同步通信方式。这里只做简单的说明——
异步通信:数据是一帧一帧的传送的。(一个字符称为一帧。)
同步通信:数据开始传送前用同步字符来指示,并通过时钟来实现发送和接受的同步,即检测到同步字符后,就连续传送数据,直至通信结束。
下面我们通过小程序来进行相关的了解;将两个单片机通过串口直接相连,进行双机点对点数据通信。
分析要实现两个单片机点对点通信,线路上只要将A机的TXD与B机的RXD相连,将B机的TXD与A机的RXD相连,再将两机地线相连即可。相同的波特率,
串口控制方式符SCON
定时器控制方式符TMOD
发送数据端:首先调用初始化程序设置串口和定时器T1的工作方式。主程序中,由于串口发送完一帧数据后会将发送中断标志位T1置1,发送程序通过不断的查询T1的状态检查是否已经发送完毕:如果灭有发送完成,继续循环等待;发送完成,则将T1位清零准备发送下一帧数据。
//A机串口发送程序
#include<reg51.h>
char data t[16]_at_0x60;//发送数据存放区域
void serial_inital()//初始化
 {
 TXOD=0x20; //设置定时器TI的工作方式
 TH1=0xf9;	 //设置TI的初值 
 TL1=0xf9;
 TR1=1;		 //启动定时器TI
 SCON=0x50;	  //设置串口工作方式
 PCON=0x00;
 RI=0;	  //清中断标标志符
 TI=0;
 }
 main()
 {
 unsiged char i=0;
 for(i=1;i<16;i++)	//发送区置值
 t[i]=i;
 serial_inital();
  for(i=1;i<16;i++)
  {SBUF=t[i];  //启动发送
  while(!TI);	 //查询循环等待发送完成
  TI=0;			   //发送完毕,为下次发送清中断标志符
  }
 }
接收数据端:与发送端A机采用相同的初始化程序对定时器T1和串口设定控制字和初值。主程序中通过不断查询接受中断标志位R1的状态检查是否完整的接受一帧数据:没有接受完成则循环等待;则将R1位清零准备接受下一帧数据,并且读入SBUF寄存器。
#include<reg51.h>
#include<absacc.h> 
char data t[16]_at_0x60;//接收数据存放区域
void serial_inital()//初始化
 {
 TXOD=0x20; //设置定时器TI的工作方式
 TH1=0xf9;	 //设置TI的初值 
 TL1=0xf9;
 TR1=1;		 //启动定时器TI
 SCON=0x50;	  //设置串口工作方式
 PCON=0x00;
 RI=0;	  //清中断标标志符
 TI=0;
 }
 main()
 {
 unsiged char i=0;
 serial_inital();
  for(i=1;i<16;i++)
  {
 while(!RI)//查询循环等待接收完成 
 t[i]=SBUF;//读取接受字符 
  RI=0;			   //清中断标志 
  }
 }

后续再进行补充,,,,,

猜你喜欢

转载自blog.csdn.net/Allaoe/article/details/80619559
今日推荐