單片機c語言教程:C51數據類型

2021-01-09 電子產品世界

每寫一個程序,總離不開數據的應用,在學習 c51 語言的過程中掌握理解數據類型也是 很關鍵的。先看表 3-1,表中列出了 KEIL uVision2 單片機c語言編譯器所支持的數據類型。在標準C語言中基本的數據類型為 char,int,short,long,float 和 double,而在c51編譯器中int 和 short 相同,float 和 double 相同,這裡就不列出說明了。下面來看看它們的具體定 義:

本文引用地址:

http://www.eepw.com.cn/article/170893.htm

數據類型

長 度

值 域

unsigned char

單字節

0~255

signed char

單字節

-128~+127

unsigned int

雙字節

0~65535

signed int

雙字節

-32768~+32767

unsigned long

四字節

0~4294967295

signed long

四字節

-2147483648~+2147483647

float

四字節

±1.175494E-38~±3.402823E+38

*

1~3 字節

對象的地址

bit

0 或 1

sfr

單字節

0~255

sfr16

雙字節

0~65535

sbit

0 或 1

表 3-1 KEIL uVision2 單片機c語言編譯器所支持的數據類型

1. char 字符類型

char 類型的長度是一個字節,通常用於定義處理字符數據的變量或常量。分無符號字 符類型 unsigned char 和有符號字符類型 signed char,默認值為 signed char 類型。 unsigned char 類型用字節中所有的位來表示數值,所能表達的數值範圍是 0~255。 signed char 類型用字節中最高位字節表示數據的符號,「0」表示正數,「1」表示負數, 負數用補碼表示。所能表示的數值範圍是-128~+127。unsigned char 常用於處理 ASCII 字符或用於處理小於或等於 255 的整型數。

*正數的補碼與原碼相同,負二進位數的補碼等於它的絕對值按位取反後加 1。

2. int 整型

int 整型長度為兩個字節,用於存放一個雙字節數據。分有符號 int 整型數 signed int 和無符號整型數 unsigned int,默認值為 signed int 類型。signed int 表示的數值範 圍是-32768~+32767,字節中最高位表示數據的符號,「0」表示正數,「1」表示負數。 unsigned int 表示的數值範圍是 0~65535。

先停一下來寫個小程序看看 unsigned char 和 unsigned int 用於延時的不一樣效果,說 明它們的長度是不一樣的,學習它們的使用方法。依舊用上一篇的最小化系統做實驗,不過要加多 一個電阻和 LED,如圖 3-1。實驗中用 D1 的點亮表明正在用 unsigned int 數值延時,用

D2 點亮表明正在用 unsigned char 數值延時。

第 3 課實驗用電路 把這個項目稱為 TwoLED,實驗程序如下:

#include AT89X51.h> //預處理命令

void main(void) //主函數名

{

unsigned int a; //定義變量 a 為 unsigned int 類型

unsigned char b; //定義變量 b 為 unsigned char 類型

do

{ //do while 組成循環

for (a=0; a65535; a++)

P1_0 = 0; //65535 次設 P1.0 口為低電平,點亮 LED P1_0 = 1; //設 P1.0 口為高電平,熄滅 LED

for (a=0; a30000; a++); //空循環

for (b=0; b255; b++)

P1_1 = 0; //255 次設 P1.1 口為低電平,點亮 LED P1_1 = 1; //設 P1.1 口為高電平,熄滅 LED

for (a=0; a30000; a++); //空循環

}

while(1);

}

同樣編譯燒寫,上電運行您就能看到結果了。很明顯 D1 點亮的時間長於 D2 點亮的時間。

這裡必須要講的是,當定義一個變量為特定的數據類型時,在程序使用該變量不應使它的值 超過數據類型的值域。如本例中的變量 b 不能賦超出 0~255 的值,如 for (b=0; b255; b++) 改為 for (b=0; b256; b++),編譯是能通過的,但運行時就會有問題出現,就是說 b 的 值永遠都是小於 256 的,所以無法跳出循環執行下一句 P1_1 = 1,從而造成死循環。同理 a 的值不應超出 0~65535。

3. long 長整型

long 長整型長度為四個字節,用於存放一個四字節數據。分有符號 long 長整型 signed long 和無符號長整型 unsigned long,默認值為 signed long 類型。signed int 表示 的數值範圍是-2147483648~+2147483647,字節中最高位表示數據的符號,「0」表示正 數,「1」表示負數。unsigned long 表示的數值範圍是 0~4294967295。

4. float 浮點型

float 浮點型在十進位中具有 7 位有效數字,是符合 IEEE-754 標準的單精度浮點型數 據,佔用四個字節。因浮點數的結構較複雜在以後的章節中再做詳細的討論。

