C51串口的SCON寄存器及工作…

一,串行口控制寄存器SCON

 

它用于定义串行口的工作方式及实施接收和发送控制。字节地址为98H,其各位定义如下表:

D7

D6

D5

D4

D3

D2

D1

D0

SM0

SM1

SM2

REN

TB8

RB8

TI

RI

 

SM0、SM1:串行口工作方式选择位,其定义如下:

SM0、SM1

 工作方式

 功能描述

 波特率

 0 0

 方式0

 8位移位寄存器

 Fosc/12

 0 1

 方式1

 10位UART

 可变

 1 0

 方式2

 11位UART

Fosc/64或fosc/32

 1 1

 方式3

 11位UART

 可变

 

其中fosc为晶振频率

SM2:多机通讯控制位。在方式0时,SM2一定要等于0。在方式1中,当(SM2)=1则只有接收到有效停止位时,RI才置1。在方式2或方式3当(SM2)=1且接收到的第九位数据RB8=0时,RI才置1。

REN:接收允许控制位。由软件置位以允许接收,又由软件清0来禁止接收。

TB8: 是要发送数据的第9位。在方式2或方式3中,要发送的第9位数据,根据需要由软件置1或清0。例如,可约定作为奇偶校验位,或在多机通讯中作为区别地址帧或数据帧的标志位。

RB8:接收到的数据的第9位。在方式0中不使用RB8。在方式1中,若(SM2)=0,RB8为接收到的停止位。在方式2或方式3中,RB8为接收到的第9位数据。

TI:发送中断标志。在方式0中,第8位发送结束时,由硬件置位。在其它方式的发送停止位前,由硬件置位。TI置位既表示一帧信息发送结束,同时也是申请中断,可根据需要,用软件查询的方法获得数据已发送完毕的信息,或用中断的方式来发送下一个数据。TI必须用软件清0。

RI:接收中断标志位。在方式0,当接收完第8位数据后,由硬件置位。在其它方式中,在接收到停止位的中间时刻由硬件置位(例外情况见于SM2的说明)。RI置位表示一帧数据接收完毕,可用查询的方法获知或者用中断的方法获知。RI也必须用软件清0。

  

二,串行口的工作方式 

8051单片机的全双工串行口可编程为4种工作方式,现分述如下: 

 

1,方式0为移位寄存器输入/输出方式。可外接移位寄存器以扩展I/O口,也可以外接同步输入/输出设备。8位串行数据者是从RXD输入或输出,TXD用来输出同步脉冲。

  

(1)输出串行数据从RXD引脚输出,TXD引脚输出移位脉冲。CPU将数据写入发送寄存器时,立即启动发送,将8位数据以fos/12的固定波特率从RXD输出,低位在前,高位在后。发送完一帧数据后,发送中断标志TI由硬件置位。

  

(2)输入当串行口以方式0接收时,先置位允许接收控制位REN。此时,RXD为串行数据输入端,TXD仍为同步脉冲移位输出端。当(RI)=0和(REN)=1同时满足时,开始接收。当接收到第8位数据时,将数据移入接收寄存器,并由硬件置位RI。

  

2,方式1为波特率可变的10位异步通讯接口方式。发送或接收一帧信息,包括1个起始位0,8个数据位和1个停止位1。

  

(1)输出当CPU执行一条指令将数据写入发送缓冲SBUF时,就启动发送。串行数据从TXD引脚输出,发送完一帧数据后,就由硬件置位TI。

 

(2)输入在(REN)=1时,串行口采样RXD引脚,当采样到1至0的跳变时,确认是开始位0,就开始接收一帧数据。只有当(RI)=0且停止位为1或者(SM2)=0时,停止位才进入RB8,8位数据才能进入接收寄存器,并由硬件置位中断标志RI;否则信息丢失。所以在方式1接收时,应先用软件清零RI和SM2标志。

  

3,方式2

方式2为固定波特率的11位UART方式。它比方式1增加了一位可程控为1或0的第9位数据。

  

(1)输出: 发送的串行数据由TXD端输出一帧信息为11位,附加的第9位来自SCON寄存器的TB8位,用软件置位或复位。它可作为多机通讯中地址/数据信息的标志位,也可以作为数据的奇偶校验位。当CPU执行一条数据写入SUBF的指令时,就启动发送器发送。发送一帧信息后,置位中断标志TI。

  

(2)输入: 在(REN)=1时,串行口采样RXD引脚,当采样到1至0的跳变时,确认是开始位0,就开始接收一帧数据。在接收到附加的第9位数据后,当(RI)=0或者(SM2)=0时,第9位数据才进入RB8,8位数据才能进入接收寄存器,并由硬件置位中断标志RI;否则信息丢失。且不置位RI。再过一位时间后,不管上述条件时否满足,接收电路即行复位,并重新检测RXD上从1到0的跳变。

 

