題:
您可以在沒有計算機的情況下對微控制器進行編程嗎?
idle_engineer
2015-04-09 04:32:41 UTC
view on stackexchange narkive permalink

比方說,您有一個相當簡單的小型微控制器,沒有接口,沒有計算機,沒有調試器,編譯器或彙編器。您能否以彙編形式編寫代碼,將其(手動)轉換為機器代碼,然後使用電壓源為適當的引腳供電?

我知道您需要適當的I / O和內存才能真正做什麼,但是,如果您如此傾向於並有時間,您可以這樣做嗎?從歷史上看,我猜想當沒有計算機/編譯器/彙編器開始時是如何做到的?隨時將我鏈接到外部資源。謝謝! :)

看看Altair1。前面板開關和手動機器編程是使用它的“唯一”方式。
@pj50他詢問了一個微控制器,而不是一個微處理器。單片機將其代碼運行在我們的閃存中,如果沒有某種接口,該代碼將無法訪問。
您需要多少個編程單位?許多製造商會提供預先用您的代碼編程的微控制器。但是,如果您只需要一個完整的捲軸,那麼這是不切實際的。
早在70年代,您就已經建立了一個撥動開關和指示燈面板,以便您可以進入程序。我從來沒有使用過早期的微控制器之一,而是使用過幾種不同的微處理器,默認情況下就是這樣。早期的微控制器和微處理器之間除了I / O功能以及程序存儲器配置的一些細節之外,沒有其他根本區別。
我將其留為評論,因為找不到該故事的來源。我記得有段時間回想起一個小孩的故事,這個小孩純粹是基於對數字邏輯的理解,用晶體管設計和製造了自己的計算機(實際上只是CPU),以參加一次科學競賽。他當時買不起電腦,只能通過撥動開關對他的創作進行編程(我想我記得那件事只是一個按鈕)。一位法官印象深刻,以至於他給孩子買了台電腦。
[第一個微處理器是如何編程的]的可能副本?
@tcrosley:微處理器和微控制器之間的區別與外圍集成有關,而不是與片內閃存有關。即使包含片內閃存的微控制器也可以執行未存儲在閃存中的代碼(您自然需要更大的封裝變體,這些變體具有足夠的引腳用於外部存儲器總線)。有些甚至可以從外部存儲器啟動。當然,您有一種用於編程片內閃存的機制,該機制由引腳(JTAG或SWD或串行或SPI)控制
我正在認真考慮使用一些防彈開關和我的ATtiny24A之一來做到這一點...
十二 答案:
Russell McMahon
2015-04-09 06:39:28 UTC
view on stackexchange narkive permalink

您能以彙編形式編寫代碼,(手動)將其轉換為機器代碼嗎,

是的!
代碼可以寫在“腦海中”
很久很久以前,這就是我開始使用(然後)微處理器的方式。
我和朋友將用彙編語言編寫代碼,將其手動編譯為機器代碼(您可以執行此操作經過一些練習後“通過檢查”),然後通過各種方式將其輸入處理器。在我們構建的一個系統上,我們將在二進制(on-off)開關上設置地址,或者使用處理器的自動遞增功能,在二進制開關上輸入8個數據位,然後按“時鐘”開關將數據輸入內存。

使用串行SPI編程,在現代微控制器上只需更少的開關就可以實現等效功能-參見下文。

...,然後使用電壓源向適當的引腳供電?

是!
但這會令人難以置信做起來很慢!
許多現代微控制器都允許使用“ SPI”接口進行編程。
這通常由輸入和輸出數據線以及“時鐘”線和復位線組成。

許多處理器允許SPI時鐘和數據為“靜態”,這意味著在位之間設置數據所需的時間沒有限制。您可以使用由手動操作的開關驅動的數據線和時鐘線對此類處理器進行編程。時鐘線需要“無反彈”-您需要能夠在每次操作的一次轉換中將其設置為高電平或低電平-因此最小接口可能需要包括施密特觸發的門。您可以“擺脫” RC延遲和按鈕開關,但施密特觸發的輸入更安全。數據線不需要跳動,因為它的狀態只能在時鐘沿讀取。

某些接口是交互式的-數據在編程期間由處理器輸出(例如,數據輸出= MISO = AVR處理器上的主機輸入串行輸出)。要閱讀此內容,您需要添加一個LED和一個電阻(如果驅動能力真的很低,則可能需要添加一個緩衝器或晶體管)。


MC6800:

來自半衰落內存(將近40年!)

