八只LED燈做流水燈試驗報告_第1頁
八只LED燈做流水燈試驗報告_第2頁
八只LED燈做流水燈試驗報告_第3頁
八只LED燈做流水燈試驗報告_第4頁
八只LED燈做流水燈試驗報告_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

51LED燈做流水燈試驗第一節(jié):單片機在上電初始后,其各端口輸出為高電平。假設我們現(xiàn)在想讓接在P1.0LED1P1.0口的電平變?yōu)榈碗娖骄涂梢粤恕O胱孡ED1滅,LED0P1.0上升,P1.1變低,LED1LED2隨后既點亮!依始類8LEDSP-51試驗板

”學習套件上的相關圖紙:P1.0低、P1.0高、P1.1低、P1.1高、P1.2低、P1.2高、P1.3低、P1.3高、P1.4低、P1.4高、P1.5低、P1.5高、P1.6低、P1.6高、P1.7低、P1.7高、返回到開頭、程序完畢。P1.1你變低,它就變低了。由于單片機聽不懂我們的漢語的,只能承受二進制的碼。我們又怎樣來用二進制語談論使單片機按我們的意思去工作呢?為了讓單片機工作,只能將程序寫為二進制代碼交給其執(zhí)行;早期單片機開發(fā)人員就是使用人工編寫的二進制代碼交給單片機去工作的。

“、0……代”今日,我們不必用煩人的二進制去編寫程序,完全可以將我們簡潔理解的 程序語言”通過翻譯”軟件翻譯”成單片機所需的二進制代碼,然后交給單片機去執(zhí)行。這里的程序語言”目前主要有匯編和C兩種;在這里我們所說的翻譯”軟件,同行們都叫它為編譯器”,將程序語言”通過編譯器產(chǎn)生單片機的二進制代碼的過程叫編譯。前面說到,要想使LED1變8LED流水燈試驗寫為匯編語言程序。漢語”語言漢語”語言匯編語言開頭:star:P1.0低clrp1.0P1.0高setbp1.0P1.1低clrp1.1P1.1高P1.2低setbp1.1clrp1.2P1.2P1.2高setbp1.2P1.3低clrp1.3P1.3高setbp1.3P1.4低clrp1.4P1.4高setbp1.4P1.5低clrp1.5P1.5高setbp1.5P1.6低clrp1.6P1.6高setbp1.6P1.7低clrp1.7P1.7高setbp1.7返回到開頭ljmpstar完畢end這里用到了四條匯編指令:clr、setb、Ijmp、end;clr:是將其后面指定的位清為0;setb:是將其后面指定的位置成 1;Ijmp:是無條件跳轉指令,意思是:跳轉到指定的標號處連續(xù)運行。end:是一條告知編譯器:程序到此完畢的偽指令。偽指令只告知編譯器此程序到此有何 要求或條件,它不參與和影響程序的執(zhí)行。這里需要說明的是,按匯編語法要求,所編制的程序〔下稱源程序〕之格式和書寫要求必需依以下原則:1、源程序必需為純文本格式文件,如用 Windows”附件沖的記事本”編寫的文本文件;2、源程序的擴展名應是*.ASM;3、一行只能寫一條語句,以回車作為本句的完畢,每一語句行長度應少于80個字符〔即40個漢字〕。4、每行的格式應為:標號:命令參數(shù);注釋即一行由四部份組成,各部份的挨次不能搞錯,依實際要求可以缺省其中的一部份或幾部份,甚至全部省去,即空白行。需要使用標號時標號后面必需有假設命令有多個參數(shù),則參數(shù)與參數(shù)之間必需用

:“”〔冒號〕,而命令語句和參數(shù)之間必需用空格分開,,“”〔逗號〕分開,需要注釋時注釋前必需用 ;”〔分號〕,;””后面的語句可以寫任何字符,包括漢字用于解釋前面的匯編語句,它將不參與匯編,不生成代碼。由于匯編程序對我們還不直觀,所以在編寫源程序時,應當養(yǎng)成多寫注釋的習慣,這樣有助于今后源程序的閱讀和維護。標號是標志程序中某一行的符號名,編譯后標號的數(shù)值就是標號所在行代碼的地址。在宏匯編

