51單片機(jī)匯編語(yǔ)言_第1頁(yè)
51單片機(jī)匯編語(yǔ)言_第2頁(yè)
51單片機(jī)匯編語(yǔ)言_第3頁(yè)
51單片機(jī)匯編語(yǔ)言_第4頁(yè)
51單片機(jī)匯編語(yǔ)言_第5頁(yè)
已閱讀5頁(yè),還剩14頁(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、精選文檔51單片機(jī)匯編語(yǔ)言a)單個(gè)與多個(gè)LED燈,位操作與字節(jié)操作—輸出ORG 0000HSTART:CLR CMOV P0.0,CMOV P1.1,CMOV P2.2,CMOV P3.3,CCLR ACPL AMOV P0,AMOV P1,AMOV P2,AMOV P3,AEND程序說(shuō)明:可以用7段數(shù)碼管來(lái)代替各端口的8個(gè)LED燈,硬件的這種顯示方式使得數(shù)字表達(dá)成為實(shí)用。數(shù)字顯示由數(shù)碼管的硬件結(jié)構(gòu)與工作原理(7個(gè)LED燈的幾何變形組合)和數(shù)字表達(dá)的數(shù)據(jù)格式確定。如:共陽(yáng)極數(shù)碼管顯示數(shù)字3,則有P1口送數(shù)據(jù)#4FH;MOVP1, #0B0H共陰極數(shù)碼管顯示數(shù)字8,則有P1口

2、送數(shù)據(jù)#80H;MOVP1, #7F H用數(shù)據(jù)表表示則有:TABshuziyang: /陽(yáng)極管(共陰極管取反即可)DB(數(shù)字0F)C0H,F9H,A4H,B0H,99H,92H,82H,F8H,80H,90H,88H,83H,C6H,A1H,86H,8EHTABshuziyin: /陰極管(共陽(yáng)極管取反即可)DB(數(shù)字0F)3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71Hb)單個(gè)與多個(gè)LED燈閃爍—延時(shí)子程序—注意定時(shí)器前邊已經(jīng)看到,通過(guò)改變位或字節(jié)的賦值,可以使得LED燈亮或

3、滅,以此形成閃爍效果。但是硬件的響應(yīng)時(shí)間太短,使得效果不佳。雖然可以通過(guò)改變單片機(jī)的時(shí)鐘設(shè)置來(lái)改變效果。但時(shí)鐘的改變極其不方便,因此需要利用延時(shí)指令(注意定時(shí)器功能)獲得理想的效果。延時(shí)效果是利用單片機(jī)空轉(zhuǎn)來(lái)實(shí)現(xiàn)的。ACALLDELAY;調(diào)延時(shí)子程序*DELAY:;延時(shí)子程序—這是一個(gè)非常有用、而且常見(jiàn)的一個(gè)子程序MOV R5,#04H;將16進(jìn)制數(shù)04H傳遞給寄存器R5F3:MOV R6,#0FFH;將16進(jìn)制數(shù)0FFH傳遞給寄存器R6F2:MOV R7,#0FFH;將16進(jìn)制數(shù)0FFH傳遞給寄存器R7F1:DJNZR7, F1;寄存器R7減1非0跳轉(zhuǎn)到F1,直到減為0順

4、序執(zhí)行下一指令DJNZR6, F2;寄存器R6減1非0跳轉(zhuǎn)到F2,直到減為0順序執(zhí)行下一指令DJNZR5, F3;寄存器R5減1非0跳轉(zhuǎn)到F3,直到減為0順序執(zhí)行下一指令RET;子程序結(jié)束,返回子程序入口處ACALLDELAY;調(diào)延時(shí)子程序*應(yīng)用實(shí)例MAIN:CLR C MOV P0.0,C MOV P1.1,C MOV P2.2,CMOV P3.3,C ACALLDELAY;調(diào)延時(shí)子程序;CLR ACPL AMOV P0,AMOV P1,AMOV P2,AMOV P3,AACALL DELAY;調(diào)延時(shí)子程序SJMP MAIN ;相對(duì)轉(zhuǎn)移時(shí)間短,用AJMP絕對(duì)轉(zhuǎn)移時(shí)間長(zhǎng),RET是用于子程序的返

