I51开发板第二十六讲 STC15F2K60S2串行口通信相关寄存器

  • 寄存器
  • 开发
  • 通信
  • SingleYork
  • LV5工程师
  • |      2016-10-20 20:13:48
  • 浏览量 3889
  • 回复:9
本帖最后由 SingleYork 于 2016-10-21 11:55 编辑 bg7.png

I51开发板第二十五讲 串行通信基础

https://bbs.icxbk.com/community/forum.php?mod=viewthread&tid=69150

(出处: ICKEY BBS)

这一讲,SingleYork主要跟大家一起学习一下STC15F2K60S2单片机的串行口的相关知识,部分内容源自某教程和STC官方文档,如有雷同敬请谅解!

STC15F2K60S2单片机内部有2个采用UART(Universal Asynchronous Receiver/Transmitter 通用异步收发传输器)工作方式的全双工串行通信接口(串行口1和串行口2)。每个串行口由2个数据缓冲器、1个移位寄存器、1个串行控制器和1个波特率发生器等组成。每个串行口的数据缓冲器由2个相互独立的接收、发送缓冲器构成,可以同时发送和接收数据。发送数据缓冲器只能写入而不能读出,接收缓冲器只能读出而不能写入,因而两个缓冲器可以共用一个地址码。串行口1的两个数据缓冲器的共用地址码是99H,串行口2的两个数据缓冲器的共用地址码是9BH。STC15F2K60S2单片机的串行口既可以用于串行异步通信,也可以构成同步移位寄存器。如果在串行口的输入/输出引脚上加上电平转换器,可以方便的构成标准的RS232接口。串行口1与传统的8051单片机的串行口完全兼容。串行口2的结构、工作原理与串行口1类似。

STC15F2K60S2单片机的串行口有4种工作方式,有的工作方式的波特率是可变的。用户用软件编程的方法在串行口控制寄存器中写入相应的控制字节,即可改变串行口的波特率和工作方式。

STC15F2K60S2单片机串行口1对应的硬件部分是TxD和RxD,串行口2对应的硬件部分是TxD2和RxD2.通过设置特殊功能寄存器AUXR1和S1_S1和S1-S0,串行口1(UART1)可以在、、之间切换。通过设置特殊功能寄存器P_SW2中的S2_S位,串行口2(UART2)功能可以在P1口和P4口之间任意切换。当串行口2功能在P1口实现时,对应的管脚是P1.0/RxD2和P1.1/TxD2。当串行口2功能在P4口实现时,对应的管脚是P4.6/RxD2_2和P4.7/TxD2_2。

下面SingleYork跟大家一起来认识一下与串行口相关的寄存器。

与串行口1相关的寄存器有:SCON、PCON、AUXR、SBUF、TMOD、TL1、TH1、TCON、IE、IP、CLK_DIV、P_SW2、SADEN和SADDR。

与串行口2相关的寄存器有:S2CON、S2BUF、T2H、T2L、AUXR、IE2、IP2和AUXR1。

其中,寄存器TMOD、TL1、TH1和TCON与定时器有关;寄存器IE、IE2、IP和IP2与中断有关;寄存器P_SW2和AUXR1与串行口的引脚切换有关。有些寄存器在别的帖子中已经介绍过了,下面仅介绍新出现的或者与串行口相关的寄存器。

1、 串行口1控制寄存器SCON

SCON(地址为98H,复位值为00H)用于确定串行口1的工作方式和控制串行口1的某些功能,也可用于发送和接收第9个数据位(TB8、RB8),并设有接收和发送中断标志(RI和TI)位。SCON各位的定义如下:

位号 D7D6D5D4D3D2D1D0 位名称SM0/FESM1SM2RENTB8RB8TIRI

1) SM0/FE:PCON寄存器中的SMOD0/PCON.6位为1时,该位用于帧错误检测,当检测到一个无效停止位时,通过UART接收器设置该位。它必须由软件清0。PCON寄存器中的SMOD0/PCON.6为0时,该位和SM1一起指定串行通信的工作方式,如下表所示:

2) SM2:多机通信控制位。在单片机多机通信时,串行通信工作方式2或方式3,SM2位是进行主-从多机通信的控制位。当进行主从通信时,开始各个从机都应置SM2=1。主机发出的第一帧信息是地址帧(数据帧的第9位为1),此时各个从机接收到的地址帧信息后都能产生中断,并进入各自的中断服务程序。只有被寻址的从机在中断服务程序中使SM2=0,为从机接收主机发出的数据帧(第9数据位为0)信息做准备。从而其他从机仍然维持SM2=1,对主机以后发出的数据帧信息,将不会产生中断,从而不会接收后续的数据帧信息。

