趙啟焱
(鄭州大學(xué) 機(jī)械工程學(xué)院,河南 鄭州 450001)
匯編語(yǔ)言是面向機(jī)器的,所以可以保持對(duì)機(jī)器的語(yǔ)言一致性,并能直接的在編程中定義對(duì)計(jì)算機(jī)的各種硬件設(shè)備的訪問(wèn)和控制。使用匯編語(yǔ)言,可以訪問(wèn)所有能夠被訪問(wèn)的軟、硬件資源。并且其程序代碼簡(jiǎn)潔,內(nèi)存占用少,執(zhí)行速度快,是一種高效的程序設(shè)計(jì)語(yǔ)言;由于匯編語(yǔ)言是一種低級(jí)語(yǔ)言,而且其語(yǔ)法和代碼不如其他高級(jí)語(yǔ)言豐富,所以在面對(duì)具體的硬件控制需要時(shí),就要有巧妙的程序算法來(lái)滿足需要。本文就利用8255對(duì)多個(gè)按鍵的脈沖輸入進(jìn)行判斷和定位的一種匯編語(yǔ)言算法進(jìn)行討論。
循環(huán)式程序和分支程序均是匯編語(yǔ)言中的基本程序結(jié)構(gòu)。正確的利用它們有助于縮短程序,提高程序質(zhì)量。在利用可編程并行接口8255A進(jìn)行多個(gè)脈沖輸出,單個(gè)脈沖輸出時(shí)判斷按鍵是否接通的情況下,就需要有技巧性的運(yùn)用上述兩種基本程序結(jié)構(gòu),下面是一個(gè)具體應(yīng)用的例子:
如下圖所示電路圖,8255以由控制字定義為四個(gè)B口輸出電信號(hào),只有一個(gè)A口接受電信號(hào),需要編寫相應(yīng)的匯編程序?qū)λ膫€(gè)按鍵中哪個(gè)按鍵按下進(jìn)行判斷:

針對(duì)此具體要求,編寫程序段如下:
PRESPROCNEAR
MOV CL,11111110B;將電位信息裝入寄存器CL中
P1: MOV AL,CL
OUT DH,AL;送數(shù)到B口
IN AL,DL;從 A 口讀入
TEST AL,01H;測(cè)試從A口讀入的數(shù)是否為0
JZ F;讀入值為0則跳轉(zhuǎn)
RO LCL,1;不為0則將初始電位信息循環(huán)移位
JMP P1;跳轉(zhuǎn)至程序開始循環(huán)執(zhí)行
F:MOV AL,CL;則記錄此時(shí)電位信息
NOT AL;將電位信息求反
RET;子程序結(jié)束
PRESENDP
采用此子程序可以在最多8個(gè)按鍵上形成掃描電壓,當(dāng)其中某一個(gè)鍵按下是,電路接通,0電位信息傳入8255的A口中,同時(shí)停止掃描,將此時(shí)的電位信息求反并作為此子程序的返回值,通過(guò)此返回值即可確定是哪一個(gè)按鍵被按下。
本文所討論的問(wèn)題的難點(diǎn)就在于8255有四個(gè)并行接口輸出電信號(hào),但只有一個(gè)輸入接口來(lái)判斷是否有按鍵按下,同時(shí)按鍵按下時(shí)只是一個(gè)短暫的脈沖信號(hào),所以針對(duì)這種情況,就利用8255的并行輸出在四個(gè)B口輸出一個(gè)快速循環(huán)掃描的數(shù)字信號(hào),然后在任一個(gè)按鍵按下的瞬間,程序即檢測(cè)到并將結(jié)果存于通用寄存器中,從而實(shí)現(xiàn)按鍵位置的判斷。
由于此系統(tǒng)所使用的CPU的主頻的限制,所輸出的掃描信號(hào)有一定的延時(shí)性,所以不適用于需要快速進(jìn)行判斷的場(chǎng)合,但在由人工進(jìn)行控制時(shí),啟反應(yīng)時(shí)間已足夠保證滿足要求。
利用可編程并行接口8255對(duì)多個(gè)按鍵的脈沖輸入進(jìn)行判斷和定位在伺服系統(tǒng)具有廣泛的應(yīng)用,本文所提供的方法具有很好的借鑒意義,同時(shí)對(duì)于通過(guò)按鍵進(jìn)行各種電氣元件的控制時(shí),本文所提供的按鍵掃描程序有著反應(yīng)快速,執(zhí)行效率高的優(yōu)點(diǎn),對(duì)匯編語(yǔ)言的編程算法技巧方面有一定的補(bǔ)充和貢獻(xiàn)。
[1]孫俊杰,任天平,白國(guó)長(zhǎng),門茂琛.微型計(jì)算機(jī)原理及應(yīng)用[M].鄭州:鄭州大學(xué)出版社,2005:165-180.
[2]黃惟公,鄧成中,王燕.單片機(jī)原理與應(yīng)用技術(shù)[M].西安:西安電子科技大學(xué)出版社,2012:164-168.