<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 單片機的高級語(yǔ)言編程FranklinC51簡(jiǎn)介

單片機的高級語(yǔ)言編程FranklinC51簡(jiǎn)介

作者: 時(shí)間:2016-11-28 來(lái)源:網(wǎng)絡(luò ) 收藏
一、變量的定義原則:
其一、總是使用盡可能最小的數據類(lèi)型;
對8位機,顯然對“char”類(lèi)型的對象的操作比對“int”或“long”類(lèi)型的對象方便得多。C51編譯器直接支持所有字符操作。例如:兩個(gè)“char”類(lèi)型對象相乘與“MUL AB”8051指令相符合。如果用“int”型完成同樣運算,則需要調用庫函數。
其二、只要有可能,使用“unsigned”數據類(lèi)型。
8051系列單片機不直接支持有符號數的運算,為此,編譯器必須產(chǎn)生與之相關(guān)的更多的代碼以解決問(wèn)題。若使用無(wú)符號數據類(lèi)型,產(chǎn)生的代碼要少得多。
在頭文件reg51.h中有8051所有SFR及可位尋址位的定義,如:
#include //源文件開(kāi)始寫(xiě)
//………….
P1=0x10; //在編程中可使用
TMOD=0x1;
TR0=1;
EA=1;
減少變量占有的空間的方式:
# 利用#define 定義只讀的常量
# 使用位域
# 使用聯(lián)合
1、存儲空間中的對象定位
8051單片機的存儲器是哈佛結構,即程序存儲器和數據存儲器分開(kāi),并有各自的尋址機構和方式。因為Franklin C51是面向8051系列單片機及硬件控制系統的開(kāi)發(fā)工具。它定義的任何數據類(lèi)型必須以一定的數據方式定位在8051 的某一存儲區中。該編譯器將變量、常量定義成不同的存儲類(lèi)型,把它們定位在不同的存儲區中。類(lèi)型和區域的對照如下:
code :程序存儲區(64KB),由MOVC A, @A+DPTR訪(fǎng)問(wèn)
xdata: 外部數據存儲區 (64KB), 由MOVX A, @DPTR訪(fǎng)問(wèn)
pdata: 分頁(yè)(256B)外部數據存儲區, 由MOVX A,@Ri訪(fǎng)問(wèn)
data: 直接尋址內部數據存儲區(128B), 訪(fǎng)問(wèn)變量速度快
bdata: 可位尋址的內部數據存儲區, 允許位與字節混合訪(fǎng)問(wèn)(16B).
idata: 間接尋址內部數據存儲區(128B)
例:
#include
#define uchar unsigned char
#define uint unsigned int
bit flag;布爾值
code uchar table[]={1,2,3,"help",oxff};
idata uint temp;
data char vra; /char data var ; 等價(jià),盡量用后一種
static unsigned long xdata array[100]; 靜態(tài)變量
extern float idata x,y,z; 外部變量
uint pdata dimension;
uchar xdata vector[10][4];
char bdata flags;
sbit flag_0=flags^0;
sbit p_1=p1^1;
定義時(shí)如果省略存儲類(lèi)型,存儲模式將自動(dòng)決定變量的默認類(lèi)型如下:
一般指針”SMALL:參數和局部變量放入可直接尋址的內部數據存儲區(默認data)
COMPACT:參數和局部變量放入分頁(yè)外部數據存儲區(默認pdata)
LARGE:參數和局部變量放入外部數據存儲區(默認xdata)
在C語(yǔ)言中變量和函數的存儲屬性關(guān)系到它們的可見(jiàn)性和生存期(即作用域和時(shí)限)。存儲屬性分三類(lèi):auto自動(dòng) extern外部 static靜態(tài)。
Franklin C51支持“基于存儲器的指針”和“一般指針”。
基于存儲器的指針:由C源程序中的存儲類(lèi)型決定它的存儲單元數。用這種指針可高效訪(fǎng)問(wèn)對象,且只要1~2個(gè)字節。
一般指針:需要3個(gè)字節(2個(gè)字節偏移,1個(gè)字節存儲類(lèi)型)。
各類(lèi)指針變量:
float
p 3字節長(cháng) 指向8051存儲區中的“float”
char data
dp 1字節 ------ “data”存儲區中的“char”
int idata
ip 1字節 ------ “idata” 存儲區中的“int”
long pdata
pp 1字節 ------
char xdata
xp 2字節 ------
int code
cp 2字節 -------
2、 動(dòng)態(tài)和靜態(tài)變量
動(dòng)態(tài)變量:自動(dòng)變量
靜態(tài)變量:外部變量(extern),靜態(tài)變量(static)
3、全局和局部變量
靜態(tài)局部變量
自動(dòng)變量(說(shuō)明符auto可缺?。?br />靜態(tài)全局變量
外部變量
例:
char xdata
px;指針自身在默認區(取決于存儲模式)
char xdata
data pdx ;指針明確位于內部數據存儲區(data)
data char xdata
pdx ;同上


評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>