在方式2或方式3中,如果SM2位为0且REN位为1,接收机处于地址帧筛选被禁止状态,不论收到的RB8为0或1,均可使接收到的信息进入SBUF,并使RI=1,此时RB8通常为校验位。

方式1时,如SM2=1,则只有在接收到有效停止位时才能激发中断标志(RI=1),如没有接收到有效停止位,则RI仍然为0.如果使用方式0,则SM2应为0。

3)REN:允许接收控制位。1:允许串行口接收数据;0:禁止串行口接收数据。

4)TB8:在方式2和方式3时,它是要发送的第9个数据位,按需求由软件进行置位或清0。该位可用作数据的奇偶校验位,或在多机通信中用作地址帧/数据帧的标志位。

5)RB8:在方式2和方式3时,它是接收到的第9位数据,在方式1时,若SM2=0,则RB8是接收到的停止位。在方式0时,不使用RB8。

6)TI:发送中断请求标志位。在方式0时,当串行接收到的第8位结束时由内部硬件置位,向CPU申请发送中断。CPU相应中断后,必须用软件清0。在其他方式时,在停止位开始发送时由硬件置位。同样必须由软件清0。

7)RI:接收中断标志位。在方式0时,当串行接收到第8位结束时由内部硬件置位。在其他方式时,RI在接收到停止位的中间时刻由硬件置位。RI也必须用软件清0。

当一帧数据发送完成是,发送中断标志位TI被置1,接着发生串行口中断,进入串行口中断服务程序。但CPU事先并不能分辨是TI还是RI的中断请求,因此,必须在中断服务程序中用位测试指令加以判别。因此,中断标志位TI及RI均不能自动复位,必须在中断服务程序中使用清中断标志位指令,撤销中断请求状态,否则原先的中断标志位状态又将表示有中断请求。

2、 串行口2控制寄存器S2CON

寄存器S2CON(地址为9AH,复位值为00H)用于确定串行口2的操作方式和控制串行口2的某些功能,也可以用于发送和接收第9个数据位(S2TB8、S2RB8),并设有接收和发送中断标志(S2RI及S2TI)位。S2CON各位的定义如下:

其中,S2SM0用于指定串口2的工作方式,如下表所示:

寄存器S2CON的其他各个位与寄存器SCON的各个位含义和功能都类似,在此就不再赘述。

3、 掉电控制寄存器PCON

PCON(地址为87H,复位值为30H)中的SMOD用于设置方式1、方式2、方式3的波特率是否加倍,各位定义如下:

其中,与串行口通信相关的位是SMOD和SMOD0。

1) SMOD:串行口波特率系数控制位。复位时,SMOD=0。

0:各个工作方式的波特率不加倍。

1:使方式1、方式2和方式3的波特率加倍。

2) SMOD0:帧错误检测有效控制。复位时,SMOD0=0。

0:SCON寄存器中的SM0/FE位用于SM0功能,和SM1一起指定串行通信的工作方式。

1:SCON寄存器中的SM0/FE位用于FE(帧错误检测)功能。

4、 辅助寄存器AUXR

辅助寄存器AUXR(地址为8EH,复位值为00H)各位的定义如下:

T0x12T1x12T2x12分别用于设置定时器0、定时器1和定时器2的速度。T2R为定时器2的运行控制位。T2_C/T:控制定时器2用作定时器或计数器。EXTRAM用于设置是否运行使用内部扩展的1792B扩展RAM

1) UART_M0x6:用于串口模式的通信速度设置位。

0:UART串行口模式0的速度是传统8051单片机串行口的速度,即12分频。

1:UART串行口模式0的速度是传统8051单片机串行口速度的6倍,即2分频。

2) S1ST2:串行口1波特率发生器选择位。

0:选择定时器1作为串行口1的波特率发生器。

1:选择定时器2作为串行口1的波特率发生器。

注意:对于具有串行口2的STC15F2K60S2单片机,串行口2只能使用定时器2作为波特率发生器,不能选择定时器1作为波特率发生器;串行口1可以选择定时器1作为波特率发生器,也可以选择定时器2作为波特率发生器。

STC15F2K60S2单片机是1T的8051单片机,复位后兼容传统的8051单片机。

如果用定时器T1做波特率发生器,AUXR中的T1x12位控制UART串行口速度是12T还是1T。

5、 从机地址控制寄存器

