C51 单片机开发 SFR 及 SBIT 的作用

码农UP2U

共 1813字,需浏览 4分钟

 ·

2024-04-11 10:22

公众号文章同步阅读网址: www.netor0x86.com

前面几篇文章已经把单片机的开发环境和写入程序都整理完了,然后什么是单片机,什么是开发板也简单的整理了一下。这次整理一下两个比较重要的指令。


0x01:特殊功能寄存器(SFRs)

单片机和外接传感器等是通过 I/O 的引脚进行通信的。也就是说,把传感器通过杜邦线接到开发板的一个引脚上,然后通过指令读写这个引脚,就可以完成单片机与传感器的通信。

那么怎么找到 I/O 口,怎么找到 I/O 口的具体的某一个引脚呢?这就要来说一下 SFRs 了的概念了。根据手册中的描述,SFR 的意思如下:

特殊功能寄存器(SFR)是用来对片内各功能模块进行管理、控制、监视的控制寄存器和状态寄存器,是一个特殊功能的 RAM 区。STC89C51RC/RD+ 系列单片机内的特殊功能寄存器(SRF)与内部高 128 字节 RAM 貌似共用相同的地址范围,都使用 80H ~ FFH,但特殊功能寄存器(SFR)必须用直接寻址指令访问。

上面这段内容出自手册中,然后手册中提供了一个图,截图如下:(手册第59页)

e8ccccf2251c3787d7a6eb9eaec50f91.webp

手册基本上已经把概念描述清楚了,也很直观。对于寄存器、直接寻址这些概念没必要过多地考虑,如果了解汇编语言的话,对这些概念就非常熟悉了。

上面的图就是内存 80H ~ FFH 定义的一个具体的说明。


0x02:sfr 和 sbit 指令

对于前面的内容没有太多的理解其实不要紧,有些概念是通过不断的学习和深入逐步去建立的,有一天会豁然开朗!

这里来简单的举个例子来说明一下上面的图吧,通过一段简单的代码,就可以理解。

这个例子也出自手册,不过这个例子和上面的图,两个内容不在同一个章节,具体来说已经跨章了。 看一下例子吧!

手册中写道,“对 STC89C51RC/RD+ 系列单片机的 P4 口的访问,如同访问常规的 P1/P2/P3 口,并且均可位寻址,P4 的地址 E8H。”(手册第 66 页)

看完这句话,到上图中去找一下 P4 的地址的确在 E8H 的位置,但是为什么这里会提到访问 P4 口和访问 P1/P2/P3 口相同呢?因为在 reg51.h 头文件中并没有 P4 口的定义,甚至我在 52.h 头文件中也没有找到关于 P4 口的定义。所以手册中提到了 P4 口。那么同时手册中给出了 P4 口的定义。这里我截个图:(手册第 66 页)

84723bd35b4c58261ce830b2f8bcf90f.webp

可以看到图中通过 sfr 定义了 P4 口的地址,然后通过 sbit 定义了 P4 口的每个引脚的地址。

那么通过上面的定义就可以了解 sfr 和 sbit 两个指令的用途了。

在手册中也提到了这两个指令,说明如下(手册第 288 页):

新增特殊功能寄存器用 sfr 声明,新增特殊功能寄存器位用 sibt 声明。

可以看到,这两个指令的介绍在 第 10 章,而上面的图和说明分别在 第 3 章和第 4 章,离得好远!


到这里 sfr 和 sbit 的组用就说明了,C51 单片机开发用 Keil 创建工程 文章中就使用了 sbit 指令,快去看看吧!




我是一个程序员,了解 C、PHP、Java、ASM、Python,有 信安、CISP 证书,写小白也能看得懂的文章,感谢关注!!!

我的网站:https://www.netor0x86.com


我录制的视频课程:

1. 入门级栈溢出分析

2. WEB端获取MAC地址真实项目案例

3. PHP扩展模块开发之DLL编写与调用

4. C语言零基础入门教程

5. PE 文件结构初识与二进制手写可执行程序



出售一套外卖源码,交易可走闲鱼,系统展示可以查看如下地址:

https://github.com/coderup2u/takeout-ordering-system-applet

具体了解可以加微信沟通!


浏览 9
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报