5、回DELAY:;延時(shí)子程序-這是一個(gè)非常有用、而且常見(jiàn)的一個(gè)子程序MOV R5,#04H;將16進(jìn)制數(shù)04H傳遞給寄存器R5F3:MOV R6,#0FFH;將16進(jìn)制數(shù)0FFH傳遞給寄存器R6F2:MOV R7,#0FFH;將16進(jìn)制數(shù)0FFH傳遞給寄存器R7F1:DJNZR7, F1 ;寄存器R7減1非0跳轉(zhuǎn)到F1,直到減為0順序執(zhí)行下一指令DJNZR6, F2 ;寄存器R6減1非0跳轉(zhuǎn)到F2,直到減為0順序執(zhí)行下一指令DJNZR5, F3 ;寄存器R5減1非0跳轉(zhuǎn)到F3,直到減為0順序執(zhí)行下一指令RET;子程序結(jié)束,返回子程序入口處ACALLDELAY;調(diào)延時(shí)子程序 END程序說(shuō)明:注意延

6、時(shí)子程序中的DJNZR7, F1;DJNZR6, F2;DJNZR5, F3;通過(guò)增加或減少循環(huán)數(shù)目控制或改變延時(shí)時(shí)間c)單個(gè)與多個(gè)LED燈流動(dòng)—位循環(huán)、字節(jié)循環(huán)與延時(shí)子程序ORG 0000HMAIN:;*位循環(huán)—掃描—流水燈—逐級(jí)增加燈的數(shù)目*CLR C MOV P0.0,C ACALLDELAY;調(diào)延時(shí)子程序 MOV P0.1,CACALLDELAY MOV P0.2,CACALLDELAY MOV P0.3,C ACALLDELAY MOV P0.4,C ACALLDELAY MOV P0.5,C ACALL

7、DELAY MOV P0.6,C ACALLDELAY MOV P0.7,CACALLDELAY;注意前面各位狀態(tài)一直持續(xù)。P0口各位電平保持不變;*位循環(huán)—流水燈—逐個(gè)改變燈亮與滅*CLR C MOV P0.0,C ACALLDELAY;調(diào)延時(shí)子程序 CPL C MOV P0.0,CACALLDELAY CLR C MOV P0.1,C ACALLDELAY CPL C MOV P0.1,C ACALLDELAY CLR C MOV P0.2,C ACALLDELAY CPL C MOV P0.2,C ACALLDELAY CLR C MOV P0.3

8、,C ACALLDELAY CPL C MOV P0.3,C ACALLDELAY CLR C MOV P0.4,C ACALLDELAY CPL C MOV P0.4,CACALLDELAYCLR C MOV P0.5,C ACALLDELAY CPL C MOV P0.5,CACALL DELAY;注意前面各位狀態(tài)—電平、輸出狀態(tài)變化……、……;*字節(jié)循環(huán)—逐級(jí)增加輸出口的數(shù)目*CPL AMOV P0,AACALLDELAYMOV P1,AACALLDELAYMO

9、V P2,AACALLDELAYMOV P3,AACALLDELAY;*字節(jié)循環(huán)—流水燈—逐漸改變燈的亮滅狀態(tài)*MOV P2,#01H;注意:#01H #02H #04H #08H #80H #40H #20H #10H陽(yáng)極管ACALLDELAYMOV P2,#02H;注意:#FEH #FDH #FBH #F7H #7FH #BFH #DFH #EFH陰極管ACALLDELAYMOV P2,#04HACALLDELAYMOV P2,#08HACALLDELAY MOV P2,#10HACALLDELAY MOV P2,#20H ACALLDELAYMOV

10、 P2,#40HACALLDELAYMOV P2,#80HACALLDELAY;*字節(jié)循環(huán)—數(shù)碼管—字符(數(shù)字、字母等)*MOV P1,#40H;改變字節(jié)中各位的電平狀態(tài),以便控制輸出、顯示所要求的內(nèi)容ACALLDELAYMOV P1,#79HACALLDELAYMOV P1,#24HACALLDELAYMOV P1,#30HACALLDELAYMOV P1,# 19HACALLDELAYMOV P1,#12HACALLDELAYMOV P1,#02HACALLDELAY MOV P1,#78HACALLDELAYSJMP MAIN ;相對(duì)轉(zhuǎn)移時(shí)間短,用