ASM51中標號的長度不受限制,但標號中不能包含 :’或其它的一些特別符號,也不能用漢字,可以用數(shù)字作標號,但必需用字母開頭。當標號作參數(shù)用〔如標號作轉移地址〕,在命令后面岀現(xiàn)時,必需舍去LJMPSTARSTAR是不能再有:〕。每行只能有一個標號,一個標號只能用在一處,假設有兩行用了同一個標號,則匯編時就會出錯。由于標

:’’〔如上面程號的長度沒有限制,可以用有意義的英文或漢語拼音來說明行,使源程序讀起來更便利。源程序中的字母不區(qū)分大小寫,也就是說 star和STAR是一樣的,請不要用大小寫方式去區(qū)分不同的標號。好拉!法規(guī)知道了,現(xiàn)在該來看看前面我們編寫的源程序該怎樣處理了:編寫源程序:先將編譯軟件安裝好〔c51eval軟件的安裝〕。軟件安裝好我們就可以編寫程序了。第一步:雙擊圖標,消滅如圖一Uvw51所示的主界面其次步:建文件單擊菜單欄內(nèi)的文件 建”或者單擊

圖標按鈕則在上圖所示的灰色區(qū)域內(nèi)岀現(xiàn)一個白色的編輯區(qū),圖二第三步:編程程序建立了一個的編程文件后,我們就可以在這里編寫我們所需要的程序了,下面我們就來編寫前面所說的程序吧。!如圖三所示:第四步:保存文件程序編寫好了,我們固然要記得保存了,要不我們編寫程序就白費力了。好了,下面我們將上面編寫的程序保存起來:單擊文件----保存”或者單擊圖標 ,岀現(xiàn)如圖四所示的對話框:圖四c51eval保存文件時默認的文件擴展是名

*.C,請按圖五所示轉變?yōu)闉?.a51:圖五我們這里就先將文件保存在 D/DDW文件夾中,文件名你可以任憑取,這里先叫他為 LED.a51;需強調(diào)的是保存文件的文件夾和文件名不能使用中文!即保存文件時不能以如下格式保存:

正確的保存路徑:D/DDW/LED.a51固然,保存的文件夾名DDW、編寫的程序的文件名LED,你都可以任憑的取一個,可以是D/ABC/000.a51。這就取決于你的興趣了。 錯誤的保存路徑:D/源程序/DDW/LED.a51,或者是D/DDW流水燈程序.a51??傊谠闯绦虻谋4媛窂较虏荒苡兄形牡膶绗F(xiàn),同時文件名不能取的太長。第五步:建立工程將匯編的源程序保存后,還沒有得到我們所需要的文件,這時我們還需要再建立工程,以便得到我們所需hex文件。建工程的步驟如下:首先先翻開建工程的對話框文件,如圖六所示:圖六點擊建工程后岀現(xiàn)如圖七所示的對話框,我們將對話框的參數(shù)設定好。將文件名設置成與剛剛源程序的文件名一樣,即設為LED.prj,同時保存的路徑跟前面的源程序保存的路徑一樣,在 可以把剛剛建立的工程文件LED.prj添加到剛保存的LED.A51源程序上了,留意它們都在同一個根名目下。圖七按圖七所示操作后,會消滅如圖八所示的對話框:圖八點擊圖九按圖九所示完成操作后,軟件會自動翻開一個對話框,如圖十所示:圖十如圖十所示點擊保存后,系統(tǒng)會自動回復到匯編狀態(tài)。如圖十所示點擊保存后,系統(tǒng)會自動回復到匯編狀態(tài)。這時點擊*創(chuàng)立全部圖標*按鈕,則進展了轉換,圖十一完成上述操作后,在圖十一,我們看到了創(chuàng)立成功了的提示畫面,這時我們點擊 0K就大功告成了。翻開我們文件的保存路徑:我的電腦/D/DDW我們可以看到包含hex文件在內(nèi)的全部相關程序文件了。我們上面的工程文件也在其中了。 他的名字叫作LED.hex文件。好啦,到此我們已將第一個流水燈程序編寫、編譯、燒寫進展完啦,再下來就是將燒寫好的 AT89C51從編程器上取下,放到SP-51試驗板”學習套件的試驗部份通電讓LED1 LED8”流水”說明:由于單片機的時鐘高達 12MHz,8個LED發(fā)光與熄滅的時間很短,實際試驗結果憑我們的肉眼是看不到請連續(xù)學習下節(jié)課

