历史上的今天
今天是:2025年03月09日(星期日)
2018年03月09日 | 外扩存储器电路的工作原理及软件设计
2018-03-09 来源:eefocus
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就结束循环。参考程序如下:

上一篇:基于单片机的音乐程序设计原理
史海拾趣
|
我在 EVC工程里面 加入了 #include \"sipapi.h\" 文件,并在 “对象/模块库”中加了 coredll.lib 当我在 程序里调用 SipShowIM(SIPF_ON);来调用软键盘时,出现了错误! 请问下该怎么解决这个问题!!! … 查看全部问答> |
|
最近在LPC2138的项目中遇到了这样的问题,敬请达人指点: 因为在项目中有一不带字库的液晶显示,而且所需汉字较多,且不定,故需下载字库到LPC2138的内部flash中,其有500K的内部flash,HZK16只需使用261K,我准备自己的程序有200K ...… 查看全部问答> |
|
按照论坛上说的 把R, T 跳冒对调。 能偶尔收到数据 。 但是更重要的是!!!!我外接MAX232串口模块,能很稳定的收到数据。 求高手解答 我用的是官方代码。 如 给串口发“ a”  ...… 查看全部问答> |
|
虽然本人上的是电子系,可是周边的师兄师姐都一起笑称,毕业了,还不会修电话(固定电话哦,不是手机),实在不敢承认自己是电子系毕业的。 上班以后,因为工作需要,开始接触单片机。说起来也算不上从零开始,读书的时候某年暑假在实验室接手了半 ...… 查看全部问答> |
|
最近看arrow上的开发套件: https://www.eeworld.com.cn/mcu/2014/0829/article_16112.html 于是下单了,但他们要我提供 10-digit customs reg number, 但我是个人使用, 正常步骤是直接FedEx全部处理好就行了的, 有其它人遇到过这样的问题吗? ...… 查看全部问答> |
|
程序下载到板子上的时候系统正常运行,但是用jlink仿真单步调试的时候,程序停止在 do { temp=SysTick->CTRL; &nbs ...… 查看全部问答> |