4,工作方式3

方式3为波特率可变的11位UART方式。除波特率外,其余与方式2相同。

  • 8
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 甲机的 SCON 控制寄存器应设置为: - SM0: 0 - SM1: 1 - SM2: 0 - REN: 1 - TB8: 0 - RB8: 0 - TI: 0 - RI: 0 乙机的 SCON 控制寄存器应设置为: - SM0: 0 - SM1: 1 - SM2: 0 - REN: 1 - TB8: 0 - RB8: 0 - TI: 0 - RI: 0 其中: - SM0: 串口工作模式位 0, 与 SM1 共同确定串口工作模式, 双机通信时应设置为 0 - SM1: 串口工作模式位 1, 与 SM0 共同确定串口工作模式, 双机通信时应设置为 1 - SM2: 串口工作模式位 2, 串口中断使能位, 双机通信时应设置为 0 - REN: 串口接收使能位, 甲机发送数据时应设置为 1, 乙机接收数据时应设置为 1 - TB8: 发送数据第 8 位, 双机通信时应设置为 0 - RB8: 接收数据第 8 位, 双机通信时应设置为 0 - TI: 串口发送中断标志位, 发送时应设置为 0, 接收时应保持为 0 - RI: 串口接收中断标志位, 接收时应设置为 0, 发送时应保持为 0 ### 回答2: 在两个51单片机进行双机通信时,甲机负责发送,乙机负责接收,则甲机和乙机的控制寄存器SCON)相关位的设置如下: 甲机控制寄存器SCON)相关位的设置如下: 1. SCON.7:SM0(串口模式0位),决定了串行通信接口使用的工作模式。在此情况下,设置为0,表示使用8位异步模式。 2. SCON.6:SM1(串口模式1位),决定了串行通信接口使用的工作模式。在此情况下,设置为1,表示使用波特率可变的异步模式。 3. SCON.5:SM2(串口模式2位),决定了串行通信接口使用的工作模式。在此情况下,由于波特率可变的异步模式需要设置SM2为1,因此此位设置为1。 4. SCON.4:REN(接收使能位),用于控制串行接收器的使能。在甲机发送乙机接收的情况下,此位设置为0,表示禁用接收器。 5. SCON.3:TB8(发送数据位),发送的数据帧中的第9位,在此情况下设置为0。 6. SCON.2:RB8(接收数据位),接收的数据帧中的第9位,在此情况下设置为0。 7. SCON.1:TI(发送中断标志位),此位表示串行发送是否完成。在甲机发送数据时,此位由硬件自动设置为1。 8. SCON.0:RI(接收中断标志位),此位表示是否接收到数据。在此情况下,设置为0,表示未接收到数据。 乙机控制寄存器SCON)相关位的设置如下: 1. SCON.7:SM0(串口模式0位),设置为0,表示使用8位异步模式。 2. SCON.6:SM1(串口模式1位),设置为1,表示使用波特率可变的异步模式。 3. SCON.5:SM2(串口模式2位),设置为1,以支持波特率可变的异步模式。 4. SCON.4:REN(接收使能位),设置为1,表示启用接收器。 5. SCON.3:TB8(发送数据位),此位不需要设置,因为乙机只负责接收数据。 6. SCON.2:RB8(接收数据位),此位不需要设置,因为乙机只负责接收数据。 7. SCON.1:TI(发送中断标志位),此位不需要设置,因为乙机只负责接收数据。 8. SCON.0:RI(接收中断标志位),此位由硬件自动设置为1,表示接收到数据。 ### 回答3: 对于甲机的控制寄存器SCON)位设置如下: 1. SM0 (串口模式0位): 作为发送机,设为0。 2. SM1 (串口模式1位): 作为发送机,设为1。 3. SM2 (串口模式2位): 作为发送机,设为0。 4. REN (接收允许位): 作为发送机,设为0,因为甲机不需要接收数据。 5. TB8 (发送器第九位): 作为发送机,设为0,因为发送字节中不需要添加第九位。 6. RB8 (接收器第九位): 作为发送机,设为0,因为甲机不需要接收数据。 对于乙机的控制寄存器SCON)位设置如下: 1. SM0 (串口模式0位): 作为接收机,设为0。 2. SM1 (串口模式1位): 作为接收机,设为1。 3. SM2 (串口模式2位): 作为接收机,设为0。 4. REN (接收允许位): 作为接收机,设为1,因为乙机需要接收数据。 5. TB8 (发送器第九位): 作为接收机,设为0,因为接收字节中不包含第九位。 6. RB8 (接收器第九位): 作为接收机,设为0,因为乙机不需要接收第九位信息。 通过这样的设置,甲机作为发送机将数据发送给乙机,而乙机作为接收机接收甲机发送的数据。这样甲乙两台单片机之间可以进行双机通信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值