找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索

對(duì)于51單片機(jī)內(nèi)存的困擾,求指教

查看數(shù): 5853 | 評(píng)論數(shù): 56 | 收藏 0
關(guān)燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請(qǐng)稍候......
發(fā)布時(shí)間: 2022-10-1 19:21

正文摘要:

在51單片機(jī)片內(nèi)取指令,無法從內(nèi)存中讀取,只能從程序存儲(chǔ)器中讀取。那么,新輸入的指令單片機(jī)運(yùn)行的時(shí)候就無法接收。 1.如果CPU可以從片內(nèi)ram讀取指令,請(qǐng)大家不吝賜

回復(fù)

ID:378108 發(fā)表于 2022-11-30 00:00
lyonkon 發(fā)表于 2022-10-9 23:07
外置RAM當(dāng)ROM用,應(yīng)該是可以做到。就是分享程序缺乏通用性。我考慮過用自身端口,模擬外置程序存儲(chǔ)器,但 ...

有這種的51單片機(jī),好像是錦銳的,有一部分 RAM和ROM在地址上是重疊映射的,主要用來做 BOOTLOAD代碼
ID:308903 發(fā)表于 2022-11-25 09:05
回顧了樓主帖子,我覺得樓主是想做軟驅(qū),二十年前,插軟驅(qū)的那種,PC機(jī)
ID:155507 發(fā)表于 2022-11-24 15:44
lyonkon 發(fā)表于 2022-11-23 23:13
感謝,我從老哥圖紙中學(xué)了不少東西。
51 EA引腳實(shí)機(jī)我測(cè)試了,
用stc89c52測(cè)試

STC89C52 有兩個(gè)版本。只有HD版本有EA

不過現(xiàn)在外面能夠買到的版本多數(shù)是90C版本沒有EA接腳的











ID:73992 發(fā)表于 2022-11-23 23:13
angmall 發(fā)表于 2022-11-23 17:41
你的74HC138連接不正確。

感謝,我從老哥圖紙中學(xué)了不少東西。
51 EA引腳實(shí)機(jī)我測(cè)試了,
用stc89c52測(cè)試
EA引腳接高電平,執(zhí)行片內(nèi)程序
EA引腳接低電平,執(zhí)行片內(nèi)程序
EA引腳懸空,任然執(zhí)行片內(nèi)程序
開機(jī)過后接線。接了線再開機(jī)任然,沒有任何變化
EA引腳彎出ic座 測(cè)試的,用兩個(gè)芯片試過,
我從老cd機(jī)上拆了一塊at89c51
用at89c51測(cè)試EA引腳沒問題,

ID:155507 發(fā)表于 2022-11-23 17:41
你的74HC138連接不正確。


LCD1602讀寫地址是對(duì)的。





ID:77589 發(fā)表于 2022-11-23 17:24
51單片機(jī)說"臣妾做不到啊。。。。。!"
ID:88256 發(fā)表于 2022-10-13 23:18
Y_G_G 發(fā)表于 2022-10-13 13:09
我竟然無言以對(duì)
再去看了一下你以前的帖子,才發(fā)現(xiàn),你就是那個(gè)發(fā)明了三總線開發(fā)板的發(fā)明人
對(duì)不起,我錯(cuò) ...

回帖沒看人,原來又是一位力圖拯救過時(shí)元器件和原理的大俠,我還以為只是一時(shí)興趣愛好想玩的呢,畢竟我也懷念之前用單片單板機(jī)輸入機(jī)器碼進(jìn)行學(xué)習(xí)單片機(jī)的經(jīng)過,也有重新打板(當(dāng)然元件簡(jiǎn)化用新式的,比如用TM1650系列做顯示和按鍵處理)“懷舊”的想法,自我陶醉一下
ID:88256 發(fā)表于 2022-10-13 23:11
lyonkon 發(fā)表于 2022-10-13 12:27
org 0000h
……
主程序載入RAM程序從片內(nèi)rom載人片外ram

我也是醉了,控制單片機(jī)EA引腳是這樣的嗎? “setb p3.0;單片機(jī)EA引腳”
ID:88256 發(fā)表于 2022-10-13 23:09
lyonkon 發(fā)表于 2022-10-13 08:21
你看到35樓的設(shè)計(jì),你就會(huì)改變想法了。你說的思路是將RAM芯片加電池當(dāng)ROM用。

