![51八只LED燈做流水燈實驗知識分享_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/23/cb974420-94e0-4f4f-abeb-4ef7a14869aa/cb974420-94e0-4f4f-abeb-4ef7a14869aa1.gif)
![51八只LED燈做流水燈實驗知識分享_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/23/cb974420-94e0-4f4f-abeb-4ef7a14869aa/cb974420-94e0-4f4f-abeb-4ef7a14869aa2.gif)
![51八只LED燈做流水燈實驗知識分享_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/23/cb974420-94e0-4f4f-abeb-4ef7a14869aa/cb974420-94e0-4f4f-abeb-4ef7a14869aa3.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、51八只LED燈做流水燈實驗第一節(jié):單片機在上電初始后,其各端口輸出為高電平。如果我們現(xiàn)在想讓接在P1.0口的LED1亮,那么我們只要把P1.0口的電平變?yōu)榈碗娖骄涂梢粤?。想讓LED1滅,LED0亮,只需將P1.0升高,P1.1變低,LED1就熄滅LED2隨后既點亮!依始類推如下所示8只LED變會一亮一暗的做流水燈了。本實驗在SP-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
2、你變低,它就變低了。因為單片機聽不懂我們的漢語的,只能接受二進制的“、0代”碼。我們又怎樣來用二進制語議論使單片機按我們的意思去工作呢?為了讓單片機工作,只能將程序寫為二進制代碼交給其執(zhí)行;早期單片機開發(fā)人員就是使用人工編寫的二進制代碼交給單片機去工作的。今天,我們不必用煩人的二進制去編寫程序,完全可以將我們容易理解的程序語言”通過翻譯軟件翻譯”成單片機所需的二進制代碼,然后交給單片機去執(zhí)行。這里的程序語言”目前主要有匯編和C兩種;在這里我們所說的翻譯軟件,同行們都叫它為編譯器”,將程序語言”通過編譯器產(chǎn)生單片機的二進制代碼的過程叫編譯。前面說到,要想使LED1變亮,只需將對應的單片機引腳電平
3、變?yōu)榈碗娖骄涂梢粤恕,F(xiàn)在讓我們將上面提到的8只LED流水燈實驗寫為匯編語言程序。漢語”語言匯編語言開始:star:P1.0低clrp1.0P1.0高setbp1.0P1.1低clrp1.1P1.1高setbp1.1P1.2低clrp1.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
4、、end;clr:是將其后面指定的位清為0;setb:是將其后面指定的位置成1;Ijmp:是無條件跳轉指令,意思是:跳轉到指定的標號處繼續(xù)運行。end:是一條告訴編譯器:程序到此結束的偽指令。偽指令只告訴編譯器此程序到此有何要求或條件,它不參與和影響程序的執(zhí)行。這里需要說明的是,按匯編語法要求,所編制的程序(下稱源程序)之格式和書寫要求必須依下列原則:1、源程序必須為純文本格式文件,如用Windows附件沖的記事本”編寫的文本文件;2、源程序的擴展名應是*.ASM;3、一行只能寫一條語句,以回車作為本句的結束,每一語句行長度應少于80個字符(即40個漢字)。4、每行的格式應為:標號:命令參數(shù);
5、注釋即一行由四部份組成,各部份的順序不能搞錯,依實際要求可以缺省其中的一部份或幾部份,甚至全部省去,即空白行。需要使用標號時標號后面必須有:“”(冒號),而命令語句和參數(shù)之間必須用空格分開,如果命令有多個參數(shù),則參數(shù)與參數(shù)之間必須用,“”(逗號)分開,需要注釋時注釋前必須用;”(分號),;”后面的語句可以寫任何字符,包括漢字用于解釋前面的匯編語句,它將不參與匯編,不生成代碼。由于匯編程序對我們還不直觀,所以在編寫源程序時,應當養(yǎng)成多寫注釋的習慣,這樣有助于今后源程序的閱讀和維護。標號是標志程序中某一行的符號名,編譯后標號的數(shù)值就是標號所在行代碼的地址。在宏匯編ASM51中標號的長度不受限制,但
6、標號中不能包含:或其它的一些特殊符號,也不能用漢字,可以用數(shù)字作標號,但必須用字母開頭。當標號作參數(shù)用(如標號作轉移地址),在命令后面岀現(xiàn)時,必須舍去:(如上面程序中的LJMPSTAR中的STAR是不能再有:)。每行只能有一個標號,一個標號只能用在一處,如果有兩行用了同一個標號,則匯編時就會出錯。由于標號的長度沒有限制,可以用有意義的英文或漢語拼音來說明行,使源程序讀起來更方便。源程序中的字母不區(qū)分大小寫,也就是說star和STAR是一樣的,請不要用大小寫方式去區(qū)分不同的標號。好拉!規(guī)矩知道了,現(xiàn)在該來看看前面我們編寫的源程序該怎樣處理了:編寫源程序:先將編譯軟件安裝好(c51eval軟件的安
7、裝)。軟件安裝好我們就可以編寫程序了。第一步:雙擊Uvw51圖標,出現(xiàn)如圖一所示的主界面第二步:新建文件這時我們就中以在這里編輯程序了。如圖二所示單擊菜單欄內的文件-新建”或者單擊圖標按鈕則在上圖所示的灰色區(qū)域內岀現(xiàn)一個白色的編輯區(qū),圖二第三步:編程程序建立了一個新的編程文件后,我們就可以在這里編寫我們所需要的程序了,下面我們就來編寫前面所說的程序吧。!如圖三所示:第四步:保存文件程序編寫好了,我們當然要記得保存了,要不我們編寫程序就白費勁了。好了,下面我們將上面編寫的程序保存起來:單擊文件-保存”或者單擊圖標匚,出現(xiàn)如圖四所示的對話框:圖四這時參照圖五所示將對話框的內容設置好:c51eval
8、保存文件時默認的文件擴展是名*.C,請按圖五所示改變?yōu)闉?.a51:圖五我們這里就先將文件保存在D/DDW文件夾中,文件名你可以隨便取,這里先叫他為LED.a51;需強調的是保存文件的文件夾和文件名不能使用中文!即保存文件時不能以如下格式保存:正確的保存路徑:D/DDW/LED.a51當然,保存的文件夾名DDW、編寫的程序的文件名LED,你都可以隨意的取一個,可以是D/ABC/000.a51。這就取決于你的興趣了。錯誤的保存路徑:D/源程序/DDW/LED.a51,或者是D/DDW流水燈程序.a51??傊谠闯绦虻谋4媛窂较虏荒苡兄形牡膶绗F(xiàn),同時文件名不能取的太長。第五步:建立項目將匯編的源程
9、序保存后,還沒有得到我們所需要的文件,這時我們還需要再建立項目,以便得到我們所需的hex文件。新建項目的步驟如下:首先先打開新建項目的對話框文件,如圖六所示:圖六點擊新建項目后岀現(xiàn)如圖七所示的對話框,我們將對話框的參數(shù)設定好。將文件名設置成與剛才源程序的文件名相同,即設為LED.prj,同時保存的路徑跟前面的源程序保存的路徑一樣,在D/DDW上。現(xiàn)在就可以把剛才建立的項目文件LED.prj添加到剛保存的LED.A51源程序上了,注意它們都在同一個根目錄下。圖七按圖七所示操作后,會出現(xiàn)如圖八所示的對話框:圖八點擊“(A)加”出現(xiàn)如圖九所示畫面:圖九按圖九所示完成操作后,軟件會自動打開一個對話框,
10、如圖十所示:圖十如圖十所示點擊保存后,系統(tǒng)會自動回復到匯編狀態(tài)。這時點擊*創(chuàng)建所有圖標*按鈕,則進行了轉換,并出現(xiàn)如圖十一所示的狀態(tài)顯示畫面:圖十一完成上述操作后,在圖十一,我們看到了創(chuàng)建成功了的提示畫面,這時我們點擊0K就大功告成了。打開我們文件的保存路徑:我的電腦/D/DDW我們可以看到包含hex文件在內的所有相關程序文件了。我們上面的項目文件也在其中了。他的名字叫作LED.hex文件。好啦,到此我們已將第一個流水燈程序編寫、編譯、燒寫進行完啦,再下來就是將燒寫好的AT89C51從編程器上取下,放到SP-51實驗板”學習套件的實驗部份通電讓LED1LED8流水”說明:由于單片機的時鐘高達1
11、2MHz,8個LED發(fā)光與熄滅的時間很短,實際實驗結果憑我們的肉眼是看不到流水效果的!那怎樣才能讓我們肉眼看到流水”燈效果呢?請繼續(xù)學習下節(jié)課流水燈實驗詳解二上一節(jié)的實驗最后沒有得到“流水”顯示的效果,主要是單片機執(zhí)行每條指令的時間很短,我們肉眼無法看到LED的熄滅與點亮。單片機內部能按部就班的自動工作,正是在系統(tǒng)時鐘的作用下,內部各邏輯硬件產(chǎn)生各種所需脈沖信號而實現(xiàn)的。這個時鐘信號(既晶體振蕩信號)的周期稱“振蕩周期”。我們這個實驗中晶體使用的是12MHZ.在單片機中,要處理最短周期的一條指令需要由12個振蕩周期(既晶振振蕩周期)組成的,這個叫“機器周期”。8051核的單片機,大多數(shù)指令只用
12、一個機器周期(既單周期),也有雙周期和四周期的指令。本實驗中用到的SETBP.x和CLRP.x均屬于單周期指令,也就是說,執(zhí)行一句SETBP.x用時僅1uS(微秒),CLRP.x也是1uS;難怪我們前面的程序不能看到流水效果。現(xiàn)在,將程序改動一下,在每點亮一個LED后,讓程序干點別的事,也就是讓它等一會再將該LED熄滅,繼續(xù)執(zhí)行下面的程序:DDW:;程序開始CLRP1.0;LED1亮ACALLDELAY;調用延時子程序SETBP1.0;LED1滅CLRP1.1;換燈,同上ACALLDELAYSETBP1.1?CLRP1.2ACALLDELAY帚SETBP1.2?CLRP1.3?ACALLDEL
13、AY?SETBP1.3?CLRP1.4曠ACALLDELAYSETBP1.4CLRP1.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;延時子程序結束,返回到調用處的下一句END?請將上面的程序保存為ILED.asm,進行編譯,并燒寫到AT89S51中,之后將89S51安裝到
14、套件的實驗部份插座上實驗,這回顯示的就是“流水燈”的效果了???回過頭,讓我們看看延時子程序是怎樣工作的:單片機內部有不少寄存器,這些寄存器在單片機通電時,你可以給他寫入數(shù)據(jù)(是單片機按你程序要求寫的數(shù)據(jù),而不是編程器寫的),當?shù)诙谓o他寫入新數(shù)據(jù)時,前次的數(shù)據(jù)就被新數(shù)據(jù)覆蓋;當然也可以從寄存器中讀取數(shù)據(jù)。當單片機沒有電源供給時,寄存器內部的數(shù)據(jù)也隨即消失;這些寄存器人們叫他RAM而用編程器將我們編寫的程序燒寫到單片機中的存儲器叫ROM現(xiàn)在,我們應該清楚:RAM是讓程序去使用的,ROM!我們編寫的程序存放的地方!前面說過,單片機內部有不少RAM本實驗用的AT89C51有多少寄存器?我們現(xiàn)在不必關
15、心,現(xiàn)在只須知道單片機內部有名叫R0R7的這8個寄存器。這8個寄存器每個都由8個單獨的位寄存器組成,最大存放數(shù)據(jù)為二進制的11111111,十六進制=FF,十進制=255。在使用時注意不要大于其有效范圍。上面延時程序中,先用到MOVR1,#50,MO是移動的意思,該句是將50這個十進制數(shù)放到R1中;50是立即數(shù),按匯編語言要求前面要加“#”號,匯編語言還規(guī)定,十六進制數(shù)后面要加“?H”,十六進制數(shù)的高位是字母時在字母前面還要加“0”,例如:#0F8H;二進制數(shù)后面加“B”,例如:#11110000B。十進制不加,例如:#100。延時程序的第二、三句為:MOVR2,#100;MOVR3,#100
16、;這兩句意思同前。第四句中DJNZR3,$的意思是將R3里面的數(shù)減1后如果R3不等于0則跳到后面指定的程序位置,這里的“$”既要跳轉的程序位置,“$”代表當前語句處,也就是說,R3不等于0,程序返回再次執(zhí)行本句。如果R3減1后等于0,程序結束本句,繼續(xù)執(zhí)行下面的語句。延時程序的最后一句是RET,意思是退岀本子程序,返回到調用本子程序處的下一句。根據(jù)上面的解釋,一進入延時子程序首先為R1,R2,R3寄存器裝入我們需要的數(shù)據(jù),然后先對R3進行減數(shù),每次減1,R3減完后減R2,減R2時就費事啦,因為R2每減1后不為0需要跳轉到AD11標號處執(zhí)行下面的語句,此時R3再次裝入數(shù)據(jù)100,并且還要再次對R
17、3進行減數(shù),R2減完后減R1,減R1的過程你研究研究看看。每執(zhí)行DJNZ?Rn,rel(Rn指R0R7,rel指轉移地址)指令一次,需要2個機器周期,單片機需耗時2uS(指本實驗),若忽略裝數(shù)等語句,延時子程序從開始到結束,單片機共耗時100*100*50*2nS,既1000000uS=1秒!若加上裝數(shù)等語句的耗時,延時時間大于1秒。到此,我們做的流水燈已成功,原理大致也明白啦,若你自認為這一課你完全明白了,那請你將“流水燈”的流向改變一下,也可以改為兩邊向內流,內部向外流,我想你一定能用前面學到的方法實現(xiàn)這些功能??赡苡行└呤终f,前面的編程方法是最最笨的!,不錯!但玩單片機初期不必講究語言的
18、簡練,只要能完成預先要求就好,這是初學者要知道的。那么還有更好的編程思路嗎?有!請繼續(xù)學習下節(jié)課做流水燈實驗詳解三在上節(jié)課中讓LED流水是去逐個控制P1端口的每個位來實現(xiàn)的,那么我們在程序一開始就給P1口送一個數(shù),這個數(shù)本身就讓P1.0先低,其他位為高,然后讓這個數(shù)據(jù)向高位移動不就實現(xiàn)流水”效果啦?的確如此!可惜,8051沒有讓P1數(shù)據(jù)移動的指令,但有對累加器ACC中數(shù)據(jù)左移或右移的指令,ACC是8051單片機內部算術邏輯單元中的一個寄存器”(這里叫他寄存器是不正確的,但你可以先這樣理解,ACC在指令中常寫為A),他在數(shù)據(jù)傳輸和數(shù)據(jù)處理過程中作用十分重要,ACC為8位。他可與片內所有單字節(jié)寄存器交換數(shù)據(jù),實際上P1和其他端口在單片機中也是一個寄存器。這樣我們可以將需移動的數(shù)據(jù)先放到ACC中,讓其移動,然后將ACC移動后的數(shù)據(jù)再轉送到P1口,這樣同樣可以實現(xiàn)流水”效果。程序如下:DDW:?;開始MOVACC,#0FEHtACC中先裝入LED1熄滅的數(shù)據(jù)(即二進制的11111110)MOVP1,ACC;將ACC的數(shù)據(jù)送P1口MOVR0,#7;因上句送到?p1口的數(shù)據(jù)就熄滅了一位,所以將數(shù)據(jù)再移動7次就完成一個8位流水過程LOOP:?;數(shù)據(jù)移動循環(huán)R
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年嗎丁啉項目可行性研究報告
- 2025-2030年攝像頭智能追蹤行業(yè)跨境出海戰(zhàn)略研究報告
- 2025-2030年護膚新品預售活動行業(yè)深度調研及發(fā)展戰(zhàn)略咨詢報告
- 2025-2030年商場促銷執(zhí)行機器人行業(yè)深度調研及發(fā)展戰(zhàn)略咨詢報告
- 2025-2030年數(shù)字化功率因數(shù)測試儀行業(yè)跨境出海戰(zhàn)略研究報告
- 2025-2030年塑木戶外標識系統(tǒng)行業(yè)跨境出海戰(zhàn)略研究報告
- 中國影音娛樂行業(yè)發(fā)展監(jiān)測及投資戰(zhàn)略咨詢報告
- 2025年歐美新型吸音棉項目投資可行性研究分析報告
- 2020-2025年中國寵物保健品行業(yè)競爭格局分析及投資潛力研究報告
- 醫(yī)療儀器設備及器械制造行業(yè)分析報告
- DB32-T 3129-2016適合機械化作業(yè)的單體鋼架塑料大棚 技術規(guī)范-(高清現(xiàn)行)
- 《花婆婆》兒童繪本故事
- DB44∕T 2149-2018 森林資源規(guī)劃設計調查技術規(guī)程
- 數(shù)據(jù)結構英文教學課件:chapter10 Hashing
- 藍色卡通風學生班干部競選介紹PPT模板課件
- 人教新目標英語九年級上冊單詞中文Units
- 機動車牌證申請表格模板(完整版)
- 《國家電網(wǎng)公司十八項電網(wǎng)反事故措施(試行)》實施細則
- 鋼絲網(wǎng)架珍珠巖夾心板安裝方法
- 工藝管廊架施工方案
- 六宮格數(shù)獨解題技巧
評論
0/150
提交評論