51單片機片外擴展RAM
一.概述
普通51單片機可以片外擴展ROM和RAM各64K字節(jié)的空間,在實際應(yīng)用中很少擴展外部ROM,一般都是擴展RAM,因為普通51單片機的內(nèi)部RAM實在太少,只有128-256字節(jié),處理數(shù)據(jù)量較大時往往不夠用。而片外擴展RAM需要占用P0口、P2口和P3.6、P3.7,消耗了18個IO口,導(dǎo)致IO口又不夠用。為了解決以上矛盾,大容量的51單片機(增強型51單片機)應(yīng)運而生,這種單片機一般內(nèi)置1K-16K的RAM和16K-64K的ROM,價格也相對昂貴。在某些情況下,用普通51單片機通過片外擴展RAM要比直接使用增強型51單片機更能節(jié)約成本。所以,學(xué)習(xí)51單片機片外擴展RAM是很有必要的。
二.電路設(shè)計
在WSF-51DB開發(fā)板上,擴展了32K RAM(HM62256B),地址鎖存芯片用74HC573。如果片外擴展RAM,P0口作為數(shù)據(jù)和地址低字節(jié)的復(fù)用端口,不需要加上拉排阻,當(dāng)然,加上拉排阻也沒有影響。需要注意的是,當(dāng)使用片外擴展RAM時,P0口和P2口最好不要接有其他資源。訪問外部擴展的32K RAM只用到15根地址線,所以用P2.7作為地址鎖存器74HC573的使能引腳和HM62256B的片選。如下圖,為了減少交叉連線,74HC573作了向下翻轉(zhuǎn),看起來有些別扭。
三.軟件設(shè)計
/**************************************************************************
*程序名稱: 51單片機片外擴展RAM測試
*程序功能: 把數(shù)據(jù)寫入片外RAM,再從片外RAM讀取數(shù)據(jù),點亮P1口的8個LED
*開發(fā)工具:WSF-51DB開發(fā)板
* MCU型號:AT89S52-24PU
*時鐘頻率:12MHZ
*程序作者: 吳師傅
*版權(quán)說明:吳師傅版權(quán)所有,轉(zhuǎn)載請注明來源地址和作者。
**************************************************************************/
#i nclude
#i nclude //包含片外存儲空間絕對地址訪問函數(shù):XBYTE[]
sbit oe=P2^7;//片外RAM芯片片選和地址鎖存器74HC573使能
unsigned char code ramdata[100]= //定義100個數(shù)據(jù)
{
0,1,2,3,4,5,6,7,8,9,
10,11,12,13,14,15,16,17,18,19,
20,21,22,23,24,25,26,27,28,29,
30,31,32,33,34,35,36,37,38,39,
40,41,42,43,44,45,46,47,48,49,
50,51,52,53,54,55,56,57,58,59,
60,61,62,63,64,65,66,67,68,69,
70,71,72,73,74,75,76,77,78,79,
80,81,82,83,84,85,86,87,88,89,
90,91,92,93,94,95,96,97,98,99
};
//延時ms函數(shù):
void Delayms(unsigned int t)
{
unsigned int i,j;
for(i=t;i>0;i--)
for(j=120;j>0;j--);
}
//主函數(shù):
int main(void)
{
unsigned char i;
oe=0;//使能RAM芯片片選和地址鎖存器
for(i=0;i<100;i++)
XBYTE[300+i]=ramdata[i];
//將100個數(shù)據(jù)寫入片外RAM,起始地址為:300
while(1)
{
for(i=0;i<100;i++)
{
P1=XBYTE[300+i];//從片外RAM讀取數(shù)據(jù),點亮P1口的8個LED
Delayms(500);
}
}
return 0;
}
擴展閱讀:MCS-51單片機布爾處理器存儲空間分配
編輯:admin 最后修改時間:2018-05-18