5.* 指針型 指針型本身就是一個變量,在這個變量中存放的指向另一個數據的地址。這個指針變量 要佔據一定的內存單元,對不一樣的處理器長度也不盡相同,在 c51 中它的長度一般為 1~

3 個字節。指針變量也具有類型,在以後的課程中有專門一課做探討,這裡就不多說了。

6. bit 位標量

bit 位標量是 c51 編譯器的一種擴充數據類型,利用它可定義一個位標量,但不能定義 位指針,也不能定義位數組。它的值是一個二進位位,不是 0 就是 1,類似一些高級語 言中的 Boolean 類型中的 True 和 False。

7. sfr 特殊功能寄存器

sfr 也是一種擴充數據類型,點用一個內存單元,值域為 0~255。利用它能訪問 51 單片機內部的所有特殊功能寄存器。如用 sfr P1 = 0x90 這一句定 P1 為 P1 埠在片內 的寄存器,在後面的語句中用以用 P1 = 255(對 P1 埠的所有引腳置高電平)之類的 語句來操作特殊功能寄存器。

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

sfr16 佔用兩個內存單元,值域為 0~65535。sfr16 和 sfr 一樣用於操作特殊功能寄存 器,所不一樣的是它用於操作佔兩個字節的寄存器,如定時器 T0 和 T1。

9. sbit 可錄址位

sbit 同樣是 單片機c語言 中的一種擴充數據類型,利用它能訪問晶片內部的 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 引腳進行讀寫操作了。通常這些能 直接使用系統供給的預處理文件,裡面已定義好各特殊功能寄存器的簡單名字,直接引 用能省去一點時間,我自己是一直用的。當然您也能自己寫自己的定義文件,用您 認為好記的名字。

