bit,sbit,sfr,sfr16这些数据类型是相对C语言的扩展,分析这些存储类型的特点,

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-09-10
单片机sfr和sbit有什么区别

我是一名单片机工程师,对于什么是sfr,下面的讲解你参考一下。
.
sfr全称为:special function register(翻译为:特殊功能寄存器)
.
要想明白什么是sfr,需要先了解什么是寄存器
寄存器是RAM和ROM的统称。

.
就像猫科动物是老虎与狮子的统称一样。
ROM或者对于玩电脑的人并不陌生,什么内存3G(内存就是RAM),硬盘100G(硬盘就是ROM)。
.
单片机里面和电脑一样,有ROM和RAM之分。
那这两种寄存器的区别是什么呢?
.
1 ROM的功能:ROM的数据在程序运行的时候是不容改变的,除非你再次烧写程序,他就会改变,就像我们的书本,印上去就改不了了,除非再次印刷,这个就是ROM的原理。
.
2 RAM的功能:RAM就是在程序运行中,数据会随时改变的,就像我们的黑板,写上了可以擦,擦完再写上去,相当于程序运行的时候,调用ROM里面的数据进行各种运算。
.
再来了解如何为特殊功能
这个sfr是在RAM(动态寄存器)里面的,如何为特殊功能呢?
.
举一个非常简单的例子区别一下,
比如我家的门牌号是:北京天安门喜悦小区3楼17号房,是刘大侠的家,你说记刘大侠的家好记,还是上面那个详细地址好记呢?
.
一开始单片机没程序的时候,单片机不认得什么叫P1口

.
他只知道P1口的8只引脚,是连着内部地址0x90.

.
简洁来说就是,P1口这些引脚就是0x90地址延伸出来的引脚,在没程序的情况下,单片机是不知道什么叫P1口的,他只知道0x90地址和外部的引脚,就这么连着。
.
这样说的话,你也可以拿着0x80,0x90,这些地址,去编写我们的程序,一个两个倒是没有什么所谓,但是多几个你就会觉得很烦人了. 
.
所以sfr P1 = 0x90,就是把单片机的地址0x90改名字为P1,方便我们使用,明白了吗?
.
一个弄明白后,剩下的一堆,你就懂了.

sfr P1 = 0x90;
sfr P2 = 0xA0;
sfr P3 = 0xB0;
sfr PSW = 0xD0;
sfr ACC = 0xE0;

简单来了就是为RAM里面的地址改名字方便我们用,非常简单。
.
其实这些东西你不用过于研究的,你了解一下就可以,因为我们在写程序中肯定有一个reg52.h的头文件,因为定义名字这个事情就在这个头文件里面了,你会调用就行,不用过于研究。
.

.
如果你想学习更多单片机和程序的知识,可以看看我整理好的帖子
一天入门51单片机:网页链接
关于尾声
学单片机靠的是坚持,不能三天打鱼两天晒网,只要坚持就会看到希望。如果不坚持,一辈子(100年)都学不会,如果坚持,一个月后你就会感觉到单片机迷人的一面了。加油,祝你成功!

