ORG 0000H
START:
程序說(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;
MOV P1, #0B0H
共陰極數(shù)碼管顯示數(shù)字8,則有P1口送數(shù)據(jù)#80H;
MOV P1, #7F H
用數(shù)據(jù)表表示則有:
TABshuziyang: //陽(yáng)極管(共陰極管取反即可)
DB (數(shù)字0~F)
C0H,F9H,A4H,B0H,99H,92H,82H,F8H,80H,90H,88H,83H,C6H,A1H,86H,8EH
TABshuziyin: //陰極管(共陽(yáng)極管取反即可)
DB(數(shù)字0~F)
前邊已經(jīng)看到,通過(guò)改變位或字節(jié)的賦值,可以使得LED燈亮或滅,以此形成閃爍效果。但是硬件的響應(yīng)時(shí)間太短,使得效果不佳。雖然可以通過(guò)改變單片機(jī)的時(shí)鐘設(shè)置來(lái)改變效果。但時(shí)鐘的改變極其不方便,因此需要利用延時(shí)指令(注意定時(shí)器功能)獲得理想的效果。延時(shí)效果是利用單片機(jī)空轉(zhuǎn)來(lái)實(shí)現(xiàn)的。
*************************************************************************
DELAY: ; 延時(shí)子程序 — 這是一個(gè)非常有用、而且常見(jiàn)的一個(gè)子程序
F3:
F2:
F1:
***************************************************************************
應(yīng)用實(shí)例
MAIN:
; CLR A
ACALL DELAY; 調(diào)延時(shí)子程序
SJMP MAIN ;相對(duì)轉(zhuǎn)移時(shí)間短,用AJMP絕對(duì)轉(zhuǎn)移時(shí)間長(zhǎng),RET是用于子程序的返回
F3:
F2:
F1:
程序說(shuō)明:
注意延時(shí)子程序中的DJNZ R7, F1;DJNZ R6, F2 ; DJNZ R5, F3 ;通過(guò)增加或減少循環(huán)數(shù)目控制或改變延時(shí)時(shí)間
ORG 0000H
MAIN:
;****************位循環(huán)—掃描—流水燈—逐級(jí)增加燈的數(shù)目*******************
CLR C MOV P0.0,C ACALL DELAY ; 調(diào)延時(shí)子程序
MOV P0.1,C ACALL DELAY MOV P0.2,C
ACALL DELAY MOV P0.3,C ACALL DELAY MOV P0.4,C
ACALL DELAY MOV P0.5,C ACALL DELAY MOV P0.6,C
;****************位循環(huán)—流水燈—逐個(gè)改變燈亮與滅*******************
CPL C MOV P0.0,C ACALL DELAY
CPL C MOV P0.1,C ACALL DELAY
CPL C MOV P0.2,C ACALL DELAY
CPL C MOV P0.3,C ACALL DELAY
CPL C MOV P0.4,C ACALL DELAY
CPL C MOV P0.5,C ACALL DELAY;注意前面各位狀態(tài)—電平、輸出狀態(tài)變化
……、……
;*******************字節(jié)循環(huán)—流水燈—逐漸改變燈的亮滅狀態(tài)*************
;****************字節(jié)循環(huán)—數(shù)碼管—字符(數(shù)字、字母等)**************
SJMP MAIN ;相對(duì)轉(zhuǎn)移時(shí)間短,用AJMP絕對(duì)轉(zhuǎn)移時(shí)間長(zhǎng),RET是用于子程序的返回
;*******************延時(shí)子程序***************************
F2:
F1:
MAIN:
CLR A
DISP: ;段標(biāo)記
TABshuziyang://陽(yáng)極管
DB C0H,F9H,A4H,B0H,99H,92H,82H,F8H,80H,90H,88H,83H,C6H,A1H,86H,8EH,0FFH
TABshuziyin: //陰極管
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,0FFH
END
;*************字節(jié)循環(huán)—數(shù)碼管—字符(數(shù)字、字母等)—移位控制***********
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ī)控制—開(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)抽象與具體的可理解性。
?? 單輸出的電子線路 — 靜態(tài)特性— 動(dòng)態(tài)特性,指令控制輸出
?? 單輸入與單的電子線路 — 靜態(tài)特性(線路組成與結(jié)構(gòu))
?? 單輸入與單輸出電子線路的控制指令 — 動(dòng)態(tài)特性(行為與狀態(tài))
;分號(hào),這是一種注釋方式符號(hào)
ORG 0000H ;這是偽指令,機(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。
ORG 00000000B與ORG 0000H作用相同。注意8位(bit)一個(gè)字節(jié)。16位的處理器需要用0000 0000H 表示。16或32位以上,使用操作系統(tǒng)(Wince、Linux等)更有效,可以利用大量的、底層的、專業(yè)化、標(biāo)準(zhǔn)化的面向控制的庫(kù)函數(shù)(如:API等)。
START: ;這是偽指令,機(jī)器并不執(zhí)行。只是為了匯編語(yǔ)言講故事的可理解性
PC→MOV P1,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)傅刂罚?huì)自動(dòng)加1。輸出口—字節(jié)
PC→MOV C,0A0H ;檢測(cè)P2.0口的狀態(tài),將P2.0口的狀態(tài)(由按鍵狀態(tài)決定)傳送給位累加器C,位累加器C的地址是PSW(程序狀態(tài)字寄存器)的進(jìn)位標(biāo)志位CY(D7H\PSW.7)。P2.0口可以是開(kāi)或關(guān),也就是置1或0,高電平或低電平),按字節(jié)傳送數(shù)據(jù)。要通過(guò)位累加器C和其它存儲(chǔ)地址進(jìn)行數(shù)據(jù)交換。該語(yǔ)句也可以寫(xiě)成:MOV C,P2.0,比較字節(jié)數(shù)據(jù)傳送MOV A,#00H或MOV A,P1。輸入口—位
PC→MOV P1.0,C ;等價(jià)于MOV 90H,C ;將位累加器C地址中的值傳送給P1.0口(90H是其直接地址),也就是將P2.0口的狀態(tài)(由直接地址0A0H狀態(tài)決定)傳送給直接地址90H,P1.0口,輸出口—位
PC→MOV P1.1,C ;等價(jià)于MOV 91H,C
PC→MOV P1.2,C ;等價(jià)于MOV 92H,C
PC→MOV P1.3,C ;等價(jià)于MOV 93H,C 等等
END ;偽指令,程序結(jié)束標(biāo)志
程序說(shuō)明:
單個(gè)按鍵控制單個(gè)LED燈及其狀態(tài),也可以控制若干個(gè)LED燈及其狀態(tài)。也就是多個(gè)LED燈,單個(gè)按鍵。反過(guò)來(lái),可以是多個(gè)按鍵控制單個(gè)燈或多個(gè)按鍵控制多個(gè)LED燈。通過(guò)簡(jiǎn)單硬件連接和匯編語(yǔ)言的位指令運(yùn)用,理解單片機(jī)作為數(shù)字電路的特點(diǎn),門電路的特點(diǎn),開(kāi)關(guān)電路的特點(diǎn),高與低電平時(shí)的電子線路處于開(kāi)或關(guān)的狀態(tài),或叫關(guān)閉與導(dǎo)通。