![]() |
發布時間: 2020-3-19 00:20
正文摘要:就像圖片里我只認識loop,main,老師講的不詳細,我很煩躁。我想認真學習這種語言,前輩們告訴我一些資源就可以,我自己學能學明白那種。謝謝各位大佬! 就是下面這種語言,屬于什么類型?我想找資源該去 ... |
青海長云 發表于 2020-3-20 11:49 好難受,哈哈 |
你的指令表已經差不多夠用了。 |
難道我看了假的書了,我看的書都說8051有255條指令的呀,為什么只有111條了?
![]() 對著你的書,你就看前面兩項就可以了,不要看后面的, 字節數:沒意義,除非你的單片機只有幾十個字節的程序存儲器,或者你的代碼從來不用標號,不然的話,去記住這指令占用的字節數,純粹就是浪費時間 執行時間:沒意義,不要看,用的時候看指令表來對就可以了,現在用的都是STC的8051單片機了,STC系列和傳統的8051在指令的執行時間上完全不一樣的,記了也是浪費時間 機器代碼:不用管了,這玩意給誰看都不會,除非是大神 8051常用的匯編指令不會超過30條,其實是很好記的,你不要想著完全記好指令了再去寫代碼,自己對著STC的數據手冊,再看看書,從延時到流水燈,定時器,一步一步的,一個一個小程序的寫,最好不要超過100行代碼,慢慢的你就會了 基本上是一邊學習一邊寫代碼,還要隨時查閱數據手冊的,如果不是PDF而是書本的話,我估計可能已經翻爛了 如果你還在用AT8051的話,扔了吧,那沒有用的 還要多看一下偽指令,這會經常用到,用好了會讓你輕松很多的,像BIT ORG EQU DATA都是常用的, 如果你按鍵在P1.0,到處都用P1.0,打字都難打,S1 BIT P1.0 然后,就一直以S1來代替P1.0了 |
去看看匯編語言,把基本指令記住就可以了 |
機油味 發表于 2020-3-19 16:48 你上面拍的照就是111條指令,匯編程序就是要熟悉這111條指令,還要知道執行時間 |
匯編語言雖然直接作用于單片機但是復雜難懂,還是建議c語言 |
可以看一下單片機原理,微機原理 |
我也在學。。。的確感覺很難受,要拋開c語言的思維,回到古代的思維去寫代碼 |
可以在網上買一些相應的書籍來看,或者找找視頻也可以的 |
csmyldl 發表于 2020-3-19 01:14 AJMP KEYSC ;轉移到掃描(此程序按鍵掃描未判斷,無法得到按鍵值) 如果我想掃描按鍵的話,例如MOV C,P1.1;MOVP1.5,C;控制開關可以吧 |
Y_G_G 發表于 2020-3-19 08:32 你說的1.2我可以做到,謝謝,很實在的回復 |
csmyldl 發表于 2020-3-19 01:14 該看一些什么資料呢 |
12年前就匯編轉C了.. |
匯編很神奇:不會的人要學,會的人不想學 匯編是基于硬件的,除了偽指令,每一條指令最少也必定有一個針對硬件的結果 匯編是低級語言,從低級語言往高級語言學是相對比較容易的,我學了匯編,就覺得C沒有那么難,但匯編已經用習慣了,思想還是沒有那么快轉變過來而已 但要是學會了C,再來學匯編就有點難了 匯編就是把C細分化,C一個語句,匯編可能要幾條或者上百條指令來完成你要做的是把8051匯編指令的含義全部記住,理論上有255條指令,還有一條是預留的,不知道是要來干嘛的 但實際上,8051的匯編指令也是不到30條:MOV R7,200和MOV P1,#0FFH雖說是兩種不同的操作,但實際上是一樣的:都是MOV指令,MOV指令就是把逗號右邊的東西轉移到逗號左邊去,這個東西有可能是地址,數據,標志位 所以,你現在要做的: 1:充分的去了解8051的硬件 2:記住8051的匯編代碼含義 3:有一塊學習板,寫了代碼一定要燒錄驗證,仿真沒有意義,有的人說仿真都不行那實際更不行,的確是這樣,但仿真就是仿真,你有可能要花太多時間在解決一個仿真問題上,然而這個問題并不一定存在,到了實際中,你還得花時間.最主要的是:下載燒錄要比仿真快,幾秒鐘就可以了 |
匯編語言就是要熟悉書后面的111長指令 ORG 0000H ;存放起始地址 AJMP MAIN ;短轉移到MAIN ORG 0040H ;下面程序從0040存放 MAIN: MOV P1,#0FFH ;使P1口輸出高電平(可不要) ; CLR R1 ;這指令是錯誤的,沒有這種用法 MOV A,#0FH ;數據0F存A寄存器 MOV P1,A ;數據0F從P1口輸出 ACALL DELAY50 ;調用延時程序 KEYSC: MOV A,P1 ;讀P1口按鍵狀態 ANL A,#00001111B ;保留低4位 SWAP A;高低4位互換 ;反轉 MOV P1,A ;由P1口輸出 ACALL DELAY50 ;調用延時 ACALL DELAY50 ACALL DELAY50 AJMP KEYSC ;轉移到掃描(此程序按鍵掃描未判斷,無法得到按鍵值) ORG 0200H ;下面程序存地址200H DELAY50: MOV R7,200 ;錯誤命令,數據200前未加# D1: MOV R6,123 ;錯誤命令,數據123前未加# NOP D2: DJNZ R6,D2 ;判斷R6不為0,轉移到D2 D3: DJNZ R7,D1 ;判斷R7不為0,轉移到D1 RET ;子程序的返回 END |