51單片機片外擴展RAM
一.概述 普通51單片機可以片外擴展ROM和RAM各64K字節(jié)的空間,在實際應用中很少擴展外部ROM,一般都是擴展RAM,因為普通51單片機的內部RAM實在太少,只有128-256字節(jié),處理數(shù)據(jù)量較大時往往不夠用。而片外擴展RAM需要占用P0口、P2口和P3.6、P3.7,消耗了18個IO口,導致IO口又不夠用。為了解決以上矛盾,大容量的51單片機(增強型51單片機)應運而生,這種單片機一般內置1K-16K的RAM和16K-64K的ROM,價格也相對昂貴。在某些情況下,用普通51單片機通過片外擴展RAM要比直接使用增強型51單片機更能節(jié)約成本。所以,學習51單片機片外擴展RAM是很有必要的。 二.電路設計 在WSF-51DB開發(fā)板上,擴展了32K RAM(HM62256B),地址鎖存芯片用74HC573。如果片外擴展RAM,P0口作為數(shù)據(jù)和地址低字節(jié)的復用端口,不需要加上拉排阻,當然,加上拉排阻也沒有影響。需要注意的是,當使用片外擴展RAM時,P0口和P2口最好不要接有其他資源。訪問外部擴展的32K RAM只用到15根地址線,所以用P2.7作為地址鎖存器74HC573的使能引腳和HM62256B的片選。如下圖,為了減少交叉連線,74HC573作了向下翻轉,看起來有些別扭。 三.軟件設計 /************************************************************************** *程序名稱: 51單片機片外擴展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