LDI A,$ 7F ...... 86 7F ...... 1000 0110 0111 1111
STA,$ 1234 ...... B7 12 34 ... 1011 0111 0001 0010 0011 0100
LDI X,$ 2734 ... CE 27 34 ... 1100 1110 0010 0111 0011 0100
...

+1代表靜態設計,使時鐘一直傳到DC。
這帶回了回憶。我實際上是在學校裡學會了使用按鈕輸入Z80代碼的。那是在1990年左右。我的老師堅持認為,用辛苦的方法學習編程很有價值。25年後,我不得不同意。
@NilsPipenbrinck現在我正在寫C代碼,並應用我最初從Fortran中學到的課程:-) !!!-然後將其與嵌入式系統和彙編語言一起磨練。這些課程通過對變量和端口訪問應用思維定型來減少出錯的機會,否則它們可能會做一些允許但不希望或有用的事情。裝配工是終極鋒利的武器-無需護手的雙頭劍。之後,“高級”語言似乎不那麼尖銳:-)。Z80按鈕輸入對您的學習體驗有類似的作用;-)。
@Erbureth謝謝:-)。是的,1111年的ffff明顯是腦衰弱。...只是“您明白了”,但完成一行不會有任何傷害。
是的,我知道了,但是當我想到的時候... :)
Majenko
2015-04-09 04:42:19 UTC
view on stackexchange narkive permalink

最初,在可編程機器中,程序被手動打入紙帶或卡片中。後來他們用一台打字機打孔,甚至後來計算機仍可以打孔自己的紙帶。

從字面上看,它在那裡坐著。

enter image description here

每列是一條指令或數據位,由CPU的狀態機解釋以執行任務。

p>

現在當然所有的都是閃存,是的,首先將數據存入那里通常需要一台計算機來完成。但這並不是嚴格意義上的100%正確。

畢竟,計算機和硬件程序員會做什麼,而是在正確的時間設置IO引腳的狀態?因此,如果您確實有足夠的自虐能力,則可以構建一個系統,該系統允許您以正確的方式將正確的指令發送到微控制器的編程引腳,以將一些指令安裝到閃存中以供執行。

也許

我記得在大學期間,我們有一個基於Z80的新型編程系統-一個像Z80的手提箱大小的單位,有些很小大量的RAM,一堆7段LED顯示器和一大排開關。通過使用開關將指令手動加載到RAM中進行編程。

Z80不是有效的示例。他問的是微控制器,而不是微處理器。單片機將其代碼運行在我們的閃存中,如果沒有某種接口,該代碼將無法訪問。至少您在回答的其他地方確實提到了Flash和編程接口。
-1
雖然我不知道有任何機器可以這樣做,但不難在讀卡器上增加一些電路,以便用存儲在卡序列中的代碼對微控制器進行編程。但是,紙帶可能更實用。
@supercat當然可以,是的,同樣的想法也在我腦海中浮現-我只是想知道要存儲640x480 jpeg圖像需要多少打孔卡...;)
我過去常常在這些地方手動打孔。這僅在極端情況下才可行(晚上10點,學期報告明天到期,一個大型機離開,當天的打孔室小姐離開)。實際上,從前面板(幾年後)對同一大型機進行編程實際上要快得多。
有趣的事實:一些早期的計算機將電話交換設備重新用於引導,因此(如果您確實需要)您可以“撥號”您的程序,而無需使用讀卡器。
@OrangeDog Funner的事實:第一台計算機完全由電話交換設備製成,例如Colossus。現在是野獸。也很吵和它抽出的熱量;)
@Majenko我已經看到了重建。但是它們不是von-Neumann體系結構,因此與問題無關。並且只有單個的閥門和繼電器,而不是整個撥號機構。
-1
@Majenko-我已經看到了巴貝奇機器的重建,它絕對不是由電話設備製成的。不過絕對嘈雜。
tcrosley
2015-04-09 05:39:05 UTC
view on stackexchange narkive permalink

您說“小型微控制器,沒有接口,沒有計算機,沒有調試器,編譯器或彙編器。”好吧,您可以不用計算機,調試器,編譯器或彙編器,但必須具有某種接口才能與微控制器連接才能加載程序。

首先,請忘記那麼,最簡單的方法就是用彙編語言編寫程序,但不要使用彙編器將其翻譯為機器代碼。而是查找編程手冊中的每條彙編指令,找到等效的十六進制編碼,然後寫下來。

