找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2519|回复: 56
收起左侧

对于51单片机内存的困扰,求指教

  [复制链接]
ID:73992 发表于 2022-10-1 19:21 | 显示全部楼层 |阅读模式
在51单片机片内取指令,无法从内存中读取,只能从程序存储器中读取。那么,新输入的指令单片机运行的时候就无法接收。
1.如果CPU可以从片内ram读取指令,请大家不吝赐

回复

使用道具 举报

ID:146878 发表于 2022-10-1 23:11 | 显示全部楼层
没办法,因为能不能从内存取指,得看PC指针能不能指向RAM。
回复

使用道具 举报

ID:624769 发表于 2022-10-2 00:32 | 显示全部楼层
学汇编吧, 你就知道你要达到这个目的, 需要克服的问题,  以及如何克服了。
另外,还要学一点  51  工作 原理。 学了这些,你就能明白 PC指针的 动作基准是什么了。
回复

使用道具 举报

ID:824490 发表于 2022-10-2 03:56 | 显示全部楼层
先要去了解一下,什么是指令以及ROM和RAM的区别。然后是PC指针。没试过,理论上貌似可以,但要变通。
回复

使用道具 举报

ID:526108 发表于 2022-10-2 07:48 | 显示全部楼层
C51没办法实现,ARM可以
回复

使用道具 举报

ID:123289 发表于 2022-10-8 10:59 | 显示全部楼层
传统的51是可以外扩程序存储器的,你可以用RAM来做这个外扩的部分。
回复

使用道具 举报

ID:88256 发表于 2022-10-8 11:19 | 显示全部楼层
8051单片机,EA置一,使用片内存储器的程序,EA置零,使用外部存储器的程序
回复

使用道具 举报

ID:401564 发表于 2022-10-8 11:44 | 显示全部楼层
C我会,汇编我也会,精通算不上,至少算是已经入门了
但为什么我看不懂楼主的问题

在51单片机片内取指令,这句话什么意思?
无法从内存中读取,这又是什么意思?
只能从程序存储器中读取,那这个呢?
他是不是在描述8051的的总线结构?
那么,新输入的指令单片机运行的时候就无法接收。?????
我用了几年的汇编,难道,我连入门都算不上?
回复

使用道具 举报

ID:73992 发表于 2022-10-9 22:49 来自手机 | 显示全部楼层
Y_G_G 发表于 2022-10-8 11:44
C我会,汇编我也会,精通算不上,至少算是已经入门了
但为什么我看不懂楼主的问题


通常51单片机是执行ROM中的指令
现在是想让单片机执行片内RAM中的指令,
回复

使用道具 举报

ID:73992 发表于 2022-10-9 23:07 来自手机 | 显示全部楼层
yzwzfyz 发表于 2022-10-8 10:59
传统的51是可以外扩程序存储器的,你可以用RAM来做这个外扩的部分。

外置RAM当ROM用,应该是可以做到。就是分享程序缺乏通用性。我考虑过用自身端口,模拟外置程序存储器,但是程序太繁杂了。
回复

使用道具 举报

ID:155507 发表于 2022-10-9 23:08 | 显示全部楼层
lyonkon 发表于 2022-10-9 22:49
通常51单片机是执行ROM中的指令
现在是想让单片机执行片内RAM中的指令,

你要去了解
哈佛结构与冯·诺伊曼结构区别

哈佛结构是一种将程序指令存储和数据存储分开的存储器结构。
冯·诺伊曼结构,也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。

51单片机是哈佛结构,所以不能执行片内RAM中的指令。
回复

使用道具 举报

ID:883242 发表于 2022-10-10 00:40 | 显示全部楼层
yzwzfyz 发表于 2022-10-8 10:59
传统的51是可以外扩程序存储器的,你可以用RAM来做这个外扩的部分。

扯淡。MOVC指令只能从程序存储空间读数据,无法写数据,你拿RAM做程序空间,硬件怎么接,软件怎么写?
回复

使用道具 举报

ID:401564 发表于 2022-10-10 08:16 | 显示全部楼层
lyonkon 发表于 2022-10-9 22:49
通常51单片机是执行ROM中的指令
现在是想让单片机执行片内RAM中的指令,

你只怕是对RAM有什么误解吧
我不是计算机专业的,只能解读51的RAM
51的RAM是易失的,掉电就没了了,"任何RAM中存储的信息在断电后均会丢失,所以RAM是易失性存储器。"这是百度的解释,记住这句话,记不住就抄20扁
RAM和ROM虽然名字上都夹带着内存,但它们是两个东西,从设计的最初目的到实际使用,它们一直都是指向两个不同的地方的
RAM是提高数据相关处理速度的,算是一个数据处理的中转站,没有DMA功能的单片机,处理数据都要经过RAM的,RAM放满了,单片机就处理不了数据了
ROM就是存放数据的,就像家里的一个箱子,放满了就放满了,最多是再也放不下东西而已,单片机一样的正常运行
不要有着把指令放在RAM的想法,有了这个想法,并不是你有创新思想或者是脑洞大开,那是连51单片机的入门知识都没有学好
回复

