单片机关键字sfr和sbit的理解

grooovvve grooovvve     2023-01-07     490

关键词:

在单片机C语言编程中,扩充了两个关键字sfr和sbit。
sfr(Special Function Register特殊功能寄存器的缩写),sbit(特殊功能寄存器位),与定义一般的int、char型变量不同,这两个字定义的并不是变量,而作为特殊功能寄存器的引用,或许可以叫做别名。
单片机头文件<reg51.h>中定义了21个特殊功能寄存器,并且都是8位寄存器,而部分寄存器的每个位又用sbit进行了定义:

sfr P0 = 0x80;
sfr P1 = 0x90;
sfr P2 = 0xA0;
sfr P3 = 0xB0;
sfr PSW = 0xD0;
sfr ACC = 0xE0;
sfr B = 0xF0;
sfr SP = 0x81;
sfr DPL = 0x82;
sfr DPH = 0x83;
sfr PCON = 0x87;
sfr TCON = 0x88;
sfr TMOD = 0x89;
sfr TL0 = 0x8A;
sfr TL1 = 0x8B;
sfr TH0 = 0x8C;
sfr TH1 = 0x8D;
sfr IE = 0xA8;
sfr IP = 0xB8;
sfr SCON = 0x98;
sfr SBUF = 0x99;
sfr是定义一个8位的寄存器,sbit是定义位寄存器,个人认为可以把这种定义理解为定义一个常量指针始终指向0x80这个特殊寄存器,即如下定义方法;
const unsigned char *PP = 0x80;
当然,这种定义方法不完全符合上面的说法,而且*PP被限制了写操作的,即PP所指向的地址被认定为常量,而PP任然是个变量,事实上除了使用sfr和sbit进行定义外,其他定义方式被认为是不安全的而被限制了写入操作。最后发现定义指针的时候只有定义数组时:
char a[];
地址指针a才是一个常量指针,而其他指针都是变量;
---------------------
作者:Lorain_Lynies
来源:CSDN
原文:https://blog.csdn.net/lorain_lynies/article/details/52013611?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

































sbit在单片机中的表示和作用?

...就输出高电平,sbit就是s位,代表二进制数的多少位,在单片机里面一般有8位和16位立即数和地址。位定义:sbitled=P1^1;//LED灯接在P1.1口扩展资料:注意事项在C语言里,如果直接写P1.0,C编译器并不能识别,而且P1.0也不是一个合... 查看详情

c语言中sbit的意思是?

sbit在C语言里是编译器里面的关键字,sbit是keil c51中的关键字。sbit要在最外面定义,就是说必须定义成外部变量.sbit定义的是SFR(特殊功能寄存器)的bit。sbit更像是类型定义,不像是变量定义。sbit:指示说明性说明。bit和sbit都是C... 查看详情

特殊功能寄存器sfr(代码片段)

...内存单元,值域为0~255。    利用它可以访问51单片机内部的所有特殊功能寄存器。(sfr是定义8位的特殊功能寄存器而sfr16则是用来定义16位特殊功能寄存器) (1)sbit位变量名=位地址    sbit P1_1=Ox91;这样是把位的... 查看详情

c语言中bit和sbit的区别哪些

...型,点用一个内存单元,值域为0~255。利用它可以访问51单片机内部的所有特殊功能寄存器。如用sfrP1=0×90这一句定P1为P1端口在片内的寄存器,在后面的语句中我们用以用P1=255(对P1端口的所有引脚置高电平)之类的语句来操作特... 查看详情

c语言中bit与sbit的区别

...寄存器)的某一个位定个别名,不另占空间。扩展资料:单片机中C语言sbit使用方法——1、bit位标量。bit位标量是c51编译器的一种扩充数据类型,利用它可以定义一个位标量,但是不能定义位指针,也不能定义位数组。它的值是... 查看详情

c51

1. 头文件  include<reg51.h>2. sfr 特殊功能寄存器声明sfr 变量名=地址值sbit  特殊功能位声明sbit  变量名=地址值bit  位变量声明#define  结尾不用加分号#typedef 重新定义关键词,结尾要加分号,   查看详情

