外扩存储器电路的工作原理及软件设计
扫描二维码
随时随地手机看文章
1.单片机片外程序区读指令过程
当接通电源且单片机上电复位后,程序计数器PC-OOOOH,CPU就从OOOOH地址开始取指令,执行程序。在取指令期间,PC地址低8位送往PO口,经锁存器锁存作为低8位地址A0~A7输出。PC高8位地址送往P2口,直接由P2.O~P2.4锁存到A8~A12地址线上,P2.5~P2.7输入给74LS139进行译码输出片选。这样,根据P2口、PO口状态则选中了第一个程序存储器芯片ICl(2764)的第一个单元地址OOOOH。然后当PSEN(的反)变为低电平时,把OOOOH中的指令代码经PO口读入内部RAM中进行译码,从而决定进行何种操作。取出一个指令字节后PC自动加1,然后取第二个字节,依次类推。当PC=1FFFH时,从IC1最后一个单元取指令,然后PC=2000H,CPU向P2口、PO口送出2000H地址时,则选中第二个程序存储器IC2,IC2的地址范围为2000H~3FFFH,读指令过程同IC1,不再赘述。
2.单片机片外数据区读/写数据过程
当程序运行中,执行“MOV”类指令时,表示与片内RAM交换数据;当遇到“MOVX”类指令时,表示对片外数据存储器区寻址。片外数据存储器区只能间接寻址。
例如,把片外6000H单元的数据送到片内RAM 50H单元中,程序如下:
先把寻址地址6000H送到数据指针寄存器DPTR中,当执行“MOVX A,@DPTR”时,DPTR的低8位(OOH)经PO口输出并锁存,高8位(60H)经P2口直接输出,根据PO口、P2口状态选中IC4(6264)的6000H单元。当读选通信号RD(的反)为低电平时,片外6000H单元的数据经PO口送往累加器A。当执行指令“MOV 50H,A”时,则把该数据存入片内50H单元。
向片外数据区写数据的过程与读数据的过程类似。
例如,把片内50H单元的数据送到片外4000H单元中,程序如下:
执行第1条指令,先把片内RAM 50H单元的数据送到A中,第2条指令把寻址地址4000H送到数据指针寄存器DPTR中,当执行“MOVX @DPTR,A”时,DPTR的低8位(OOH)由PO口输出并锁存,高8位(40H)由P2口直接输出,根据PO口、P2口状态选中IC3(6264)的4000H单元。当写选通信号WR(的反)有效时,A中的内容送往片外4000H单元。
AT89S51单片机读写片外数据存储器中的内容,除了使用“MOVX A,@DPTR”和“MOVX @DPTR,A”外,还可以使用指令“MOVX A,@R/”和“MOVX @R/,A”。这时PO口装入R/中的内容(低8位地址),而把P2口原有的内容作为高8位地址输出。下面介绍的例子就是采用“MOVX @R/,A”指令的例子。
例:编写程序,将程序存储器中以TAB为首地址的32个单元的内容依次传送到外部RAM以4000H为首地址的区域去。
数据指针DPTR指向标号TAB的首地址。RO既指示外部RAM的地址,又表示数据标号TAB的位移量。此程序为一循环程序,循环次数为32,RO的值从0变化至31,RO的值达到32就结束循环。参考程序如下: