10串口通信

通信

通信的的基本概念

  • 通信的方式
通信方式具体解释
串行通信一条数据线,将数据一位一位地依次传输
并行通信多条数据线,8位数据同时传输
异步通信通信双方各自约定通信速率
同步通信通信双方靠一根时钟线来约定通信速率
单工通信只能有一方发送到另一方,不能反向传输
半双工通信双方可以互相传输数据,但必须分时复用一根数据线
全双工通信双方可以在同一时刻互相传输数据
  • 总线:连接各个设备的数据传输线路,类似于一条马路,把路边各住户连接起来,使住户可以相互交流

串口参数及时序图

  • 通信速率(比特率)衡量通信性能的重要参数
  • 比特率:每秒钟传送二进制数据的位数(单位:位/s即bps=bit per second)
  • 检验位:用于数据验证(九位的最后一位)
  • 停止位:用于数据帧间隔

在这里插入图片描述


常用通信接口比较

在这里插入图片描述
此外还有CAN、USB等


51单片机串口介绍

串口通信简介

  • 串口通信:计算机与外设通过数据信号线、地线,按位进行数据通信的方式,属于串行通信

  • 接口标准:常见接口有RS-232C、RS-232、RS-485等

    常用引脚:TXD、RXD、GND(发送、接收、接地)
    串口通信一定要确保设备之间共地,l即连接GND

  • 连接方式:交叉连接且共地
    在这里插入图片描述

  • 通信协议:RS-232的通信协议遵循96-N-8-1格式

符号含义
96比特率9600bps
N无校验位(校验:排除由外界干扰、降低数据偏差)
8传输数据位的个数,8位1个字节
1代表停止位

串口内部结构

单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信,极大的扩展了单片机的应用范围,增强了单片机系统的硬件实力

  • 51单片机内部自带UART(Universal Asynchronous Receiver Transmitter,通用异步收发器),可实现单片机的串口通信

  • 51单片机的通信接口UART
    只有一个UART,四个工作模式,常用模式1
    详细内容联系下文中串口寄存器来理解

  • 两根通信线连接方法
    在这里插入图片描述TXD与RXD交叉连接
    当只需单向的数据传输时,可以只接一根通信线
    当电平标准不一致时,需要加电平转换芯片
    一定要接地GND

  • 电平标准
    数据1和数据0的表达方式,是传输线缆中认为规定的电压与数据的对应关系,串口常用的电平标准由如下三种:

电平标准特点表示1表示0
TTL电平对地电压+5V0V
RS232电平更稳定-3 ~ -15V+3 ~ +15V
RS485电平两线压差,差分+2~+6V-2~-6V
  • 内部结构、串口模式图
    将USB电平协议转换为串口的电平协议
    在这里插入图片描述最左端为总线
    定时器控制收、发控制器
    发送给、接收完成后有相应的中断
    发送端TXD接P3_1
    接收端RXD接P3_0
    SBUF:串口数据缓存寄存器
    上下两个SBUF在物理上是两个独立的寄存器,但占用相同的地址,写操作时,写入的是发送寄存器,读操作时,独处的是接收寄存器

串口通信相关寄存器

  • SCON:串口模式控制寄存器(可位寻址,单个赋值
    在这里插入图片描述当PCON.6位=1时,SCON.7用FE(free error)帧错误检测
    当PCON.6位=0时,SCON.7用SM0与SM1一起控制串口通信工作模式
    SM2:与方式2/3有关,多机通信控制位
    REN:为1时允许接收,为0时禁止接收
    TB8:只与方式2/3有关,为第9位数据清零
    RB8:为0时是方式1的接收停止位;方式2/3接收第9位置数据
    TI:发送中断标志位,发送完为1,必须由软件复位
    RI:接收中断标志位,接受完为1,必须由软件复位

四种工作模式

SM0SM1工作方式功能说明
00方式0同步移位
01方式18位,波特率可变
10方式29位,波特率固定
11方式39位,波特率可变
  • PCON:电源控制寄存器(不可位寻址,必须整体赋值
    在这里插入图片描述SMOD:波特率选择位,为1时工作方式1/2/3的波特率加倍;为0时各个工作方式的波特率加倍
    SMOD0:帧错误检测有效控制位,不需要检测可以不配置

  • SBUF:串口数据缓冲寄存器,初始化不需要配置

  • SADEN、SADDR:从机地址控制寄存器(方便多机通信)

  • IE、IPH、IP:与串口中断相关寄存器


串口通信实验

串口向计算机发送数据

  • stc软件中波特率计算器用来得到PCON的赋值
    在这里插入图片描述

串口寄存器、定时器(只能用定时器1)初始化配置

void UART_Init() //9600bps@11.0592MHz
{
	SCON=0x40; //0100 0000
	PCON&=0x80; //波特率不倍速
	
	TMOD &= 0x0F; //清除定时器1模式位
	TMOD |= 0x20; //设定定时器1为8位自动重装方式
	
	TL1 = 0xFD;		//设定定时初值
	TH1 = 0xFD;		//设定定时器重装值
	
	ET1 = 0;		//禁止定时器1中断,只需要溢出就可以得波特率
	TR1 = 1;		//启动定时器1
}

写入程序 Byte要发送的一个字节数据

void UART_SendByte(unsigned char Byte)
{
	SBUF=Byte; //将数据写入串口缓存
	while(TI==0); //检测写入完成
	TI=0; //标志位由软件置零
}

显示数值

void main()
{
	UART_Init();
	while(1)
	{
		UART_SendByte(0x66);
	}
}

串口助手显示时一定要注意选择对应的波特率

在这里插入图片描述

  • 数据显示模式
    ①HEX模式/十六进制模式/二进制模式:以原始数据的形式显示
    ②文本模式/字符模式:以原始数据编码后的形式显示

  • 间隔1s向计算机发送递增数据

改动main函数部分

void main()
{
	UART_Init();
	while(1)
	{
		UART_SendByte(Sec);
		Sec++;
		Delay(100);
	}
}

计算机通过串口控制LED

利用中断系统,当数据发送到计算机时,触发中断,接收数据

  • 需要接受数据,用到SCON.4的REN=1接收位
  • 打开串口的中断EA=1;ES=1;允许触发中断

改动主函数部分并添加中断服务子函数

void main()
{
	UART_Init();		//串口初始化
	while(1)
	{
		
	}
}

void UART_Routine() interrupt 4
{
	if(RI==1)					//如果接收标志位为1,接收到了数据
	{
		P2=SBUF;				//读取数据
		UART_SendByte(SBUF);	//将受到的数据发回串口
		RI=0;					//接收标志位清0
	}
}

注意!!!用串口助手打开串口时,一定要调整相应的波特率!!!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值