单片机中bit和sbit有啥区别?

参考技术Asbit映射到IO口(P1^1这种IO口的“位”)bit在RAM中的可位寻址空间中,一般用作程序判断的标志位。你可以认为它们一个对外(sbit),一个对内(bit)。 查看详情

基于免费的sdcc开发51单片机

intel的51系列单片机一直都作为电子爱好者的入门首选,它有着编程简单易于理解的特点。虽然目前16位、32位,甚至多核MCU早已大行其道,但C51因其寄存器数量少,结构简单,入门方便被广大爱好者所喜爱。过... 查看详情

单片机c语言程序设计中,用关键字bit定义单片机的端口.对吗

bit是声明一个位变量的,定义单片机端口的是sbit.如:sbitled=P2^1;//定义引脚P2.1为ledbitflag;//声明一个位变量参考技术Asbit,不是bit而且只有51类型的单片机合适sbitled1=P1^1; 参考技术B不对,用sbitbit申明位变量。 参考技术C用sbit定义... 查看详情

谁能把单片机串口通信sfr介绍下?

参考技术AAVR单片机的USART系统:UDR:USART数据寄存器UCSRA:USART控制和状态寄存器AUCSRB:USART控制和状态寄存器BUCSRC:USART控制和状态寄存器CUBRRH:USART波特率配置寄存器高字节UBRRL:USART波特率配置寄存器低字节 参考技术BMCS51单片... 查看详情

单片机volatile关键字的作用?

最近我们无际单片机学员在做stm8和stm32项目的时候,问volatile这个关键词怎么理解?有什么作用?Volatile是C语言的一个关键字,在stm8和stm32的固件库里也会经常看见这个关键字的使用。如果真的想理解透彻,可... 查看详情

单片机volatile关键字的作用?

最近我们无际单片机学员在做stm8和stm32项目的时候,问volatile这个关键词怎么理解?有什么作用?Volatile是C语言的一个关键字,在stm8和stm32的固件库里也会经常看见这个关键字的使用。如果真的想理解透彻,可... 查看详情

帮忙做一个超音波测距仪程序,c语言和汇编语言都行

这是数码管连接到单片机的电路图,超音波模块trig连接到p1.1,echo连接到p1.0,谢谢(1)测量范围0.1—4m,测量精度1cm;(2)LED数码管显示距离,单位为厘米;单片机为89c51这里有一个超声波测距程序,供参考:#include <reg52... 查看详情

c51中,用sbit定义位变量,是否就存放在单片机的可位寻址区(0x20--0x2f)呢?

...能定义位指针,也不能定义位数组。sbit利用它可以访问单片机内部的RAM中可寻址位或特殊功能寄存器中的可寻址位。参考资料:51单片机及开发实例 查看详情

c51较c比较,单片机最小系统

sfr(Specialfunctionregisters):特殊功能寄存器声明bit:位变量声明sbit:特殊位声明psw^2,表示psw寄存器上的第2位<<>>位左移位右移&|按位与,按位或^按位异或~按位取反 单片机最小系统:1.电源2.晶振3.复位电路 查看详情

我的keil软件为啥写程序时就include变蓝,其余的像sbit,void等关键字都不变蓝

...keil软件为什么写程序时就include变蓝,其余的像sbit,void等关键字都不变蓝,而且每次运行正确程序都会出现2次警告,请问是什么原因,我用的是keil4版,急求解答,不甚感激颜色问题是因为关键字会变颜色具体设置在edit->configu... 查看详情

51单片机特别功用存放器和位界说

接下来的几节,我们会带着人人编写第一个单片机程序。在此之前,我们先来理解一些51单片机特有的程序语法以及Keil软件的根本操作步调,请人人必定要有耐烦。我们次要是用C言语来对单片机编程,而有的单片机有那么几条... 查看详情

keil编程时sbit的意义及用法

...这些。KeilC51简介:是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统。与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、链接器、库管理... 查看详情