a) 單個按鍵與多個LED燈(位操作—輸入與字節(jié)操作—輸出)—判斷與子程序
此處只是將輸出指令由位指令換成了字節(jié)指令,而輸入判斷仍然是位判斷指令。
ORG 0000H
MAIN:
; CLR C
JNC ZIJIE;JC位累加器—進(jìn)位位為1轉(zhuǎn)移到ZIJIE ,
JNC位累加器為0轉(zhuǎn)移到ZIJIE,否則順序執(zhí)行。
MOV C,P1.0
ZIJIE:;子程序起始
MOV A,#00H
RET;子程序結(jié)束并返回調(diào)用處
END
b) 單個按鍵與多個LED燈(位操作—輸入與位、字節(jié)操作—輸出)
l 位輸入控制位或字節(jié)輸出
ORG 0000H
MAIN:
; CLR C
JNC ZIJIE ;JC位累加器—進(jìn)位位為1轉(zhuǎn)移到ZIJIE ,JNC位累加器為0轉(zhuǎn)移到ZIJIE,否則順序執(zhí)行。
SJMP MAIN ;相對轉(zhuǎn)移時間短,用AJMP絕對轉(zhuǎn)移時間長,RET是用于子程序的返回
ZIJIE:
F1:
l 位輸入控制字節(jié)輸出
c) 單個按鍵與單個電機(jī)控制—開環(huán)控制
單“位”—P口1位--單個燈—位輸出,單個按鍵控制—硬控制與軟控制
一個按鍵,一盞照明燈,一個繼電器。硬件接口問題—線路連接、硬件硬驅(qū)動問題(程序稱為軟驅(qū)動)。
一個按鍵,兩盞燈(指示、照明),一個繼電器。硬件接口問題—線路連接、硬件硬驅(qū)動問題。程序稱為軟驅(qū)動:就是利用兩個端口,通過延時或計時器完成轉(zhuǎn)換。
說明:
硬件特性,驅(qū)動與控制信號,程序編寫
由繼電器引出的強(qiáng)電驅(qū)動電器的控制問題,如電動機(jī)—交流電機(jī)、直流電機(jī)、步進(jìn)電機(jī)、伺服電機(jī);單項(xiàng)或多項(xiàng)
1. 單個開關(guān)(按鍵)與多個LED燈→數(shù)碼管→點(diǎn)陣問題—最小系統(tǒng)—輸出擴(kuò)展
a) 單個按鍵與多個LED燈(位操作—輸入與字節(jié)操作—輸出)
b) 單個按鍵與多個LED燈—數(shù)碼管(位操作—輸入與字節(jié)操作—輸出)—數(shù)組
c) 單個按鍵與多個數(shù)碼管(位操作—輸入與多字節(jié)操作—輸出)—靜態(tài)—數(shù)組
d) 多個按鍵與多個數(shù)碼管(位操作—輸入與字節(jié)操作—輸出)—動態(tài)—掃描函數(shù)
e) 單個按鍵與多個數(shù)碼管—點(diǎn)陣(位操作—輸入與字節(jié)操作—輸出)—靜態(tài)
3.單個開關(guān)(按鍵)與多個LED燈→數(shù)碼管→點(diǎn)陣問題—輸出擴(kuò)展—最小系統(tǒng)
a) 單個按鍵,多個LED燈(位操作—輸入與字節(jié)操作—輸出)
l 單輸入與多輸出的電子線路—靜態(tài)特性—結(jié)構(gòu)與聯(lián)接
對于多個LED燈(LED數(shù) < 8個)來說(圖4),在硬件連接方面、軟件編寫方面均沒有大的難點(diǎn)。按照單個LED的連接方式增加便可。控制程序編寫基本上也是重復(fù)性工作—用COPY簡單修改即可。
對于LED數(shù)= 8個或是8的倍數(shù)的情況,需要解決兩個方面的問題。一個是硬件的連接方法,一個是控制程序的編寫指令—用詞方法—字節(jié)操作指令。硬件方面可以用單個或多個成組(NET)的LED或總線接口、單個接口擴(kuò)展等實(shí)現(xiàn)。程序編寫則可以使用重復(fù)性工作、可以使用字節(jié)操作指令而摒棄位操作指令,使得程序簡潔、可讀性好、硬件運(yùn)行效率高。
對于LED數(shù)> 8個且不能被8整除的,仍需要用位操作指令。參見圖5,指令如下:
l 單輸入與多輸出電子線路的控制指令—動態(tài)特性
ORG 0000H
MOV P1,A ;P1口的狀態(tài),低電平為關(guān)
MOV C,0A0H ;按位操作,P2.0口的狀態(tài)—按鍵定,關(guān)為低電平,開為高電平
MOV P1.0,C ;P1.0口的狀態(tài),按位高電平顯示燈亮,低電平顯示燈滅
MOV P1.1,C
MOV P1.2,C
MOV P1.3,C ;P1.3口的狀態(tài),
MOV P1.7,C
MOV P2.1,C
MOV P2.2,C
MOV P2.4,C
MOV P3.0,C
MOV P3.3,C
MOV P3.5,C
MOV P3.7,C
MOV P0.0,C
MOV P0.4,C
END
對于LED數(shù)> 8個且能被8整除的需要用字節(jié)操作指令。參見圖2所示。
ORG 0000H
START:
MOV P1,A
MOV C,0A0H
JB 0A0H,GUAN ;按位操作;按P2.0口的狀態(tài)獲得兩種顯示結(jié)果,0跳轉(zhuǎn)
MOV P1,#0FFH ;按P2.0口的狀態(tài)為非1時的順序顯示本指令
RET ;返回控制指令
GUAN : ;程序控制指令入口,跳轉(zhuǎn)入口
MOV P2,#0FFH ;按P2.0口的狀態(tài)為1時的轉(zhuǎn)移顯示本指令
RET ;子程序返回控制指令
END
程序說明:
每個口用位賦值指令來開關(guān)P1口的各個LED。也可以用字節(jié)賦值指令一次性的開關(guān)8位P1口全部LED。
P1=0; // P1口8位置低電平,點(diǎn)亮8個LED
P1=1; // P1口8位置高電平,關(guān)閉8個LED。圖5為多個LED燈-單個按鍵的運(yùn)行結(jié)果與匯編語言。
上面的單片機(jī)系統(tǒng)和匯編語言控制指令,很容易被更改為多口、多位的單鍵控制系統(tǒng)。圖5為多個LED燈-單個按鍵的運(yùn)行結(jié)果與匯編語言。圖6中對P2.0口改用雙擲開關(guān),實(shí)現(xiàn)P2.0口的兩種電平狀態(tài)。
ORG 0000H
RET
GUAN :