流水”燈效果呢?流水燈試驗詳解二LED的熄滅與點亮。單片機內(nèi)部能按部就班的自開工作,正是在系統(tǒng)時鐘的作用下,內(nèi)部各規(guī)律硬件產(chǎn)生各種所需脈沖信號而實現(xiàn)的。這個時鐘信號〔既晶體振蕩信號〕12MHZ.在單片機中,要處理最短周期的一條指令需要由

12個振蕩周期〔既晶振振蕩周8051核的單片機,大多數(shù)指令只用一個機器周期〔既單周期〕,也有雙周期和四周期的指令。本試驗中用到的SETBP.xCLRP.x均屬于單周期指令,也就是說,執(zhí)行一句SETBP.x用時1uS〔微秒〕CLRP.x1uS;難怪我們前面的程序不能看到流水效果。DDW:CLR;程序開頭P1.0;DDW:CLR;程序開頭P1.0;LED1亮ACALLDELAYSETBP1.0;調(diào)用延時子程序;LED1滅CLRP1.1;換燈,同上帚CLRP1.4曠ACALLDELAYSETBP1.4

現(xiàn)在,將程LED熄滅,連續(xù)執(zhí)行下ACALLDELAYSETBP1.1?CLRP1.2ACALLDELAYSETBP1.2?CLRP1.3?ACALLDELAY?SETBP1.3?CLRP1.5曠ACALLDELAY?SETBP1.5?CLRP1.6?ACALLDELAY?SETBP1.6?CLRP1.7?ACALLDELAY?SETBP1.7?LJMPDDW;返回到開頭循環(huán)DELAY:?;延時子程序MOVR1,#50AD10:?MOVR2,#100帚AD11:?MOVR3,#100?DJNZR3,$?DJNZR2,AD11?DJNZR1,AD10?RET;延時子程序完畢,返回到調(diào)用處的下一句END?請將上面的程序保存為ILED.asm,進展編譯,并燒寫到AT89S51中,之后將89S51安裝到套件的試驗部份插座上試驗,RET;延時子程序完畢,返回到調(diào)用處的下一句END?機內(nèi)部有不少存放器,這些存放器在單片機通電時,你可以給他寫入數(shù)據(jù)〔是單片機按你程序要求寫的數(shù)據(jù),而不是編程器寫的〕,當其次次給他寫入數(shù)據(jù)時,前次的數(shù)據(jù)就被數(shù)據(jù)掩蓋;固然也可以從存放器中讀取數(shù)據(jù)。當單片機沒有電源供給時,存放器內(nèi)部的數(shù)據(jù)也隨即消逝;這些存放器人們叫他用編程器將我們編寫的程序燒寫到單片機中的存儲器叫

RAM而ROM現(xiàn)在,我們應當清楚:RAM是讓程序去使用的,ROM!我們編寫的程序存放的地方! 前面說過,單片機內(nèi)部有不少 RAM本試驗用的AT89C51有多少存放器?我們現(xiàn)在不必關心,現(xiàn)在只須知道單片機內(nèi)部知名叫 R0~R7的這8個存放器。這8個存放器每個都由8個單獨的位存放器組成,最大存放數(shù)據(jù)為二進制的時留意不要大于其有效范圍。上面延時程序中,先用到

