匯編語言采用了助記符號編寫程序,通過編譯器轉換成能夠被計算機識別和處理的二進制代碼程序。
一、編程語言介紹
機器語言是用二進制代碼表示的,能被計算機直接識別和執行的一種機器指令的集合。直觀性和通用性都很差
匯編語言采用了助記符號編寫程序,通過編譯器轉換成能夠被計算機識別和處理的二進制代碼程序。匯編語言仍然是面向機器的語言,編程煩瑣費時,通用性也差。
高級語言用與自然語言接近的代碼編寫程序,通過編譯器轉換成二進制代碼程序。高級語言易學易用,通用性好。C語言是一種結構化的高級編程語言,在單片機系統開發中得到了廣泛應用。
1.數制的基與權
基 :各計數制中每個數位上可用字符的個數。
權 :數字“1”在數字不同的數位所代表的數值。
二進制基數為2( 0和1),權為以2為底的冪。二進制數字后面用B表示
十進制基數為10(0-9),權是以10為底的冪。十進制用D(或不加標志)表示十進制數
十六進制基數為16(0-9以及A-F),權是以16為底的冪。十六進制用H表示十六進制數。
進制轉換此處略,往上方法有很多,大家根據自己情況選個適合自己的即可
例5 將十進制數500.03125轉換為十六進制數
解:
因此可得:500.03125=1F4.08H
十六進制數與二進制數之間的轉換
整數部分由小數點向左每4位一組,若整數最高位的一組不足4位,則在其左邊加0補足4位;
小數部分由小數點向右每4位一組,若小數最低位的一組不足4位,則在其右邊加0補足4位;
用與每組二進制數所對應的十六進制數取代每組的4位二進制數即可轉換為十六進制。
將十六進制數轉換為二進制數時,過程相反。
例6:將十六進制數9F4.1H轉換為二進制數
解:將每位十六進制數寫為二進制數
可得: 9F4.1H = 100111110100.0001B
二、編碼
編碼是計算機為輸入處理字母、數字和符號等組成的信息,依靠輸入設備先把要輸入的字符按一定格式編成的二進制代碼。
目前國際上使用的字符編碼是ASCII碼(Americanstandard coded for information interchange,美國信息交換標準碼)。
ASCII碼用一個字節來表示一個字符,采用7位二進制代碼來對字符進行編碼,最高位一般用做校驗位,因此共128個,包括32個通用控制符號、10個阿拉伯數字、52個英文大寫和小寫字母及34個專用符號。
三、變量與運算符
數字0-9的ASCII碼為30H-39H,英文大寫字母A-Z的ASCII碼為41H-5AH
數據可分為常量和變量。常量是數值和字符等不能改變的量,可以不經說明和定義直接使用,而變量是在程序運行過程中可以根據需要改變的量,在引用之前必須定義類型。
C51 定義一個變量的格式如下:
數據類型 [存儲類型] 變量名表
其中“數據類型”和“存儲類型”的先后次序可以互換。
表4-1Cx51支持的數據類型
四、變量類型
bit 、sfr、 sfr16 和sbit是 Keil C51中新增的變量類型。
(1**)bit**用來定義位變量,值只能是0或1。位變量位于8051單片機內部RAM位尋址區(20H~2FH),共為16字節,最多可定義128個位變量。
(2**)sfr**用于定義特殊功能寄存器變量。該變量存儲在片內的特殊功能寄存器存儲區中,用來對特殊功能寄存器進行讀寫操作。
例如:51頭文件中有定義sfr P0=0x90,這一語句定義了P0端口在片內的寄存器,在程序中可以使用P0對該端口寄存器進行操作。
(3)sfr16也用于定義特殊功能寄存器,所不同的是它用于操作占兩個字節的特殊功能寄存器。
例如:sfr16DPTR=0x82語句定義了片內16位數據指針寄存器DPTR,其低8位字節地址為82H,高8位字節地址為83H,在程序中可以對DPTR進行操作。
(4)sbit用于定義特殊功能寄存器位變量,用來對特殊功能寄存器的可位尋址位進行讀寫操作。
例如sbit P0_0=P0^0 定義了特殊功能寄存器P0的第0位,后面對該位的操作可用P0_0代替。符號^后面的數字定義特殊功能寄存器可尋址位在寄存器中的位置,取值必須是0-7。
五、儲存類型
Cx51存儲類型
1.片內存儲區
(1)data將變量存儲在片內可直接尋址的數據存儲器DATA區中。DATA區位于片內RAM的低128字節(0X00~0X7F)。
使用data存儲模式,目標代碼中對變量的訪問速度最快,把經常使用的變量放在DATA區可提高程序運行速度。
若定義i為存儲類型為data的無符號字符型數據,可聲明為:unsigned char data i
(2) bdata用于將變量定義在數據存儲器可位尋址的BDATA區,允許位與字節混合訪問。uBDATA區位于單片機內部RAM字節地址0x20~0x2F的16個字節中,每個字節8位,共計16x8=128個可尋址位。u例如如下聲明后可用位變量value0訪問字節value的0位:
unsigned char bdata value;
bit value0=value^0;
若value的原值為0x00,欲將value的第0位置為1,可采用按字節訪問方式“value=0x01”實現,也可以按位尋址方式“value0=1”實現。
(3)idata將變量存儲在片內間接尋址的數據存儲區IDATA區中。IDATA區使用指針來進行尋址和訪問。
51內核單片機RAM僅有128個字節,因此無間接尋址數據存儲器區,idata與data無區別。52內核單片機RAM有256個字節,當片內128字節的直接尋址數據存儲區不夠用時,可以使用128字節間接尋址數據存儲區,訪問速度較data慢一些。
2.片外存儲區
xdata將變量存儲在片外數據存儲器中,采用16位地址,可以訪問外部數據存儲區64KB內的任何地址。
pdata將變量存儲在片外數據存儲器中的第一頁(地址00H~FFH)中,存儲空間為256字節。對PDATA區尋址,只需要裝入8位地址,而對XDATA區尋址要裝入16位地址,因此對PDATA區的尋址要比對XDATA區尋址快。
pdata和xdata存儲類型的變量由于需要訪問外存,訪問速度最慢,應盡量減少對變量的訪問次數。這兩種類型適合保存原始數據或最終結果,需要頻繁訪問的中間結果應盡量不用或少用。
3.程序存儲器ROM
code將變量存儲在程序存儲器中,變量只能讀不能寫,因此適合存儲常量或查表類的數組數據,不能用于存儲程序運行過程中需要修改的變量。如果想改變變量值,只能在程序中修改后重新將程序燒寫進ROM中。
-
計算機
+關注
關注
19文章
7536瀏覽量
88638 -
匯編語言
+關注
關注
14文章
410瀏覽量
35957 -
編譯器
+關注
關注
1文章
1642瀏覽量
49283
發布評論請先 登錄
相關推薦
評論