比方說,您有一個相當簡單的小型微控制器,沒有接口,沒有計算機,沒有調試器,編譯器或彙編器。您能否以彙編形式編寫代碼,將其(手動)轉換為機器代碼,然後使用電壓源為適當的引腳供電?
我知道您需要適當的I / O和內存才能真正做什麼,但是,如果您如此傾向於並有時間,您可以這樣做嗎?從歷史上看,我猜想當沒有計算機/編譯器/彙編器開始時是如何做到的?隨時將我鏈接到外部資源。謝謝! :)
比方說,您有一個相當簡單的小型微控制器,沒有接口,沒有計算機,沒有調試器,編譯器或彙編器。您能否以彙編形式編寫代碼,將其(手動)轉換為機器代碼,然後使用電壓源為適當的引腳供電?
我知道您需要適當的I / O和內存才能真正做什麼,但是,如果您如此傾向於並有時間,您可以這樣做嗎?從歷史上看,我猜想當沒有計算機/編譯器/彙編器開始時是如何做到的?隨時將我鏈接到外部資源。謝謝! :)
您能以彙編形式編寫代碼,(手動)將其轉換為機器代碼嗎,
是的!
代碼可以寫在“腦海中”
很久很久以前,這就是我開始使用(然後)微處理器的方式。
我和朋友將用彙編語言編寫代碼,將其手動編譯為機器代碼(您可以執行此操作經過一些練習後“通過檢查”),然後通過各種方式將其輸入處理器。在我們構建的一個系統上,我們將在二進制(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
...
最初,在可編程機器中,程序被手動打入紙帶或卡片中。後來他們用一台打字機打孔,甚至後來計算機仍可以打孔自己的紙帶。
從字面上看,它在那裡坐著。
每列是一條指令或數據位,由CPU的狀態機解釋以執行任務。
p>現在當然所有的都是閃存,是的,首先將數據存入那里通常需要一台計算機來完成。但這並不是嚴格意義上的100%正確。
畢竟,計算機和硬件程序員會做什麼,而是在正確的時間設置IO引腳的狀態?因此,如果您確實有足夠的自虐能力,則可以構建一個系統,該系統允許您以正確的方式將正確的指令發送到微控制器的編程引腳,以將一些指令安裝到閃存中以供執行。
也許
我記得在大學期間,我們有一個基於Z80的新型編程系統-一個像Z80的手提箱大小的單位,有些很小大量的RAM,一堆7段LED顯示器和一大排開關。通過使用開關將指令手動加載到RAM中進行編程。
您說“小型微控制器,沒有接口,沒有計算機,沒有調試器,編譯器或彙編器。”好吧,您可以不用計算機,調試器,編譯器或彙編器,但必須具有某種接口才能與微控制器連接才能加載程序。
首先,請忘記那麼,最簡單的方法就是用彙編語言編寫程序,但不要使用彙編器將其翻譯為機器代碼。而是查找編程手冊中的每條彙編指令,找到等效的十六進制編碼,然後寫下來。
您將必須分配自己的變量,以便可以在其中填寫適當的地址。指令的操作數部分。還忘了使用堆棧和堆的工作量。完成後,您將擁有一個可以直接加載到微控制器閃存中的機器程序-也不需要鏈接器。
由於幾乎所有微控制器上都沒有外部地址和數據總線(因為它們會佔用I / O端口和外圍設備所需的太多引腳),因此實際上所有微控制器都是通過這樣的特殊接口進行編程的:
通常,左側的“程序員”將連接到PC,該PC將下載由編譯器/鏈接器生成的機器文件。
但是,如果程序員具有鍵盤,如下面的鍵盤:
然後可以將一個手動生成的程序的十六進制代碼直接輸入到程序員中,並且無需使用編譯器,鏈接器或PC就可以對設備進行編程詢問。 (鍵盤也用於編輯十六進製文件,並生成校驗和。)
幾乎沒有多少程序員擁有像這樣的鍵盤。這可能不適合業餘愛好者,因為它可能要花費數千美元。
這個特殊的程序員在將零件放到板上之前對其進行編程;接口和插座可用於多個PIC,以及Atmel AVR等。
實際上,類似手動切換JTAG引腳的操作很容易出錯。要輸入任何大小的程序,都需要進行數千次切換。但從理論上講,這是有可能的。
如果允許您事先準備微控制器(或為其編寫引導ROM),則可以輕鬆實現早期大型機上使用的外部撥動開關之類的東西。如果允許外部邏輯,甚至可以使用十六進制小鍵盤來加快速度。
最後,儘管現在不那麼普遍了,但是您可以購買帶有自定義代碼的基於ROM的微控制器。您必須預先提供一些資金並保證一定的數量,但是我看到客戶這樣做是為了節省大量生產的費用。在這種情況下,根本不需要外部信號即可對微控制器進行編程。代碼將內置到芯片的物理佈局中。
當然,您也可以使用在外部存儲器接口之外運行代碼的微控制器,但這是在作弊。 :-)
絕對。實際上,我參加的第一門微處理器課程(大約87課)使用了Motorola 68000開發板。我們將在彙編中計算代碼,查找彙編的十六進制,然後在終端中鍵入該十六進制以對電路板進行編程。如果進行了編輯,則必須確保所輸入的代碼比要替換的代碼短,然後用NOP緩衝其餘代碼。如果coDE較長,則必須重新輸入所有內容!我們學會了添加大量的NOP。
絕對。一旦有了實際指令的二進制格式(對於指定好的指令集很容易做到),您所需要做的就是實現編程協議。
例如,使用諸如 AVR Tiny 4。第14節詳細介紹了編程接口,包括協議和物理層。這相對簡單,只需要幾個按鈕和上拉/下拉電阻即可發送/接收1或0。如果您有雄心壯志,請添加一些LED來讀取輸出。
最後一個剩下的問題是您是否可以足夠快地完成它,幸運的是,對於AVR Tiny 4(第16節),它在編程時沒有任何最低頻率。
*注意:根據數據表的規定。實際情況可能會有所不同...我懷疑有人嘗試過以mHz時鐘速度對其進行編程。
可以隨意地自動完成所需的任何過程。無論如何,這是大多數編程設備都要做的:使過程自動化。
無論通過什麼方式將程序輸入到uC,您都在與它“接口”,因為這就是接口的含義。甚至是您手動撥動的一堆開關也是一個“接口”。並以一種最酷的方式?”
我的答案是,將程序輸入為鋼琴卷。彈奏鋼琴的鋼琴卷“跟踪器欄”基本上為您提供了至少65位(取決於格式),您可以根據紙張上的穿孔獨立地打開和關閉這些位。其餘的工作是用大刀進行的。但是至少您的程序一旦運行,便(某種程度上)被永久存儲(與手動切換開關不同)。
不僅可以在沒有計算機的情況下對微控制器進行編程,而且今天您實際上可以購買專門設計為使用硬件撥動開關編程的計算機。該工具包稱為會員卡,它是1970年代COSMAC Elf計算機的再生產。 IEEE Spectrum雜誌上的最新文章中描述了該套件。也可以從PC編程最新版本的會員卡。
好的。怎麼樣了:如前所述,您可以在彙編器中編寫程序並自己查找操作碼。如何在計算機中獲取它:拿起舊的磁帶播放器,取下播放頭,但離開絞盤和壓紙輪。這將是您的交通工具。如果您有線對線播放器,則可以將播放頭保持在原位。
然後拿一條又長又窄的紙條,或者甚至更好的透明膠帶。在這裡編碼程序。您可以使用要編程的針腳使用盡可能多的軌道。在一條軌道上,您定期放置黑點;這是你的時鐘。在其他軌道上,您會根據數據和信號放置黑點或小條,並留空。您可以照亮整個物體,並用小型光電晶體管對其進行檢測(或者將一個LED照在膠帶上,並使用其他類似的LED來檢測光),並使用晶體管來驅動時鐘和信號線。磁帶播放器上需要佔用一些空間,這就是為什麼您可能需要卸下播放頭的原因。 。或者,您可以檢測反射光而不是透射光。或者,您可以在深色膠帶或紙膠帶上打孔,而不是在透明膠帶上打上黑色標記。隨你。磁帶播放器以恆定速度驅動磁帶,因此您無需計算機即可輸入時鐘信號。
是的。主要問題可能是與編程界面進行交互。如果您有簡單的地址和數據總線,則事情會容易一些。您是否見過一些真正早期的計算機?程序一次通過一條指令輸入到RAM中,並且前面帶有開關。
數字設備的40年前 PDP-8微型計算機沒有自動啟動功能。程序通常是從打孔的紙帶加載的,但是加載紙帶的加載器必須在前面板開關上手動輸入。
在Digital和PDP-8在客戶的站點(例如OEM曾經將它們用作當今的嵌入式控制器)的情況下,用戶記住引導加載程序並相互競爭以最快速度將引導加載程序輸入到計算機中並不少見。這些機器使用了磁芯記憶(手在世界上遙遠的地方,由纖細的手指用針頭和細髮絲絞成的手)。
由於磁存儲器的內容是非易失性的,因此引導加載程序在掉電後仍可倖存,並且僅在初始組裝後才需要手動輸入,因此該加載程序被程序錯誤或使用加載程序空間所需的程序清除了。
答案是是,您可以在沒有計算機,調試器等的情況下對微控制器進行編程。您需要提供的各種電壓,數據,時鐘和編程順序由uC製造商(絕非易事)。