c語言中bit和sbit的區別哪些
C語言作爲一門新型高級編程語言,在計算機軟件編程中具有較爲廣泛的應用和實現。下面小編給大家整理了c語言中bit和sbit的區別,供大家參閱。
和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大部分是用在寄存器中的,方便對寄存器的某位進行操作的。
位標量
bit位標量是C51編譯器的一種擴充數據類型,利用它可定義一個位標量,但不能定義位指針,也不能定義位數組。它的值是一個二進制位,不是0就是1,類似一些高級語言中的Boolean類型中的True和False。
特殊功能寄存器
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, 並標準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 一類的名字,只要下面程序中也隨之更改就行了。
16 16位特殊功能寄存器
sfr16佔用兩個內存單元,值域爲0~65535。sfr16和sfr一樣用於操作特殊功能寄存器,所不同的是它用於操作佔兩個字節的寄存器,好定時器T0和T1。
可錄址位
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引腳進行讀寫操作了。通常這些可以直接使用系統提供的預處理文件,裏面已定義好各特殊功能寄存器的簡單名字,直接引用可以省去一點時間,我自己是一直用的。當然您也可以自己寫自己的定義文件,用您認爲好記的名字。
相關文章
-
Java語言中substr和substring的區別
團委團支部工作計劃五則(團支部研究學風優良整治計劃)爲了進一步向學校"陽光支部"邁進,提高團支部的凝聚力與支部的向心力,創建優良學風,團支部經研究決定將在本學期開展如下活動:月份:1,活動主題:"種下一棵樹,建綠色校 -
Scientists Build Robots to Live With Humans英語美文
Industrial robots are already working in many factories around the world and in our homes, for instance as smart vacuum cleaners. Scientists say in a few years we will start seeing so-called "social r -
C語言中static和extern的區別
1. I love you not because of who you are, but because of who I am when Iam with you. 我愛你,不是因爲你是一個怎樣的人,而是因爲我喜歡與你在一起時的感覺。2. No man or woman is worth your tears, and the one -
關於Thieving Bird Apes Its Victims的英語作文範文
[Music plays] Neil Young? No, that’s Jimmy Fallon imitating Neil Young. Doing impressions can be a valuable skill. In fact, a bird called the fork-tailed drongo makes a good living at it, in its home -
BBC地道英語口語:Spitting Image相貌酷似的人
在《西遊記》中,唐僧被封爲旃檀功德佛,孫悟空被封爲鬥戰聖佛,但是最後沙僧並沒有成佛,只是被封了個南無金身羅漢,雖然沙僧的二師兄豬八戒也只是分了個淨壇使者,但是豬八戒子在取經途中幾次要散夥,還貪吃好色,沙僧一直是誠誠懇 -
牛津英語7B Unit5 Abilities教學目標
在國慶節的時候很多人都是非常的開心的去旅遊,你知道國慶自駕遊人少的地方嗎?下面本站小編精心整理了國慶自駕遊人少的地方的相關資料,希望可以幫到你!國慶自駕遊人少的地方1:鳳凰最佳旅遊時間:四季皆可。5-10月更佳,可以 -
7B Unit5 Abilities第四課時Vcabular教學案
7B Unit5 Abilities第四課時Vcabular教學案 【教學目標】1.知識目標:複習本單元已學過的詞彙並複習整理學過的形容詞的反義詞。2.能力目標:通過學習反義詞擴大詞彙量。3.情感目標:培養學生理解不同語境中形容詞的用法 -
七年級英語Unit 12 My favorite subject is science 課後練習題答
Unit 12 My favorite subject is scienceSeetion AIa 1.C 2.d 3.b 4.e 5.a 6.Flb circled items: science, art, math, music.2a The sentences are numbered left to right in this order:4 2 1 33a (1)your (2)subject (3)My (4 -
,javascript break和continue區別
有兩種可以用在循環中的聲明:break和continue。JavaScriptbreak和continue聲明 有兩種特殊的聲明可用在循環內部:break和continue。Breakbreak命令可以終止循環的.運行,然後繼續執行循環之後的代碼(如果循環之後有代碼的 -
英語美文閱讀:Kerry: Anti-IS Coalition Could Contribute to B
人說,看似平行的兩條直線,也會有相交的那天。就像人。可相交以後呢?走向各自的方向,留給對方的,只有回憶。就像香雪海和上官浩淇。一直覺得香雪海是<<天外飛仙>>中最不幸的一個,她在這個故事中演繹自己的故事。可她不是那個