任務(wù)9__用自制的跑馬燈電路實(shí)現(xiàn)8只LED循環(huán)點(diǎn)亮_第1頁(yè)
任務(wù)9__用自制的跑馬燈電路實(shí)現(xiàn)8只LED循環(huán)點(diǎn)亮_第2頁(yè)
任務(wù)9__用自制的跑馬燈電路實(shí)現(xiàn)8只LED循環(huán)點(diǎn)亮_第3頁(yè)
任務(wù)9__用自制的跑馬燈電路實(shí)現(xiàn)8只LED循環(huán)點(diǎn)亮_第4頁(yè)
任務(wù)9__用自制的跑馬燈電路實(shí)現(xiàn)8只LED循環(huán)點(diǎn)亮_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、9.1.1 明確工作任務(wù) 用任務(wù)3制作的8位LED跑馬燈電路,通過(guò)編寫(xiě)程序控制與P0口相連的8個(gè)LED燈循環(huán)點(diǎn)亮,每個(gè)燈點(diǎn)亮的時(shí)間為0.5秒。任務(wù)任務(wù)9 用自制的跑馬燈電路實(shí)現(xiàn)用自制的跑馬燈電路實(shí)現(xiàn)8只只LED循環(huán)點(diǎn)亮循環(huán)點(diǎn)亮 9.1.2 跟我想 1 編寫(xiě)跑馬燈程序思路 該任務(wù)要求通過(guò)編寫(xiě)程序,使連接P0口的8個(gè)LED燈循環(huán)點(diǎn)亮(跑馬燈),每個(gè)燈點(diǎn)亮的時(shí)間為0.5秒。怎樣來(lái)編寫(xiě)程序呢?我們用一個(gè)寄存器R1存儲(chǔ)用于點(diǎn)亮P0口的LED燈的數(shù)據(jù),R1首先存儲(chǔ)點(diǎn)亮與P0.0相連的LED燈D0(數(shù)據(jù)為:0000001H),可以通過(guò)指令MOV P0,R1將與P0.0相連的LED0點(diǎn)亮,然后調(diào)用延時(shí)0.5秒

2、的程序,延時(shí)時(shí)間到后,可以帶進(jìn)位位左移指令RR A,將R1中的數(shù)據(jù)左移一位(數(shù)據(jù)為:00000010),再送給P0口,點(diǎn)亮與P0.1相連的LED燈D1,依次類(lèi)推;用寄存器R2存儲(chǔ)LED燈從D0移動(dòng)到D7的移動(dòng)次數(shù)為8次,每移一次減1,R2的值為0時(shí),表示第1次循環(huán)結(jié)束,接下來(lái)又從點(diǎn)亮D0開(kāi)始下一個(gè)循環(huán),就這樣反復(fù)循環(huán)點(diǎn)亮,達(dá)到跑馬燈的效果。 在編寫(xiě)程序之前,讓我們學(xué)一學(xué)相關(guān)指令的功能和用法。任務(wù)任務(wù)9 用自制的跑馬燈電路實(shí)現(xiàn)用自制的跑馬燈電路實(shí)現(xiàn)8只只LED循環(huán)點(diǎn)亮循環(huán)點(diǎn)亮 9.1.3 跟我學(xué)跟我學(xué)1)減)減1不為零循環(huán)轉(zhuǎn)移指令不為零循環(huán)轉(zhuǎn)移指令DJNZ DJNZ Rn,rel ;PCPC+2

