89C52微控制器的記憶體8K不夠用了怎麼辦

時間 2021-07-22 23:14:33

1樓:撒康勝

1.可不可以用24c0*2系列呢?那程式要怎麼寫了(有關些讀一整個函式的),比如我現在有要把溫控程式和時鐘程式放到52外部,計算器程式放到內部,同時可以使52正常工作,掃描完內部後繼續掃描內部。

答:不行.

2.如果用擴充套件外部儲存晶片,那晶片型號是什麼,程式又怎麼寫?

答:可以擴充套件.典型的並行儲存晶片一般都可.電路非常經典.程式設計上做配合,參考keil的band模式.

另外,要不直接擴一個足夠大的外部程式晶片算了.

3.如果改用大記憶體的微控制器晶片,那程式又不一樣了吧?

答:只要微控制器還是51系列的,程式基本不會大變動,甚至不用變動.

**方面不要貴啊,我只會52的c程式的(我是菜鳥),所以要完全相容的,不需要太大,再有8k或4k就ok。那又怎麼辦?跪求,獻上我的大部分分,搞定了可以追加。記憶體確實不夠了。。。

答:簡單啊,直接擴帶16k/32k/64k flash程式空間的51晶片就行了.

2樓:intpde雜貨鋪

1、24c02這種沒記錯應該是序列的吧。如果說你用51核心的話,程式擴充套件到序列rom上不是很方便哦。一般來說89c52的話需要擴充套件並口的rom,例如27c64這種。

具體接法你找找課本應該是有的。然後ea接高電平,就可以讀完內部讀外部了。

2、52建議用並行的27c64。

3、可以改用stc生產的微控制器,有64k的。程式的話,要改,注意選擇並設定微控制器io口的工作模式,還有定時器中斷時間的問題(52是1t,但stc12c2051是12t,速度快了12倍)

