c语言中bit的用法

c语言中bit的用法

发布时间:2016-03-09   计算机英语  编辑:长思

  C语言作为一门新型高级编程语言,在计算机软件编程中具有较为广泛的应用和实现。下面小编就跟你们详细介绍下c语言中bit的用法,希望对你们有用。

  c语言中bit的用法如下:

  c语言中bit和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 = 0×90这一句定P1为P1端口在片内的寄存器,在后面的语句中我们用以用P1 = 255(对P1端口的所有引脚置高电平)之类的语句来操作特殊功能寄存器。

  sfr P1 = 0×90; //定义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 = 0×90;

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

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

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

  sbit P1_1 = 0×90 ^ 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 变量名=地址值。

  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 = 0×90; //因P1端口的寄存器是可位寻址的,所以我们可以定义

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

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

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

【c语言中bit的用法】

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容