11、AJMP絕對(duì)轉(zhuǎn)移時(shí)間長(zhǎng),RET是用于子程序的返回;*延時(shí)子程序*DELAY:;延時(shí)子程序—去除一個(gè)循環(huán),時(shí)間變短了。MOV R6,#04H ;將16進(jìn)制數(shù)04H傳遞給工作寄存器R6。改變#04H為#3FH時(shí)間變長(zhǎng)F2:MOV R7,#0FFH;將16進(jìn)制數(shù)0FFH傳遞給工作寄存器R7F1:DJNZR7, F1 ;寄存器R7減1非0跳轉(zhuǎn)到F1,直到減為0順序執(zhí)行下一指令DJNZR6, F2 ;寄存器R6減1非0跳轉(zhuǎn)到F2,直到減為0順序執(zhí)行下一指令RET ;子程序結(jié)束,返回子程序入口處ACALLDELAY;調(diào)延時(shí)子程序 END;*字節(jié)循環(huán)—數(shù)碼管&

12、mdash;字符(數(shù)字、字母等)—數(shù)表與指針*MAIN:CLR A MOV P3,#00H MOV P0,#00H MOV P2,#00HMOV R0,#00H;寄存器中放數(shù)值0 MOV DPTR,#TABZshuzi ;指針PC指向數(shù)表 DISP:;段標(biāo)記MOV A,R0 ;將寄存器中的數(shù)值轉(zhuǎn)移到累加器中 MOVC A,A+DPTR;以DPTR作為基礎(chǔ),與累加器相加得到新地址給累加器 MOV P3,A;將累加器的地址給P3口 MOV P0,A SETB p2.3 ;一位數(shù)顯示位控制;個(gè)位 SETB p2.7 ACALL DELAY;調(diào)延時(shí)子程序 ACALL DELAY I

13、NC R0 ;寄存器R0加1 CJNE R0,#16H,DISP ;寄存器與立即數(shù)18比較,不相等則轉(zhuǎn)移到DISP循環(huán)。相等則順序執(zhí)行 TABshuziyang:/陽(yáng)極管DB C0H,F9H,A4H,B0H,99H,92H,82H,F8H,80H,90H,88H,83H,C6H,A1H,86H,8EH,0FFHTABshuziyin:/陰極管DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,0FFHEND;*字節(jié)循環(huán)—數(shù)碼管—字符(數(shù)字、字母等)—移位控

14、制*RL A將累加器的值左移一位RLC A將累加器含進(jìn)位C左移一位RR A將累加器的值右移一位RRC A將累加器含進(jìn)位C右移一位1單個(gè)按鍵,單個(gè)與多個(gè)LED燈—最小系統(tǒng)—位輸入與位、字節(jié)輸出—判斷與子程序a)單個(gè)按鍵與單個(gè)LED燈(位操作—輸入與輸出)—判斷與子程序b)單個(gè)按鍵與多個(gè)LED燈(位操作—輸入與字節(jié)操作—輸出)c)單個(gè)按鍵與多個(gè)LED燈(位操作—輸入與位、字節(jié)操作—輸出)d)單個(gè)按鍵與單個(gè)電機(jī)控制&

15、;mdash;開(kāi)環(huán)控制1單個(gè)按鍵,單個(gè)與多個(gè)LED(位操作—輸入與位、字節(jié)操作—輸出)—最小系統(tǒng)a)單個(gè)按鍵,單個(gè)LED燈(位操作與位輸入、輸出)—有、無(wú)判斷而傳送數(shù)據(jù)通過(guò)三個(gè)方面(程序指令、虛擬仿真、實(shí)體電路)探討單輸入與單輸出:主要是理解位數(shù)據(jù)傳送,包括匯編語(yǔ)言的數(shù)據(jù)傳送指令實(shí)踐、實(shí)際虛擬電路的數(shù)據(jù)傳送響應(yīng),以體現(xiàn)抽象與具體的可理解性。?單輸出的電子線(xiàn)路—靜態(tài)特性—動(dòng)態(tài)特性,指令控制輸出?單輸入與單的電子線(xiàn)路—靜態(tài)特性(線(xiàn)路組成與結(jié)構(gòu))?單輸入與單輸出

