標(biāo)題: 一個(gè)匯編程序,哪位大俠看的懂的幫忙看看唄 [打印本頁(yè)]
作者: gy2264458415 時(shí)間: 2017-2-26 17:24
標(biāo)題: 一個(gè)匯編程序,哪位大俠看的懂的幫忙看看唄
一個(gè)匯編程序,哪位大俠看的懂的幫忙看看唄

-
IMG_20170226_172117.jpg
(478.92 KB, 下載次數(shù): 127)
下載附件
2017-2-26 17:23 上傳
作者: lxa0 時(shí)間: 2017-2-26 22:37
看了
玩匯編代碼
一要有注釋
二要和硬件聯(lián)系在一起才行
這兩點(diǎn)都沒(méi)有
難啊
作者: xieyajun888 時(shí)間: 2017-2-27 01:44
匯編以前剛開(kāi)始就學(xué)的匯編,后來(lái)學(xué)了c語(yǔ)言,基本通用了,趕緊去學(xué)習(xí)C語(yǔ)言吧
作者: 青蘋(píng)果 時(shí)間: 2017-2-27 08:47
看懂這個(gè)有什么用?
初始化了一下SP,Timer,清了幾個(gè)RAM,,,,
便有有錯(cuò)誤,還是先把錯(cuò)誤改了吧
作者: yzwzfyz 時(shí)間: 2017-2-27 12:58
贊同二樓。
本人從不用C寫(xiě)單片機(jī)程序,只用寫(xiě)。
作者: qq704661078 時(shí)間: 2017-2-27 13:47
定時(shí)器0和定時(shí)器1初始化程序,第1句設(shè)置堆棧首地址,第2句設(shè)置T0和T1的模式,第3、4句設(shè)置T0初值,第5、6句設(shè)置T1初值,接下來(lái)吧一堆標(biāo)志位清零;鑒定完畢!
作者: utzuzu 時(shí)間: 2017-2-27 15:37
補(bǔ)充樓上意見(jiàn),編譯錯(cuò)誤信息表示 F_0 到 F_9 沒(méi)有定義。 就像c語(yǔ)言變量沒(méi)有聲明一樣。應(yīng)該在程序的開(kāi)頭定義好,比如 #define F_0 00h (00h指向內(nèi)存位尋址的第一個(gè)位)
作者: zl2168 時(shí)間: 2017-2-27 16:19
本帖最后由 zl2168 于 2017-2-27 16:22 編輯
C程序與匯編程序雖各有千秋,但C程序優(yōu)點(diǎn)更多。
⒊ C51編程的特點(diǎn)
C51編程與80C51匯編語(yǔ)言相比,主要具有以下特點(diǎn):
⑴ 編程相對(duì)方便。
用匯編語(yǔ)言編程,幾乎每一條指令操作都與具體的存儲(chǔ)單元有關(guān),80C51單片機(jī)的片內(nèi)存儲(chǔ)空間容量有限,編程之初即需安排好片內(nèi)存儲(chǔ)單元的用途,且一般不宜重復(fù)使用。當(dāng)一些應(yīng)用項(xiàng)目程序量較大時(shí),片內(nèi)存儲(chǔ)單元有可能捉襟見(jiàn)肘,稍有不慎就將出錯(cuò),編程相對(duì)復(fù)雜。而C51編譯系統(tǒng)能自動(dòng)完成對(duì)變量存儲(chǔ)單元的分配和使用,且對(duì)函數(shù)內(nèi)局部變量占用的存儲(chǔ)單元,僅在調(diào)用時(shí)臨時(shí)分配,使用完畢即行釋放,大大提高了80C51片內(nèi)有限存儲(chǔ)空間的使用效率。因此,使用者只需專注于軟件編程,不需過(guò)多關(guān)注涉及的具體存儲(chǔ)單元及其操作指令,編程相對(duì)方便。
⑵ 便于實(shí)現(xiàn)各種復(fù)雜的運(yùn)算和程序。
C語(yǔ)言具有豐富且功能強(qiáng)大的運(yùn)算符,能以簡(jiǎn)單的語(yǔ)句方便地實(shí)現(xiàn)各種復(fù)雜的運(yùn)算和程序。相比之下,匯編語(yǔ)言要實(shí)現(xiàn)較復(fù)雜的運(yùn)算和程序,就比較困難。例如,雙字節(jié)的乘除法,匯編語(yǔ)言要用許多條指令操作才能完成;而C51只需一條語(yǔ)句便能方便實(shí)現(xiàn)。又例如,循環(huán)、查表和散轉(zhuǎn)等程序,C51語(yǔ)句實(shí)現(xiàn)起來(lái)也相對(duì)簡(jiǎn)單方便(當(dāng)然C51語(yǔ)句編譯轉(zhuǎn)換為匯編語(yǔ)言指令后仍然復(fù)雜,只是不用程序員操心,由編譯器自動(dòng)完成罷了)。
⑶ 可方便地調(diào)用各已有程序模塊。
已有程序模塊包括C51編譯器中豐富的庫(kù)函數(shù)、用戶自編的常用接口芯片功能函數(shù)和以前已開(kāi)發(fā)項(xiàng)目中的功能函數(shù)。讀者可能會(huì)說(shuō),匯編程序不也一樣可以調(diào)用嗎?不一樣。匯編程序調(diào)用時(shí),涉及到模塊中具體的存儲(chǔ)單元,這些存儲(chǔ)單元很可能與主調(diào)用程序有重復(fù),會(huì)引起沖突而出錯(cuò)。而C51程序函數(shù)中的變量一般為局部變量,主函數(shù)調(diào)用前不占用存儲(chǔ)單元,僅在調(diào)用時(shí)由C51編譯器根據(jù)存儲(chǔ)區(qū)域空余情況臨時(shí)分配,使用完畢即行釋放,一般不會(huì)發(fā)生沖突而出錯(cuò)。因此,C51程序可方便地調(diào)用各已有程序模塊,減少重復(fù)勞動(dòng),利于團(tuán)隊(duì)合作開(kāi)發(fā),大大提高編程效率。
⑷ 可讀性較好。
C語(yǔ)言屬于高級(jí)語(yǔ)言。一條C51語(yǔ)句,會(huì)編譯為多條甚至許多條匯編指令(例如數(shù)學(xué)運(yùn)算和循環(huán)程序等),相對(duì)來(lái)說(shuō),C51程序簡(jiǎn)潔而清晰,可讀性較好。
⑸ 實(shí)時(shí)性較差。
匯編語(yǔ)言指令每一條對(duì)應(yīng)1~3字節(jié)機(jī)器碼,每一步的執(zhí)行動(dòng)作都很清楚,程序大小和堆棧調(diào)用情況都容易控制,響應(yīng)及時(shí),實(shí)時(shí)性較好。而C51程序并不能被單片機(jī)直接執(zhí)行,需編譯轉(zhuǎn)換為匯編語(yǔ)言指令。一條C51語(yǔ)句編譯后,會(huì)轉(zhuǎn)換成很多機(jī)器碼,占用單片機(jī)片內(nèi)較多資源,可能出現(xiàn)ROM、RAM空間不夠,堆棧溢出等問(wèn)題;且執(zhí)行步驟不很明確,有時(shí)還會(huì)兜圈子,因而實(shí)時(shí)性較差(參閱例9-3),甚至?xí)驎r(shí)序配合不好而出錯(cuò)。然而,隨著單片機(jī)芯片技術(shù)的發(fā)展,其運(yùn)行速度和內(nèi)存容量有了較大提高,這些都為C51的應(yīng)用創(chuàng)造了有利條件。
以上摘自張志良編著《80C51單片機(jī)實(shí)用教程——基于Keil C和Proteus》高等教育出版社ISBN 978-7-04-044532-9
作者: yzwzfyz 時(shí)間: 2017-2-28 11:20
C:經(jīng)編譯后,成匯編,因此用匯編的人,是自己代替代了C。
有許多節(jié)省內(nèi)存的技巧及方式,C是做不到了,因?yàn)镃是從通用化出發(fā)的。因此沒(méi)有,C更能能節(jié)省內(nèi)存的這一說(shuō)。
作者: yzwzfyz 時(shí)間: 2017-2-28 11:21
比如:C是用堆棧傳遞參數(shù)的,需要的堆棧就大,占用的寄存器就多,51的寄存器本來(lái)就少,這會(huì)造成寄存器緊張,匯編傳遞參數(shù)很直接,大多可以不用堆棧,省出寄存器作他用。
在運(yùn)作時(shí)間上,匯編有極大的優(yōu)勢(shì)。
比如以下一個(gè)項(xiàng)目,用C很難完成,而用匯編就已很好的完成了(前提是只用51單片機(jī)):
16*64的LED點(diǎn)陣顯示+14個(gè)LED數(shù)據(jù)管顯示+中文漢字顯示處理+無(wú)線收發(fā)+生產(chǎn)記錄(計(jì)劃、產(chǎn)能、次品、待產(chǎn))+年月日精確時(shí)間(普通晶振,日差小于一秒)。
單就解決顯示的掃描閃動(dòng)(驅(qū)動(dòng)顯示1136個(gè)LED段,必須分8次掃描,1136個(gè)點(diǎn)時(shí)刻會(huì)變,要占多少處理時(shí)間及內(nèi)存),與程序運(yùn)行的速度矛盾(漢字解碼+無(wú)線通訊+時(shí)鐘+掃鍵……)。
作者: yzwzfyz 時(shí)間: 2017-2-28 11:22
以上所例,僅說(shuō)明匯編比C的優(yōu)勢(shì),并不排拆C的好處:
1、用匯編需用很強(qiáng)的優(yōu)化寄存器及內(nèi)存的能力,用C的好處是,不需要你去考慮這些復(fù)雜的問(wèn)題,使得編程簡(jiǎn)單。
2、 C出錯(cuò)的機(jī)率遠(yuǎn)小于匯編,匯編稍有不小心就會(huì)出錯(cuò),要命的是:不易察覺(jué)。
3、 C有團(tuán)體合作的優(yōu)勢(shì), 這是 C的特點(diǎn),便于交流。如果是匯編,很難與他人交流。
4、 對(duì)于運(yùn)算程序, C已有前輩們做好了運(yùn)算庫(kù),很難想像一般人能用匯編去:開(kāi)方、三角函數(shù)(當(dāng)然,也可以讓C先編譯,再做成匯編的庫(kù))。
5、 C 有龐大的公用程序庫(kù)(子程序),這對(duì)于程序量大的程序更有優(yōu)勢(shì)。匯編的程序庫(kù)多為個(gè)人積累,很難得到。
作者: yzwzfyz 時(shí)間: 2017-2-28 11:22
其實(shí)C只有一個(gè)優(yōu)點(diǎn):
先插入說(shuō)一下單片機(jī)程序通常結(jié)構(gòu):1硬件初始化、2軟件參數(shù)初始化(含內(nèi)存安排)、3主程序(事件處理)、4中斷程序。
如果用匯編以上一切由你處理,除非你已獲得了很多相關(guān)的匯編數(shù)據(jù)庫(kù)。
如果用C:
在你未寫(xiě)程序之前C已為你做了什么?
1、硬件初始化,C僅能做很少的部分。(注:這就是為什么在做硬件時(shí)你總是要一行行慢慢寫(xiě)的原因,與匯編比幾乎沒(méi)有優(yōu)勢(shì))
2、軟件參數(shù)初始化(含內(nèi)存安排),C完成其中的大部分。(注:比匯編操心少。
3、主程序(事件處理),C有大量的庫(kù)函數(shù)可以調(diào)用,可以減少你大部分工作量。(注:比匯編操心少。
4、中斷程序。C有大量的庫(kù)函數(shù)可以調(diào)用。(注:本人不建議在中斷中完成事件處理,而建議盡最大可能只在中斷中做一些事件標(biāo)志!而讓事件在主程序中依標(biāo)志進(jìn)行處理,因?yàn)橹袛嘤袃?yōu)先權(quán),處理事件往往需要的時(shí)間多,會(huì)耽誤其它事件的處理,如這時(shí)按鍵就會(huì)偽“失靈”)
可見(jiàn) C的這個(gè)優(yōu)點(diǎn)是,C能幫你完成程序中的很大一部分工作。(其實(shí)是你調(diào)用了前輩們已做好的工作,這此工作是通過(guò):編譯器、程序庫(kù)來(lái)實(shí)現(xiàn)的)
道理很簡(jiǎn)單:一件事能用設(shè)備完成的盡量用設(shè)備,設(shè)備無(wú)法完成的用人工。C就是寫(xiě)單片機(jī)程序的一個(gè)極好的“設(shè)備”。
作者: yzwzfyz 時(shí)間: 2017-2-28 11:23
用C的風(fēng)險(xiǎn)在哪里?
一個(gè)程序什么都OK了,就缺一些庫(kù)文件!找又找不到。
如果你會(huì)匯編,就可以自己完成找不到的這個(gè)庫(kù)。
總之C適合大多數(shù)的人,匯編僅適用很少的一部分人,但用匯編寫(xiě)程序的人,一定是高手,否則他駕馭不了單片機(jī)。
做匯編需要徹底地了解單片機(jī),做C無(wú)需要了解到很底層。而要精通單片機(jī),匯編又是最佳手段。
作者: yzwzfyz 時(shí)間: 2017-2-28 11:24
個(gè)人建議:所有學(xué)單片機(jī)的同學(xué)學(xué)C,C是在大勢(shì)所趨,也適合絕大多數(shù)人。特別是團(tuán)體作戰(zhàn),未來(lái)不是單打獨(dú)斗的年代!
也建議那些想精通單片機(jī)的同學(xué),學(xué)好匯編,匯編天馬行空,不受庫(kù)存文件、頭文件限制,不受C的規(guī)矩,但也必須會(huì)C。
一但學(xué)好了匯編,你再打開(kāi)你的C編譯后的匯編看看,這時(shí)就知道缺點(diǎn)在那里,就能提高自己C語(yǔ)言的水平。也能輕松掌握C當(dāng)中繞人的難點(diǎn)。
作者: utzuzu 時(shí)間: 2017-3-1 17:05
爭(zhēng)論C和匯編的人,必定是只擅長(zhǎng)C或只擅長(zhǎng)匯編的人。
作者: zl2168 時(shí)間: 2017-3-1 19:52
本帖最后由 zl2168 于 2017-3-1 20:46 編輯
錯(cuò)!只有同時(shí)熟練應(yīng)用C及匯編的人,才能客觀地比較C與匯編的優(yōu)缺點(diǎn)。
作者: zl2168 時(shí)間: 2017-3-1 19:55
本帖最后由 zl2168 于 2017-3-1 20:47 編輯
不熟練應(yīng)用C及匯編的人,只會(huì)講好與不好,講不出好與不好的原因,更講不到好與不好的點(diǎn)子上。
作者: 13572173645 時(shí)間: 2017-3-1 20:31
清標(biāo)志位
作者: 黃昭旨 時(shí)間: 2017-3-2 16:53
哈囉~你好
你第7行到16行這些 => F_0 F_1 F_2 F_3 F_4 F_5 F_6 F_7 F_8 F_9
,這10個(gè)東西你沒(méi)有在程序的開(kāi)頭定義它,你使用CLR要清除東西後面只能接C(進(jìn)為旗標(biāo))或bit(位元)或是A(累加器),因?yàn)槟銢](méi)有在程序開(kāi)頭宣告定義那10個(gè)東西,所以下面才會(huì)跑出那10行說(shuō)無(wú)效的
作者: lxa0 時(shí)間: 2017-8-13 01:38
不會(huì)C
只用匯編
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |