一、STC15单片机串口
1、除STC15F100W系统单片机无串行口功能外,其他STC15系列单片机都有串行口功能。STC15单片机最多有四个采用UART工作方式的全双工异步串行通信接口(串口1、串口2、串口3和串口4)。每个串行口由2个数据缓冲器、一个移位寄存器、一个串行控制寄存器和一个波特率发生器等组成,如下表所示:
2、STC15单片机串行口1有四种工作模式,其中两种工作模式的波特率是可变的,另外两种是固定的,串行口2/串行口3/串行口4都只有两种工作模式,这两种工作模式的波特率都是可变的。
3、STC15单片机串口1可在3组管脚间切换,串口2可在2组管脚间切换,串口3可在2组管脚间切换,串口4可在2组管脚间切换。
4、STC15单片机串口1默认选择定时器2作为其波特率发生器,也可选择定时器1作为其波特率发生器;串口2永远使用定时器2作为波特率发生器;串口3默认选择定时器2作为其波特率发生器,也可选择定时器3作为其波特率发生器;串口4默认选择定时器2作为其波特率发生器,也可选择定时器4作为其波特率发生器。
注:串口1、串口2、串口3、串口4波特率相同时,串口1、串口2、串口3、串口4可共享T2作为波特率发生器。
二、STC15单片机串口寄存器
1、STC15系列单片机串口1寄存器如下表:
2、STC15系列单片机串口1寄存器设置:
(1)PCON寄存器(不可位寻址):电源控制寄存器
SMOD:波特率选择位,当SMOD=1时,串口工作模式1、串口工作模式2、串口工作模式3的波特率加倍;当SMOD=0时,串口工作模式1、串口工作模式2、串口工作模式3的波特率不加倍。
SMOD0:帧错误检测有效控制位,当SMOD0=1时,SCON寄存器中的SM0/FE位用于错误帧检测功能;当SMOD0=0时,SCON寄存器中的SM0/FE位用于SM0功能,和SM1一起指定串行口的工作方式。
(2)AUXR寄存器(不可位寻址):辅助寄存器
UART_M0x6:串口工作模式0通信速率设置位,UART_M0x6=0时,串口1工作模式0的速率是传统8051的速率,12分频;UART_M0x6=0时,串口1工作模式0的速率是传统8051的速率的6倍,2分频。
S1ST2:串口1(UART1)选择定时器2作为波特率发生器的控制位,S1ST2=0时,选择定时器1作为串口1的波特率发生器;S1ST2=1时,选择定时器2作为串口1的波特率发生器。
(3)SCON寄存器(可位寻址):串行控制寄存器
SM0/FE:SM0或帧错误检测位,当PCON寄存器中的SMOD0=1时,SM0/FE用于帧错误检测,当检测到一个无效停止位时,通过UART接收器设置SM0/FE=1,必须由软件清零;当PCON寄存器中的SMOD0=0时,SM0/FE和SM1一起指定串行通信的工作模式,如下表:
SM2:允许模式2或模式3多机通信控制位,在模式2或模式3中,如果SM2位为1且REN位为1,则接收机处于地址筛选状态,此时可以利用接收到的第9位(RB8)来筛选地址帧,当RB8=1时,说明该帧是地址帧,地址信息可进入SBUF,并使RI为1,进而在中断服务程序中再进行地址号比较;当RB8=0时,说明该帧不是地址帧,应丢掉且保持RI=0。在模式2或模式3中,如果SM2位为0且REN位为1,接收机处于地址帧筛选被禁止状态,不论收到的RB8=0或RB8=1,均可使接收到的信息进入SBUF,并使RI=1,此时RB8为校验位。
注:模式1和模式0是非多机通信方式,在这两种方式时,要设置SM2为0
REN:允许/禁止串行接收控制位。当REN=1时,允许串行接收状态,可启动串行接收器RxD,开始接收信息;当REN=0时,禁止串行接收状态。
TB8:在模式2或模式3中,TB8为要发送的第9位数据,由软件置位或清零,可用作数据的校验位或多机通信中表示地址帧/数据帧的标志位。
注:模式1和模式0该位不可用
RB8:在模式2或模式3中,RB8为接收到的第9位数据,可作为奇偶校验位或地址帧/数据帧的标志位。
注:模式0中不用RB8,方式1中也不用RB8,RB8是接收到的停止位
TI:发送中断请求标志位,在模式0中,当串行发送数据第8位结束时,由内部硬件自动置位TI=1,向主机请求中断,响应中断后TI必须用软件清零。在模式1、模式2、模式3中,在停止位开始发送时由内部硬件置位TI=1,响应中断后TI必须软件清零。
RI:接收中断请求标志位,在模式0中,当串行接收到第8位结束时,由内部硬件自动置位RI=1,向主机请求中断,响应中断后RI必须用软件清零。在模式1、模式2、模式3中,串行接收到停止位的中间时刻由内部硬件置位RI=1,响应中断后RI必须软件清零。
(4)SBUF寄存器(不可位寻址):串口1数据缓冲寄存器,SBUF实际是2个缓存器,写SBUF的操作完成待发送数据的加载,读SBUF的操作可获得已接收到的数据。
串行通道发送寄存器是一个输出移位寄存器,在写入SBUF信号的控制下,把数据装入相同的9位移位寄存器,前8位为数据字节,根据不同的串口模式会自动将“1”或TB8的值装入移位寄存器的第9位,并进行发送。
串行通道接收寄存器是一个输入移位寄存器,在模式0时,它的字长为8位,在模式1、模式2、模式3时,它的字长为9位,当一帧接收完毕,移位寄存器中的数据字节装入串行数据缓冲器SBUF中,其第9位则装入RB8位。
(5)AUXR1寄存器(不可位寻址):串口1引脚切换寄存器
串口1建议放在[P3.6/RxD_2,P3.7/TxD_2]或[P1.6/RxD_3,P1.7/TxD_3]上。
(6)CLK_DIV寄存器(不可位寻址):时钟分频寄存器
Tx_Rx:串口1中继广播方式设置位,当Tx_Rx=0时,串口1为正常工作方式,满足正常串口通信;当Tx_Rx=1时,串口1为中断广播方式,即将RxD端口输入的电平状态实时输出在TxD外部管脚上,TxD外部管脚可以对RxD管脚输入信号进行实时整形放大输出,TxD管脚的对外输出反映RxD端口输入的电平状态。
(7)SADEN寄存器(不可位寻址):从机地址掩模寄存器
(8)SADDR寄存器(不可位寻址):从机地址寄存器
注:串口自动地址识别首先将串口设置为9位Uart,SM2=1,从机MCU会自动过滤掉非地址数据(第9位为0的数据),而对SBUF中的地址数据(第9位为1的数据)自动与SADDR和SADEN所设置的本机地址进行比较,若地址相匹配,则会将RI置1,并产生中断,否则不予处理。
从机地址的设置通过SADDR和SADEN两个寄存器进行设置,SADDR为从机地址寄存器,里面存放本机的从机地址,SADEN为从机地址屏蔽位寄存器,用于设置地址信息的忽略位,设置方法如下:
- SADDR=11001010
- SADEN=00001111
则匹配地址为xxxx1010,即只要主机送出的地址数据中的低4位为1010就可以和本机地址相匹配,而高4位被忽略,可以为任意值;
(9)IE寄存器(可位寻址):中断允许寄存器
EA:CPU的总中断允许控制位,当EA=1时,CPU开放中断;当EA=0时,CPU屏蔽所有中断。
ES:串行口中断允许位,当ES=1时,允许串行口中断,当ES=0时,禁止串行口中断。
(10)IP寄存器(可位寻址):中断优先级控制寄存器
PS:串行口1中断优先级控制位,当PS=0时,串行口1中断为最低优先级中断(优先级0);当PS=1时,串行口1中断为最高优先级中断(优先级1)
3、STC15系列单片机串口2寄存器如下表:
4、STC15系列单片机串口2寄存器设置:
(1)S2CON寄存器(不可位寻址):串行口2控制寄存器
S2SM0:指定串行口2的工作方式,如下表:
S2SM2:允许模式1多机通信控制位,在模式1时,当S2SM2位为1且S2REN位为1时,则接收机处于地址筛选状态,此时可以利用接收到的第9位(S2RB8)来筛选地址帧,当S2RB8=1时,说明该帧是地址帧,地址信息可进入S2BUF,并使S2RI为1,进而在中断服务程序中再进行地址号比较;当S2RB8=0时,说明该帧不是地址帧,应丢掉且保持S2RI=0。在模式1中,如果S2SM2位为0且S2REN位为1,接收机处于地址帧筛选被禁止状态,不论收到的S2RB8=0或S2RB8=1,均可使接收到的信息进入S2BUF,并使S2RI=1,此时S2RB8为校验位。
注:模式0是非多机通信方式,在这种方式时,要设置S2SM2为0
S2REN:允许/禁止串行口2接收控制位。当S2REN=1时,允许串行接收状态,可启动串行接收器RxD2,开始接收信息;当S2REN=0时,禁止串行接收状态。
S2TB8:在模式1中,S2TB8为要发送的第9位数据,由软件置位或清零,可用作数据的校验位或多机通信中表示地址帧/数据帧的标志位。
注:模式0该位不可用
S2RB8:在模式1中,S2RB8为接收到的第9位数据,可作为奇偶校验位或地址帧/数据帧的标志位
注:模式0中不用S2RB8,S2RB8是接收到的停止位
S2TI:发送中断请求标志位,在停止位开始发送时由内部硬件置位S2TI=1,响应中断后S2TI必须软件清零。
S2RI:接收中断请求标志位,在串行接收到停止位的中间时刻由内部硬件置位S2RI=1,响应中断后S2RI必须软件清零。
(2)S2BUF寄存器(不可位寻址):串行口2数据缓冲寄存器,S2BUF实际是2个缓存器,写S2BUF的操作完成待发送数据的加载,读S2BUF的操作可获得已接收到的数据。
串行通道发送寄存器是一个输出移位寄存器,在写入S2BUF信号的控制下,把数据装入相同的9位移位寄存器,前8位为数据字节,根据不同的串口模式会自动将“1”或S2TB8的值装入移位寄存器的第9位,并进行发送。
串行通道接收寄存器是一个输入移位寄存器,在模式0、模式1时,它的字长为9位,当一帧接收完毕,移位寄存器中的数据字节装入串行数据缓冲器S2BUF中,其第9位则装入S2RB8位。
(3)P_SW2寄存器(不可位寻址):外围设备功能切换控制寄存器2
(4)IE寄存器(可位寻址):中断允许寄存器
EA:CPU的总中断允许控制位,当EA=1时,CPU开放中断;当EA=0时,CPU屏蔽所有中断。
(5)IE2寄存器(不可位寻址):中断允许寄存器2
ES2:串行口2中断允许位,当ES2=1时,允许串行口2中断,当ES2=0时,禁止串行口2中断。
(6)IP2寄存器(不可位寻址):中断优先级控制寄存器2
PS2:串行口2中断优先级控制位,当PS2=0时,串行口2中断为最低优先级中断(优先级0);当PS2=1时,串行口2中断为最高优先级中断(优先级1)
5、STC15系列单片机串口3寄存器如下表:
6、STC15系列单片机串口3寄存器设置:
(1)S3CON寄存器(不可位寻址):串行口3控制寄存器
S3SM0:指定串行口3的工作方式,如下表:
S3ST3:串口3(UART3)选择定时器3作为波特率发生器的控制位,S3ST3=0时,选择定时器2作为串口3波特率发生器;S3ST3=1时,选择定时器3作为串口3波特率发生器。
S3SM2:允许模式1多机通信控制位,在模式1时,当S3SM2位为1且S3REN位为1时,则接收机处于地址筛选状态,此时可以利用接收到的第9位(S3RB8)来筛选地址帧,当S3RB8=1时,说明该帧是地址帧,地址信息可进入S3BUF,并使S3RI为1,进而在中断服务程序中再进行地址号比较;当S3RB8=0时,说明该帧不是地址帧,应丢掉且保持S3RI=0。在模式1中,如果S3SM2位为0且S3REN位为1,接收机处于地址帧筛选被禁止状态,不论收到的S3RB8=0或S3RB8=1,均可使接收到的信息进入S3BUF,并使S3RI=1,此时S3RB8为校验位。
注:模式0是非多机通信方式,在这种方式时,要设置S3SM2为0
S3REN:允许/禁止串行口3接收控制位。当S3REN=1时,允许串行接收状态,可启动串行接收器RxD3,开始接收信息;当S3REN=0时,禁止串行接收状态。
S3TB8:在模式1中,S3TB8为要发送的第9位数据,由软件置位或清零,可用作数据的校验位或多机通信中表示地址帧/数据帧的标志位。
注:模式0该位不可用
S3RB8:在模式1中,S3RB8为接收到的第9位数据,可作为奇偶校验位或地址帧/数据帧的标志位
注:模式0中不用S3RB8,S3RB8是接收到的停止位
S3TI:发送中断请求标志位,在停止位开始发送时由内部硬件置位S3TI=1,响应中断后S3TI必须软件清零。
S3RI:接收中断请求标志位,在串行接收到停止位的中间时刻由内部硬件置位S3RI=1,响应中断后S3RI必须软件清零。
(2)S3BUF寄存器(不可位寻址):串行口3数据缓冲寄存器,S3BUF实际是2个缓存器,写S3BUF的操作完成待发送数据的加载,读S3BUF的操作可获得已接收到的数据。
串行通道发送寄存器是一个输出移位寄存器,在写入S3BUF信号的控制下,把数据装入相同的9位移位寄存器,前8位为数据字节,根据不同的串口模式会自动将“1”或S3TB8的值装入移位寄存器的第9位,并进行发送。
串行通道接收寄存器是一个输入移位寄存器,在模式0、模式1时,它的字长为9位,当一帧接收完毕,移位寄存器中的数据字节装入串行数据缓冲器S3BUF中,其第9位则装入S3RB8位。
(3)P_SW2寄存器(不可位寻址):外围设备功能切换控制寄存器2
(4)IE寄存器(可位寻址):中断允许寄存器
EA:CPU的总中断允许控制位,当EA=1时,CPU开放中断;当EA=0时,CPU屏蔽所有中断。
(5)IE2寄存器(不可位寻址):中断允许寄存器2
ES3:串行口3中断允许位,当ES3=1时,允许串行口3中断,当ES3=0时,禁止串行口3中断。
7、STC15系列单片机串口4寄存器如下表:
8、STC15系列单片机串口4寄存器设置:
(1)S4CON寄存器(不可位寻址):串行口4控制寄存器
S4SM0:指定串行口4的工作方式,如下表:
S4ST4:串口4(UART4)选择定时器4作为波特率发生器的控制位,S4ST4=0时,选择定时器2作为串口4波特率发生器;S4ST4=1时,选择定时器4作为串口4波特率发生器。
S4SM2:允许模式1多机通信控制位,在模式1时,当S4SM2位为1且S4REN位为1时,则接收机处于地址筛选状态,此时可以利用接收到的第9位(S4RB8)来筛选地址帧,当S4RB8=1时,说明该帧是地址帧,地址信息可进入S4BUF,并使S4RI为1,进而在中断服务程序中再进行地址号比较;当S4RB8=0时,说明该帧不是地址帧,应丢掉且保持S4RI=0。在模式1中,如果S4SM2位为0且S4REN位为1,接收机处于地址帧筛选被禁止状态,不论收到的S4RB8=0或S4RB8=1,均可使接收到的信息进入S4BUF,并使S4RI=1,此时S4RB8为校验位。
注:模式0是非多机通信方式,在这种方式时,要设置S4SM2为0
S4REN:允许/禁止串行口4接收控制位。当S4REN=1时,允许串行接收状态,可启动串行接收器RxD4,开始接收信息;当S4REN=0时,禁止串行接收状态。
S4TB8:在模式1中,S4TB8为要发送的第9位数据,由软件置位或清零,可用作数据的校验位或多机通信中表示地址帧/数据帧的标志位。
注:模式0该位不可用
S4RB8:在模式1中,S4RB8为接收到的第9位数据,可作为奇偶校验位或地址帧/数据帧的标志位
注:模式0中不用S4RB8,S4RB8是接收到的停止位
S4TI:发送中断请求标志位,在停止位开始发送时由内部硬件置位S4TI=1,响应中断后S4TI必须软件清零。
S4RI:接收中断请求标志位,在串行接收到停止位的中间时刻由内部硬件置位S4RI=1,响应中断后S4RI必须软件清零。
(2)S4BUF寄存器(不可位寻址):串行口4数据缓冲寄存器,S4BUF实际是2个缓存器,写S4BUF的操作完成待发送数据的加载,读S4BUF的操作可获得已接收到的数据。
串行通道发送寄存器是一个输出移位寄存器,在写入S4BUF信号的控制下,把数据装入相同的9位移位寄存器,前8位为数据字节,根据不同的串口模式会自动将“1”或S4TB8的值装入移位寄存器的第9位,并进行发送。
串行通道接收寄存器是一个输入移位寄存器,在模式0、模式1时,它的字长为9位,当一帧接收完毕,移位寄存器中的数据字节装入串行数据缓冲器S4BUF中,其第9位则装入S4RB8位。
(3)P_SW2寄存器(不可位寻址):外围设备功能切换控制寄存器2
(4)IE寄存器(可位寻址):中断允许寄存器
EA:CPU的总中断允许控制位,当EA=1时,CPU开放中断;当EA=0时,CPU屏蔽所有中断。
(5)IE2寄存器(不可位寻址):中断允许寄存器2
ES4:串行口4中断允许位,当ES4=1时,允许串行口4中断,当ES4=0时,禁止串行口4中断。
三、STC15单片机串口工作模式
1、STC15系列单片机串口1工作模式
(1)工作模式0:
此模式下串口1工作在同步移位寄存器模式,如下图所示:
模式0发送数据过程:当数据写入发送缓冲器SBUF时启动发送,发送控制端SEND有效(高电平),允许RxD发送数据,同时允许TxD输出同步移位脉冲,串行口将8位数据以SYSclk/12或SYSclk/2的波特率从RxD管脚输出(低位->高位),TxD管脚输出同步移位脉冲,发送完一帧数据(8位),中断标志TI置1,再次发送数据前,必须用软件将TI清0,波形图如下:
模式0接收数据过程:复位接收中断RI,即RI=0,置位允许接收控制位REN=1时,启动接收,接收控制端RECEIVE有效(高电平),允许TxD输出同步移位脉冲,RxD为串行输入端,串行接收数据的波特率为SYSclk/12或SYSclk/2,当接收到一帧数据(8位),中断标志RI置1,再次接收时,必须通过软件将RI清0,波形图如下:
注:模式0时必须清0多机通信控制位SM2,无需定时器提供波特率,直接由单片机的时钟作为同步移位脉冲。
(2)工作模式1:
此模式下串口1工作在8位UART,波特率可变模式(波特率由定时器1或定时器2产生),一帧数据为10位:1位起始位,8位数据位(低位在先)和1位停止位,TxD为发送数据,RxD为接收数据,如下图所示:
模式1发送数据过程:当数据写入发送缓冲器SBUF时启动发送,写SBUF信号还把1装入移位寄存器的第9位,并通知Tx控制单元开始发送,移位寄存器将数据不断右移至TxD端口发送,在数据的左边不断移入0作补充,当数据的最高位移到TxD端口发送,紧随其后的是第9位1,Tx控制单元作最后一次移位输出,然后允许发送信号SEND失效,完成一帧信息的发送,置位中断请求位TI,即TI=1,向主机请求中断处理,波形图如下:
模式1接收数据过程:当软件置位接收允许标志位REN,即REN=1时,接收器便以选定波特率的16倍速率采样串行接收端口RxD,当检测到RxD端口从1->0的负跳变,且RxD端口值保持为0(低电平),持续1波特率时就启动接收器准备接收数据,并立即复位16倍计数器,将1FF值装入移位寄存器,当检测到RxD端口从1->0的负跳变,RxD端口值不为0(低电平),则起始位无效,复位接收电路,复位16倍计数器,并重新检测1->0的跳变,波形图如下:
16倍计数器是将波特率(每位接收时间)均分为16等分,每等分为1个状态,在每位接收时间的7、8、9状态由检测器对RxD端口进行采样,所接收的值是这次采样三中取二(3次采样至少2次相同)的值,以此消除干扰,提高可靠性。
接收的数据从接收移位寄存器的右边移入,已装入的1FF值向左边移出,当起始位0移到移位寄存器的最左边时,完成一帧数据的接收,若同时满足以下两个条件:
- RI=0;
- SM2=0或接收到的停止位为1
则接收到的数据有效,数据载入SBUF,停止位进入RB8,置位RI,向主机请求中断,否则数据丢弃。
注:串行通信工作在模式1时,SM2设置为0
(3)工作模式2:
此模式下串口1工作在9位UART,波特率固定模式(波特率可通过软件对PCON中的SMOD位进行设置,当SMOD=1时,波特率为SYSclk/32;当SMOD=0时,波特率为SYSclk/64),一帧数据为11位:1位起始位,8位数据位(低位在先),1位可编程位(第9位数据)和1位停止位,TxD为发送数据,RxD为接收数据,如下图所示:
模式2发送数据过程:当数据写入发送缓冲器SBUF时启动发送,发送时可编程位(由SCON中的TB8提供,可软件设置为1或0)装入移位寄存器的第9位,并通知Tx控制单元开始发送,移位寄存器将数据不断右移至TxD端口发送