『壹』 C51數組的最大容量是多少
原則上,c語言中數組所包含的元素個數理論上多少都行,如果要開一個很大的數組,比如int arrayint[10000][10000];在main()中聲明該數組就會使應用程序退出,但是如果你把該數組的聲明放在所有函數體之外,讓它變成一個全局變數,就沒有任何限制了,你想開多大的數組都可以。
但在單片機c語言程序中,實際上還是有限制的,原因在於單片機的存儲空間是有限的,數組最多能有幾個元素取決於單片機型號。
你定義了一個全局的數組,unsigned char型的數組,最多隻能有93個元素,說明你還有其他變數佔用存儲空間。如果需要一個512個元素的數組,用的單片機是stc15f2k60s2,可在定義數組時進行XDATA聲明,將數組存儲於外部RAM當中。
『貳』 c51的存儲 類型 有幾種他們分別表示的存儲區域是什麼
data 直接定址區
idata 間接定址區
xdata 外部寄存器
pdata 分頁定址區
code 程序存儲區
bdata 位定址區
『叄』 Keil c51 三種存儲模式的作用是什麼啊
這個問題很多變的啦,small存儲模式的數據存儲在DATA區裡面gmpucompact存儲模式的數據存儲在IDATA里,large存儲模式的數據存儲在XDATA里,一般默認的都是small模式,因為單片機在不加外擴RAM的時候變數區就那麼大,假設你將small存儲模式改為large存儲模式pt但是沒有外擴RAM因為samll和large的對變數的匯編訪問方式不同,程序不就亂了我是這么理解的額973
『肆』 c51單片機怎樣存儲大量數據
如果你的數據是靜態的不用變的就可以存在code,否則當上電後code的內容只能讀,不能改.數據多了只能加外存,可以用I2C匯流排的E2PROM(2是平方的意思),前幾天買了幾塊AT24C256(32K),5元/塊
例如:int code point[]={-1,-2,-3};就可以了。你說的不行不知道是什麼意思,具體點吧
你這樣賦初值是不行的,因為這種賦值語句是在RAM裡面進行,point[]只可能是變數,不可能是常量,也就是它不能被定義在CODE內。所以你只能一個一個來了。一但point[]被定義為CODE就不能在main()裡面再對它賦值了。:)
『伍』 怎麼在51單片機中讀取文件 如何在Keil C51使用fopen函數 也就是如何在C51中編寫 能打開文件程序
首先,Keil中根本沒有fopen函數,你可以打開keil的所有頭文件看看。
其次,用單片機來讀取文件是需要文件系統(比如FAT)來支持的,你不能「想當然」的認為計算機上的標准C函數中有文件打開函數,所以單片機中也有。更何況是51單片機!
像51單片機一般直接使用二進制存儲,這樣最簡單快捷,文件存儲反而成本高,速度慢,不適合使用。所以你可以用ROM來保存這個文本文件的內容,然後單片機讀取ROM。
『陸』 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....
『柒』 c51單片機怎樣存儲大量數據
外擴串列EEPROM,不受16位地址線64KB的限制,只是單位元組讀寫速度慢一些,因串列傳輸速度本來就慢,加上其地址達16位或24位,讀一個位元組,比並行慢很多 ,由於可以連續讀寫,連接讀寫只需發送一次地址,而讀出多個位元組,速度相對快一些
『捌』 關於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單片機存儲器容留
容留為8051核。
STC89C51單片機學習板是一款基於8位單片機處理晶元STC89C51RC的系統。
存儲器是單片機的又一個重要組成部分,圖6給出了一種存儲容量為256個單元的存儲器結構示意圖。其中每個存儲單元對應一個地址,256個單元共有256個地址,用兩位16進制數表示,即存儲器的地址(00H~FFH)。存儲器中每個存儲單元可存放一個八位二進制信息,通常用兩位16進制數來表示,這就是存儲器的內容。存儲器的存儲單元地址和存儲單元的內容是不同的兩個概念,不能混淆。