1引言
MCS-51系列单片机有着优越的性价比,因此应用面宽,使用量也非常大;然而它只有16位地址线,最大能访问的存储空间为64K,且扩展接口与存储器统一编址,扩展接口会占用大量的地址空间,致使该系列单片机在数据量大的数据采集系统中,存储空间明显不足。
笔者最近在开发一数据采集系统时,经分析、探索,找到了解决的办法。
2使用大容量存储器的原理
2.1使扩展接口不占用单片机的存储地址空间
由于MCS-51单片机的扩展接口与存储器统一编址,采用常规的方法扩展接口时会占用大量的地址空间,而多数应用系统均会要求扩展接口(本例有七段LED的段输出口、位输出口、键盘口各一个),为此,使扩展接口不占用单片机的存储地址空间对于要求大容量数据存储器的系统是必要的。
如图1,用P1口的一位,只要确保写数据到显示的段口时,使用一空余(或专门预留)的地址(如0000H),即可使扩展接口不占用单片机的存储地址空间且不会相互干扰、发生冲突,同时还可保证有足够的响应速度。
2.2 外部数据存储采用大容量存贮芯片,分段使用
如图示,MCS-51的16位地址线作为存储芯片的低位地址,可访问64K的存储空间(作为一段);再用P1口的D1、D0位作为存储芯片的高位地址(段地址),则可把存储器分为4段,最大访问能力可达256K(见下表),若使用更多的位,则访问能力可更大。编程时只要确保高位地址(A16~A19)在访问存储芯片的指令执行前确定,即可实现存储芯片全部空间的访问。
3编程实现
3.1访问扩展接口
...
CLRP1.7
MOVDPTR,#0000H;专门预留的一个地址MOVA,#DATA1
MOVX@DPTR,A;数据输出到显示的段口SETBP1.7
MOV A,#DATA2MOVX@DPTR,A;数据输出到显示的位口
...
SETB P1.7
MOV DPTR,#0000H;专门预留的一个单元地址
MOVX A,@DPTR;读键盘口数据到ACC
...
3.2访问存储器
程序中要访问存储器时,只需按如下顺序编写程序即可:设定片选(CLRP1.7);设定存储器的段位置;用MOVX读写存储器
例:
...
CLRP3.0;使存储芯片的片选有效CLR P1.0
CLR P1.1;选取0FFFFH~00000H存储区间MO DPTR,#ADDR1
MOVA,#DATA1;数据写到ADDR1单元MOVX@DPTR,AMOV DPTR,#ADDR2
MOVX A,@DPTR;读ADDR2单元的数据到A
4结束语
使用本方法可轻易地为MCS-51单片机扩展大容量的数据存储器,这对于数据量大的数据采集系统有着非常大的意义。