您將必須分配自己的變量,以便可以在其中填寫適當的地址。指令的操作數部分。還忘了使用堆棧和堆的工作量。完成後,您將擁有一個可以直接加載到微控制器閃存中的機器程序-也不需要鏈接器。

由於幾乎所有微控制器上都沒有外部地址和數據總線(因為它們會佔用I / O端口和外圍設備所需的太多引腳),因此實際上所有微控制器都是通過這樣的特殊接口進行編程的:

enter image description here

通常,左側的“程序員”將連接到PC,該PC將下載由編譯器/鏈接器生成的機器文件。

但是,如果程序員具有鍵盤,如下面的鍵盤:

enter image description here

然後可以將一個手動生成的程序的十六進制代碼直接輸入到程序員中,並且無需使用編譯器,鏈接器或PC就可以對設備進行編程詢問。 (鍵盤也用於編輯十六進製文件,並生成校驗和。)

幾乎沒有多少程序員擁有像這樣的鍵盤。這可能不適合業餘愛好者,因為它可能要花費數千美元。

這個特殊的程序員在將零件放到板上之前對其進行編程;接口和插座可用於多個PIC,以及Atmel AVR等。

您已經對其他各種答案的無效性發表了評論,但可以說這個答案的有效性不如您所評論的大多數答案有效。他說:“……沒有接口,沒有計算機……”。您的解決方案至少是“一台計算機”。“無接口”的含義是沒有意義的。但是,在SPI接口上使用一些去抖動的開關,可以說您有一個解決方案。
@RussellMcMahon誰說程序員中有電腦?他們中的許多人僅使用FPGA(可以用分立邏輯代替)。除非具有自舉程序,否則如何通過SPI接口對微控制器進行編程?如果是這樣,您如何編程引導加載程序?
許多(可能是大多數)微控制器上基本沒有引導加載程序的標準低壓串行編程接口在基本串行接口中使用了幾行。如果存在交互作用,則MOSI MCLK(Vdd接地複位)將達到最小MISO。3個開關(僅其中之一)不需要彈跳)和一個用於MISO的LED和“您不在”。非常非常非常緩慢。如果FPGA不被視為“計算機”,那麼實現許多基於處理器的系統將沒有問題。我懷疑“沒有組合邏輯”會符合他的要求。
我不得不說,煙花是在使用電子設備時使用的錯誤背景:)
Adam Haun
2015-04-09 07:14:45 UTC
view on stackexchange narkive permalink

實際上,類似手動切換JTAG引腳的操作很容易出錯。要輸入任何大小的程序,都需要進行數千次切換。但從理論上講,這是有可能的。

如果允許您事先準備微控制器(或為其編寫引導ROM),則可以輕鬆實現早期大型機上使用的外部撥動開關之類的東西。如果允許外部邏輯,甚至可以使用十六進制小鍵盤來加快速度。

最後,儘管現在不那麼普遍了,但是您可以購買帶有自定義代碼的基於ROM的微控制器。您必須預先提供一些資金並保證一定的數量,但是我看到客戶這樣做是為了節省大量生產的費用。在這種情況下,根本不需要外部信號即可對微控制器進行編程。代碼將內置到芯片的物理佈局中。

當然,您也可以使用在外部存儲器接口之外運行代碼的微控制器,但這是在作弊。 :-)

實際上,我在1976/77年建立了Imsai 8800“克隆”,並會使用撥動開關按常規對它進行二進制編程。我的引導加載序列大約為40或60多個字節(這是一輩子以前!),該序列會從我的ASR-33電傳打字機讀取一張紙帶並將其帶入鍵盤監視器。 在電傳打字機工作之前,我將嚴格以二進制格式對8085(我的“克隆”和Imsai之間的差異之一)進行編程。但這是並行的,有一排開關。正如Adam所說,我已經使用電報密鑰進行串行編碼,而且它確實很容易出錯。
Scott Seidman
2015-04-09 05:03:01 UTC
view on stackexchange narkive permalink

絕對。實際上,我參加的第一門微處理器課程(大約87課)使用了Motorola 68000開發板。我們將在彙編中計算代碼,查找彙編的十六進制,然後在終端中鍵入該十六進制以對電路板進行編程。如果進行了編輯,則必須確保所輸入的代碼比要替換的代碼短,然後用NOP緩衝其餘代碼。如果coDE較長,則必須重新輸入所有內容!我們學會了添加大量的NOP。