具体如下:
一、优点
简洁紧凑、灵活方便C语言一共只有32个关键字,9种控制语句,程序书写形式自由,主要用小写字母表示。它把高级语言的基本结构和语句与低级语言的实用性结合起来。 C 语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。
2. 运算符丰富 C语言的运算符包含的范围很广泛,共有34种运算符。C语言把括号、赋值、强制类型转换等都作为运算符处理。从而使C语言的运算类型极其丰富,表达式类型多样化。灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。
3. 数据结构丰富 C语言的数据类型有:整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。能用来实现各种复杂的数据结构的运算。并引入了指针概念,使程序效率更高。另外C语言具有强大的图形功能,支持多种显示器和驱动器。且计算功能、逻辑判断功能强大。
4. C是结构式语言 结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。
5. C语法限制不太严格,程序设计自由度大 虽然C语言也是强类型语言,但它的语法比较灵活,允许程序编写者有较大的自由度。
6. C语言允许直接访问物理地址,可以直接对硬件进行操作 由于C语言允许直接访问物理地址,可以直接对硬件进行操作,因此它既具有高级语言的功能,又具有低级语言的许多功能,能够像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元,可用来写系统软件。
7. 生成目标代码质量高,程序执行效率高 一般只比汇编程序生成的目标代码效率低10へ20%。
8. C语言适用范围大,可移植性好 C语言有一个突出的优点就是适合于多种操作系统,如DOS、UNIX;也适用于多种机型。C语言具有强大的绘图能力,可移植性好,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画,它也是数值计算的高级语言。
二、缺点
C语言的缺点主要表现在数据的封装性上,这一点使得C在数据的安全性上有很大缺陷,这也是C和C++的一大区别。
2. C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不作检查等。从应用的角度,C语言比其他高级语言较难掌握。 [C语言指针] 指针是C语言的一大特色,可以说是C语言优于其它高级语言的一个重要原因。就是因为它有指针,可以直接进行靠近硬件的操作,但是C的指针操作也给它带来了很多不安全的因素。C++在这方面做了很好的改进,在保留了指针操作的同时又增强了安全性。Java取消了指针操作,提高了安全性,适合初学者使用。
三、结构特点
1、一个C语言源程序可以由一个或多个源文件组成。
2.每个源文件可由一个或多个函数组成。
3.一个源程序不论由多少个文件组成,都有一个且只能有一个main函数,即主函数。
4.源程序中可以有预处理命令(include 命令仅为其中的一种),预处理命令通常应放在源文件或源程序的最前面。
5.每一个说明,每一个语句都必须以分号结尾。但预处理命令,函数头和花括号“}”之后不能加分号。
6.标识符,关键字之间必须至少加一个空格以示间隔。若已有明显的间隔符,也可不再加空格来间隔。

bit,sbit,sfr,sfr16都用于单片机的C语言编程。
bit—定义位变量,定义位变量时可以为变量赋值,但不能指定变量的地址。定义格式:bit 变量名=变量值。
sbit—此类型变量只要用于访问可位寻址的特殊功能寄存器中的某个位。定义格式:sbit 变量名=位地址;sbit 变量名=SFR地址^位序号;sbit 变量名=sfr16变量^位序号。
sfr—此类型变量可以访问指定的8位特殊功能寄存器,地址范围为0x80~0xFF。定义格式:sfr 变量名=变量地址。
sfr16—此类型的变量可访问16为特殊功能寄存器。定义格式:sfr16 变量名=变量地址。此处的变量地址为16位中的低8位地址,其地址范围为0x80~0xFF。通过sfr16变量读16位特殊功能寄存器时,先读低字节,后读高字节;写特殊功能寄存器时先写高字节,后写低字节。

这些都是C51编程里的数据类型
bit 表示某一二进制位 可设置0或1
sbit 直接访问SFR寄存器的位,将SFR的可寻址位通过sbit定义个名字,就可通过该名字对各位进行操作
sfr 8位寄存器,将SFR的地址通过sfr定义个名字,就能通过该名字对SFR操作
sfr16 16位寄存器,作用同上

