打印

51单片机的问题 高手们请进

[复制链接]
1500|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lz是个新人小白,现在想用51单片机把一个外部eprom的里从地址0x0000H到0x1fffH的数据全部读出来并且存放到ram中去。电路图

大神帮我看看有电路什么问题,程序如下:

ORG 0000H
MOV DPTR,#2000H
MOV R3,#10
LOOP1: MOV A,#00H
       MOVC A,@A+DPTR
       MOVX @DPTR,A
       INC DPTR
       DJNZ R3,LOOP1
MOV DPTR,#1000H
CLR PSW.5
LOOP2: MOV R3,#9
       MOV DPTR,#2000H

LOOP3: MOVX A,@DPTR
       MOV R1,A
       PUSH DPL
       INC DPTR
       MOVX A,@DPTR
       MOV R0,A
       CLR C
       SUBB A,R1
       JC NEXT      
       SETB PSW.5   
       MOV A,R1
       MOVX @DPTR,A
       MOV A,R0
       POP DPL
       MOVX @DPTR,A
       INC DPTR

NEXT: DJNZ R3,LOOP3
      JBC PSW.5,LOOP2
      SJMP  $
      END

相关帖子

沙发
bluesky001| | 2014-9-4 12:09 | 只看该作者
好久没有见过汇编语言了,都忘了。但发现可能有点错误的地方
(1)ORG 0000 开始的地方到后面的几十个字节(具体记不清楚了)是放中断向量地址的地方,不要放置代码,比如ORG 0000是复位向量,一般放一条JMP指令到初始化的代码段。
(2)硬件电路上,6264的 CE 端如果直接接地了,应该接到P2口的某根高地址上,不然A12-A0的地址空间两个都重合了,因为6264一直处于选中状态。我觉得书上就有常规的EPROM和RAM的扩展电路,你再参考一下。

使用特权

评论回复
板凳
没牛吃的草|  楼主 | 2014-9-4 13:22 | 只看该作者
bluesky001 发表于 2014-9-4 12:09
好久没有见过汇编语言了,都忘了。但发现可能有点错误的地方
(1)ORG 0000 开始的地方到后面的几十个字节 ...

恩恩 说得有道理 第一条确实是这样的  其实我就想让一片有程序的片外ROM里的程序全部转移到一个片外RAM里去,一般是从0020开始的(好像是 纯平凭**了) 但是无奈 ROM的程序是从0000开始的,至于第二条 这个我做过 高位地址和长接地都可以的 貌似我只有一片RAM啊 书上的参考对我这个功能意义不大。

使用特权

评论回复
地板
bluesky001| | 2014-9-4 13:39 | 只看该作者
没牛吃的草 发表于 2014-9-4 13:22
恩恩 说得有道理 第一条确实是这样的  其实我就想让一片有程序的片外ROM里的程序全部转移到一个片外RAM里 ...

第一条,加一个LABLE进行跳转就可以了:
ORG 0000
LJMP MAIN

ORG 0020
MAIN:MOV DPTR,#2000H
MOV R3,#10
。。。

第二条,你试过没问题就可以了。

使用特权

评论回复
5
没牛吃的草|  楼主 | 2014-9-4 14:03 | 只看该作者
bluesky001 发表于 2014-9-4 13:39
第一条,加一个LABLE进行跳转就可以了:
ORG 0000
LJMP MAIN

恩恩 谢谢 挺有帮助的 不过  就算这样还是不成功的  因为 我确实读数据 成问题 但我又不太清楚是哪的问题  程序汇编跟c都试过  电路跟书上的扩也对过 ,想知道高手们碰到这种情况是怎么个思路的 就是 把一个片外rom的所有内容依次读出来 写入一个外部ram里去(貌似这个有些基础 但是我确实小白 不会这个)而且外部rom的程序 不知道 相方法要再弄个程序 去把之前的rom的程序弄出来

使用特权

评论回复
6
bluesky001| | 2014-9-4 15:41 | 只看该作者
没牛吃的草 发表于 2014-9-4 14:03
恩恩 谢谢 挺有帮助的 不过  就算这样还是不成功的  因为 我确实读数据 成问题 但我又不太清楚是哪的问题 ...

你可以分两步实施,先实现这样两个子程序
(1)从外部EPROM中读取一小段数据(如10个字节),先放到内部的RAM中,看看读取的数据是否正确?
(2)讲一个固定的数据写到外部RAM中,然后读取回来,和刚才写入的数据进行比较,看是否正确?
如果以上两个子程序都正确,然后将他们何在一起就可以了。

使用特权

评论回复
7
没牛吃的草|  楼主 | 2014-9-10 10:44 | 只看该作者
有没有大神能来给解答下啊

使用特权

评论回复
8
没牛吃的草|  楼主 | 2014-9-10 11:03 | 只看该作者

使用特权

评论回复
9
ningling_21| | 2014-9-10 14:24 | 只看该作者
没牛吃的草 发表于 2014-9-10 11:03

电路有没有问题?

使用特权

评论回复
10
lyjian| | 2014-9-10 20:24 | 只看该作者
控制信号都不知道是哪个

使用特权

评论回复
11
没牛吃的草|  楼主 | 2014-9-11 09:36 | 只看该作者
ningling_21 发表于 2014-9-10 14:24
电路有没有问题?

我也不清楚有没有问题 就按外部扩展ROM和RAM的办法做了 用的线选法  以前做过一个工控的 用的这个扩展方法 现在照搬了 因为想不出别的电路  你帮我看看这个吧  

使用特权

评论回复
12
没牛吃的草|  楼主 | 2014-9-11 09:37 | 只看该作者
ningling_21 发表于 2014-9-10 14:24
电路有没有问题?

我也不清楚有没有问题 就按外部扩展ROM和RAM的办法做了 用的线选法  以前做过一个工控的 用的这个扩展方法 现在照搬了 因为想不出别的电路  你帮我看看这个吧  

使用特权

评论回复
13
没牛吃的草|  楼主 | 2014-9-11 09:41 | 只看该作者
lyjian 发表于 2014-9-10 20:24
控制信号都不知道是哪个

373的锁存用ALE自动控制 2764的ce用p2.5口 2764的oe用spen自动控制  6264的we用单片机的WR 6264的oe用单片机的RD 6264的CE拉低 CS拉高

使用特权

评论回复
14
lyjian| | 2014-9-12 10:27 | 只看该作者
电路没什么问题。
你的软件有问题,DPTR=2000H的话,P2.5=1,2764的CE=1,根本读不了2764。
给你一个简单的汇编
        .
        .
        .
        mov        DPTR,#0                ;DPTR置零(从0地址开始)
LOOP:
        clr        A       
        movc        A,@A+PC                ;读外部ROM
        movx        @DPTR,A                ;写外部RAM
        inc        DPTR                ;地址加1
        mov        A,DPH               
        jnb        ACC.5,LOOP        ;判断地址是否到达2000H。是,读写完;否,继续读写
        .
        .
        .
       

使用特权

评论回复
15
wangguiyuan1983| | 2014-9-14 21:35 | 只看该作者
围观了!!!!!!!!

使用特权

评论回复
16
没牛吃的草|  楼主 | 2014-9-18 09:00 | 只看该作者
lyjian 发表于 2014-9-12 10:27
电路没什么问题。
你的软件有问题,DPTR=2000H的话,P2.5=1,2764的CE=1,根本读不了2764。
给你一个简单的 ...

谢谢 我去试试下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

12

帖子

0

粉丝