51單片機(jī)片外擴(kuò)展RAM
一.概述 普通51單片機(jī)可以片外擴(kuò)展ROM和RAM各64K字節(jié)的空間,在實際應(yīng)用中很少擴(kuò)展外部ROM,一般都是擴(kuò)展RAM,因為普通51單片機(jī)的內(nèi)部RAM實在太少,只有128-256字節(jié),處理數(shù)據(jù)量較大時往往不夠用。而片外擴(kuò)展RAM需要占用P0口、P2口和P3.6、P3.7,消耗了18個IO口,導(dǎo)致IO口又不夠用。為了解決以上矛盾,大容量的51單片機(jī)(增強(qiáng)型51單片機(jī))應(yīng)運而生,這種單片機(jī)一般內(nèi)置1K-16K的RAM和16K-64K的ROM,價格也相對昂貴。在某些情況下,用普通51單片機(jī)通過片外擴(kuò)展RAM要比直接使用增強(qiáng)型51單片機(jī)更能節(jié)約成本。所以,學(xué)習(xí)51單片機(jī)片外擴(kuò)展RAM是很有必要的。 二.電路設(shè)計 在WSF-51DB開發(fā)板上,擴(kuò)展了32K RAM(HM62256B),地址鎖存芯片用74HC573。如果片外擴(kuò)展RAM,P0口作為數(shù)據(jù)和地址低字節(jié)的復(fù)用端口,不需要加上拉排阻,當(dāng)然,加上拉排阻也沒有影響。需要注意的是,當(dāng)使用片外擴(kuò)展RAM時,P0口和P2口最好不要接有其他資源。訪問外部擴(kuò)展的32K RAM只用到15根地址線,所以用P2.7作為地址鎖存器74HC573的使能引腳和HM62256B的片選。如下圖,為了減少交叉連線,74HC573作了向下翻轉(zhuǎn),看起來有些別扭。 三.軟件設(shè)計 /************************************************************************** *程序名稱: 51單片機(jī)片外擴(kuò)展RAM測試 *程序功能: 把數(shù)據(jù)寫入片外RAM,再從片外RAM讀取數(shù)據(jù),點亮P1口的8個LED *開發(fā)工具:WSF-51DB開發(fā)板 * MCU型號:AT89S52-24PU *時鐘頻率:12MHZ **************************************************************************/ #i nclude<reg52.h> #i nclude <ABSACC.h>//包含片外存儲空間絕對地址訪問函數(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; } |
編輯:admin 最后修改時間:2018-05-19