8051单片机串口的基本知识
51单片机有一个全双工的串行模块,该模块可以通过编程控制为异步工作方式或同步工作方式,是51单片机最常用于和外部设备交互的数据通道。
串行控制寄存器 : SCON (地址为 : 0x98)
串行数据寄存器 : SBUF (地址为 : 0x99)
电源管理寄存器 : PCON (地址为 : 0x97)
SCON : 用于对串行模块进行相应控制,支持位寻址,当单片机复位后,该寄存器被清“0”。
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|
SM0 | SM1 | SM2 | REN | TB8 | RB8 | TI | RI |
SM0、SM1进行串口工作方式选择:
SM0 | SM1 | 工作方式 |
---|---|---|
0 | 0 | 工作方式0 |
0 | 1 | 工作方式1 |
1 | 0 | 工作方式2 |
1 | 1 | 工作方式3 |
SM2 多机控制通信位,当该位被置“1”后启动多机通信模式,当该位被清“0”后禁止多机通信模式。多机通信模式仅仅在工作方式2和工作方式3下有效;在工作方式0下,应该使该位为0;在工作方式1下,通常设置该位为1。
REN 接收允许位,该位被置“1”时允许串口接收,当该位被清“0”时禁止串口接收。
TB8 存放在工作方式2或者工作方式3下等待发送的第9位数据。
RB8 存放在工作方式2或者工作方式3下接受到的第9位数据,在工作方式1下为接收到的停止位,在工作方式0下不使用该位。
TI 发送完成标志位。当SBUF中的数据发送完成后该位由硬件置“1”,并且当单片机硬件中断被使能后触发串行中断事件;该位必须由软件清“0”,并且只有在该位被清“0”后才能够进行下一个字节数据的发送。
RI 接收完成标志位。当SBUF接收到一个字节的数据后,该位由硬件系统置“1”,并且当单片机硬件中断被使能后触发串行中断事件;该位必须由软件清“0”,并且只有在该位被清“0”后才能进行下一个字节数据的接收。
工作方式0 :
通常用来外接移位寄存器,用于扩展I/O接口。工作时,波特率固定为 f o s c / 12 f_{osc} / 12 fosc/12 ,串行数据通过RXD输入和输出,同步时钟通过TXD输出。发送和接收数据时低位在前,高位在后,长度为8。
工作方式1 :
在工作方式1下,一帧信息为10位:1位起始位(0),8位数据位(低位在前)和1位停止位(1)。TXD为发送数据端,RXD为接收数据端。波特率可变,由定时/计数器T1的溢出率和电源控制寄存器PCON中的SMOD位决定。即:波特率= 2 S M O D 2^{SMOD} 2SMOD *(T1的溢出率) /32 。
在这种方式下,需要对定时/计数器T1进行初始化。
工作方式2和工作方式3 :
工作方式2和工作方式3都为9位异步通信接口。接收和发送一帧信息长度为11位,即1个低电平的起始位,9位数据位,1个高电平的停止位。发送的第9位数据放于TB8中,接收的第9位数据放于RB8中。TXD为发送数据端,RXD为接收数据端。工作方式2和工作方式3的区别在于波特率不一样,其中工作方式2的波特率只有两种 :