錯(cuò)了,你還是沒有理解我的說法,“該電路板插在外擴(kuò)RAM上可讀寫”,已經(jīng)可以隨意編寫機(jī)器語言進(jìn)去了,然后控制引腳切換,就可以當(dāng)做程序存儲(chǔ)器運(yùn)行程序了
ID:401564 發(fā)表于 2022-10-13 13:09
lyonkon 發(fā)表于 2022-10-13 12:27
org 0000h
……
主程序載入RAM程序從片內(nèi)rom載人片外ram

我竟然無言以對(duì)
再去看了一下你以前的帖子,才發(fā)現(xiàn),你就是那個(gè)發(fā)明了三總線開發(fā)板的發(fā)明人
對(duì)不起,我錯(cuò)了,哪怕我上論壇只是打發(fā)時(shí)間,也不應(yīng)該把時(shí)間浪費(fèi)在這個(gè)帖子上
我只是一個(gè)執(zhí)著于把前輩經(jīng)驗(yàn)運(yùn)用到實(shí)際中的人,我沒什么上進(jìn)心,也沒有什么想要?jiǎng)?chuàng)新的思想
我只會(huì)運(yùn)用已經(jīng)存在的技術(shù)而已
ID:73992 發(fā)表于 2022-10-13 12:27
Y_G_G 發(fā)表于 2022-10-13 10:47
你運(yùn)行過了?如果你運(yùn)行了,我有硬件,你把你的代碼發(fā)上來,我去運(yùn)行看一下結(jié)果
順便問一下,MOV P0,#015H
...

org 0000h
……
主程序載入RAM程序從片內(nèi)rom載人片外ram
d1:
mov dph,#0000
mov dpl,#0000
movc a,@dptr
mov r0 ,#00h
movx @r0,a
Inc r0
Inc dptr
mov r1,#ffh//比如程序是128字節(jié)
djnz r1 d1
setb p3.0;單片機(jī)EA引腳
至此單片機(jī)跳入外部RAM執(zhí)行。
你在主程序當(dāng)中加一條
movx a,1fh
那么用鍵盤在1fh地址輸入你的數(shù)字。就可以了




ID:401564 發(fā)表于 2022-10-13 10:47
lyonkon 發(fā)表于 2022-10-13 08:46
35樓的設(shè)計(jì)已經(jīng)做到了,指令可以在RAM中執(zhí)行。也不影響RAM存儲(chǔ)數(shù)據(jù)。

你運(yùn)行過了?如果你運(yùn)行了,我有硬件,你把你的代碼發(fā)上來,我去運(yùn)行看一下結(jié)果
順便問一下,MOV P0,#015H
你要怎么輸入這個(gè)命令,從哪里輸入?
ID:384109 發(fā)表于 2022-10-13 10:29
樓主對(duì)51的RAM有一些概念的錯(cuò)誤,35樓實(shí)現(xiàn)的仍然是使用外部RAM做加載程序的存儲(chǔ)器,并不是使用51芯片內(nèi)部的RAM,是不同的概念
ID:73992 發(fā)表于 2022-10-13 09:00
angmall 發(fā)表于 2022-10-11 15:53
你可以試試這個(gè)
PAULMON 調(diào)試器


psen引腳我本來是放棄不用的,沒想到老哥用的這么好。普林斯頓存儲(chǔ)體系。
ID:73992 發(fā)表于 2022-10-13 08:46
Y_G_G 發(fā)表于 2022-10-11 11:50
跑什么虛擬機(jī)
這是樓主單片機(jī)基礎(chǔ)知識(shí)沒學(xué)好,想當(dāng)然的冒出一個(gè)想法
你說什么他都能找到一堆東西來反駁 ...

35樓的設(shè)計(jì)已經(jīng)做到了,指令可以在RAM中執(zhí)行。也不影響RAM存儲(chǔ)數(shù)據(jù)。
ID:73992 發(fā)表于 2022-10-13 08:37
angmall 發(fā)表于 2022-10-11 15:53
你可以試試這個(gè)
PAULMON 調(diào)試器


老哥時(shí)序玩的溜。∥业脑O(shè)計(jì)是將p2.7引腳和red引腳接一個(gè)與門到RAM oe端。讀寫數(shù)據(jù)的時(shí)候,p2.7為高電平(地址最高位)。執(zhí)行RAM中指令時(shí),p2.7為低電平。缺點(diǎn)是數(shù)據(jù)地址,與指令地址是兩套地址,容易記不住。我覺得你的設(shè)計(jì)更符合時(shí)序,用起來也省心。
ID:73992 發(fā)表于 2022-10-13 08:21
hhdsdy 發(fā)表于 2022-10-13 01:19
還以為樓主有了這個(gè)想法,就能理解我的說法,沒想到還是不懂。
不明白為什么會(huì)說缺乏通用性?6264外加小 ...

