Ⅰ 2. 在C51語言中,說明定義的變數存儲類型分別使用xdata和pdata時,兩種的存儲空間有何不同
xdata存儲在外部RAM。使用前要對匯流排操作。pdata可存取256位元組/頁。多於一頁時應在Startup.A51中指明pdata長度,操作時用P2口生成頁地址。如果xdata大於256位元組,還是用xdata方式較好。
Ⅱ Keil c51 三種存儲模式的作用是什麼啊
這個問題很多變的啦,small存儲模式的數據存儲在DATA區裡面gmpucompact存儲模式的數據存儲在IDATA里,large存儲模式的數據存儲在XDATA里,一般默認的都是small模式,因為單片機在不加外擴RAM的時候變數區就那麼大,假設你將small存儲模式改為large存儲模式pt但是沒有外擴RAM因為samll和large的對變數的匯編訪問方式不同,程序不就亂了我是這么理解的額973
Ⅲ 關於c51存儲類型和其數據長度,有點不懂,求指點
你上面的表格,可以說,是完全上的邏輯錯誤。
c語言,一個數據類型的長度只有以下幾種:
unsigned char 或者 char 固定8位的長度,即一個位元組
unsigned short 或者 short 固定16位長度,即兩個位元組
unsigned long 或者 long 固定 32位長度,即四個位元組
float固定32位長度,即四個位元組
double ,固定64位長度,即8個位元組,但是在C51里,是32位,因為C51是把double轉換成float來編譯的。
另外還有union和struct,長度是不固定的。
在C51里擴展了bit類型,1個位的長度
長度,只取決與以上類型,與data,idata,bdata,xdata,pdata沒有關系,所以,你上面的表格是錯誤的。
而那些data,idata,bdata,xdata,pdata等等,是變數或者常量的存儲空間。
51單片機有以下幾個內存模塊組成:
ROM或者Flash就不說了。
RAM有------內部RAM的低128位元組(00-7F)
-------內部RAM的高128位元組(80-FF)---【89C51單片機沒有這一段空間】
-------特殊功能寄存器(SFR)(80-FF)
------外部RAM 64K(0000-FFFF)
code表示是在Flash(ROM)中,是只讀的。
data 表示的是內部RAM的低128位元組,可以直接定址,速度比較快
idata 表示內部RAM高128位元組,只能是間接定址,速度比data里的數據要慢。
pdata是外部RAM,也就是xdata中的前256個,也就是外部RAM中的00--FF,只能MOVX 間接定址,但是,因為可以用R0做為指針,所以,速度與idata是一樣的。
xdata是外部RAM的全部,也可以包括前256個,也就是說,外部RAM前256個,可以用pdata和xdata定義,都行,只能是MOVX 和 DPTR聯合定址,速度最慢。
詳細內容,參考下面的鏈接:
http://..com/question/400032408?&oldq=1
舉例:
data unsigned char a;//---放在內部RAM空間的低128位元組,長度是8位
data unsigned short a;//---放在內部RAM空間的低128位元組,長度是16位
data unsigned long a;//---放在內部RAM空間的低128位元組,長度是32位
idata unsigned char a;//---放在內部RAM空間的高128位元組,長度是8位
idata unsigned short a;//---放在內部RAM空間的高128位元組,長度是16位
idata unsigned long a;//---放在內部RAM空間的高128位元組,長度是32位
pdata unsigned char a;//---放在外部RAM空間的低256位元組,長度是8位
pdata unsigned short a;//---放在外部RAM空間的低256位元組,長度是16位
pdata unsigned long a;//---放在內部RAM空間的低256位元組,長度是32位
Ⅳ C51編譯器支持的存儲器類型有哪些
c51存儲器類型有bit
sbit
data
xdata
bdata
pdata
sfr
code等,可能不全面有遺漏
對應的物理存儲器是:
bit,即位數據:數據存儲器位定址區,即20h~2fh的范圍,共16個位元組,16*8=128個位,位地址00h~7fh,連續的。
sbit:特殊功能寄存器中的位數據:只有能夠被8整除的那些特殊功能寄存器中的各個位才能被稱為sbit,位地址80h~ffh,不連續的,間斷的。
data:數據區,對51為00h~7fh共128個位元組,對52為00h~ffh,共256個位元組,用mov定址,前128用直接定址或寄存器(r0~r7)定址,後128用r0、r1間接定址。
xdata:外部數據區,0000h~ffffh連續,用dptr間接定址(movx指令)
bdata:位定址去的位元組,20h~2fh
sfr:特殊功能寄存器(80h~ffh),直接定址
pdata:外部數據區,p2口保持數據,用r0r1間接定址(movx指令)
code:程序存儲器,用movc指令只讀
Ⅳ C51的數據類型和C語言的數據類型的區別
c語言規定了數據類型一般是什麼樣的。但沒有具體規定這個類型是多長……
而c51指的是具體的一個環境下的編譯運行環境,他一般會具體指出每個數據類型的特徵……
Ⅵ C51系統中大容量數據存儲方式,是定義成CODE型數組嗎數據訪問速度如何新手剛剛接觸C51.
不是定義成Code數組,Code是用來定義常量的,是把符號定義存儲到Flash或者叫Rom里.即你在程序中不會變化的東西
例如:code unsigned char i = 8;這個i就永遠等於8,不能改變,如果你 i = 9;,編譯器會報錯的.
之所以把有些數組或者常量定義到code,是為了不讓程序佔用Ram,因為51單片機的Ram太少了..
而Ram又分為內部Ram,外部Ram,外部Ram又分為第一頁和其他頁.
外部Ram的空間比較大.
Keil默認先使用內部Ram,這是小容量存儲方式,如果你設置成大容量存儲方式,Keil會先使用外部Ram
,例如:unsigned char iii = 0;如果是小容量方式,這個iii被存到內部的RAM里,如果是大容量方式,
這個iii是被存到外部Ram里,相當於:xdata unsigned char iii = 0.
直到外部Ram沒有空間了,才會放到內部Ram
設置成大容量方式的的方法和步驟是:
1 在你的工程項目上右鍵滑鼠,選擇:"Options for ...."
2 選擇:"Target"選項卡
3 在"Memory mode"下拉框中選擇Large....