C51 单片机开发 SFR 及 SBIT 的作用
共 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页)
手册基本上已经把概念描述清楚了,也很直观。对于寄存器、直接寻址这些概念没必要过多地考虑,如果了解汇编语言的话,对这些概念就非常熟悉了。
上面的图就是内存 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 页)
可以看到图中通过 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
具体了解可以加微信沟通!