68000不是微控制器。他問的是微控制器,而不是微處理器。單片機將其代碼運行在我們的閃存中,如果沒有某種接口,該代碼將無法訪問。
@tcrosley並非完全正確。有些微控制器需要外部ROM,因為它們自己沒有ROM或閃存。使它們成為微控制器的原因不是內置於RAM或ROM中,而是內置於外圍設備(IO端口,UART等)中。
但是很少-由於您剛剛提到的I / O外設,很少有外部地址和數據總線,因為它們需要兩個許多引腳。
helloworld922
2015-04-09 05:29:51 UTC
view on stackexchange narkive permalink

絕對。一旦有了實際指令的二進制格式(對於指定好的指令集很容易做到),您所需要做的就是實現編程協議。

例如,使用諸如 AVR Tiny 4。第14節詳細介紹了編程接口,包括協議和物理層。這相對簡單,只需要幾個按鈕和上拉/下拉電阻即可發送/接收1或0。如果您有雄心壯志,請添加一些LED來讀取輸出。

最後一個剩下的問題是您是否可以足夠快地完成它,幸運的是,對於AVR Tiny 4(第16節),它在編程時沒有任何最低頻率。

*注意:根據數據表的規定。實際情況可能會有所不同...我懷疑有人嘗試過以mHz時鐘速度對其進行編程。

可以隨意地自動完成所需的任何過程。無論如何,這是大多數編程設備都要做的:使過程自動化。

Atsby
2015-04-09 14:21:52 UTC
view on stackexchange narkive permalink

無論通過什麼方式將程序輸入到uC,您都在與它“接口”,因為這就是接口的含義。甚至是您手動撥動的一堆開關也是一個“接口”。並以一種最酷的方式?”

我的答案是,將程序輸入為鋼琴卷。彈奏鋼琴的鋼琴卷“跟踪器欄”基本上為您提供了至少65位(取決於格式),您可以根據紙張上的穿孔獨立地打開和關閉這些位。其餘的工作是用大刀進行的。但是至少您的程序一旦運行,便(某種程度上)被永久存儲(與手動切換開關不同)。

Craig Finch
2015-04-11 01:50:04 UTC
view on stackexchange narkive permalink

不僅可以在沒有計算機的情況下對微控制器進行編程,而且今天您實際上可以購買專門設計為使用硬件撥動開關編程的計算機。該工具包稱為會員卡,它是1970年代COSMAC Elf計算機的再生產。 IEEE Spectrum雜誌上的最新文章中描述了該套件。也可以從PC編程最新版本的會員卡。

Angus McG
2015-04-11 13:24:07 UTC
view on stackexchange narkive permalink

好的。怎麼樣了:如前所述,您可以在彙編器中編寫程序並自己查找操作碼。如何在計算機中獲取它:拿起舊的磁帶播放器,取下播放頭,但離開絞盤和壓紙輪。這將是您的交通工具。如果您有線對線播放器,則可以將播放頭保持在原位。

然後拿一條又長又窄的紙條,或者甚至更好的透明膠帶。在這裡編碼程序。您可以使用要編程的針腳使用盡可能多的軌道。在一條軌道上,您定期放置黑點;這是你的時鐘。在其他軌道上,您會根據數據和信號放置黑點或小條,並留空。您可以照亮整個物體,並用小型光電晶體管對其進行檢測(或者將一個LED照在膠帶上,並使用其他類似的LED來檢測光),並使用晶體管來驅動時鐘和信號線。磁帶播放器上需要佔用一些空間,這就是為什麼您可能需要卸下播放頭的原因。 。或者,您可以檢測反射光而不是透射光。或者,您可以在深色膠帶或紙膠帶上打孔,而不是在透明膠帶上打上黑色標記。隨你。磁帶播放器以恆定速度驅動磁帶,因此您無需計算機即可輸入時鐘信號。

alex.forencich
2015-04-09 04:42:52 UTC
view on stackexchange narkive permalink

是的。主要問題可能是與編程界面進行交互。如果您有簡單的地址和數據總線,則事情會容易一些。您是否見過一些真正早期的計算機?程序一次通過一條指令輸入到RAM中,並且前面帶有開關。