反对和规划法规和合格后方

  • bit,sbit,sfr,sfr16这些数据类型是相对C语言的扩展,分析这些存储类型的...
    答:bit,sbit,sfr,sfr16都用于单片机的C语言编程。bit—定义位变量,定义位变量时可以为变量赋值,但不能指定变量的地址。定义格式:bit 变量名=变量值。sbit—此类型变量只要用于访问可位寻址的特殊功能寄存器中的某个位。定义格式:sbit 变量名=位地址;sbit 变量名=SFR地址^位序号;sbit 变量名=sfr...
  • 单片机sfr和sbit有什么区别
    答:1. 单片机中的sfr(特殊功能寄存器)是位于RAM(随机存取存储器)中的一类寄存器,它们被赋予了特定的功能,以便于编程和操作。2. sfr的主要作用是为单片机的I/O端口、状态标志、计数器等提供直接的访问方式。这些寄存器通常与单片机的硬件功能紧密相关,比如P1、P2、P3端口等。3. 与sfr相对的是sbit,它...
  • 单片机sfr和sbit有什么区别
    答:sbit大部分是用在寄存器中的,方便对寄存器的某位进行操作的。2.bit位标量 bit位标量是C51编译器的一种扩充数据类型,利用它可定义一个位标量,但不能定义位指针,也不能定义位数组。它的值是一个二进制位,不是0就是1,类似一些高级语言中的Boolean类型中的True和False。3.sfr特殊功能寄存器 ...
  • C51的特殊关键字,比如sbit,sfr,interrupt,code等在程序中的作用是什么...
    答:sbit:定义特殊功能寄存器的位变量,如:sbit P0_0=P0^0;//即定义P0_0为P0口的第1位 sfr:可以对51内部的寄存器进行定义,定义格式:sfr 变量名=变量地址。你打开reg51.h,里面的寄存器都是用sfr进行定义的 interrupt:中断的意思。code:程序存储区。如定义一个数组uchar ad_data[],即把数组...
  • sbit是什么意思
    答:就是定义用符号P1_0来表示P1.0引脚,如果你愿意也可以起P10一类的名字,只要下面程序中也随之更改就行了。名词区别bit和sbit都是C51扩展的变量类型。sbit 要在最外面定义,就是说必须定义成外部变量.sbit定义的是SFR(特殊功能寄存器)的bitsbit更像是类型定义,不像是变量定义。sbit: 只是说明性说明bit...
  • 单片机sfr和sbit有什么区别
    答:2.bit位标量 bit位标量是C51编译器的一种扩充数据类型,利用它可定义一个位标量,但不能定义位指针,也不能定义位数组。它的值是一个二进制位,不是0就是1,类似一些高级语言中的Boolean类型中的True和False。3.sfr特殊功能寄存器 sfr也是一种扩充数据类型,点用一个内存单元,值域为0~255。利用...
  • 单片机那个sbit是什么意思,位声明是什么
    答:第一种方法:sbit 位变量名=地址值 第二种方法:sbit 位变量名=SFR名称^变量位地址值 第三种方法:sbit 位变量名=SFR地址值^变量位地址值 如定义PSW中的OV可以用以下三种方法:sbit OV=0xd2 (1)说明:0xd2是OV的位地址值 sbit OV=PSW^2 (2)说明:其中PSW必须先用sfr定义好 sbit OV=0x...
  • sfr和sbit是什么意思?
    答:1. sfr用于定义寄存器字节地址,它代表存储器中的一个字节,该字节由一个寄存器组成。2. sbit用于定义可位寻址的位地址,它允许程序中使用位符号来表示寄存器中的特定位。3. 例如,中断允许寄存器(IE)的地址是0xA8,其中每个允许位的地址从0xA8到0xAF。4. 在程序中,可以使用sfr和sbit指令来指定...
  • 单片机sfr和sbit有什么区别
    答:我是一名单片机工程师,对于什么是sfr,下面的讲解你参考一下。.sfr全称为:special function register(翻译为:特殊功能寄存器).要想明白什么是sfr,需要先了解什么是寄存器 寄存器是RAM和ROM的统称。.就像猫科动物是老虎与狮子的统称一样。ROM或者对于玩电脑的人并不陌生,什么内存3G(内存就是RAM),...
  • sbit在单片机中的意思是什么?
    答:1. `sbit bit_variable_name = address_value;`这种方法直接为特定的位地址定义一个别名。2. `sbit bit_variable_name = SFR_name^variable_bit_address_value;`在这种方法中,通过使用SFR(Special Function Register,特殊功能寄存器)的名称和位地址的组合来定义别名。3. `sbit bit_variable_name ...