你看到35樓的設(shè)計(jì),你就會(huì)改變想法了。你說的思路是將RAM芯片加電池當(dāng)ROM用。
ID:88256 發(fā)表于 2022-10-13 01:39
lyonkon 發(fā)表于 2022-10-13 00:26
我的目的的確是這樣

以前的武漢尚吉電子曾經(jīng)出品過SCB-II-51或者說是SCB-2-51的單片單板機(jī),你或許要的就是這種。
我那時(shí)從電子報(bào)中縫廣告看到有學(xué)習(xí)單片機(jī)的書籍然后郵購(gòu),從此才對(duì)單片機(jī)感興趣并學(xué)習(xí)的,實(shí)際上那上下兩冊(cè)的書籍就是該單片單板機(jī)的說明書,但是解說的很詳細(xì),并附有詳細(xì)完整的程序,反正我那時(shí)就是靠著該書,沒有老師沒有同好交流,一個(gè)人自學(xué)單片機(jī)的,最后還組裝了一套該單片單板機(jī)。
ID:88256 發(fā)表于 2022-10-13 01:19
lyonkon 發(fā)表于 2022-10-9 23:07
外置RAM當(dāng)ROM用,應(yīng)該是可以做到。就是分享程序缺乏通用性。我考慮過用自身端口,模擬外置程序存儲(chǔ)器,但 ...

還以為樓主有了這個(gè)想法,就能理解我的說法,沒想到還是不懂。
不明白為什么會(huì)說缺乏通用性?6264外加小電池并稍作處理,做個(gè)小電路板,就能代替2764使用,存儲(chǔ)器的座子用鎖緊座代替,該電路板插在外擴(kuò)RAM上可讀寫,插在外擴(kuò)ROM上并將EA置零可運(yùn)行程序。
嫌麻煩的,用地址區(qū)分,比如4000H開始的地址分配給它,用雙刀雙擲開關(guān)進(jìn)行切換,一樣可以讀寫以及運(yùn)行程序,至于具體的,因?yàn)殚L(zhǎng)久沒接觸,倒是忘了,但是絕對(duì)可行。
ID:73992 發(fā)表于 2022-10-13 00:26
wwh2382 發(fā)表于 2022-10-11 15:33
我理解的是,樓主想拿單片機(jī)當(dāng)pc機(jī)用。坦率地說,你就死了這條心吧。計(jì)算機(jī)技術(shù)如今發(fā)展的已經(jīng)很成熟了,其 ...

我的目的的確是這樣
ID:155507 發(fā)表于 2022-10-11 15:53
你可以試試這個(gè)
PAULMON 調(diào)試器


PAULMON 使用 8051 中的內(nèi)置 UART 來與用戶溝通。通常,PC 計(jì)算機(jī)與終端程序、8051 匯編器一起使用


PAULMON 也旨在與 RAM 一起使用,并且 RAM 開頭的默認(rèn)位置是 2000(十六進(jìn)制),在 EPROM 之后,雖然是 RAM
可以在 2000 - FFFF 范圍內(nèi)的任何地方使用。到 RAM 的讀使能信號(hào)應(yīng)該是 RD 和 PSEN 信號(hào)的邏輯或,以便讀取
嘗試外部代碼存儲(chǔ)器或程序存儲(chǔ)器空格將從 RAM 中讀取。 (使用與門做這些信號(hào)的邏輯或,因?yàn)樗鼈?br /> 低電平有效。╋@然的寫使能 RAM 應(yīng)連接到 8051 的 WR 引腳。

以這種方式連接 RAM 將允許在 PAULMON 中下載命令來編寫你的程序進(jìn)入 RAM (寫入外部數(shù)據(jù)存儲(chǔ)器
空間)。然后你可以運(yùn)行你的程序,因?yàn)閺耐獠砍绦虼鎯?chǔ)空間讀取嘗試 將從 RAM 芯片中讀取。






PJRC.zip

3.4 MB, 下載次數(shù): 4

