串口编程寄存器分析

目录

PCON 电源控制寄存器

SCON 控制寄存器

自己实现串口编程初始化:

编程练习:


PCON 电源控制寄存器

功能

PCON 寄存器主要用于CHMOS型单片机的电源控制,包括设置电源模式、波特率倍增等。

地址

  • 字节地址:87H

结构

  • SMOD:波特率加倍位。SMOD=1时,串行口波特率加倍;SMOD=0时,波特率正常。
  • PD:掉电模式设定位。PD=1时,单片机进入掉电模式;PD=0时,单片机正常工作。
  • IDL:空闲模式设定位。IDL=1时,单片机进入空闲模式;IDL=0时,单片机正常工作。

初始化设置:

在进行电源管理时,需要设置PCON寄存器的相关位,以确定单片机的电源模式和工作状态。

PCON &= 0x7F:

 这条语句的目的是清除PCON寄存器中的SMOD位,即将SMOD位设置为0。这是通过位与(AND)操作来实现的。

解释如下:

  • 0x7F 是一个十六进制数,其二进制表示为 0111 1111
  • &= 是位与赋值操作符。它会将PCON寄存器中的每一位与0x7F的对应位进行与操作,并将结果存储回PCON寄存器。
  • 因为0x7F的低7位都是1,而最高位(即SMOD位)是0,所以与操作会保留PCON的低7位不变,并将SMOD位设置为0。

这样,通过执行PCON &= 0x7F;,你就可以确保SMOD位被清除(设置为0),从而禁用波特率加倍功能。如果你想要启用波特率加倍功能,你可以使用PCON |= 0x80;,这会将SMOD位设置为1,而保持其他位不变。

补充回顾:&=、|=;

位与(AND)运算的规则是:

  • 如果两个相应的二进制位都为1,则该位的结果值为1。
  • 否则,结果为0。

&= 运算符的使用通常是为了修改一个变量的某些位而不影响其他位。

例如,假设我们有一个字节变量 flags,我们想要清除它的最高位(即第7位,从右边数起),而不改变其他位。我们可以使用 &= 运算符和掩码(mask)0x7F(二进制为 0111 1111)来实现这一点:

在这个例子中,flags 的初始值是 0xA5(二进制 1010 0101)。当我们执行 flags &= 0x7F; 时,flags 的每一位都与 0x7F(二进制 0111 1111)的对应位进行位与操作。因为 0x7F 的最高位是0,所以 flags 的最高位也被设置为0,而其他位保持不变。最终,flags 的值变为 0x25(二进制 0010 0101)。

位或(OR)运算的规则是:

  • 如果两个相应的二进制位中至少有一个为1,则该位的结果值为1。
  • 否则,结果为0。

|= 运算符通常用于修改一个变量的某些位而不影响其他位。

例如,假设我们有一个字节变量 flags,我们想要设置它的第二位(从右边数起,索引为1),而不改变其他位。我们可以使用 |= 运算符和掩码(mask)0x02(二进制为 0000 0010)来实现这一点:

在这个例子中,flags 的初始值是 0x01(二进制 0000 0001)。当我们执行 flags |= 0x02; 时,flags 的每一位都与 0x02(二进制 0000 0010)的对应位进行位或操作。因为 0x02 的第二位是1,所以 flags 的第二位也被设置为1,而其他位保持不变(因为它们与 0x02 的对应位进行或运算时,结果仍然是它们原来的值)。最终,flags 的值变为 0x03(二进制 0000 0011)。

SCON 控制寄存器

功能

SCON 控制寄存器主要用于控制串行通信的方式选择、接收和发送,以及指示串口的状态。

地址

  • 字节地址:98H
  • 位地址:98H~9FH

结构

  • SM0、SM1:这两位定义了串行口的4种工作方式,包括移位寄存器I/O方式、10位通用异步接口、11位异步通信接口等。
  • SM2:多机通信控制位。在方式2和方式3下,当SM2=1时,只有接收到的第9位数据(RB8)为1时,才会产生中断请求并将数据送入SBUF。
  • REN:允许串行接收位。REN=1时,允许接收数据;REN=0时,禁止接收数据。
  • TB8:在方式2和方式3时,TB8是要发送的第9位数据,其值由软件设置。

初始化设置

在进行串口通信之前,需要对SCON寄存器进行初始化设置,包括确定串行口的工作方式、允许接收数据等。

 SCON = 0x50:

将 SCON 寄存器的所有位设置为一个特定的值。在十六进制数 0x50 中,其二进制表示为 0101 0000

根据标准的8051 SCON 寄存器定义,这个值通常意味着:

  • SM0 = 1: 通常表示串行通信工作在模式1(9位可变波特率)。但具体的模式可能取决于SM1和其他位的设置。
  • SM1 = 0: 与SM0一起确定串行通信的模式。在这里,与SM0结合表示模式1。
  • SM2: 通常用于多机通信中的地址识别,但在这里它是0。
  • REN: 接收使能位。这里它被设置为0,意味着接收功能被禁用。但在某些应用中,即使REN被设置为0,接收可能仍然可以工作(取决于具体的硬件和固件实现)。
  • TB8: 发送数据的第9位。在这里它被设置为0。
  • RB8: 接收数据的第9位。这是一个只读位,表示最近接收到的数据的第9位。
  • TI: 发送中断标志。这是一个只读位,表示发送缓冲区为空。
  • RI: 接收中断标志。这是一个只读位,表示接收缓冲区有数据。

但是,请注意,SCON 寄存器的确切位定义和功能可能因不同的8051变种或制造商而有所不同。因此,最好查阅你正在使用的具体8051微控制器的数据手册或参考手册,以获取关于 SCON 寄存器及其位定义的准确信息。

另外,由于 TI 和 RI 是只读位,直接写入 SCON 寄存器时,这两个位通常会被忽略。如果你需要清除这些中断标志,通常需要通过其他方式(如软件清零)来完成。

自己实现串口编程初始化:

方式1:

SCON 配置 0100 0000

编程练习:

串口波特率9600

每隔一秒,单片机向PC发送一个字符串

PC上位机串口调试助手发送字母o点亮LED,发送字母c关闭LED

  • 27
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值