相關焦點

  • 單片機c語言教程:C51變量
    存儲種類有四種:自動(auto),外部(extern),靜態(static)和寄存器(register),預設類型為自動(auto)。這些存儲種類的具體含義和使用方法,將在第七課《變量的存儲》中進一步進行學習。而這裡的數據類型則是和我們在第四課中學習到的名種數據類型的定義是一樣的。說明了一個變量的數據類型後,還可選擇說明該變量的存儲器類型。
  • 單片機c語言教程:建立你的第一個KeilC51項目
    KEIL uVISION2 是眾多單片機應用開發軟體中優秀的軟體之一,它支持眾多不一樣公司的MCS51架構的晶片,它集編輯,編譯,仿真等於一體,同時還支持,PLM,彙編和C語言的程序設計,它的界面和常用的微軟 VC++的界面相似,界面友好,易學易用,在調試程序,軟體仿真方面也有很強大的功能。本站提供的單片機c語言教程都是基於keilc51的。
  • 單片機c語言教程:C51運算符和表達式(指針和地址運算符)
    我們學習數據類型時,學習過指針類型,知道它是一種存放指向另一個數據的地址的變量類型。指針是單片機C語言中一個十分重要的概念,也是學習單片機C語言中的一個難點。對於指針將會在第九課中做詳細的講解。
  • 51單片機C語言教程(四) 數據類型
    先來簡單說說C語言的標識符和關鍵字。標識符是用來標識源程序中某個對象的名字的,這些對象可以是語句、數據類型、函數、變量、數組等等。C語言是大小字敏感的一種高級語言,如果我們要定義一個定時器1,可以寫做"Timer1",如果程序中有"TIMER1",那麼這兩個是完全不同定義的標識符。
  • 51單片機C語言延時函數
    C程序中可使用不同類型的變量來進行延時設計。經實驗測試,使用unsigned char類型具有比unsigned int更優化的代碼,在使用時應該使用unsigned char作為延時變量。
  • C語言教程
    2.C語言教程--C語言有哪些特點?  數據類型----C的數據類型包括:整型、字符型、實型或浮點型、枚舉類型、數組類型、結構體類型、共用體類型、指針類型和空類型。  常量與變量----常量其值不可改變,符號常量名通常用大寫。
  • 單片機C語言程序設計:LED 模擬交通燈
    RED_A=P0^0; //東西向燈sbit YELLOW_A=P0^1;sbit GREEN_A=P0^2;sbit RED_B=P0^3; //南北向燈sbit YELLOW_B=P0^4;sbit GREEN_B=P0^5;uchar Flash_Count=0,Operation_Type=1; //閃爍次數,操作類型變量
  • 單片機keil 常見問題
    一、混合編程1、模塊內接口:使用如下標誌符:#pragma asm彙編語句#pragma endasm注意:如果在c51程序中使用了彙編語言
  • 51單片機之C語言-4.1數據類型
    從這一章起我們開始學習單片機C語言,既然是語言那麼就應該有基本詞彙和相關的語法。我們先來看看數據類型。講數據之前先簡單說說單片機的存儲結構。我們知道單片機要運行之前,我們需要給他寫指令,指令存放在ROM存儲器上。
  • c語言入門教程
    它由美國貝爾研究所的D.M.Ritchie於1972年推出,它可以作為工作系統設計語言,編寫系統應用程式。它的應用範圍廣泛,具備很強的數據處理能力,不僅僅是在軟體開發上,而且各類科研都需要用到C語言,適於編寫系統軟體,三維,二維圖形和動畫,具體應用比如單片機以及嵌入式系統開發。
  • PIC單片機C語言編程教程(1)
    > 語言來開發單片機系統軟體最大的好處是編寫代碼效率高、軟體調試直觀、維護升級方便、代碼的重複利用率高、便於跨平臺的代碼移植等等,因此 C 語言編程在單片機系統設計中已得到越來越廣泛的運用。本書圍繞中檔系列 PIC 單片機來展開討論,Microchip 公司自己沒有針對中低檔系列 PIC單片機的 C 語言編譯器,但很多專業的第三方公司有眾多支持 PIC 單片機的 C 語言編譯器提供,常見的有 Hitech、CCS、IAR、Bytecraft 等公司。
  • 單片機提高C語言代碼效率的方法
    單片機的ROM和RAM的空間都很有限,當您編程時遇到單片機的ROM和RAM的不夠用的時候,或者您的程序要求較高的執行速度時,我們就得面對解決代碼效率問題了。如何提高代碼效率?現筆者以一個LED閃爍的程序為例與您探討。
  • 單片機基本結構及C語言編程基礎
    RXD、TXD、INT0、INT1、T0、T1   單片機內部I/O部件:(所為學習單片機,實際上就是編程控制以下I/O部件,完成指定任務) 1、 四個8位通用I/O埠,對應引腳P0、P1、P2和P3; 2、 兩個16位定時計數器;(TMOD,TCON,TL0,TH0,TL1,TH1) 3、 一個串行通信接口;(SCON,SBUF) 4、 一個中斷控制器;(
  • 【單片機筆記】keil c51編譯環境不能跳轉函數的解決辦法
    keil c51 不能使用:Go to Definition of....的解決方法最近使用keil c51 開發usb固件,當向vc一樣使用Go to Definition of....時,出現警告對話框:no browse information available in'工程目錄'check
  • PIC單片機C語言程序設計(8)
    即可用MPLAB IDE7.40 對PIC 單片機建立彙編語言或C 語言的源程序、創建項目(project)、對源程序進行彙編(使用彙編語言時)或編譯(使用C 語言時),彙編或編譯通過後,會生成目標碼。hex 文件。有了目標碼。hex 文件,就可對PIC 單片機編程(燒寫)和對源程序進行模擬調試了。
  • 單片機原理|C51程序設計基礎複習題
    1 單片機C51中用關鍵字( C)來改變寄存器組。A 、interrupt B、 unsigned C、 using D、 reentrant2 C51語言提供的合法的數據類型關鍵字是(A )。A、 sfr B、 BIT C、 Char D、 integerr3 尋址片外數據存儲區,所用的存儲類型是(D )。
  • 51單片機教程之基礎編(基於C語言)
    很多初學者有很多的疑惑,我究竟是先學C語言,還是彙編語言?其實我告訴你,本人認為,先學C語言!為什麼呢?C語言是目前使用最廣泛的中級語言,就連現在的windows7也是C語言編寫的,C語言易讀性好,無需對單片機內部結構十分熟悉即會編程,可移植性高,便於維護。C語言只有32個關鍵字,9種控制語句,而且編譯器提供了很多函數庫,使用十分方便。
  • 單片機C語言知識點全攻略(三)
    還有就是位運算符是不能用來對浮點型數據進行操作的。單片機c語言中共有6種位運算符。對於開始學習 C 語言的朋友在編程時最好還是根據自己的理解力和習慣去使 用程序表達的方式,不要一味追求程序代碼的短小。  逗號運算符  如果你有編程的經驗,那麼對逗號的作用也不會陌生了。如在 VB 中「Dim a,b,c」的逗 號就是把多個變量定義為同一類型的變量,在 C 也一樣,如「int a,b,c」,這些例子說明逗 號用於分隔表達式用。
  • 單片機C語言延時分析
    標準的C語言中沒有空語句。但在單片機的C語言編程中,經常需要用幾個空指令產生短延時的效果。這在彙編語言中很容易實現,寫幾個nop就行了。
  • 單片機C語言精確延時值的計算
    關於單片機C語言的精確延時,網上很多都是大約給出延時值沒有準確那值是多少,也就沒有達到精確高的要求,而51hei給出的本函數克服了以上缺點,能夠精確計數出要延時值且精確達到1us,本舉例所用CPU為STC12C5412系列12倍速的單片機,只要修改一下參數值其它系例單片機也通用