久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10082|回復: 45
收起左側

51單片機的匯編其實是最容易學會的一種語言

  [復制鏈接]
ID:266429 發表于 2023-3-19 21:19 | 顯示全部樓層 |閱讀模式
        比如說,你在P2端口接了8個燈,然后你想讓這8個燈間隔亮滅,要做到這件事,對于標準的51單片機來說,就是把01010101或10101010送入P2端口就行了,匯編很簡單,一個命令,直接送:
ORG 0000H
START:
        MOV P2,#10101010B
END
        編譯、下載、運行,完事。
        第一條ORG 0000H,并不是單片機要執行的內容,是告訴編譯器,以下程序編譯成二進制代碼后,存在程序存儲器中的位置,是從0000H這個地址開始的。
        第二條START,這個也不是單片機要執行的內容,而是告訴編譯器,下面的內容是正式程序的開始。
        第三條MOV P2,#10101010B,這個就是單片機要執行的動作了,這個動作,就是把位于此條語句最后面的10101010B這個字節,送入P2這個單元之中。語句中的#,表示這個數據不是地址值,而是一個要直接送到接收單元的數值。
        第四條END,告訴編譯器,后面沒有程序了,編譯任務到上面那句就結束了。
        其實第三條的寫法,有兩個問題,第一個問題,單片機是不認識什么P1、P2的,它只知道數據,因為在單片機內,不管是存儲數據還是處理數或者是進行功能設置的所有的單元,都只是用數據編制了地址,你得給它數據地址,它才能去找這個單元,所謂的P2只是我們編程人給這個端口取的一個好記的俗名,它的實際地址,我們可以查表,知道是0A0H。這里我們用了P2而卻通過了程序,原因在于我們所用的編譯器之中,事先已經把P2這個俗名,與0A0H給聯系起來了。如果你的編譯器里沒有給聯系起來,那么這條語句可以這樣寫:MOV 0A0H,#10101010B,當然,一般我們會在程序前面給它起一個好記的名字,也就是定義;第二個問題,單片機也不認識什么MOV,它還是只認識數據,單片機中的所有命令,都是以數據的形式來表達的,通過查表,我們知道這個命令的值是75H,之所以寫成MOV也以通過程序,也是因為編譯器把這條語句整個看完之后,將其與75H給聯系起來了,為什么說編譯器要看完整條語句,因為其中的#會影響到編譯結果。
        于是,整個程序在編譯之后,就只有三個字節:75、A0、AA,這個可以在STC下載器中觀察到。所以,如果你想直接用數據編程而不用MOV什么的,這第三條也可以這樣寫:DB  75H,0A0H,0AAH(就是10101010,不需要#),這里的DB也不是單片機要執行的工作,而是告訴編譯器:這個后面有一些數據,這些數據嘛,你不用翻譯了,直接照抄就是了。
        再解釋一下這條指令中的75H,這條語句表達了一個單片機要執行的動作,而75H則是表達這個動作的全部具體內容(75H稱作這條語句或者命令的操作碼),它的具體動作內容,就是把存儲在它本身位置之后第二個單元中的數據,作為直接數據而不是地址,送入一個片內數據存儲單元之中,這個接收單元的地址值,就存在緊隨操作碼單元之后的的程序存儲器單元之中。75H還有一個含意,就是表明在其之后的第三個單元之中存放的是下一條操作碼。
        為什么說51匯編很簡單,因為它的設計就是按人做事的一套方法程序來的,我們之所以覺得學起來難,是因為一是現有的教材沒按這個思路來;二是匯編這個編程工具估計是個機械男做的,不太合我們的習慣;三是現有中文教材中一些名詞起得,太不接地氣,比如說所謂的數據總線這個名詞,很不符合中文的表達方式,其實它就是單片機內各單元之間傳送數據包括指令的公用通道,大家都可以用,為什么稱為公用通道,因為有些單元之間是有私用通道的,目的是為了快速運行,所以,你覺得這個名詞該如何取才最容易一看就懂而又簡潔?還有就是特殊功能寄存器這個名詞,也讓人看不明白,其實在51機教材中它大致包含三個部,一個部分就是端口控制單元,一個部分就是單片機功能設置單元,還有一個部分就是運行狀況標志單元。
        單片機的工作,基本就是操作各個存儲和處理數據的單元,以及為調整單片機的功能對功能設置單元進行設置、對標志單元進行處理等等。要操作某個單元,首先就是要找到其地址;對于不同單元之間的數據傳輸,則在找到其地址之后,就是查單片機的設計手冊,看其對這兩個單元之間的傳輸是如何設計的,要做到這個,一需要知道存儲器的物理種類,51機有程序存儲器、片內數據據存儲器、片外數據存儲器三種物理區分。二是要知道所有存儲器的地址編制規則,51單片機中,程序存儲器自己單獨一套,地址編號從0開始,最大65535,最多65536個單元;片內數據存儲器有點意思,也是自己一套,從0開始,最大255,可它最多可以有256+128個單元;片外數據存儲器也是自己一套,從0開始,16位地址也是大65535,最多65536個單元。三是要知道該單片機所設計的單元的地址表達方式,這個說起來比較長,具體可以結合幾種尋址方式來理解,51機可以在操作碼后面的數據(操作數)中指出,但必須要在操作碼中指出后面的操作數指的是什么,象我們上面所舉例子,操作碼就明確指出了其后第一個操作數是接收數據的單元的地址,第二個操作數是要直接傳給接收單元的數據,也就是說被傳輸的數據的地址在操作碼所在程序存儲器單元之后的第二個單元之中。
        這里說說片內數據存儲器的怪,其緣于其編址的方式雖然是從0到255,但128以上高128個單元卻分為了兩個物理存儲部分,這兩部分地址編號是一樣的從128到255,但以不同的尋址方式來區分,教材所稱的特殊功能寄存器部分只能采用直接的尋址方式,而另一部分則只能用間接尋址方式來操作,這部分完全交給用戶用作在運行過程中存儲數據,也所以,51機中用戶可以操作用來存儲數據的片內數據存儲單元是256個。
        另外說一句,不同的單片機有不同的設計方式,比如說對于STM32,對于其單元的編址,不管什么存儲器種類,它是統一編址的,全部在0到4G這個范圍內。
PS1:說句有爭議的話,從匯編入門51機包括其原理很容易,初中文化就可以了,可惜的是沒有合適的教材。
PS2:只取不予是不對的,于是特懶的我,寫了這點東西,算是對本壇的回報,嗯,花費三個多小時。
PS3:提一個觀點,單片機就是個電子電路,它不認識什么數值數據,也就是并不認識什么0什么1,它只是人類利用了電子電路的電平高與低這個特征來設計的一個功能性電路,所以,它只知道電位高低。由此,提一個建議,在對“特殊功能寄存器”進行操作時,為了便于理解,可以不用什么十進制十六進制,而是直接用二進制,好理解好修改。
      不正確不恰當的地方,敬請指正。

評分

參與人數 3黑幣 +70 收起 理由
STC莊偉 + 5 贊一個!
ldc2000 + 15 很給力!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:163285 發表于 2023-3-19 22:15 | 顯示全部樓層
通俗易懂,繼續加油!
回復

使用道具 舉報

ID:401564 發表于 2023-3-19 23:05 | 顯示全部樓層
在我沒用C語言之前,我也覺得匯編有種種的好
在我用了C之后,我就知道為什么,絕大多數的公司對匯編是沒有要求的,會不會都不重要
就算是有的時候.匯編能做一些C做不了的事,比如精確到一個時鐘的精度,比如在只有幾百B的單片機上寫出一個能批量生產的程序
但我還是可以告訴你: C可以完全取代匯編,會不會匯編,都不會影響一個人在單片機領域的水平,不會匯編的人大把的,人家一樣能寫出好程序
但你不會C,那你在單片機領域就只能停留在上古時期的水平
回復

使用道具 舉報

ID:149799 發表于 2023-3-20 07:10 | 顯示全部樓層
樓主講到單片機的內核了,通俗易懂,謝謝分享知識,繼續加油。
回復

使用道具 舉報

ID:266429 發表于 2023-3-20 08:21 | 顯示全部樓層
     不管你是用哪種單片機,編程的主力仍然是C,但做單片機應用設計的人,不懂其原理的人與懂其原理的人,水平能力自然不可同日而語。本人當初也是從C開始,但用著用著,就有了很多不明白,不明白為什么要這樣做,覺得用C就是隔靴搔癢,于是就去試著理解單片機芯片的構成與原理,知道了其構成與原理,自然也就不愿意用C了,因為用匯編很直接,閉著眼睛就能做出程序,當然,這樣的程序都不大,程序如果大了,匯編就顯得麻煩了,它的麻煩主要的還是在于人的腦力不夠用。
      競爭的時代,想要自己的水平超過別人,想要自己的水平達到一個很高的地步,芯片級原理的學習是一條很有效的通路,而一旦你明白了其原理,匯編不過是水到渠成的事。
回復

使用道具 舉報

ID:266429 發表于 2023-3-20 08:23 | 顯示全部樓層
在C里面,指針是個很騷的東西,如果你只會C,想理解透徹這個東西有點難,但如果你懂了芯片級原理,則有助于你理解及應用這個東西。
回復

使用道具 舉報

ID:266429 發表于 2023-3-20 08:26 | 顯示全部樓層
光說不練 發表于 2023-3-19 22:15
通俗易懂,繼續加油!

謝謝夸獎,我的本旨,就是想用通俗易懂的語言和比喻來描述單片機。如果大家認為我寫的東西有不清楚和不容易看懂的地方,希望大家指出。
回復

使用道具 舉報

ID:266429 發表于 2023-3-20 08:56 | 顯示全部樓層
      說起51機的原理,其實是很簡單的東西,它只不過是一種思路,是對我們做事習慣在提煉之后的應用,初中生就能夠理解。但為什么普遍認為這個很難,那是因為教材的原因,我手上光紙質書就有九本,但對原理的講解,都只是告訴我們是這樣的,卻從沒有一本書是講解為什么這樣的,可以這樣說,這些書,目的只是想教大家編程,而沒有培養芯片設計人員的意識。
      比如說有關計算機認不認識數字的問題,都是直接說它只認識0和1,但我們要知道,它不過是一個電子電路,它只知道電壓電流電阻開關之類的,根本不知道什么0和1。電路的電壓從0到電源電壓值有無窮的狀態值,我們只抽象地取了一個高電位和一個低電位兩種狀態,以此兩種狀態來建立一個二進制類模型,依據數學公式來設計出相應的運行電路,讓其運行出與數學計算結果具有唯一對應電位狀態的電路體系。
      從理論上來說,任何能取得穩定兩種狀態且能穩定進行轉換的自然界物理現象,都可以用來設計制作二進制計算工具,如果能取得穩定十種狀態且能穩定進行轉換的物理現象,那就可能用來設計制作十進制計算工具。這個概念,屬于一名計算工具設計者應該具備的概念。
回復

使用道具 舉報

ID:1063388 發表于 2023-3-20 09:25 來自手機 | 顯示全部樓層
樓主把51編程底層說的清楚易懂 ,為主點贊
回復

使用道具 舉報

ID:230500 發表于 2023-3-20 11:02 | 顯示全部樓層
入門還是從C開始吧;C語言更加流行一些;匯編有多余時間學一點也是可以的; 如果不會匯編也是完全沒有關系的;不用太過在意!
回復

使用道具 舉報

ID:266429 發表于 2023-3-20 11:29 | 顯示全部樓層
a399288395 發表于 2023-3-20 11:02
入門還是從C開始吧;C語言更加流行一些;匯編有多余時間學一點也是可以的; 如果不會匯編也是完全沒有關系 ...

入門從興趣開始,成就高低靠基礎牢靠程度,基礎不牢樓房就做不高,建房速度靠的是所用的工具,對原理的理解就是基礎,匯編不過是在理解原理之后順手的事,建房講速度方面C是當然的主力。
匯編可以不用專門去學,但原理與結構是一定要學的,學了原理與結構,在底層操作時,反正本人是不愿意用C的,想用C合在C中嵌入匯編就是了。
還有,學了原理與結構之后,你想轉其它的單片機,比你只知道C要容易得太多。再說了,轉其它機是很平常的事,畢竟51機的資源和速度還是有些原始。
回復

使用道具 舉報

ID:139866 發表于 2023-3-20 17:06 | 顯示全部樓層
學會了基本原理,你可以用匯編直接送數據到地址, 我也可以用C直接往地址里寫數據,而且我用C不光可以直接寫數據,還能封裝函數,更快捷更方便,匯編不是主流是有原因的。
學習這東西,不論是C還是匯編,都僅僅是個工具,,如果把工具的優劣當成個人能力的標準,是不合理的,
重要的是芯片的手冊,跟某個芯片有關的程序全部都是按照相應手冊來寫的,C跟匯編都是過程工具,僅此而已。
回復

使用道具 舉報

ID:73992 發表于 2023-3-20 17:16 來自手機 | 顯示全部樓層
站在研發的角度,學習匯編語言,與學習自然科學一樣。一邊追求本質,一邊探索未知。每走一步都需要謹慎與耐心。但是每一個成功,都會增加一點科技創新。我現在寫的程序,已經接近了4k,就是程序總要回望,與省視,雖難受比較。但正是這個過程,容易讓一個人成為軟硬件方面的工程高手。我喜歡用匯編,也喜歡研究自然科學。匯編的開發流程,與研究自然科學的流程類似。就是說更容易創造新的東西。所以我很贊賞樓主對匯編的理解。
回復

使用道具 舉報

ID:266429 發表于 2023-3-20 18:23 | 顯示全部樓層
天ノ憶 發表于 2023-3-20 17:06
學會了基本原理,你可以用匯編直接送數據到地址, 我也可以用C直接往地址里寫數據,而且我用C不光可以直接 ...

      是的,所以學懂原理才是根本。不懂原理,做程序時就只能照抄別人的程序,合適不合適不知道,有沒有問題不知道,有沒有多余的語句不知道,怎么變通不知道,出了錯怎么查知道得不多,問了別人修改之后為什么能通過不知道,學習起來多靠死記硬背時間一長忘得一干二凈又得從頭查資料。
      說到封裝庫,并非匯編不能,它也能做,ARM的用匯編制作的啟動文件就是一個封裝庫,只是現有的匯編及編輯器在這方面的可操作性實在不能跟C比,匯編這個工具真是不長進,當時就設計得很死板很初級,這多年了,就這一版,死活沒有改進。
回復

使用道具 舉報

ID:1074735 發表于 2023-4-29 23:28 | 顯示全部樓層
我也準備學C
回復

使用道具 舉報

ID:1074495 發表于 2023-5-1 18:00 | 顯示全部樓層
匯編主要是基于硬件的語言,相較于C語言,想要學好匯編對硬件的理解要通透
回復

使用道具 舉報

ID:1075036 發表于 2023-5-2 23:22 | 顯示全部樓層
通俗易懂,繼續加油!學到了
回復

使用道具 舉報

ID:1041040 發表于 2023-6-12 12:43 | 顯示全部樓層
通俗易懂,繼續加油!
回復

使用道具 舉報

ID:1083793 發表于 2023-6-13 14:13 | 顯示全部樓層
匯編會了不錯,不會也行
回復

使用道具 舉報

ID:491875 發表于 2023-6-13 16:29 | 顯示全部樓層
復雜一點的程序就夠你頭疼了
回復

使用道具 舉報

ID:1063561 發表于 2023-6-21 09:32 | 顯示全部樓層
有時為了效率不得不用匯編編程
回復

使用道具 舉報

ID:1063563 發表于 2023-6-25 10:11 | 顯示全部樓層
Y_G_G 發表于 2023-3-19 23:05
在我沒用C語言之前,我也覺得匯編有種種的好
在我用了C之后,我就知道為什么,絕大多數的公司對匯編是沒有要 ...

回復

使用道具 舉報

ID:641483 發表于 2023-6-26 13:58 | 顯示全部樓層
慢慢思考 發表于 2023-3-20 08:21
不管你是用哪種單片機,編程的主力仍然是C,但做單片機應用設計的人,不懂其原理的人與懂其原理的人, ...

樓主解釋比較通俗易懂, 我是小白,看了很多視頻教程和學習版, 都是朦朧的一知半解狀態,就知道老師說一定要這樣寫(抄),為啥要這樣,就不甚了解,要是能把工作原理了解清楚,就能更好理解程序語句,更容易學習了
回復

使用道具 舉報

ID:200844 發表于 2023-7-1 11:28 | 顯示全部樓層
我也只會匯編,想學C,但看著感覺很復雜,就沒心思認真去學了。不過想更高一個層次還是要用C來寫,C現在也是主流
回復

使用道具 舉報

ID:1085441 發表于 2023-7-4 00:19 | 顯示全部樓層
除非對反應和時序要求非常高,還是用C寫比較好,C51學習還是比較好上手,我當年看的是馬忠梅的“單片機的C語言應用程序設計”
回復

使用道具 舉報

ID:333446 發表于 2023-7-12 12:05 | 顯示全部樓層
Y_G_G 發表于 2023-3-19 23:05
在我沒用C語言之前,我也覺得匯編有種種的好
在我用了C之后,我就知道為什么,絕大多數的公司對匯編是沒有要 ...

我在30年前只會寫匯編,寫計算模塊用了一個星期,現在用c,一個小時搞定。
回復

使用道具 舉報

ID:1090236 發表于 2023-8-1 09:43 | 顯示全部樓層
通俗易懂,學習了
回復

使用道具 舉報

ID:1091289 發表于 2023-8-16 10:09 | 顯示全部樓層
和我現在在學的PLC 編程很像
回復

使用道具 舉報

ID:463392 發表于 2023-8-28 19:53 | 顯示全部樓層
感謝樓主把51編程底層說的通俗易懂
回復

使用道具 舉報

ID:994634 發表于 2023-12-18 21:30 | 顯示全部樓層
還是從各種門電路學起吧!
回復

使用道具 舉報

ID:1100060 發表于 2023-12-23 08:16 | 顯示全部樓層
市井閑叟 發表于 2023-12-18 21:30
還是從各種門電路學起吧!


用分立元件組裝出整片8051來,用晶體管的估計有一張雙人床那么大,如果用真空管,估計會有車庫那么大了。
回復

使用道具 舉報

ID:1100060 發表于 2023-12-23 08:28 | 顯示全部樓層
天ノ憶 發表于 2023-3-20 17:06
學會了基本原理,你可以用匯編直接送數據到地址, 我也可以用C直接往地址里寫數據,而且我用C不光可以直接 ...


啊,手冊,那就是芯片懂的語言,相當于 中外翻譯字典。
比如我要〖這是一本書〗的英文版,就去翻 漢英字典,得到 this、is、a、book '這四個英文單詞然后組合成 “this is a book” 這句話。
回復

使用道具 舉報

ID:1088185 發表于 2024-1-6 17:48 | 顯示全部樓層
不會匯編只會C行不行,這要看你對自己的要求,只會C也能做大部分項目,但有些資源緊張的項目做不來。

而且對于某些C語言的規定不好理解,只能死記, 比如調用函數的參數應該盡量少, 太多參數就該把它封裝傳地址, 懂匯編的就不需要解釋。
回復

使用道具 舉報

ID:619259 發表于 2024-2-13 21:55 | 顯示全部樓層
學英語也很容易,不就是ABCD嗎
回復

使用道具 舉報

ID:993578 發表于 2024-3-27 09:50 | 顯示全部樓層
說起51機的原理,其實是很簡單的東西,它只不過是一種思路,是對我們做事習慣在提煉之后的應用,初中生就能夠理解。但為什么普遍認為這個很難,那是因為教材的原因,我手上光紙質書就有九本,但對原理的講解,都只是告訴我們是這樣的,卻從沒有一本書是講解為什么這樣的,可以這樣說,這些書,目的只是想教大家編程,而沒有培養芯片設計人員的意識。
      比如說有關計算機認不認識數字的問題,都是直接說它只認識0和1,但我們要知道,它不過是一個電子電路,它只知道電壓電流電阻開關之類的,根本不知道什么0和1。電路的電壓從0到電源電壓值有無窮的狀態值,我們只抽象地取了一個高電位和一個低電位兩種狀態,以此兩種狀態來建立一個二進制類模型,依據數學公式來設計出相應的運行電路,讓其運行出與數學計算結果具有唯一對應電位狀態的電路體系。
      從理論上來說,任何能取得穩定兩種狀態且能穩定進行轉換的自然界物理現象,都可以用來設計制作二進制計算工具,如果能取得穩定十種狀態且能穩定進行轉換的物理現象,那就可能用來設計制作十進制計算工具。這個概念,屬于一名計算工具設計者應該具備的概念。
回復

使用道具 舉報

ID:961114 發表于 2024-3-28 09:48 | 顯示全部樓層
要學C,但是也得懂匯編
回復

使用道具 舉報

ID:61997 發表于 2024-5-20 09:01 | 顯示全部樓層
有么有按照匯編語言思路形成的教材呢
回復

使用道具 舉報

ID:1131387 發表于 2024-9-30 09:47 | 顯示全部樓層
先保存下來,慢慢學習,謝謝分享
回復

使用道具 舉報

ID:1100691 發表于 2024-10-24 19:42 | 顯示全部樓層
解釋的很到位,大大的贊一個!
回復

使用道具 舉報

ID:247571 發表于 2024-10-25 08:46 | 顯示全部樓層
很好,匯編很重要,匯編與c混合編程,可以寫出高效代碼。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 97视频在线观看免费 | 日韩快播电影网 | 91精产国品一二三区 | jlzzjlzz国产精品久久 | 国产一区二区在线91 | 在线91| 午夜爱爱网 | 国产自产c区 | 91精品久久久久久久久 | 黄色一级大片在线免费看产 | 成人免费激情视频 | 亚洲在线 | 麻豆国产一区二区三区四区 | 成人精品一区二区 | 午夜精品一区二区三区在线观看 | 久久免费视频1 | 91麻豆精品一区二区三区 | 日韩免费在线视频 | 欧美黄色片 | 国产欧美久久一区二区三区 | 国内自拍偷拍 | 7777久久| 91电影 | 91不卡在线 | 久久精品免费 | 亚洲九九 | 在线观看黄色 | 日韩欧美中文字幕在线视频 | 中文字幕第7页 | 精品国产91亚洲一区二区三区www | 成人免费在线观看 | 日韩一区二区三区视频 | 成人免费视频网站在线看 | 亚洲精品一区二 | 秋霞影院一区二区 | www.久久国产精品 | 久久久99精品免费观看 | 欧美日韩国产中文 | 亚洲精品www | 国产人成精品一区二区三 | 成人免费视频网站在线观看 |