3、,Rn(Rn)-1,若(Rn)0,則PCPC+rel DJNZ direct,rel ;PCPC+2, direct(direct)-1,若(direct)0,則 PCPC+rel; 每執(zhí)行一次循環(huán)轉(zhuǎn)移指令,第一操作數(shù)(Rn或direct中的數(shù))減1,并保存,若減1后結(jié)果不為零,則轉(zhuǎn)移至目的地(標(biāo)號(hào)處);若減1后結(jié)果為零,則程序按順序執(zhí)行下一條指令。 任務(wù)任務(wù)9 用自制的跑馬燈電路實(shí)現(xiàn)用自制的跑馬燈電路實(shí)現(xiàn)8只只LED循環(huán)點(diǎn)亮循環(huán)點(diǎn)亮 2)移位指令)移位指令 移位指令的功能是對(duì)累加器A的內(nèi)容進(jìn)行循環(huán)移位,除了帶進(jìn)位標(biāo)志位CY的移位指令會(huì)影響CY外,其它指令都不影響CY、AC、OV等標(biāo)志位。 R

4、L A ;循環(huán)左移指令; RLC A ;帶進(jìn)位位循環(huán)左移指令;圖6-1 RL A指令示意圖圖6-2 RLC A 指令示意圖任務(wù)任務(wù)9 用自制的跑馬燈電路實(shí)現(xiàn)用自制的跑馬燈電路實(shí)現(xiàn)8只只LED循環(huán)點(diǎn)亮循環(huán)點(diǎn)亮 RR A ;循環(huán)右移指令; RRC A ;帶進(jìn)位位循環(huán)右移指令; 任務(wù)任務(wù)9 用自制的跑馬燈電路實(shí)現(xiàn)用自制的跑馬燈電路實(shí)現(xiàn)8只只LED循環(huán)點(diǎn)亮循環(huán)點(diǎn)亮 3)堆棧操作指令)堆棧操作指令(1)堆棧的概念 堆棧就是按照堆放貨物(先堆下面,先搬上面,即后進(jìn)先出)的思路,設(shè)計(jì)一種按后進(jìn)先出原則組成的存儲(chǔ)區(qū),稱(chēng)為堆棧區(qū)。在51單片機(jī)中,片內(nèi)RAM都可用做堆棧區(qū)。 在使用堆棧前,應(yīng)設(shè)置一個(gè)棧底,告訴CP