为了方便多机通信,STC15F2K60S2单片机设置了从机地址控制寄存器SADEN和SADDR。其中SADEN是从机地址掩码允许寄存器,SADDR是从机地址寄存器。

主机可以用从机地址来选择性地访问从机。可以用广播的方式来寻址所有对的从机。从机的地址由SADDR和SADEN寄存器来定义,从机地址是由SADDR设定的8位数据,如果SADEN中相应的位置0,则SADDR中对应的位无效。只有当SADEN中的相应位为1,SADDR中的数据才有效。也就是说,SADEN寄存器使能串口的自动地址识别功能,当SADEN中的某位被置1,那么SADDR寄存器中的相应位会与接收到的数据进行比较。如果SADEN.n被设为0,那么系统会忽略对该位的比较。如果SADEN为全0,那么对于所有的地址帧系统都会产生中断。

6、 数据缓冲器

数据缓冲器用于保存要发送的数据或者从串行口接收到的数据。写数据缓冲器的操作完成待发送数据的加载,读数据缓冲器的操作可获得已接收到的数据。串行口1的数据缓冲器是SBUF,串行口2的数据缓冲器是S2BUF。

串行通道内设有数据寄存器。在所有的串行通信方式中,在写入数据缓冲器信号的控制下,把数据装入相同的9位移位寄存器,前面8位为数据字节,其中最低位为移位寄存器的输出位。根据不同的工作方式,自动将1或TB8的值装入移位寄存器的第9位,并进行发送。

串行通道的接收寄存器是一个输入移位寄存器。对于串口1,在方式0时它的字长为8位,其他方式时为9位。对于串口2,方式0和方式1时均为9位。

对于串行口1,当一个字符接收完毕,移位寄存器中的数据字节装入串行接收数据缓冲器SBUF中,其第9位则装入SCON寄存器的RB8位。如果SM2使得已接收的数据无效,则RB8位和SBUF缓冲器中的内容不变。

对于串行口2,当一个字符接收完毕,移位寄存器中的数据字节装入串行接收数据缓冲器S2BUF中,其第9位则装入S2CON寄存器的S2RB8位。如果S2SM2使得已接收的数据无效,则S2RB8位和S2BUF缓冲器中的内容不变。

正式由于接收通道内设有输入移位寄存器和数据缓冲器,从而能使一帧接收完将数据由移位寄存器装入数据缓冲器后,可立即开始接收下一帧信息,CPU应在该真接收结束前从数据缓冲器中将数据取走,否则前一帧数据将丢失。数据缓冲器以并行方式送往内部数据总线。

无论对于串口1还是串口2,发送缓冲器只能写入,不能读出;接收缓冲器只能读出,不能写入。因此,串行口1的两个缓冲器共用一个地址号(99H),串行口2的两个缓冲器共用一个地址号(9BH)。

7、 串口1的中继广播方式设置

CLK_DIV寄存器中的TX_RX位用于串口1的中继广播方式设置。

0:串口1为正常工作方式;

1:串口1为中继广播方式,即将RxD端口输入的电平状态实时输出在TxD外部管脚上。

这一讲主要跟大家一起学习了与STC15F2K60S2单片机串行口通信相关的一些寄存器以及每个寄存器的作用,都是些纯理论的知识,或许有点枯燥,但是这也是必须要掌握的,在下一讲SingleYork还是会跟大家一起学习一下STC15F2K60S2单片机串行口的几种工作方式,然后会跟大家一起学写串口通信的程序,敬请关注!

I51开发板第二十七讲 STC15F2K60S2串行口工作方式简介

https://bbs.icxbk.com/community/forum.php?mod=viewthread&tid=69162

(出处: ICKEY BBS)

  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:3
灵澈 2016-10-21
看着舒服
0   回复
举报
发布
SingleYork 回复 2016-10-21
也就有点卖相而已了;P
0   回复
举报
kk118a 2016-10-20
整理的这么整齐
0   回复
举报
发布
SingleYork 回复 2016-10-21
我比较喜欢整齐……
0   回复
举报
瞎折腾 2016-10-20
这是真的很详细啊!多谢,学习了
0   回复
举报
发布
SingleYork 回复 2016-10-21
互相学习;P
0   回复
举报
7943603 回复 2016-10-28
多谢楼主倾情奉献。
0   回复
举报
金钱豹 回复 2016-11-09
讲的不错,以后跟楼主混了
0   回复
举报
韩梅梅 回复 2016-11-09
好整齐啊
0   回复
举报
new world 回复 2016-11-10
跟楼主来学习一下
0   回复
举报
x
收藏成功!点击 我的收藏 查看收藏的全部帖子