11111111,十六進制=FF,十進制=255。在使用MOVR1,#50,MO\是移動的意思,該句是將50這R1中;50是馬上數(shù),按匯編語言要求前面要加“面要加“?H”,十六進制數(shù)的高位是字母時在字母前面還要加“

#”號,匯編語言還規(guī)定,十六進制數(shù)后0”,例如:#0F8H;二進制數(shù)后面加“B”,例如:#11110000B。十進制不加,例如:#100。延時程序的其次、三句為: MOVR2,#100;MOVR3,#100;這兩句意思同前。第四句中 DJNZR3,$的意思是將R3里面的數(shù)減1后假設R3不等于0則跳到后面指定的程序位置,這里的“$”既要跳轉的程序位置,“$”代表當前語句處,也就是說, R3不等于0,程序返回再次執(zhí)行本句。假設R3減1后等于0,程序完畢本句,連續(xù)執(zhí)行下面的語句。延時程序的最終一句是RET,意思是退岀本子程序,返回到調(diào)用本子程序處的下一句。依據(jù)上面的解釋,一進入延時子程序首先為R1,R2,R3存放器裝入我們需要的數(shù)據(jù),然后先對 R3進展減數(shù),每次減1,R3減完后減R2,減R2時就費事啦,由于R2每減1后不為0需要跳轉到AD11標號處執(zhí)行下面的語句,此時R3再次裝入數(shù)據(jù)100,并且還要再次對R3進展減數(shù)……,R2減完后減R1,減R1的過程你爭論爭論看看。 每執(zhí)行DJNZ?Rn,rel〔RnR0~R7,rel指轉移地址〕指令一次,需要2個機器周期,單片機需耗時2uS〔指本試驗〕,假設無視裝數(shù)等語句,延時子程序從開頭到完畢,單片機共耗時 100*100*50*2nS,既1000000uS=1秒!假設加上裝數(shù)等語句的耗時,延時時間大于1秒。到此,我們做的流水燈已成功,原理大致也明白啦,假設你自認為這一課你完全明白了,那請你將“流水燈”的流向轉變一下,也可以改為兩邊向內(nèi)流,內(nèi)部向外流……,我想你確定能用前面學到的方法實現(xiàn)這些功能??赡苡行└呤终f,前面的編程方法是最最笨的!,不錯!但玩單片機初期不必講究語言的簡練,只要能完成預先要求就好,這是初學者要知道的。那么還有更好的編程思路嗎?有!請連續(xù)學習下節(jié)課做流水燈試驗詳解三在上節(jié)課中讓LED流水是去逐個把握P1端口的每個位來實現(xiàn)的,那么我們在程序一開頭就給P1口送一個數(shù),這個數(shù)本身就讓P1.0先低,其他位為高,然后讓這個數(shù)據(jù)向高位移動不就實現(xiàn)如此!惋惜,8051P1數(shù)據(jù)移動的指令,但有對累加器ACC中數(shù)據(jù)左移或右移的指令,

流水”效果啦?確實ACC8051單片機內(nèi)部算術規(guī)律單元中的一個 存放器”〔這里叫他存放器是不正確的,但你可以先這樣理解, ACC在指令中常寫為A〕,他在數(shù)據(jù)傳輸和數(shù)據(jù)處理過程中作用格外重要, ACC為8位。他可與片內(nèi)全部單

P1和其他端口在單片機中也是一個存放器。這樣我們可以將需移動的數(shù)據(jù)的數(shù)據(jù)〔11111110〕;因上句送到?p1的數(shù)據(jù)〔11111110〕;因上句送到?p17程序如下:DDW:?;開頭MOVMOVACC,#0FE tACCLED1熄滅HP1,ACC ;ACCP1口MOVR0,#7LOOP:?8位流水過程;數(shù)據(jù)移動循環(huán)RlA

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論