5、U從那個(gè)地址單元開(kāi)始堆放數(shù)據(jù),如棧底為40H單元,第1個(gè)數(shù)(設(shè):#30H)存放在棧底的上一個(gè)單元41H中,則第2個(gè)數(shù)存放42H單元中,如果有多個(gè)數(shù)要堆放在堆棧區(qū)中,以此類(lèi)推,當(dāng)用戶(hù)取數(shù)時(shí),則先從最頂部開(kāi)始,即最后存的數(shù)先取出。在51單片機(jī)中有一個(gè)專(zhuān)門(mén)的堆棧指針寄存器SP,用于存放棧頂單元的地址。任務(wù)任務(wù)9 用自制的跑馬燈電路實(shí)現(xiàn)用自制的跑馬燈電路實(shí)現(xiàn)8只只LED循環(huán)點(diǎn)亮循環(huán)點(diǎn)亮 (2)堆棧的作用堆棧的作用是在子程序調(diào)用與中斷時(shí),用于保存斷點(diǎn)地址及片內(nèi)數(shù)據(jù)單元的內(nèi)容。(3)堆棧的使用方法 需要用到堆棧時(shí),首先通過(guò)MOV SP,#data指令設(shè)置棧底,如:MOV SP,#60H. 注意:注意:51

6、單片機(jī)復(fù)位后,默認(rèn)的棧底為07H,即SP的默認(rèn)值為07H。因07H地址在RAM的工作寄存器區(qū),所以用07H作為棧底,不是很合適,使用時(shí)必須另設(shè)棧底。在子程序調(diào)用或響應(yīng)中斷后,CPU會(huì)直接將斷點(diǎn)地址壓入堆棧區(qū),但是要將某個(gè)數(shù)據(jù)保存在堆棧區(qū)就必須用壓棧指令PUSH和出棧指令POP。任務(wù)任務(wù)9 用自制的跑馬燈電路實(shí)現(xiàn)用自制的跑馬燈電路實(shí)現(xiàn)8只只LED循環(huán)點(diǎn)亮循環(huán)點(diǎn)亮 壓棧指令格式為:PUSH direct ;SPSP+1 ;(SP)(direct) 執(zhí)行時(shí)堆棧指針SP先加1,然后將直接地址direct中的數(shù)據(jù)壓至SP所指定的地址單元。如:MOV SP ,#50H ;設(shè)置棧底為50H單元 MOV 30

7、H,#25H ;將立即數(shù)25H送30H單元 PUSH 30H ;將30H中的數(shù)據(jù)25H壓入堆棧區(qū)51H單元出棧指令格式為:POP direct ;(direct)(SP) ;SPSP-1 該指令執(zhí)行時(shí)先將SP所指單元數(shù)據(jù)彈出至direct所指的地址單元,然后SP減1指向新的棧頂單元地址。 4)子程序調(diào)用指令)子程序調(diào)用指令 子程序調(diào)用指令的功能調(diào)用子程序,執(zhí)行時(shí)先將斷點(diǎn)地址(調(diào)用指令的下一條指令的首地址)壓入堆棧區(qū),然后將子程序的首地址送PC,執(zhí)行子程序。 (1)長(zhǎng)調(diào)用指令LCALL addr16 ;PCPC+3 ;SPSP+1 ;(SP)PC7-0 ;SPSP+1 ;(SP)PC15-8 ;

8、 PCaddr16 這條指令調(diào)用地址為addr16(在寫(xiě)程序時(shí)都用子程序標(biāo)號(hào))處的子程序。執(zhí)行時(shí),先將PC+3(因?yàn)樵撝噶钍?字節(jié)指令)以獲得下一條指令的首地址(斷點(diǎn)地址),并把它壓入SP所指定的堆棧區(qū),然后將子程序標(biāo)號(hào)所在的16位地址送PC指針,使CPU轉(zhuǎn)去執(zhí)行子程序。LCALL 中的addr16取值范圍為16位地址,所以子程序可位于程序存儲(chǔ)器64KB空間的任何一處。(2)短調(diào)用指令A(yù)CALL addr11 ;PCPC+2 ;SPSP+1 ;(SP)PC7-0 ;SPSP+1 ;(SP)PC15-8 ; PC10-0addr10-0 執(zhí)行該指令時(shí),先將PC+2得到下一條指令的16位首地址,并

9、將其壓入堆棧,最后子程序標(biāo)號(hào)所在的子程序入口地址送給PC,CPU轉(zhuǎn)入子程序執(zhí)行。由于短調(diào)用指令中的PC高5位地址不變,所以其轉(zhuǎn)移的范圍為2KB。任務(wù)任務(wù)9 用自制的跑馬燈電路實(shí)現(xiàn)用自制的跑馬燈電路實(shí)現(xiàn)8只只LED循環(huán)點(diǎn)亮循環(huán)點(diǎn)亮 ORG 0000H AJMP START ;轉(zhuǎn)移至標(biāo)號(hào)START ORG 0030H ;以下程序下載到單片機(jī)的ROM時(shí),從ROM的0030地址開(kāi)始存儲(chǔ) START: MOV R1, #00000001B ;將立即數(shù)01H送R1 MOV R2, #08 ;將立即數(shù)8送R2,循環(huán)8次(8個(gè)燈)LOOP: MOV A, R1 ;將R1中的數(shù)送A MOV P0, A ;將A中的數(shù)送P0口,點(diǎn)亮LED燈 CALL DEL1S ;調(diào)用延時(shí)子程序,控制亮燈時(shí)間 RL A ;A中的數(shù)據(jù)左移一位,為下一次亮燈作準(zhǔn)備 MOV R1, A ;左移后的數(shù)據(jù)存放在R1 DJNZ R2, LOOP ;循環(huán)了8次嗎?沒(méi)有則繼續(xù) AJMP START ;完成8次循環(huán),轉(zhuǎn)移至START重新開(kāi)始 ;*1秒鐘延時(shí)子程序* DEL1S: MOV R3,

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論