C51--串口

一、串口

1、串口的基本认知:

串行接口的简称为串口,也称为串行通信接口或者串行通讯接口(COM接口),是采用串行通信的扩展接口。
串行接口是指数据一位一位的进行顺序传送,其特点通信线路简单,只要一堆传输线就能实现双向通信,大大降低成本,适用远距离通信,单传输速度较慢。

设备间接线通信的一种方式;(通信的本质是数据的传送)
数据一位一位顺序传送
双向通信,全双工
传送速度相对较慢

全双工(允许二台设备间同时进行双向数据传输)
半双工(允许二台设备之间的双向数据传输,但不能同时进行)

2、电气标准和协议

串行接口按电气标准和协议可分为:RS-232-C、RS-422、RS-485等。
RS-232-C、RS-422、RS-485的标准只对接口的电气特性做出规定,不涉及插件、电缆或协议。

RS-232——**标准串口**,是最常用的一种(电脑9针串口、最高速率20kb/s),**点对点**传输,传输距离**最大15m**,适合本地设备间的通信。
RS-422——接受其采用高输入阻抗,比RS-232更强的驱动能力,支持**点对多的双向通信**。最多可接10个节点,1个主设备、多个从设备,从设备之间不能通信;最大传输距离1219m,传输速率最大可达10Mb/s,平衡双绞线的长度与传输速率成反比;
RS-485——从RS-422基础上发展而来,总线上最多接32个设备。

3、串口电平:

UART——异步串行,通用异步接收、发送。
UART包含TTL电平串口和RS232电平串口
TTL即晶体管——晶体管逻辑的简称,是计算机处理器控制的设备内部部分之间通信的标准技术,其数据表示采用二进制规定。

RS232电平——逻辑1为-3~-15v电压
           逻辑0为3~15v电压(笔记本用RS232和单片机通信,需要用到usb转2329针串口)

TTL电平——逻辑1等价与+5v,
		 逻辑0等价于0v
                     输出高电平>=2.4v,输出低电平<=0.4v
                     输入高电平>=2.4v,输入低电平<=0.8v
  笔记本通过TTL与单片机通信:
                   TX发送线(端口)P3.1口
                   RX接收线(端口)P3.0口
          需要用到USB转TTL,使用ch340通信

4、串口通信

①、接线方式
TXD(transmit data发送数据)
RXD(receive data接收数据)
TXD\RXD交叉接线,GND接GNDC51--串口_第1张图片

②、SBUF
输入/输出数据有个缓冲区SBUF,用99H地址码,但是对应两个独立的8位寄存器
在51中data是关键字,不可乱用

接收数据:`char data=SBUF`,外部数据→RXD串口→串行输入移位寄存器→SBUF,用定义的变量来承接数据。(只能读出,不能写入)
发送数据:`SBUF=data`,内部数据→SBUF→串行输出移位寄存器→TXD输出数据(只能写入,不能读出)

C51--串口_第2张图片

5、波特率

①、波特率
UART异步串行接口,通信双方使用时钟不同,双方硬件配置不同,因此需要约定通信速度,叫做波特率

用stc-isp波特率计算器生成波特率
在串口助手下选择波特率、校验位、停止位。

②、配置波特率
需要配置PCON、SCON、AUXR(抗干扰)、TMOD、TL1、TH1、ET1、TR1
1)、AUXR中B1面向外接的EXTRAM,B0:ALEOFF减少电磁辐射

sfr AUXR = 0x8e;		//声明AUXR寄存器的地址
AUXR=0x01;				//降低晶振对外界干扰,减少电磁辐射
/*ALEOFF位置1,禁止ALE信号输出,提升系统的EMI性能,复位后为0,ALE信号正常输出*/

2)、SCON——串行控制寄存器:选择串行通信工作方式
根据B7的SM0、B6的SM1组合确定串口工作方式。如下图:

C51--串口_第3张图片

   	方式0 和 方式2直接和晶振挂钩,不能配置。
    方式1 和 方式3能根据定时器溢出率来配置。
正常情况下选择方式1、3来配置。
	B4的REN——允许/禁止串行接收控制位(是否接收,REN=1为接收)

3)、PCON——配置波特率加倍或不加倍,一般不加倍,

  D7的**SMOD**与串口通信有关  		 
    (SMOD=1;串口方式1,2,3,时,波特率加倍)
    (SMOD=0;串口方式1,2,3,时,波特率正常,不加倍)
  D6的**SMOD0**帧错误有效检测控制位。

4)、配置定时器1——定时器1的工作方式,8位自动重装。TMOD&=0F;TMOD|=20;波特率由内部定时器(晶振)产生,用软件设置不同波特率和选择不同的工作场合。
主机可以通过查询或中断方式对接收、发送进行程序处理。
配置高四位,M1=1,M0=0,:8位自动重装载定时器,当溢出时将TH1的值自动装入TL1。
5)、配置完PCON,计算出波特率初始值TH1与TL1;
波特率=(2^SMOD/32)x(晶振频率/12/(256-TH1))
9600=(2^0/32)x(11059200/12/(256-TH1))
9600x32=11059200/12/(256-TH1)
307200=921600/(256-TH1)
256-TH1=3
TH1=253
二进制:1111 1101
十六进制:TH1=0xFD;TL1=0xFD;
6)、禁止定时器中断,ET1=0
7)、启动定时器,TR1=1

6、手动配置

依据手册,自行配置,需要配置
PCON、SCON、AUXR(抗干扰)、TMOD、TL1、TH1、ET1、TR1

SCON = 0x40;	//配置串口工作方式1,REN不能接收
PCON = 			//使用默认不倍速,不配置,不动
TMOD &= 0x0F	//先把高四位清0:0000 1111
TMOD |= 0x20	//或上0010 0000为0010 0000,设定定时器1为8位自动重装方式
TL1 = 0xFD;		//设定定时初值
TH1 = 0xFD;		//设定定时器重装值
ET1 = 0;		//禁止定时器1中断
TR1 = 1;		//启动定时器

例: 发送一个字符a给PC

#include "reg52.h"
#include 

sfr AUXR = 0x8E;	//声明AUXR寄存器的地址

//串口初始化
void UartInit(void)		//[email protected]
{
	PCON &= 0x7F;		//波特率不倍速
	SCON = 0x50;		//8位数据,可变波特率
	AUXR &= 0xBF;		//定时器1时钟为Fosc/12,即12T
	AUXR &= 0xFE;		//串口1选择定时器1为波特率发生器
	TMOD &= 0x0F;		//清除定时器1模式位
	TMOD |= 0x20;		//设定定时器1为8位自动重装方式
	TL1 = 0xFD;		//设定定时初值
	TH1 = 0xFD;		//设定定时器重装值
	ET1 = 0;		//禁止定时器1中断
	TR1 = 1;		//启动定时器1
}


void Delay1000ms()		//@11.0592MHz
{
	unsigned char i, j, k;

	_nop_();
	i = 8;
	j = 1;
	k = 243;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

void main()
{
	char data_msg = 'a';
	
	//配置c51串口的通信方式 
	UartInit();
	while(1){
		Delay1000ms();
		//往发送缓冲区中写入数据,就完成了数据的发送
		SBUF = data_msg;
	}
	
}

你可能感兴趣的:(STC51,51单片机,嵌入式硬件,单片机,c语言)