ID:748788 發(fā)表于 2022-10-11 15:33
我理解的是,樓主想拿單片機(jī)當(dāng)pc機(jī)用。坦率地說,你就死了這條心吧。計(jì)算機(jī)技術(shù)如今發(fā)展的已經(jīng)很成熟了,其表現(xiàn)之一就是不同的技術(shù)有不同的定位
ID:401564 發(fā)表于 2022-10-11 11:50
jjwangxu2008 發(fā)表于 2022-10-11 08:48
是不是 跑個(gè)虛擬機(jī),然后就能實(shí)現(xiàn) 運(yùn)行RAM指令了。 不知道這么理解對(duì)不對(duì)?

跑什么虛擬機(jī)
這是樓主單片機(jī)基礎(chǔ)知識(shí)沒學(xué)好,想當(dāng)然的冒出一個(gè)想法
你說什么他都能找到一堆東西來反駁你,說得有理有據(jù)的
指令跟數(shù)據(jù)都分清
STM32把程序放在RAM中運(yùn)行和他說的這個(gè),完全是兩回事
FPGA運(yùn)行方式也是把程序放到RAM中運(yùn)行的,但也跟他說的不是一回事
他就是想當(dāng)然的有一個(gè)想法,然后想當(dāng)然的覺得這個(gè)方法是可以
再然后就是在這個(gè)"他自己覺得可以的"前提下,問人家怎么做
ID:73992 發(fā)表于 2022-10-11 09:24
正在學(xué)習(xí)51 發(fā)表于 2022-10-11 00:59
新手剛?cè)腭v求教,我看樓主的意思是不從內(nèi)存取從別的地方取吧,反通常操作再問行不行得通吧。
本來 ...

當(dāng)鍵盤輸入一條指令,存入內(nèi)存。CPU要執(zhí)行這條指令,51單片機(jī)在外接RAM的時(shí)候可以做到。我們討論的是只用片內(nèi)資源如何達(dá)到這個(gè)目的。并不是明知不可為而為。那樣就失去了探索的意義了
ID:86450 發(fā)表于 2022-10-11 08:55
正在學(xué)習(xí)51 發(fā)表于 2022-10-11 00:59
新手剛?cè)腭v求教,我看樓主的意思是不從內(nèi)存取從別的地方取吧,反通常操作再問行不行得通吧。
本來 ...

現(xiàn)在 單片機(jī)  可以用C++ 編程了
ID:86450 發(fā)表于 2022-10-11 08:53
dalaoshi 發(fā)表于 2022-10-10 16:22
這是能夠?qū)崿F(xiàn)的,你先寫一個(gè)基本操作程序,里面包含很多基本要用到的功能,比如TIME,COM, PRINT, VOLT,  ...

我也想做這個(gè)東西。
ID:86450 發(fā)表于 2022-10-11 08:48
Y_G_G 發(fā)表于 2022-10-10 08:16
你只怕是對(duì)RAM有什么誤解吧
我不是計(jì)算機(jī)專業(yè)的,只能解讀51的RAM
51的RAM是易失的,掉電就沒了了,"任何R ...

是不是 跑個(gè)虛擬機(jī),然后就能實(shí)現(xiàn) 運(yùn)行RAM指令了。 不知道這么理解對(duì)不對(duì)?
ID:584814 發(fā)表于 2022-10-11 08:22
“在51單片機(jī)片內(nèi)取指令,無法從內(nèi)存中讀取,只能從程序存儲(chǔ)器中讀取。”
這個(gè)問題很好,但是看不懂
單片機(jī)指令不是編譯后一次寫入么 ?編好的程序如何放在內(nèi)存 ?而且還可以放在程序存儲(chǔ)器 ?
ID:1047240 發(fā)表于 2022-10-11 00:59
Y_G_G 發(fā)表于 2022-10-8 11:44
C我會(huì),匯編我也會(huì),精通算不上,至少算是已經(jīng)入門了
但為什么我看不懂樓主的問題

新手剛?cè)腭v求教,我看樓主的意思是不從內(nèi)存取從別的地方取吧,反通常操作再問行不行得通吧。
本來要學(xué)單片編程的我學(xué)了C++,歪了一陣風(fēng)中凌亂嘻嘻嘻....
今天才知道單片的編程不能硬套電腦編程,有些是不通用的。但是分清楚了就較簡(jiǎn)單了信心滿滿再補(bǔ)一波單片編程
ID:384109 發(fā)表于 2022-10-10 23:04
樓主沒明白24樓的意思,應(yīng)該是外掛一個(gè)RAM,用來存程序和執(zhí)行程序,只是把一般外接的ROM改成了RAM
ID:73992 發(fā)表于 2022-10-10 22:47
dalaoshi 發(fā)表于 2022-10-10 16:22
這是能夠?qū)崿F(xiàn)的,你先寫一個(gè)基本操作程序,里面包含很多基本要用到的功能,比如TIME,COM, PRINT, VOLT,  ...

