51单片机bit、sbin、sfr、sfr_16有什么区别

发布者:WhisperingHeart最新更新时间:2013-01-30 来源: 21ic关键字:51单片机  变量类型  编译器 手机看文章 扫描二维码
随时随地手机看文章

51单片机bit、sbin、sfr、sfr_16区别分析

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

用sfr16 定义16 位特殊功能寄存器时,等号后面是它的低位地址,高位地址一定要位于物

理低位地址之上.注意的是不能用于定时器0 和1 的定义.

sbit 可定义可位寻址对象.如访问特殊功能寄存器中的某位.其实这样应用是经常要

用的如要访问P1 口中的第2 个引脚P1.1.我们可以照以下的方法去定义:

(1) sbit 位变量名=位地址

sbit P1_1 = Ox91;

这样是把位的绝对地址赋给位变量.同sfr 一样sbit 的位地址必须位于80H-FFH 之间.

(2) sbit 位变量名=特殊功能寄存器名^位位置

sft P1 = 0x90;

sbit P1_1 = P1 ^ 1; //先定义一个特殊功能寄存器名再指定位变量名所在的位置,当可

寻址位位于特殊功能寄存器中时可采用这种方法

(3) sbit 位变量名=字节地址^位位置

sbit P1_1 = 0x90 ^ 1;

这种方法其实和2 是一样的,只是把特殊功能寄存器的位址直接用常数表示. 在C51

存储器类型中提供有一个bdata 的存储器类型,这个是指可位寻址的数据存储器,位于单

片机的可位寻址区中,可以将要求可位录址的数据定义为bdata,如:

unsigned char bdata ib; //在可位录址区定义ucsigned char 类型的变量ib

int bdata ab[2]; //在可位寻址区定义数组ab[2],这些也称为可寻址位对象

sbit ib7=ib^7 //用关键字sbit 定义位变量来独立访问可寻址位对象的其中一位

sbit ab12=ab[1]^12;

操作符"^"后面的位位置的最大值取决于指定的基址类型,char0-7,int0-15,long0-31.

sfr 并标准C 语言的关键字,而是Keil 为能直接访问80C51 中的SFR 而提供了一个新

的关键词,其用法是:

sfrt 变量名=地址值。[page]

2)符号P1_0 来表示P1.0 引脚。

在C 语言里,如果直接写P1.0,C 编译器并不能识别,而且P1.0 也不是一个合法的C

语言变量名,所以得给它另起一个名字,这里起的名为P1_0,可是P1_0 是不是就是P1.0

呢?你这么认为,C 编译器可不这么认为,所以必须给它们建立联系,这里使用了Keil C

的关键字sbit 来定义,sbit 的用法有三种:

第一种方法:sbit 位变量名=地址值

第二种方法:sbit 位变量名=SFR 名称^变量位地址值

第三种方法:sbit 位变量名=SFR 地址值^变量位地址值

如定义PSW 中的OV 可以用以下三种方法:

sbit OV=0xd2 (1)说明:0xd2 是OV 的位地址值

sbit OV=PSW^2 (2)说明:其中PSW 必须先用sfr 定义好

sbit OV=0xD0^2 (3)说明:0xD0 就是PSW 的地址值

因此这里用sfr P1_0=P1^0;就是定义用符号P1_0 来表示P1.0 引脚,如果你愿意也可以

起P10 一类的名字,只要下面程序中也随之更改就行了。

*AT89C51的特殊功能寄存器表请看附录二

4.sfr16 16位特殊功能寄存器

sfr16占用两个内存单元,值域为0~65535。sfr16和sfr一样用于操作特殊功能寄存器,所不同的是它用于操作占两个字节的寄存器,好定时器T0和T1。

5.sbit可录址位

sbit同位是C51中的一种扩充数据类型,利用它可以访问芯片内部的RAM中的可寻址位或特殊功能寄存器中的可寻址位。如先前我们定义了

sfr P1 = 0x90; //因P1端口的寄存器是可位寻址的,所以我们可以定义

sbit P1_1 = P1^1; //P1_1为P1中的P1.1引脚

//同样我们可以用P1.1的地址去写,如sbit P1_1 = 0x91;

这样我们在以后的程序语句中就可以用P1_1来对P1.1引脚进行读写操作了。通常这些可以直接使用系统提供的预处理文件,里面已定义好各特殊功能寄存器的简单名字,直接引用可以省去一点时间,我自己是一直用的。当然您也可以自己写自己的定义文件,用您认为好记的名字。

data表明数据在片内数据存储区;

xdata表明数据在片外数据存储区;

code表明数据在程序存储区;

extern定义的数据是在另外一个模块,当引用其它文件中的变量时要加上extern。extern的重要意义在于表明要定义的数据已经在其他地方定义过,此处只是引用,所以编译器不会另外开辟内存。

关键字:51单片机  变量类型  编译器 引用地址:51单片机bit、sbin、sfr、sfr_16有什么区别

上一篇:51单片机数据传送类指令
下一篇:单片机寻址—位寻址

推荐阅读最新更新时间:2024-03-16 13:17