使用道具 举报

ID:879348 发表于 2022-10-10 08:21 | 显示全部楼层
架构决定不可以这样做,STM32可以运行在RAM,就可以这样做
回复

使用道具 举报

ID:624769 发表于 2022-10-10 08:50 来自手机 | 显示全部楼层
lyonkon 发表于 2022-10-9 22:49
通常51单片机是执行ROM中的指令
现在是想让单片机执行片内RAM中的指令,

首先,51单片机确实只能执行rom中的指令,然后,你希望单片机执行片内ram的指令,是可以实现的,但是,不是直接执行,而是用十几条指令,去执行一条在ram中的指令,具体执行方法你可以参考stc的在线仿真用到的,单片机端的程序。你能看懂,基本就能实现你的目的,看不懂,说明你的知识暂时还不支持你完成你的最终目标。
回复

使用道具 举报

ID:688692 发表于 2022-10-10 09:00 | 显示全部楼层
这个不是说不可以,只是有点麻烦了。
你去找找上古时期的
MCS-51试验箱
就有这种搞法,板子上是单片机,通过键盘输入汇编指令,可以直接运行
“CPU100%出借”  是我记得的一句说明书里面最印象深刻的话。
回复

使用道具 举报

ID:73992 发表于 2022-10-10 11:35 来自手机 | 显示全部楼层
cnos 发表于 2022-10-10 09:00
这个不是说不可以,只是有点麻烦了。
你去找找上古时期的
MCS-51试验箱

我就是想实现这个功能,用键盘输入程序,然后CPU执行。
回复

使用道具 举报

ID:73992 发表于 2022-10-10 12:07 来自手机 | 显示全部楼层
Y_G_G 发表于 2022-10-10 08:16
你只怕是对RAM有什么误解吧
我不是计算机专业的,只能解读51的RAM
51的RAM是易失的,掉电就没了了,"任何R ...

开机之前RAM中没有程序,这个是不用担心的。可以像x86那样,开机将程序载人RAM,载完了之后,CPU跳转到RAM执行指令。这样,不论是加载的程序还是键盘输入的程序,都可以执行
回复

使用道具 举报

ID:73992 发表于 2022-10-10 12:24 来自手机 | 显示全部楼层
cnos 发表于 2022-10-10 09:00
这个不是说不可以,只是有点麻烦了。
你去找找上古时期的
MCS-51试验箱

apple 1 用的CPU与51CPU性能差不多,但是apple1不仅支持汇编,还支持b语言。我觉得51单片机是可以做到汇编语言输入,并且执行指令的,只是没有人做,我是想做一个玩玩
回复

使用道具 举报

ID:384109 发表于 2022-10-10 12:42 | 显示全部楼层
感觉楼主还是有误解了,看贴里对51试验箱的描述,应该是外挂了一个比较大的RAM,这个RAM可以作为RAM和ROM来使用
回复

使用道具 举报

ID:1047140 发表于 2022-10-10 13:35 | 显示全部楼层
51单片机暂时做不到,因为是机制的原因,本身并不是ARM架构的关系,这跟底层架构是有关系的,建议学习下底层架构知识,就是那种纯汇编代码,了解PC指针,以及具体的寄存器,学习下就会明白
回复

使用道具 举报

ID:401564 发表于 2022-10-10 14:08 | 显示全部楼层
lyonkon 发表于 2022-10-10 12:07
开机之前RAM中没有程序,这个是不用担心的。可以像x86那样,开机将程序载人RAM,载完了之后,CPU跳转到RA ...

"开机之前RAM中没有程序,这个是不用担心的。可以像x86那样,开机将程序载人RAM,载完了之后,CPU跳转到RAM执行指令。这样,不论是加载的程序还是键盘输入的程序,都可以执行"
非常好,反正我学了几年的单片机,什么都看不明白,果然,我还是技术不到家
回复

使用道具 举报

ID:384109 发表于 2022-10-10 15:43 | 显示全部楼层
这个方式现在好像没什么意义了,这个需求就类似早期一些设备商提供基本的功能,然后客户可以自己加载自己的功能,但现在基本都是一次性设计完全,这种功能没什么用了
回复

使用道具 举报

