串行接口的通信及相关概念

串行接口

串行接口简称串口,主要的作用就是通信,只需要一对传输线上就可以实现双向通信。

在通信领域内,有两种数据通信方式:并行通信和串行通信

串行通信方式支持单工半双工全双工通信

  • 单工
    仅能进行一个方向的数据传送(通俗的讲就是和哑巴对话,只能单方面讲话)
  • 半双工
    数据可以在两个方向上进行传送,但是这种传送绝不能同时进行。(双向,但不同时),通俗的讲就是对讲机的原理,双方都能讲话,不过不能同时讲话
  • 全双工
    能够在两个方向同时进行数据传送(最好理解,比如电话、两个人面对面聊天就是全双工)

串行通信特点

  • 一位一位地顺序传送
  • 只要一堆传输线就可以实现双向通信,发送占用一条线,接收占用一条线
  • 远距离通信(几米到几千米),但传送速度较慢

编程配置寄存器

1.SCON(. 串行口1的控制寄存器):选择串口的工作方式及数据格式
2.计算波特率
要用到定时器1来做波特率的发生器
TCON

  • RI
    数据接收的过程,一直是低电平,当数据接收完毕后,被置为高电平,被硬件

  • TI
    数据发送的过程,一直是低电平,当数据发送完毕后,被置为高电平,被硬件

RI、TI,当被硬件拉高,我们处理完数据,需要清零(RI=0)

串口初始化代码:

//串口初始化
//1. 串口协议相关初始化
	//1.1 数据格式: 起始位,数据位,停止位,奇偶校验
	//工作方式1:1位起始位,8位数据位(低位在先)和1位停止位 SM0、SM1为 “01	 	//芯片手册: 每个硬件都有一个开发手册,软件代码必须根据手册来写
void initUart()
{
	//SCON = 0x50;//数据位8位,停止位1位,起始位1位怎么配!都要根据芯片手册来写 ,使能接收
	//SCON = 0x40;
	SCON |= 0x1 << 6; //配置sm1为1,sm0本来就是0
	SCON &= ~(0x1 << 7);
	 		 //1. 如何让一个位上的是为1,而不影响其他位,2。如何让一位上的数为0,而不影响其他数!
	SCON |= 0x1 << 4;
  //  SCON |= 0x1 << 6 | 0x1 <<4;

	//控制寄存器SCON用于选择串行通信的工作方式?   和某些控制功能?
	//1.2 波特率设置
	//TMOD = 0x20;
	TMOD |= 0x1<<5;
	TH1 = 0xFD;
	TL1 = 0xFD; 
//	TR1 = 1; //启动定时器,让定时器工作,数节拍!
	TCON |= 0x1 << 6;
}

波特率选择的是9600的方式,其中系统频率是11.0592MHz,需要×2^16次方
工作方式1的波特率公式为:( 2^SMOD/32 )×(定时器1的溢出率或BRT独立波特率发生器的溢出率)

定时器 = SYSclk/12/( 256 - T H1);

你可能感兴趣的:(串行接口的通信及相关概念)