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

在单片机C语言编程中,扩充了两个关键字sfr和sbit。

sfr(Special Function Register特殊功能寄存器的缩写),sbit(特殊功能寄存器位),与定义一般的int、char型变量不同,这两个字定义的并不是变量,而作为特殊功能寄存器的引用,或许可以叫做别名。

单片机头文件《reg51.h》中定义了21个特殊功能寄存器,并且都是8位寄存器,而部分寄存器的每个位又用sbit进行了定义:

[cpp] view plain copysfr 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这个特殊寄存器,即如下定义方法;

[cpp] view plain copyconst unsigned char *PP = 0x80;

当然,这种定义方法不完全符合上面的说法,而且*PP被限制了写操作的,即PP所指向的地址被认定为常量,而PP任然是个变量,事实上除了使用sfr和sbit进行定义外,其他定义方式被认为是不安全的而被限制了写入操作。最后发现定义指针的时候只有定义数组时:

[cpp] view plain copychar a[];

地址指针a才是一个常量指针,而其他指针都是变量;

单片机sfr和sbit的区别

1.bit和sbit都是C51扩展的变量类型。 bit和int char之类的差不多,只不过char=8位, bit=1位而已。都是变量,编译器在编译过程中分配地址。除非你指定,否则这个地址是随机的。这个地址是整个可寻址空间,RAM+FLASH+扩展空间。bit只有0和1两种值,意义有点像Windows下VC中的BOOL。 sbit是对应可位寻址空间的一个位,可位寻址区:20H~2FH。一旦用了sbi xxx = REGE^6这样的定义,这个sbit量就确定地址了。sbit大部分是用在寄存器中的,方便对寄存器的某位进行操作的。

2.bit位标量 bit位标量是C51编译器的一种扩充数据类型,利用它可定义一个位标量,但不能定义位指针,也不能定义位数组。它的值是一个二进制位,不是0就是1,类似一些高级语言中的Boolean类型中的True和False。

3.sfr特殊功能寄存器 sfr也是一种扩充数据类型,点用一个内存单元,值域为0~255。利用它可以访问51单片机内部的所有特殊功能寄存器。如用sfr P1 = 0x90这一句定P1为P1端口在片内的寄存器,在后面的语句中我们用以用P1 = 255(对P1端口的所有引脚置高电平)之类的语句来操作特殊功能寄存器。 sfr P1 = 0x90; //定义P1 I/O 口,其地址90H sfr 关键定后面是一个要定义的名字,可任意选取,但要符合标识符的命名规则,名字最好有一定的含义如P1 口可以用P1 为名,这样程序会变的好读好多。等号后面必须是常数,不允许有带运算符的表达式,而且该常数必须在特殊功能寄存器的地址范围之内(80H-FFH),具体可查看附录中的相关表。 sfr 是定义8 位的特殊功能寄存器而sfr16 则是用来定义16 位特殊功能寄存器, 如8052 的T2 定时器,可以定义为: sfr16 T2 = 0xCC; //这里定义8052 定时器2,地址为T2L=CCH,T2H=CDH

打开APP精彩内容

点击阅读全文