ID:283954 发表于 2022-10-10 16:22 | 显示全部楼层
lyonkon 发表于 2022-10-10 11:35
我就是想实现这个功能,用键盘输入程序,然后CPU执行。

这是能够实现的,你先写一个基本操作程序,里面包含很多基本要用到的功能,比如TIME,COM, PRINT, VOLT, SENT,LOAD,RUN,PLAY(用中文也可)等等,然后用一个主控程序等待输入,并显示在LCD上,等输入回车键后开始检查字串,如果是正确字串就开始执行相应的副程式,执行完毕后有回到等待输入程序,要载入的外部程序可以储存在SD卡,用LOAD命令加载在RAM, 让后跳到程序起始处执行,这样就把控制权交给加载的程序,程序执行完毕后把控制权再交回给主控程序,这样就做成了51的DOS,由于现代有了大容量非易失存储器SD卡的加持,也许会有新的用途。
回复

使用道具 举报

ID:73992 发表于 2022-10-10 22:47 | 显示全部楼层
dalaoshi 发表于 2022-10-10 16:22
这是能够实现的,你先写一个基本操作程序,里面包含很多基本要用到的功能,比如TIME,COM, PRINT, VOLT,  ...

外部程序要想执行,先要把程序加载到ram。但是51 系统指令只在rom中,ram中的只被当成数据。除非外部挂载普林斯顿体系存储器。楼上说有执行ram中指令的方法,我先看看官方手册
回复

使用道具 举报

ID:384109 发表于 2022-10-10 23:04 | 显示全部楼层
楼主没明白24楼的意思,应该是外挂一个RAM,用来存程序和执行程序,只是把一般外接的ROM改成了RAM
回复

使用道具 举报

ID:1047240 发表于 2022-10-11 00:59 | 显示全部楼层
Y_G_G 发表于 2022-10-8 11:44
C我会,汇编我也会,精通算不上,至少算是已经入门了
但为什么我看不懂楼主的问题

新手刚入驻求教,我看楼主的意思是不从内存取从别的地方取吧,反通常操作再问行不行得通吧。
本来要学单片编程的我学了C++,歪了一阵风中凌乱嘻嘻嘻....
今天才知道单片的编程不能硬套电脑编程,有些是不通用的。但是分清楚了就较简单了信心满满再补一波单片编程
回复

使用道具 举报

ID:584814 发表于 2022-10-11 08:22 | 显示全部楼层
“在51单片机片内取指令,无法从内存中读取,只能从程序存储器中读取。”
这个问题很好,但是看不懂
单片机指令不是编译后一次写入么 ?编好的程序如何放在内存 ?而且还可以放在程序存储器 ?
回复

使用道具 举报

ID:86450 发表于 2022-10-11 08:48 | 显示全部楼层
Y_G_G 发表于 2022-10-10 08:16
你只怕是对RAM有什么误解吧
我不是计算机专业的,只能解读51的RAM
51的RAM是易失的,掉电就没了了,"任何R ...

是不是 跑个虚拟机,然后就能实现 运行RAM指令了。 不知道这么理解对不对?
回复

使用道具 举报

ID:86450 发表于 2022-10-11 08:53 | 显示全部楼层
dalaoshi 发表于 2022-10-10 16:22
这是能够实现的,你先写一个基本操作程序,里面包含很多基本要用到的功能,比如TIME,COM, PRINT, VOLT,  ...

我也想做这个东西。
回复

使用道具 举报

ID:86450 发表于 2022-10-11 08:55 | 显示全部楼层
正在学习51 发表于 2022-10-11 00:59
新手刚入驻求教,我看楼主的意思是不从内存取从别的地方取吧,反通常操作再问行不行得通吧。
本来 ...

现在 单片机  可以用C++ 编程了
回复

使用道具 举报

ID:73992 发表于 2022-10-11 09:24 来自手机 | 显示全部楼层
正在学习51 发表于 2022-10-11 00:59
新手刚入驻求教,我看楼主的意思是不从内存取从别的地方取吧,反通常操作再问行不行得通吧。
本来 ...

当键盘输入一条指令,存入内存。CPU要执行这条指令,51单片机在外接RAM的时候可以做到。我们讨论的是只用片内资源如何达到这个目的。并不是明知不可为而为。那样就失去了探索的意义了
回复

使用道具 举报

ID:401564 发表于 2022-10-11 11:50 | 显示全部楼层
jjwangxu2008 发表于 2022-10-11 08:48
是不是 跑个虚拟机,然后就能实现 运行RAM指令了。 不知道这么理解对不对?