16、電子線(xiàn)路的控制指令—動(dòng)態(tài)特性(行為與狀態(tài));分號(hào),這是一種注釋方式符號(hào)ORG0000H ;這是偽指令,機(jī)器并不執(zhí)行,用于程序的交流。指令執(zhí)行的起始地址,十進(jìn)制用D表示,十六進(jìn)制用H表示,二進(jìn)制用B表示。一個(gè)字節(jié)(8位機(jī)、16位機(jī)、32位機(jī)、64位機(jī))一次執(zhí)行。也可以按位來(lái)執(zhí)行,也就是一個(gè)bit。ORG00000000B與ORG0000H作用相同。注意8位(bit)一個(gè)字節(jié)。16位的處理器需要用0000 0000H表示。16或32位以上,使用操作系統(tǒng)(Wince、Linux等)更有效,可以利用大量的、底層的、專(zhuān)業(yè)化、標(biāo)準(zhǔn)化的面向控制的庫(kù)函數(shù)(如:API等)。START:;這是

17、偽指令,機(jī)器并不執(zhí)行。只是為了匯編語(yǔ)言講故事的可理解性MAIN: ;偽指令,主程序,用于區(qū)別子程序 PC→MOVA,#00H;將立即數(shù)00000000B(常數(shù)0D)傳送給累加器ACC(專(zhuān)用寄存器,可用于存放計(jì)算結(jié)果等)。要通過(guò)累加器A和其它存儲(chǔ)地址進(jìn)行數(shù)據(jù)交換。注意PC是自動(dòng)移位(自動(dòng)+1)到下一個(gè)語(yǔ)句的地址。使用該語(yǔ)句實(shí)質(zhì)上是讓PC具有初始位置。PC→MOVP1,A;將累加器中的數(shù)(常數(shù)0D)傳送給端口P1(P1口8位全部置0,低電平,P1端口各位處于關(guān)閉狀態(tài),LED燈處于系統(tǒng)響應(yīng)的準(zhǔn)備狀態(tài)),按字節(jié)傳送數(shù)據(jù)。特別記憶:PC→表示指針?biāo)?/p>

18、地址,并會(huì)自動(dòng)加1。輸出口—字節(jié)PC→MOVC,0A0H;檢測(cè)P2.0口的狀態(tài),將P2.0口的狀態(tài)(由按鍵狀態(tài)決定)傳送給位累加器C,位累加器C的地址是PSW(程序狀態(tài)字寄存器)的進(jìn)位標(biāo)志位CY(D7HPSW.7)。P2.0口可以是開(kāi)或關(guān),也就是置1或0,高電平或低電平),按字節(jié)傳送數(shù)據(jù)。要通過(guò)位累加器C和其它存儲(chǔ)地址進(jìn)行數(shù)據(jù)交換。該語(yǔ)句也可以寫(xiě)成:MOVC,P2.0,比較字節(jié)數(shù)據(jù)傳送MOVA,#00H或MOVA,P1。輸入口—位PC→MOVP1.0,C ;等價(jià)于MOV90H,C;將位累加器C地址中的值傳送給P1.0口(90H是其直接地址),也就是將P2.0口的狀態(tài)(由直接地址0A0H狀態(tài)決定)傳送給直接地址90H,P1.0口,輸出口—位PC→MOVP1.1,C;等價(jià)于MOV91H,CPC→MOVP1.2,C;等價(jià)于MOV92H,CPC→MOVP1.3,C;等價(jià)于MOV93H,C等等END;偽指令,程序結(jié)束標(biāo)志程序說(shuō)明:?jiǎn)蝹€(gè)按鍵控制單個(gè)LED燈及其狀態(tài),也可以控制若干個(gè)LED燈及其狀態(tài)。也就是多個(gè)LED燈,單個(gè)按鍵。反過(guò)來(lái),可以是多個(gè)按鍵控制單個(gè)燈或多個(gè)按鍵控制多個(gè)LED燈。通

溫馨提示

  • 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)論