51微控制器內部只有128位元組的ram(8051),而8052有256位元組的ram,低128位元組ram直接或間接定址都可以,高128位元組ram與srf特殊功能暫存器共用位址,sfr只能直接定址,高128位元組ram只能間接定址。所以通常用匯流排方式擴充套件一片ram。一般用62256(32kx8bit ram)。
現在新出的51微控制器都在內部擴充套件了外部ram。這個ram還是叫外部ram,不過在晶元內部,之所以還叫外部ram,是因為是用外部匯流排連線的,訪問方式還是用movx訪問。可以參考stc89c58rd+,擴充套件了1024位元組(byte)ram。所以stc89c58rd+一共有1024byte+256byte=1280byte這麼多位元組的ram。
內部擴充套件ram的使用
stc89c58rd+內部擴充套件ram的使用是通過對特殊功能暫存器auxr賦值實現的。
extram
internal/external ram access
內部/
外部ram 訪問
0:
內部擴充套件的
ext_ram
可以訪問.
rd+
系列微控制器 在
00h
到3ffh
單元(1024
位元組),
使用movx @dptr
指令訪問,超過
400h
的位址空間總是訪問外部資料儲存器(含
400h
單元),
movx @ri
只能訪問
00h
到ffh 單元
rc 系列微控制器 在
00h
到ffh
單元(256
位元組),
使用movx @dptr
指令訪問,超過
100h
的位址空間總是訪問外部資料儲存器(含
100h
單元),
movx @ri
只能訪問
00h
到ffh 單元
1:external data memory access.
外部資料儲存器訪問
,禁止訪問內部擴充套件
ram,此時
movx @dptr / movx @ri 的
使用同普通
8052
微控制器除錯過程:
之前的板子是使用stc89c51rd+匯流排方式驅動62256,但只用到1024位元組的ram,而stc89c51rd+自身就有內部擴充套件的1k(外部)ram,所以這次先沒焊接62256。沿用以前程式(問題就處在這
!!!)。(以下程式經過簡化)
#include
#include
#include
void serial_init(void);
void printvalue(void);
void main(void)
void serial_init(void)
void printvalue(void)
for (j=0;j<3;j++)
delayms(10);
ti=0; //
關串列埠定時器 }
printf串列埠輸出。應該輸出scandata[0], scandata[1], scandata[2],都為0,可是確輸出0
256
512
我很吃驚,這麼簡單的程式都會出錯,所以一直找問題。問題出在auxr=0x03,之前是用了62256的,但這次沒有用,xdata的資料應該儲存在內部擴充套件的ram裡面,但確因為aurx這個暫存器進行相應改動,仍然訪問外部ram(62256)。因改為auxr=0x01 / auxr="0x00"。(auxr第一位是aleoff,用於ale禁止輸出)。改了之後,串列埠輸出:00
0正確了j
後來程式又改為:
#include
#include
#include
void serial_init(void);
void printvalue(void);
xdata unsigned int addata[512];
void main(void)
void serial_init(void)
void printvalue(void)
for (j=0;j<3;j++)
delayms(10);
ti=0; //
關串列埠定時器 }
定義了乙個全域性變數陣列addata[512],這個陣列的元素是int型的(16bit),所以一共占用1024位元組ram,加上3位元組的scandata陣列,一共使用了1027個位元組,編譯後也可以在keil的output window中看出。
program size: data="32".1 xdata="1027" code="1175"
此時,雖然auxr=0x01,定義成訪問內部擴充套件ram,但由於addata[512]是全域性變數,定義時就分配ram,所以但在printvalue裡分配區域性變數scandata時,ram已經超過的stc89c58rd+的1024內部擴充套件ram的上限,所以串列埠輸出出錯,和之前一樣,輸出
0256
512所以,千萬要注意外部ram夠不夠,不夠的話,就不要省一片62256了j
注意的話:
快速使用的數 用內部ram,只有128位元組(8051)/256位元組(8051) 訪問只用1個機器週期
儲存的資料 內部擴充套件的ram 要注意晶元datasheet上內部擴充套件ram的大小
外部ram 用匯流排方式訪問,如32kx8 ram 62256
51微控制器最大可64k定址
51微控制器內部ram
51微控制器預設的內部ram只有128位元組,52微控制器增加至256位元組,stc89c54 55 58 516等增加到1280位元組。微控制器內部ram,共256個單元,使用者使用前128個單元,用於存放可讀寫資料,後128個單元被專用暫存器占用。現在新出的51微控制器都在內部擴充套件了外部ra...
2 1 微控制器內部資源
在這裡我所講到的微控制器內部資源,和傳統微控制器書籍中講微控制器內部結構不同。我這裡講到的內部資源,是指作為微控制器使用者,微控制器提供給我們可使用的東西。總結起來,主要是三大資源 flash 程式儲存空間,早期微控制器是 otprom。ram 資料儲存空間。sfr 特殊功能暫存器。flash 在早...
51微控制器內部資源
運算器 功能 1 從儲存器中取出下一條要執行的指令 取指 2 對取出的指令進行解碼 解碼 3 指揮運算器運算或控制資料傳送 指揮 1 pc是乙個16位專用暫存器,由cpu控制提供下一條執行指令的首位址 2 程式執行時自動加1 按順序執行 3 復位時值為0000h,程式從0開始 4 可被指令修改功能實...