51单片机之串口通信(一)
一.基础知识
2.T1的工作方式设置成8位自动重装方式,TH1=TL1的初值用下载器即可快速算出,如图:
1.串行通信和并行通信:目前用的比较多的是串行通信。串行通信优点是连接简单,传输距离远;缺点是传输速度慢。
2.串行通信:分为同步通信和异步通信;异步通信是指发送和接收设备利用各自的时钟控制数据的发送和接收。
3.串行通信的传输方向:单工,半双工,全双工。
4.波特率:每秒钟传输2进制代码的位数,如1个字节为10位,每秒传输240个字节,则波特率为10*240=2400bps,单位是bps;
5.RS-232C:25个管脚,我们用到的是PGND(保护接地)。TXD(发送数据),RXD(接收数据)。
6.RS232电平定义:逻辑1=-3到-15V;逻辑0=+3到+15V;
7.单片机采用TTL电平规范:逻辑1 = 5V;逻辑0 = 0V;
8.RS422为全双工,RS485是RS422的变型,为半双工:RS485的信号传输采用两根线的电压来表示逻辑0
和逻辑1.,传输采用差动信号,所以它的干扰抑制性好,又因为它阻抗低,无接地问题,所以传
输距离可达1200米,传输速率可达1Mbps。
9.SBUF:当发送数据时i = SBUF,接收数据时SBUF = i;i发送或接收保存的数值。二.串口通信进阶
1.51串口控制寄存器SCON,可以位寻址
三.串口接收实验
实验解说:利用串口接收计算机发送的数据,并送人P0口,来控制LED的亮灭
实验注意事项:发送数据应选择HEX模式,如图
实验程序:
/*
项目名称:串口接收实验
项目内容:串口接收电脑发送的数据控制led的亮灭
时间:2015年12月23日
项目负责人:YUAN
*/
#include <reg52.h>
typedef unsigned char uChar8;
typedef unsigned int uInt16;
void UartInit(void); //串口初始化
void ReceiveData(void); //接收数据
void main(void)
{
/*初始化:包括定时器中断的设置,
串口寄存器设置,波特率设置*/
UartInit();
while(1)
{
/*接收计算机发送的数据并送给led控制端口*/
ReceiveData();
}
}
void UartInit(void)
{
TMOD &= 0x0f; //只改变要改变的
TMOD |= 0x20; //设置定时器0为工作方式2
TL1 = 0xfd;
TH1 = 0xfd; //设置波特率为9600bps
TR1 = 1; //允许T1开始计数
SCON &= 0x5f;
SCON |= 0x50; //设置串口工作在方式1,允许接收数据
}
void ReceiveData(void)
{
//如果接收中断为1,则说明有发送
if(RI)
{
RI = 0;
P0 = SBUF; //把发送的数据送给P0控制LED
}
}