其實,更重要的就是優化演算法了,有些東西,你應該先算好給他,例如計算sin(x),正常來說是邁克勞林x+x³/(2*3)+……,好像要去到11次方項才能較為準確的算出整個週期的sin,但對於微控制器來說,就應該現將sin分255段算出來,乘255,製成數表用於查表(這種查表就可以放在你剛才說的24c02裡面了,只是查表指令要改。還有就是,例如我要計算x*12*5,你程式設計應該寫成x*60,這個很重要。還有一個吧,空間不夠,有些函式能省則省吧,有些可以通過外接晶片提供,就讓外接晶片去辦好了。

3樓:雪花微風

都不用那麼麻煩的。。清楚不管是還是 ,ram不夠 。如果只是普通ram不夠用可以用 xdata 定義ram變數。。

若rom也不夠。。。那就只要換個更大容量的微控制器就好了,比如89c54 就有16k rom空間了,或者更大容量的,這都是51微控制器,程式都是一樣通用的。也就換個晶片的.

h檔案就好了,自己寫的那些直接新增進工程就好了。不懂的可以問身邊的同學。

24c0*2 iic通訊的只適合存普通資料 ,存放掉電需要儲存的資料,不能用來存程式的。

外擴儲存程式的一般都是外加一個flash晶片,電路需要新增,程式需要相應設定。比換個大容量晶片麻煩的。

4樓:匿名使用者

準確地說,你說的是flash (程式儲存器),51為4k 52為8k,而記憶體是ram。照你描述的問題是你的程式太大了8k不夠用,那麼你要看看一下你實際的**生成的hex檔案有多大,再根據需要來處理,比如你只大了一點點,可以想辦法把你的**優化一下,可能就夠了;如果是大很多,那麼沒別的辦法只有更換微控制器例如53/54等。另外外部儲存器是用來存相關資料的,而不是用來放**的。

如果你非要用52來做,那麼你可以考慮用多個52微控制器來分模組處理,然後把相關的資料送到主機上再做總的處理就可以了。

5樓:

① 最簡單的辦法,換你當前所用型號的89c54(16kb)或89c58(32kb)。這樣的話程式基本可以維持不變。**我想不會比你用的52貴多點兒……

② 如果加外部儲存晶片,選個並行介面的flash儲存器就行了,例如sst29sf010之類的。當然51微控制器在使用片外rom的時候管腳連線會稍有不同,注意psen#的連線。不過既然你不需要,這部分以後再學習也可以……

6樓:匿名使用者

你說的那個不是記憶體,52的記憶體只有256位元組,擴充套件記憶體有1~2k.

程式的大小和記憶體使用量沒關係,51的程式**是很短的,真實情況基本不會佔滿幾k的flash,一般都是資料表,字模點陣或**佔空間比較多,實在不行就換個型號,相容性要看晶片間差異,不同廠家差異比較大.

24c0是外存通過匯流排連線到微控制器,不能解決你的問題.

另外編寫程式並不是像肉麵糰,如果不修改幾個程式不那麼容易合在一起執行.

7樓:匿名使用者

第一,擴充套件外部rom,比如2764,27256,27512等。

第二,你完全可以試用其他更大容量的51系列微控制器,**完全相容的,比如stc12c5a60s2,內部程式容量60k,**與89c52差不多,速度更快,可以1t模式工作,是普通51的12倍速,是stc89c52的6倍速。

8樓:小灰狼

1、沒有這樣使用過,估計不能實現,否則大容量的微控制器豈不是沒有市場?

2、stc的51內部flash比較大,程式應該改動不大,stc有些型號是完全相容89c51的,找找看。

3、會89c52,其他的8位微控制器基本都可以會,相差不大的。

9樓:匿名使用者

51/52微控制器,現在有很多記憶體在8k~60k左右的型號,可以系統程式的大小選擇微控制器的型號,這樣比擴充套件記憶體晶片要好(硬體電路簡單成本低,程式編寫也簡單),像24c02系列晶片存放一些資料是可以的,要存放程式呼叫就比較麻煩(必須要有一塊ram有程式rom地址空間的設計),如stc系列微控制器有多個型號的微控制器 記憶體 在 60k 左右的,當然其他系列微控制器都有 記憶體 在60k 左右的。

10樓:魚鷹談微控制器

你這不是記憶體,是flash吧,直接換大容量的晶片,stc12c5a60s2微控制器,60k flash,2k ram,一般的程式應該夠了吧。換了之後程式相容的。如果覺得有點浪費了,可以找找其他的晶片,stc的就行,他有很多類似的,但別找15系列的,引腳不相容的,務必小心!

11樓:義採

rom不夠還是ram不夠?你上面說的24c02是ee吧?這東西是不能用來擴充套件rom和ram的。

所以1是不行的。你想把程式放外部和內部你是現在板子就有外擴儲存還是準備自己再買一個?如果現在就有那麼我沒用過52系列的微控制器,這個資料應該不少吧。

如果是要重新買或者重新畫有外擴的板子那麼不如換微控制器,換一個空間大的52具體你可以直接上那幾家微控制器生產商的官網。比如說st上面去看微控制器引數選大一點的。不要去問具體型號這個本來就是電路中的選型。

**可以不用考慮都是幾塊錢一片的

12樓:匿名使用者

用24c0*2應該是不可以的。24c0*2 是 「eeprom」,你所說的89c52微控制器的記憶體8k是 「flash程式儲存器」,這兩個不是一個型別。89c52自帶「eeprom」5k。

建議用 stc89c58rd 直接替換stc89c52。stc89c58rd「flash程式儲存器」32k,「eeprom」29k。

13樓:青鐵塔

89c52是intel公司mcs-51系列微控制器中基本的產品,它採用atmel公司cmos工藝技術製造的高效能8位微控制器,屬於標準的mcs-51的hcmos產品。它結合了cmos的高速和高密度技術及cmos的低功耗特徵,它基於標準的mcs-51微控制器體系結構和指令系統。

89c52微控制器**商:拍明芯城

89c52是intel公司mcs-51系列微控制器中基本的產品,它採用atmel公司可靠的cmos工藝技術製造的高效能8位微控制器,屬於標準的mcs-51的hcmos產品。它結合了cmos的高速和高密度技術及cmos的低功耗特徵,它基於標準的mcs-51微控制器體系結構和指令系統,屬於89c51增強型微控制器版本,整合了時鐘輸出和向上或向下計數器等更多的功能,適合於類似馬達控制等應用場合。89c52內建8位**處理單元、512位元組內部資料儲存器ram、8k片內程式儲存器(rom)32個雙向輸入/輸出(i/o)口、3個16位定時/計數器和5個兩級中斷結構,一個全雙工序列通訊口,片內時鐘振盪電路。

此外,89c52還可工作於低功耗模式,可通過兩種軟體選擇空閒和掉電模式。在空閒模式下凍結cpu而ram定時器、序列口和中斷系統維持其功能。掉電模式下,儲存ram資料,時鐘振盪停止,同時停止晶片內其它功能。

89c52有pdip(40pin)和plcc(44pin)兩種封裝形式。

功能特性

· 標準mcs-51核心和指令系統

· 片內8krom(可擴充64kb外部儲存器)

· 32個雙向i/o口

· 256x8bit內部ram(可擴充64kb外部儲存器)

· 3個16位可程式設計定時/計數器

· 時脈頻率3.5-12/24/33mhz

· 向上或向下定時計數器

· 改進型快速程式設計脈衝演算法

· 6箇中斷源

· 5.0v工作電壓

· 全雙工序列通訊口

· 布林處理器

—幀錯誤偵測

· 4層優先順序中斷結構

—自動地址識別

· 相容ttl和cmos邏輯電平

· 空閒和掉電節省模式

· pdip(40)和plcc(44)封裝形式

管腳說明

vcc:供電電壓。 gnd:接地。

p0口:p0口為一個8位漏級開路雙向i/o口,每腳可吸收8個ttl門電流。當p0口的管腳第一次寫「1」時,被定義為高阻輸入。

p0能夠用於外部程式資料儲存器,它可以被定義為資料/地址的第八位。在flash程式設計時,p0 口作為原碼輸入口,當flash進行校驗時,p0輸出原碼,此時p0外部必須被拉高。

p1口:p1口是一個內部提供上拉電阻的8位雙向i/o口,p1口緩衝器能接收輸出4個ttl門電流。p1口管腳寫入「1」後,被內部上拉為高,可用作輸入,p1口被外部下拉為低電平時,將輸出電流,這是由於內部上拉的緣故。

在flash程式設計和校驗時,p1口作為低八位地址接收。

p2口:p2口為一個內部上拉電阻的8位雙向i/o口,p2口緩衝器可接收,輸出4個ttl門電流,當p2口被寫「1」時,其管腳被內部上拉電阻拉高,且作為輸入。並因此作為輸入時,p2口的管腳被外部拉低,將輸出電流。

這是由於內部上拉的緣故。p2口當用於外部程式儲存器或16位地址外部資料儲存器進行存取時,p2口輸出地址的高八位。在給出地址「1」時,它利用內部上拉優勢,當對外部八位地址資料儲存器進行讀寫時,p2口輸出其特殊功能暫存器的內容。

p2口在flash程式設計和校驗時接收高八位地址訊號和控制訊號。

p3口:p3口管腳是8個帶內部上拉電阻的雙向i/o口,可接收輸出4個ttl門電流。當p3口寫入「1」後,它們被內部上拉為高電平,並用作輸入。

作為輸入,由於外部下拉為低電平,p3口將輸出電流(ill)這是由於上拉的緣故。p3口作為at89c51的一些特殊功能口,管腳 備選功能

p3.0 rxd(序列輸入口)

p3.1 txd(序列輸出口)

p3.2 /int0(外部中斷0)

p3.3 /int1(外部中斷1)

p3.4 t0(計時器0外部輸入)

p3.5 t1(計時器1外部輸入)

p3.6 /wr(外部資料儲存器寫選通)

p3.7 /rd(外部資料儲存器讀選通)

rst:復位輸入。當振盪器復位器件時,要保持rst腳兩個機器週期的高電平時間。

ale/prog:當訪問外部儲存器時,地址鎖存允許的輸出電平用於鎖存地址的底位位元組。

在flash程式設計期間,此引腳用於輸入程式設計脈衝。在平時,ale端以不變的頻率週期輸出正脈衝訊號,此頻率為振盪器頻率的1/6。因此它可用作對外部輸出的脈衝或用於定時目的。

然而要注意的是:每當用作外部資料儲存器時,將跳過一個ale脈衝。如想禁止ale的輸出可在sfr8eh地址上置0。

此時, ale只有在執行movx,movc指令是ale才起用。另外,該引腳被略微拉高。如果微處理器在外部執行狀態ale禁止,置位無效。

/psen:外部程式儲存器的選通訊號。在由外部程式儲存器取指期間,每個機器週期兩/psen有效。

但在訪問外部資料儲存器時,這兩次有效的/psen訊號將不出現。/ea / vpp:當/ea保持低電平時,則在此期間外部程式儲存器(0000h-ffffh),不管是否有內部程式儲存器。

注意加密方式1時,/ea將內部鎖定為reset;當/ea端保持高電平時,此間內部程式儲存器。在flash程式設計期間,此引腳也用於施加12v程式設計電源(vpp)。

xtal1:反向振盪放大器的輸入及內部時鐘工作電路的輸入。

xtal2:來自反向振盪器的輸出。

求一89c52微控制器c語言程式,流水燈 數碼管共同作用

士多啤梨啤 include define uint unsigned int define uchar unsigned char define led p3 uchar code tab unsigned char a,i unsigned long int temp void init void...

89c52微控制器中,序列口工作方式1時,每次傳送8位資料是什麼意思

序列資料的傳送實際上就是靠改變io口電平來實現的,io口在同一時間就只能表示兩種狀態 高低電平,對應資料位0或1 串列埠第次傳送8位資料就是讓io口在傳送時間內變化8次 為什麼是8位,因為串列埠在方式1是以位元組為單位傳送的 而為什麼串列埠在方式1要以位元組為單位呢?這是在硬體設計之初就確定好的,是...

微控制器STC89C52顯示0 99的C語言程式

include sbit p10 p0 0 數碼管1 公共端sbit p11 p0 1 數碼管2 公共端 define uchar unsigned char define uint unsigned intuchar dsy ge uchar dsy shi void delayms uint x...