mcs-51单片机内与串行口有关的控制寄存器有哪些

 我来答
迪凯特科技(北京)有限公司 2023-07-28
展开全部
四种工作方式啊 1、方式0 串行接口的工作方式0为移位寄存器I/O方式。在串行口外接移位寄存器以扩展I/O接口,也可以外接串行同步I/O的设备。 (1)方式0输出 串行口以方式0发送时,数据以RXD端串行输出,TXD端输出同步信号。当一个数据写入串行口发送缓冲器以后,就启动串行口发送器以振荡频率的十二分之一的波特率,将数据从RXD端串行输出。 (2)方式0输入 当串行口定义为方式0并置位REN后,便启动串行口以方式0接收数据,此时RXD端为数据输入端,TXD端为同步脉冲信号输出端。接收器以振荡率的十二分之一的波特率接收RXD端输入的数据信息。但接…
ikooky
推荐于2018-03-01 · TA获得超过1055个赞
知道小有建树答主
回答量:120
采纳率:50%
帮助的人:21.7万
展开全部
#串行口的控制寄存器
MCS-51单片机串行口是由缓冲器SBUF、移位寄存器、串行口控制寄存器SCON、电源控制寄存器PCON及波特率发生器T1组成。

主要解释如下:

1.串行口数据缓冲器SBUF
MCS-51单片机内的串行接口部分,具有两个物理上独立的缓冲器:发送缓冲器和接收缓冲器,以便能以全双工的方式进行通信。串行口的接收由移位寄存器和接收缓冲器构成双缓冲结构,能避免在接收数据过程中出现帧重叠。发送时因为CPU是主动的,不会发生帧重叠错误,所以发送结构是单缓冲的。
在逻辑上,串行口的缓冲器只有一个,它既表示接收缓冲器,也表示发送缓冲器。两者共用一个寄存器名SBUF,共用一个地址99H。
即:在完成串行口初始化后,发送数据时,采用MOV SBUF,A指令,将要发送的数据输入SBUF,则CPU自动启动和完成串行数据的输出;接收数据时,采用MOV A,SBUF指令,CPU就自动将接收到的数据从SBUF中读出。
2.串行口控制寄存器SCON
串行口控制寄存器SCON包含:串行口工作方式选择位、接收发送控制位、以及串行口状态标志位。其格式如下:

D7--D0分别对应

SM0 SM1 SM0 REN TB8 RB8 TI RI

①SM0 SM1(SCON.7、SCON.6):串行口的工作方式选择位

②SM2(SCON.5):多机通信控制位。在方式2或方式3中,若SM2=1,则只有当接收到的第9位数据(RB8)为1时,才能将接收到的数据送入SBUF,并使接收中断标志RI置位向CPU申请中断,否则数据丢失;若SM2=0,则不论接收到的第9位数据为1还是为0,都将会把前8位数据装入SBUF中,并使接收中断标志RI置位向CPU申请中断。在方式1,如SM2=1,则只有收到有效的停止位时才会使RI置位。在方式0时,SM2必须为0。
③REN(SCON.4):串行口接收允许位。由软件置位以允许接收,由软件清0来禁止接收。
④TB8(SCON.3):在方式2和方式3中为发送的第9位数据。在多机通信中,常以该位的状态来表示主机发送的是地址还是数据。通常协议规定:TB8为“0”表示主机发送的是数据,为“1”表示发送的是地址。
⑤RB8(SCON.2):在方式2和方式3中为接收到的第9位数据。它和SM2、TB8一起用于通信控制。
⑥TI(SCON.1):发送中断标志。由硬件在方式0串行发送第8位结束时置位,或在其他方式串行发送停止位的开始时置位,必须由软件清“0”。
⑦RI(SCON.0):接收中断标志。由硬件在方式0串行接收到第8位结束时置位,或在其他方式串行接收到停止位的中间时置位,必须由软件清“0”。
迪凯特科技(北京)有限公司
2023-07-28 广告
单片机串口通信的原理是利用单片机的串口通信模块,通过把数据转化为一位一位的用时序方式传送数据,实现单片机与外部设备之间的数据通信。 串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以... 点击进入详情页
本回答由迪凯特科技(北京)有限公司提供
Oan365
2016-01-03 · TA获得超过372个赞
知道小有建树答主
回答量:417
采纳率:100%
帮助的人:214万
展开全部
PCON寄存器,SCON寄存器
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Sullivan_Yu
2016-03-29 · TA获得超过165个赞
知道小有建树答主
回答量:170
采纳率:100%
帮助的人:73.7万
展开全部
随便找一本MSC-51单片机的书籍 然后去找串口通讯那一章,里边就有
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
0开拓者0
2016-01-04 · TA获得超过1404个赞
知道小有建树答主
回答量:1333
采纳率:72%
帮助的人:374万
展开全部
拿段范例看不就知道了
/*9600@11.0592M*/
#include <reg51.h>
void InitUART(void)
{
TMOD = 0x20;
SCON = 0x50;
TH1 = 0xFD;
TL1 = TH1;
PCON = 0x00;
EA = 1;
ES = 1;
TR1 = 1;
}
void SendOneByte(unsigned char c)
{
SBUF = c;
while(!TI);
TI = 0;
}
void main(void)
{
InitUART();
}
void UARTInterrupt(void) interrupt 4
{
if(RI)
{
RI = 0;
//add your code here!
}
else
TI = 0;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式