C51—運(yùn)算量(重點(diǎn):特殊功能寄存器變量、位變量
3)LARGE模式
LARGE模式稱為大編譯模式,在LARGE模式下,編譯時(shí)函數(shù)參數(shù)和變量被默認(rèn)在片外RAM的64KB空間了,存儲(chǔ)器類型為xdata。
例如:
#pragma small
char k1;
int xdata m1;
#pragma compact
char k2;
int xdata m2;
int func1(int x1,int y1) large
{
}
int func2(int x2,int y2)
{
}
4、絕對(duì)地址的訪問(wèn)(這里才是重點(diǎn)中的重點(diǎn)啊~~~)
在C51中,可以通過(guò)變量的形勢(shì)訪問(wèn)51單片機(jī)的存儲(chǔ)器,也可以通過(guò)絕對(duì)地址來(lái)訪問(wèn)存儲(chǔ)器。三種方法:
1)使用C51運(yùn)行庫(kù)中預(yù)定義宏(就是調(diào)用#include"absacc.h")
C51編譯器提供了一組宏定義來(lái)對(duì)51單片機(jī)的code、data、pdata和xdata空間進(jìn)行絕對(duì)尋址!
規(guī)定只能以無(wú)符號(hào)數(shù)方式訪問(wèn),定義了8個(gè)宏定義,其函數(shù)原型如下:
#define CBYTE((unsigned char volatile*)0x50000L)
#define DBYTE((unsigned char volatile*)0x40000L)
#define PBYTE((unsigned char volatile*)0x30000L)
#define XBYTE((unsigned char volatile*)0x20000L)
#define CWORD(unsigned int volatile*)0x50000L)
#define DWORD(unsigned int volatile*)0x40000L)
#define PWORD(unsigned int volatile*)0x30000L)
#define XWORD(unsigned int volstile*)0x20000L)
例如:
#include"absacc.h"
#include"reg52.h"
typedef unsigned char uchar;
typedef unsigned int
void main()
{
}
2)通過(guò)指針訪問(wèn)
采用指針的訪問(wèn)的方法,可以在C51程序中對(duì)任意指定的存儲(chǔ)器單元進(jìn)行訪問(wèn)。
typedef unsigned char uchar;
typedef unsigned int uint;
void func()
{
}
3)使用C51擴(kuò)展關(guān)鍵字 _at_ (這個(gè)用的最多了~~~)
總算完了,我真的要累死了~~~~擦擦擦擦啊
一般格式:
[存儲(chǔ)類型] 數(shù)據(jù)類型說(shuō)明 變量名 _at_ 地址常量;
其中,存儲(chǔ)類型為data、bdata、idata、pdata、xdata等C51能識(shí)別的數(shù)據(jù)類型,如果省略,則會(huì)按照存儲(chǔ)模式規(guī)定的默認(rèn)存儲(chǔ)類型確定變量的存儲(chǔ)區(qū)域(這里又用到上邊的了);數(shù)據(jù)類型為C51支持的數(shù)據(jù)類型;地址常數(shù)用于指定變量的絕對(duì)地址,必須位于有效的存儲(chǔ)器空間之內(nèi);使用_at_定義的變量必須為全局變量。
例如:
typedef unsigned char uchar;
typedef unsigned int uint;
data uchar x1 _at_ 0x40;
xdata uint x2 _at_ 0x2000;
我感覺(jué)我真的不想再寫(xiě)了,累死了~~~擦
不過(guò)完工了,爽啊~~解脫
評(píng)論