外部程序要想執(zhí)行,先要把程序加載到ram。但是51 系統(tǒng)指令只在rom中,ram中的只被當(dāng)成數(shù)據(jù)。除非外部掛載普林斯頓體系存儲(chǔ)器。樓上說有執(zhí)行ram中指令的方法,我先看看官方手冊(cè)
ID:283954 發(fā)表于 2022-10-10 16:22
lyonkon 發(fā)表于 2022-10-10 11:35
我就是想實(shí)現(xiàn)這個(gè)功能,用鍵盤輸入程序,然后CPU執(zhí)行。

這是能夠?qū)崿F(xiàn)的,你先寫一個(gè)基本操作程序,里面包含很多基本要用到的功能,比如TIME,COM, PRINT, VOLT, SENT,LOAD,RUN,PLAY(用中文也可)等等,然后用一個(gè)主控程序等待輸入,并顯示在LCD上,等輸入回車鍵后開始檢查字串,如果是正確字串就開始執(zhí)行相應(yīng)的副程式,執(zhí)行完畢后有回到等待輸入程序,要載入的外部程序可以儲(chǔ)存在SD卡,用LOAD命令加載在RAM, 讓后跳到程序起始處執(zhí)行,這樣就把控制權(quán)交給加載的程序,程序執(zhí)行完畢后把控制權(quán)再交回給主控程序,這樣就做成了51的DOS,由于現(xiàn)代有了大容量非易失存儲(chǔ)器SD卡的加持,也許會(huì)有新的用途。
ID:384109 發(fā)表于 2022-10-10 15:43
這個(gè)方式現(xiàn)在好像沒什么意義了,這個(gè)需求就類似早期一些設(shè)備商提供基本的功能,然后客戶可以自己加載自己的功能,但現(xiàn)在基本都是一次性設(shè)計(jì)完全,這種功能沒什么用了
ID:401564 發(fā)表于 2022-10-10 14:08
lyonkon 發(fā)表于 2022-10-10 12:07
開機(jī)之前RAM中沒有程序,這個(gè)是不用擔(dān)心的。可以像x86那樣,開機(jī)將程序載人RAM,載完了之后,CPU跳轉(zhuǎn)到RA ...

"開機(jī)之前RAM中沒有程序,這個(gè)是不用擔(dān)心的?梢韵駒86那樣,開機(jī)將程序載人RAM,載完了之后,CPU跳轉(zhuǎn)到RAM執(zhí)行指令。這樣,不論是加載的程序還是鍵盤輸入的程序,都可以執(zhí)行"
非常好,反正我學(xué)了幾年的單片機(jī),什么都看不明白,果然,我還是技術(shù)不到家
ID:1047140 發(fā)表于 2022-10-10 13:35
51單片機(jī)暫時(shí)做不到,因?yàn)槭菣C(jī)制的原因,本身并不是ARM架構(gòu)的關(guān)系,這跟底層架構(gòu)是有關(guān)系的,建議學(xué)習(xí)下底層架構(gòu)知識(shí),就是那種純匯編代碼,了解PC指針,以及具體的寄存器,學(xué)習(xí)下就會(huì)明白
ID:384109 發(fā)表于 2022-10-10 12:42
感覺樓主還是有誤解了,看貼里對(duì)51試驗(yàn)箱的描述,應(yīng)該是外掛了一個(gè)比較大的RAM,這個(gè)RAM可以作為RAM和ROM來使用
ID:73992 發(fā)表于 2022-10-10 12:24
cnos 發(fā)表于 2022-10-10 09:00
這個(gè)不是說不可以,只是有點(diǎn)麻煩了。
你去找找上古時(shí)期的
MCS-51試驗(yàn)箱

apple 1 用的CPU與51CPU性能差不多,但是apple1不僅支持匯編,還支持b語言。我覺得51單片機(jī)是可以做到匯編語言輸入,并且執(zhí)行指令的,只是沒有人做,我是想做一個(gè)玩玩

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表