他問的是微控制器,而不是微處理器。單片機將其代碼運行在我們的閃存中,如果沒有某種接口,該閃存將無法訪問。
@tcrosley-早期的uC沒有閃存。他們有用於程序存儲的RAM或ROM。
@HotLicks正確。除了少數例外,這些都是微處理器,而不是微控制器。那是我的意思,不是程序存儲區是閃存,ROM,PROM,EPROM還是EEPROM。關鍵是程序存儲區是否在芯片上(微控制器)或在芯片上(微處理器)。甚至1977年推出的英特爾第一個微控制器8048都有內部ROM。
@Tcrosley你是誰?對於通常有用且令人反感的tcrosley,您做了什麼?:-) |他的第一個觀察結果是您可以與編程界面進行交互-這通常但並不總是有效的。“ IF”重新地址和數據總線是IF。它適用於某些大型邊界混合微控制器,但他最初的IF足夠好(儘管很困難也很慢)。
@RussellMcMahon我的問題是,當您從前面板手動鍵入數據時,每個人似乎都在談論70年代和80年代的微處理器。我非常了解那個時代-我曾經擁有一台PDP-8來玩。但是OP並沒有詢問微處理器-他詢問了微控制器。就這樣。我不會再回應任何評論。似乎沒有人知道我要說的話。完了,走吧。
@tcrosley-是的。我了解並理解您的觀點,在許多情況下這是完全正確的。有些人解決了這個問題,但正如您所說,大多數都沒有解決。我相信我的回答是。MOSI / MISO和時鐘(或其他名稱)接口在可能的微控制器上很常見,使用它的能力是微控制器不可或缺的一部分。無論是在硬件中還是無法訪問的永久引導程序。
@tcrosley-早期的微控制器都必須具有某種原型支持-要么是帶有某種機載程序RAM的原型版本,要么是使用外部RAM進行程序存儲的方式。我沒有特別記得任何細節,但是如果沒有這樣的能力,您不可能在那個時間範圍內出售uC。輸入可能是通過開關,或者是(通過供應商提供的ROM中的供應商提供的引導程序)串行接口(通過電傳打字機讀取紙帶)。
@HotLicks我將再回答一次,因為沒有人在聽我-我同意您對開發系統等的看法,但是Z80、6800、68000的人僅作為示例使用**不是微控制器**。他們是微處理器。* OP正在詢問微控制器*。幾乎在1970年代唯一的微控制器是8048。現在它已經面世了-數以萬計的微控制器類型,是微處理器的十分之一。
試圖在微處理器和微控制器之間保持硬性區分是徒勞的,而不是有用的,特別是當它在對每個答复的評論中。
@tcrosley-我記得在1980年前左右宣布了六種不同的uC。大多數都相當有限且用途特殊(我不確定它們是否成功),因此您再也看不到它們了。
@HotLicks: PIC架構非常老。16C54上“ OPTION”指令控制的許多功能是其mask-ROM的前身產品的出廠設置選項。
JRobert
2015-04-10 21:21:27 UTC
view on stackexchange narkive permalink

數字設備的40年前 PDP-8微型計算機沒有自動啟動功能。程序通常是從打孔的紙帶加載的,但是加載紙帶的加載器必須在前面板開關上手動輸入。

enter image description here

在Digital和PDP-8在客戶的站點(例如OEM曾經將它們用作當今的嵌入式控制器)的情況下,用戶記住引導加載程序並相互競爭以最快速度將引導加載程序輸入到計算機中並不少見。這些機器使用了磁芯記憶(手在世界上遙遠的地方,由纖細的手指用針頭和細髮絲絞成的手)。

enter image description here

由於磁存儲器的內容是非易失性的,因此引導加載程序在掉電後仍可倖存,並且僅在初始組裝後才需要手動輸入,因此該加載程序被程序錯誤或使用加載程序空間所需的程序清除了。

許多年前,當我們不得不艱難地在上下雪地上赤腳上學時,我們高中的PDP-8必須通過您所描述的前面板中的引導加載程序進行引導。沒有一個老師對計算機了解太多,包括負責它的計算機。他認為上升為0,下降為1,因此永遠無法切換到引導加載程序。當我上英語課時,我會安排計算機崩潰,因此我將被要求重啟計算機。我從沒告訴過他關於誤解的看法-對我來說太有用了。
我喜歡PDP-8。我只能使用一台電腦大約三年了-因此就像在發明術語PC之前很早就擁有一台個人計算機一樣。令人驚奇的是4K內存可以容納的內容。當然可以通過很多紙帶(沒有DECtape)和電傳紙。
Guill
2015-04-10 03:21:59 UTC
view on stackexchange narkive permalink

答案是,您可以在沒有計算機,調試器等的情況下對微控制器進行編程。您需要提供的各種電壓,數據,時鐘和編程順序由uC製造商(絕非易事)。



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...