串口通信(电脑与外设的一种通讯)
本次串口通信主要面向51单片机通用异步收发传输器,通常称作串口通信,是一种异步收发传输器。
前言
可以想象我们的电脑和使用设备的一种谈话,其中含有同步通信(发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式)和异步通信(发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式)
一、对串口通信介绍
硬件设置
:RTS/CTS (Request To Send/Clear To Send)即请求发送/清除发送协议。
用于半双工时的收发切换,半双工的意思是说,发的时候不收,收的时候不发。那么怎么区分收发呢?缺省时是DCE向DTE发送数据,当DTE决定向DCE发数据时,先有效RTS,表示DTE希望向DCE发送。一般DCE不能马上转换收发状态,DTE就通过监测CTS是否有效来判断可否发送,这样避免了DTE在DCE未准备好时发送所导致的数据丢失。
简单的说就是:在发送之前告诉你我要发送数据(有效RTS),通过检测CTS来查看这个时候总线是否空闲,来决定是否可以发送数据
软件设置
:串行口工作之前,应对其进行初始化,主要是设置产生波特率的定时器1、串行口控制和中断控制。
具体步骤如下:
1.确定T1的工作方式(编程TMOD寄存器);
2.计算T1的初值,装载TH1、TL1;
3.启动T1(编程TCON中的TR1位);
4.确定串行口控制(编程SCON寄存器);
5.串行口在中断方式工作时,要进行中断设置(编程IE、IP寄存器)。
二、步骤
1.tongxin_init的初始化函数
代码如下(示例):
void tongxin_Init()
{
SCON=0x40;
PCON |= 0x80;
TMOD &= 0x0F; //设置定时器模式
TMOD |= 0x20; //设置定时器模式
TL1 = 0xF3; //设定定时初值
TH1 = 0xF3; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
}
void tongxin_SendByte(unsigned char Byte)
{
SBUF=Byte;
while(TI==0);
TI=0;
}
2.mian.c函数的写法
在这里插入代码片#include <REGX52.H>
#include "Delay.h"
#include "tongxin_.h"
typedef unsigned char u8;
u8 i;
void delay(u8 len)
{
while(len--);
}
void main()
{
tongxin_Init(); //串口初始化
while(1)
{
tongxin_SendByte(i); //串口发送一个字节
i++; //i自增
delay(1000); //延时1秒
}
}
学习方法
当你开始对51单片机的串口通信时,需要对SCON,PCON,TMOD进行了解。