跑什么虚拟机
这是楼主单片机基础知识没学好,想当然的冒出一个想法
你说什么他都能找到一堆东西来反驳你,说得有理有据的
指令跟数据都分清
STM32把程序放在RAM中运行和他说的这个,完全是两回事
FPGA运行方式也是把程序放到RAM中运行的,但也跟他说的不是一回事
他就是想当然的有一个想法,然后想当然的觉得这个方法是可以
再然后就是在这个"他自己觉得可以的"前提下,问人家怎么做
回复

使用道具 举报

ID:748788 发表于 2022-10-11 15:33 | 显示全部楼层
我理解的是,楼主想拿单片机当pc机用。坦率地说,你就死了这条心吧。计算机技术如今发展的已经很成熟了,其表现之一就是不同的技术有不同的定位
回复

使用道具 举报

ID:155507 发表于 2022-10-11 15:53 | 显示全部楼层
你可以试试这个
PAULMON 调试器
1.jpg

PAULMON 使用 8051 中的内置 UART 来与用户沟通。通常,PC 计算机与终端程序、8051 汇编器一起使用
PM001.jpg

PAULMON 也旨在与 RAM 一起使用,并且 RAM 开头的默认位置是 2000(十六进制),在 EPROM 之后,虽然是 RAM
可以在 2000 - FFFF 范围内的任何地方使用。到 RAM 的读使能信号应该是 RD 和 PSEN 信号的逻辑或,以便读取
尝试外部代码存储器或程序存储器空格将从 RAM 中读取。 (使用与门做这些信号的逻辑或,因为它们
低电平有效!)显然的写使能 RAM 应连接到 8051 的 WR 引脚。

以这种方式连接 RAM 将允许在 PAULMON 中下载命令来编写你的程序进入 RAM (写入外部数据存储器
空间)。然后你可以运行你的程序,因为从外部程序存储空间读取尝试 将从 RAM 芯片中读取。






PJRC.zip

3.4 MB, 下载次数: 4

回复

使用道具 举报

ID:73992 发表于 2022-10-13 00:26 来自手机 | 显示全部楼层
wwh2382 发表于 2022-10-11 15:33
我理解的是,楼主想拿单片机当pc机用。坦率地说,你就死了这条心吧。计算机技术如今发展的已经很成熟了,其 ...

我的目的的确是这样
回复

使用道具 举报

ID:88256 发表于 2022-10-13 01:19 | 显示全部楼层
lyonkon 发表于 2022-10-9 23:07
外置RAM当ROM用,应该是可以做到。就是分享程序缺乏通用性。我考虑过用自身端口,模拟外置程序存储器,但 ...

还以为楼主有了这个想法,就能理解我的说法,没想到还是不懂。
不明白为什么会说缺乏通用性?6264外加小电池并稍作处理,做个小电路板,就能代替2764使用,存储器的座子用锁紧座代替,该电路板插在外扩RAM上可读写,插在外扩ROM上并将EA置零可运行程序。
嫌麻烦的,用地址区分,比如4000H开始的地址分配给它,用双刀双掷开关进行切换,一样可以读写以及运行程序,至于具体的,因为长久没接触,倒是忘了,但是绝对可行。
回复

使用道具 举报

ID:88256 发表于 2022-10-13 01:39 | 显示全部楼层
lyonkon 发表于 2022-10-13 00:26
我的目的的确是这样

以前的武汉尚吉电子曾经出品过SCB-II-51或者说是SCB-2-51的单片单板机,你或许要的就是这种。
我那时从电子报中缝广告看到有学习单片机的书籍然后邮购,从此才对单片机感兴趣并学习的,实际上那上下两册的书籍就是该单片单板机的说明书,但是解说的很详细,并附有详细完整的程序,反正我那时就是靠着该书,没有老师没有同好交流,一个人自学单片机的,最后还组装了一套该单片单板机。
回复

使用道具 举报

ID:73992 发表于 2022-10-13 08:21 来自手机 | 显示全部楼层
hhdsdy 发表于 2022-10-13 01:19
还以为楼主有了这个想法,就能理解我的说法,没想到还是不懂。
不明白为什么会说缺乏通用性?6264外加小 ...

你看到35楼的设计,你就会改变想法了。你说的思路是将RAM芯片加电池当ROM用。
回复

使用道具 举报

ID:73992 发表于 2022-10-13 08:37 来自手机 | 显示全部楼层
angmall 发表于 2022-10-11 15:53
你可以试试这个
PAULMON 调试器


老哥时序玩的溜啊!我的设计是将p2.7引脚和red引脚接一个与门到RAM oe端。读写数据的时候,p2.7为高电平(地址最高位)。执行RAM中指令时,p2.7为低电平。缺点是数据地址,与指令地址是两套地址,容易记不住。我觉得你的设计更符合时序,用起来也省心。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表