趙啟焱
(鄭州大學(xué) 機(jī)械工程學(xué)院,河南 鄭州 450001)
匯編語言是面向機(jī)器的,所以可以保持對機(jī)器的語言一致性,并能直接的在編程中定義對計算機(jī)的各種硬件設(shè)備的訪問和控制。使用匯編語言,可以訪問所有能夠被訪問的軟、硬件資源。并且其程序代碼簡潔,內(nèi)存占用少,執(zhí)行速度快,是一種高效的程序設(shè)計語言;由于匯編語言是一種低級語言,而且其語法和代碼不如其他高級語言豐富,所以在面對具體的硬件控制需要時,就要有巧妙的程序算法來滿足需要。本文就利用8255對多個按鍵的脈沖輸入進(jìn)行判斷和定位的一種匯編語言算法進(jìn)行討論。
循環(huán)式程序和分支程序均是匯編語言中的基本程序結(jié)構(gòu)。正確的利用它們有助于縮短程序,提高程序質(zhì)量。在利用可編程并行接口8255A進(jìn)行多個脈沖輸出,單個脈沖輸出時判斷按鍵是否接通的情況下,就需要有技巧性的運(yùn)用上述兩種基本程序結(jié)構(gòu),下面是一個具體應(yīng)用的例子:
如下圖所示電路圖,8255以由控制字定義為四個B口輸出電信號,只有一個A口接受電信號,需要編寫相應(yīng)的匯編程序?qū)λ膫€按鍵中哪個按鍵按下進(jìn)行判斷:
針對此具體要求,編寫程序段如下:
PRESPROCNEAR
MOV CL,11111110B;將電位信息裝入寄存器CL中
P1: MOV AL,CL
OUT DH,AL;送數(shù)到B口
IN AL,DL;從 A 口讀入
TEST AL,01H;測試從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;則記錄此時電位信息
NOT AL;將電位信息求反
RET;子程序結(jié)束
PRESENDP
采用此子程序可以在最多8個按鍵上形成掃描電壓,當(dāng)其中某一個鍵按下是,電路接通,0電位信息傳入8255的A口中,同時停止掃描,將此時的電位信息求反并作為此子程序的返回值,通過此返回值即可確定是哪一個按鍵被按下。
本文所討論的問題的難點就在于8255有四個并行接口輸出電信號,但只有一個輸入接口來判斷是否有按鍵按下,同時按鍵按下時只是一個短暫的脈沖信號,所以針對這種情況,就利用8255的并行輸出在四個B口輸出一個快速循環(huán)掃描的數(shù)字信號,然后在任一個按鍵按下的瞬間,程序即檢測到并將結(jié)果存于通用寄存器中,從而實現(xiàn)按鍵位置的判斷。
由于此系統(tǒng)所使用的CPU的主頻的限制,所輸出的掃描信號有一定的延時性,所以不適用于需要快速進(jìn)行判斷的場合,但在由人工進(jìn)行控制時,啟反應(yīng)時間已足夠保證滿足要求。
利用可編程并行接口8255對多個按鍵的脈沖輸入進(jìn)行判斷和定位在伺服系統(tǒng)具有廣泛的應(yīng)用,本文所提供的方法具有很好的借鑒意義,同時對于通過按鍵進(jìn)行各種電氣元件的控制時,本文所提供的按鍵掃描程序有著反應(yīng)快速,執(zhí)行效率高的優(yōu)點,對匯編語言的編程算法技巧方面有一定的補(bǔ)充和貢獻(xiàn)。
[1]孫俊杰,任天平,白國長,門茂琛.微型計算機(jī)原理及應(yīng)用[M].鄭州:鄭州大學(xué)出版社,2005:165-180.
[2]黃惟公,鄧成中,王燕.單片機(jī)原理與應(yīng)用技術(shù)[M].西安:西安電子科技大學(xué)出版社,2012:164-168.