请写出sfr和sbit的语句格式_单片机关键字sfr和sbit区别相关推荐

  1. 请写出sfr和sbit的语句格式_单片机c语言的sbit和sfr

    本文引用地址:http://www.eepw.com.cn/article/201611/320082.htm bit和int char之类的差不多,只不过char=8位, bit=1位而已.都是变量 ...

  2. 请写出sfr和sbit的语句格式_单片机sfr和sbit关键字,详解

    sfr用于将一个单片机的特殊功能寄存器(special function register)赋值给一个变量,这样在后面的程序中就可以中这个变量指引(refer to)该寄存器. sbit与sfr用法类 ...

  3. 请写出sfr和sbit的语句格式_根据给水阀门井图集07MS101-2第25页阀门井,进行清单组价,截图上传并上传计价软件版本附件...

    [判断题]当溶液的pH大于某一可解离基团的pKa值时,该基团有一半以上被解离 (1.0分) [单选题]血红蛋白质的氧合曲线是 (1.0分) [单选题]若有定义:int a[2][4];,则引用数组元素 ...

  4. 请写出sfr和sbit的语句格式_最新最全 Oracle ORA-01861: 文字与格式字符串不匹配

    接上篇,上一篇讲到,要将oracle表中已经存放的时间查询出来后再加8小时.然后再来使用所得到的结果.当时测试可行 但是第二天打开数据库再一执行,就会发现数据库报错,昨天可以完美执行的语句,今天就是一 ...

  5. 请写出sfr和sbit的语句格式_习题_C51语言答案

    一.填空 1.KeiL C51软件中,工程文件的扩展名是___UV2_______,编译连接后生成可烧写的文件扩展名是___HEX_________. 2.C51支持的指针有一般指针和存储器指针. 3 ...

  6. 请写出sfr和sbit的语句格式_KEIL中的SFR和SBIT用法

    sfr 似乎不是标准C 语言的关键字,而是Keil 为能直接访问80C51 中的SFR 而提供了一个新的关键词,其用法是:sfrt 变量名=地址值. 例:sfr P1 = 0x90; 这样的一行即定义 ...

  7. 请写出至少五个块级元素_以逸之名

    第一章 第九元素 或许在很久以前有着那么些许特别的元素类群,人们对它们的拥有者涌溢着无限的敬仰和崇拜.可是,随着时代的发展,相信这世间万物的本质是元素的人以近乎于无.他们热爱的是科学,相信科学的力量. ...

  8. 如果学号的前两位表示年级,要查找98级女生的姓名,请写出相应的SQL语句

    下面是学生成绩表(score)的结构说明 字段名称 字段解释 字段类型 字段长度 约束 sc_number 学号 字符 8 PK sc_name 姓名 字符 50 Not null sc_sex 性别 ...

  9. panel中html怎么写,panel控件有什么用 请写出Panel控件的用途

    当多个panel控件重叠时,把一个panel的visible/设置为true,其它的设置为f例如有3个panel,分别为panel1,panel2,panel3 如果重叠的话,把他们的大小设置为相同大 ...

最新文章

  1. 如何成为一名优秀CTO
  2. 【 FPGA 】按键消抖与LED灯流动小实验
  3. C++ 编程错误记录
  4. linux—select具体解释
  5. java rsa加密解密_前端实现对请求参数进行RSA加密amp;解密,针对字符串过长进行分段加密amp;分段解密的处理...
  6. 文件系统模拟程序python_如何使用sh实现Python虚拟文件系统
  7. zookeeper 屁民
  8. Spring MVC 4快速入门Maven原型得到了改进–更多Java 8功能
  9. 获取excel名称java_使用Apache POI获取大型Excel文件的Excel工作表名称
  10. 天气预报为什么要用超级计算机,为什么天气预报不够准确?
  11. 云上远程运维的最后那点担心,“云梯”帮你解决
  12. 【clickhouse】clickhouse 利用Grafana与系统表监控ClickHouse查询
  13. 容器云平台在传统企业落地的一些思考和探索
  14. 手机上有没有学python的软件-【Learn Python】用手机学Python
  15. 《CCNA学习指南:Cisco网络设备互连(ICND1)(第4版)》——2.2节理解主机到主机的通信模型...
  16. Android中的内存泄露问题
  17. Unity 工具 之 XChart UGUI 表格工具,轻松简单的帮你实现需要的数据图表形式,建议 Mark 一下
  18. “1+7+N”改革工作体系介绍
  19. 强网杯2018 - nextrsa - Writeup
  20. 拿什么拯救你,“闯祸”的充电宝

热门文章

  1. 系统软件和应用软件的划分
  2. 中国电子驻车制动器(EPB)行业研究与投资预测报告(2022版)
  3. android:使用TextView展示H5文本(含关键字点击和图片)
  4. (转载)PyCharm 默认快捷键
  5. 数据据结构实验——顺序表实验
  6. Roguelike诞生记
  7. 登录过期--localStorage加sessionStorage实现7天登录过期
  8. JavaScript 中 的等号(==)/不等号(!=) 和全等号(===)/非全等号(!==)
  9. 断电的方法关闭计算机,win7设置usb关机断电|win7设置usb关机拔出断电的解决方法...
  10. SEO分类:白帽SEO-黑帽SEO-灰帽SEO