电子时钟(51单片机定时器,1602液晶)
电路图: 代码: #include reg52.h #include stdlib.h #include stdio.h #include intrins.h #define uint unsigned int #define uchar unsigned char uint num,A_num,x=0; uint h,m,s,year=2012,month=1,day=22,lcd_x=0,lcd_y=0; uchar code Zifu = 0123456789 ; sbit beep = P2^3; sbit LCD_EN = P3^4; sbit LCD_RS = P3
[单片机]
电子时钟(<font color='red'>51单片机</font>定时器,1602液晶)
51单片机对LED点阵屏的设计
LED点阵屏发光亮度强,指示效果好,可以制作运动的发光图文,更容易吸引人的注意力,信息量大,随时更新,有着非常好的广告和告示效果。笔者此处就LED点阵屏动态扫描显示作一个简单的介绍。 1. LED点阵屏显示原理概述 图1-1为一种8x8的LED点阵单色行共阳模块的内部等效电路图,对于红光LED其工作正向电压约为1.8v,其持续工作的正向电流一般10ma左右,峰值电流可以更大。如下图,当某一行线为高电平而某一列线为低时,其行列交叉的点就被点亮,当某一行线为低电平时,无论列线如何,对应的这一行的点全部为暗。LED点阵屏显示就是通过一定的频率进行逐行扫描,数据端不断输入数据显示,只要扫描频率足够高,由于人眼的视觉残留效应,就可以看到
[单片机]
<font color='red'>51单片机</font>对LED点阵屏的设计
基于ISP技术及51单片机的图像处理系统设计
随着图像处理技术应用的普及,其应用范围越来越广。在医学、军事、公安等领域,特别是近些年在工业自动化、工业检测方面得到广泛应用。目前的图像处理系统大多采用计算机加上视频采集卡和摄像头来构成其硬件系统,这种硬件结构对于处理自满不复杂的简易图像处理系统显然是不合适的。 目前,EPLD芯片内部的资源越来越多,速度越来越快,开发的软件功能也更加完善,使其应用逐步扩大。人们普遍认为,今后的许多电子系统,将以CPU+RAM+EPLD的结构为特征。图像系统将向小型化发展。如何设计一套简单的、低成本的图像处理系统是将图像处理技术应用到更广的领域的迫切要求。 本文介绍的系统正是针对这样的需求而开发出来的。 1 总体设计方案 整个系统由摄像头、图像输
[单片机]
基于ISP技术及<font color='red'>51单片机</font>的图像处理系统设计
51单片机的状态机消抖代码
#include enum State {Init, Press, Free}; //定义按键状态的枚举类型 enum State Key_State; //按键状态 sbit Key1 = P2^4; sbit Key2 = P2^5; sbit Key3 = P2^6; sbit Key4 = P2^7; void Delay_ms(unsigned int x) { int i,j; for(i=0; i 110; i++) for(j=0; j ; } //============================================================================
[单片机]
基于51单片机的瓦斯报警器设计
引言    当前,随着采矿技术的不断发展,井下作业的安全越来越有保障,但是仍然有许多采矿企业的机械化程度低,对现场采矿的工作人员的生命安全造成潜在的威胁,特别是针对瓦斯气体的检测和报警仍旧存在隐患,每年由于瓦斯泄露造成的特大事故依然很多。瓦斯是在成煤过程中形成并大量储存与煤层之中的气体,是煤矿井下危害最大的气体。瓦斯是一种无色无味的气体,主要成份是甲烷(CH4),密度为0.716kg/ m3,对人体的危害是超时限能引起人窒息死亡。在地下采矿时候,井内常常会泄露一定量的CH4、CO和SO2等气体,后一种含量少,切易溶于水。经煤矿开采时的喷水处理后变成酸。但前两种气体含量多,且几乎不容于水,属于易燃易爆气体。    由于瓦斯气体本身
[单片机]
基于<font color='red'>51单片机</font>的瓦斯报警器设计
51单片机蓝牙小车+TB6612控制
51蓝牙小车,通过蓝牙APP发送指令让小车前进后退,左转,右转。 模块化的插件,让你低成本,低基础,完成这个设计。 电路原理图如下: 单片机源程序如下: #include reg51.h #include intrins.h #define uchar unsigned char #define uint unsigned int unsigned char tmp; unsigned int c=0; uint Count; uint Degree=50; sbit PWMA=P2^0; sbit AIN2=P2^1; sbit AIN1=P2^2; sbit STBY=P2^3; sbit BIN1=P2^4; sb
[单片机]
<font color='red'>51单片机</font>蓝牙小车+TB6612控制
从零开始51单片机学习教程——连载2 单片机简叙
1、 什么是单片机 一台能够工作的计算机要有这样几个部份构成:CPU(进行运算、控制)、RAM(数据存储)、ROM(程序存储)、输入/输出设备(例如:串行口、并行输出口等)。在个人计算机上这些部份被分成若干块芯片,安装一个称之为主板的印刷线路板上。而在单片机中,这些部份,全部被做到一块集成电路芯片中了,所以就称为单片(单芯片)机,而且有一些单片机中除了上述部份外,还集成了其它部份如A/D,D/A等。 单片机是一种控制芯片,一个微型的计算机,而加上晶振,存储器,地址锁存器,逻辑门,七段译码器(显示器),按钮(类似键盘),扩展芯片,接口等那是单片机系统。 天!PC中的CPU一块就要卖几千块钱,这么多东西做在一起,还不得买个天价!
[单片机]
基于AT89C2051单片机的VCN-MIO智能节点模板电路设计
  0.引言   基于具有三个CPU且固化了LonTalk通信协议的神经元(Neuron)芯片的智能节点模板,由于Neuron芯片是八位处理器,而且只提供了11个通用I/O口,并采用了基于事件巡检的软件调度机制,故其控制功能相对较弱,使它无法完成实时性高的多进程、多任务的并行处理,不能满足采集量和控制量要求较多的多现场设备管控的高要求,且性价比较低。要满足这种高要求,就要减少Neuron芯片在外部事件上的开销,让其充分发挥它在通讯组网上的优越性,能使现场设备之间快速地交换信息,满足系统实时监控的要求;而对于提高网络节点的测控能力,必须另择门路。嵌入控制功能强、物美价廉的单片机,专门完成多节点的智能测控,构成一种基于AT89C2051
[单片机]
基于AT89C20<font color='red'>51单片机</font>的VCN-MIO智能节点模板电路设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved