《微機接口技術及其應用》課件第5章_第1頁
《微機接口技術及其應用》課件第5章_第2頁
《微機接口技術及其應用》課件第5章_第3頁
《微機接口技術及其應用》課件第5章_第4頁
《微機接口技術及其應用》課件第5章_第5頁
已閱讀5頁,還剩139頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第5章可編程并行接口芯片8255A5.1并行通信的基本概念

5.28255A的工作原理

5.38255A的編程

5.48255A的應用習題與思考題微機接口按數據傳送方式可分為并行接口和串行接口。并行接口是指同時可傳送多位二進制信息的接口電路,用于數據并行傳送。由于傳送多位信息,因此在同樣的傳輸率下,并行接口的實際傳輸速度快,信息率高。但是隨著傳輸距離的增加,并行接口所需要的傳輸線的開銷會很大,為此,并行接口一般用在傳輸率要求較高的近距離傳送中。本章將對并行接口的特點、工作方式、與CPU的連接方法以及應用作一全面介紹。

1.并行通信

并行通信是指將一個字節(jié)或一個字的各位同時進行傳輸的一種通信方式。并行通信強調的是欲傳輸的各位同時輸入或輸出,因此,如果一次傳輸n位的一個數據,對于并行通信而言,至少需要n+1條信號線,其中包括n條數據線和一條公共地線。

并行通信傳輸速度快,傳輸的信息率高,常用于傳輸距離短、數據傳輸速度要求高的場合。5.1并行通信的基本概念

2.并行接口

實現(xiàn)并行通信的接口稱為并行通信接口,簡稱并行接口。一個通用的并行接口可以設計成輸入接口,如鍵盤或其他信息的輸入;也可以設計成輸出接口,如打印機接口、顯示器接口等;還可以設計成既可輸入又可輸出的接口,即雙向通信接口。

典型的并行接口與系統(tǒng)總線及外設的連接如圖5-1所示。

圖5-1典型的并行接口與系統(tǒng)總線及外設的連接圖5-1中,并行接口電路的一個通道與輸入設備相連,作為輸入端口使用,另一個通道與輸出設備相連,作為輸出端口使用。下面簡單分析一下并行接口的輸入/輸出過程。

1)并行接口的輸入過程

(1)外設先將數據送到接口,并使狀態(tài)線的數據準備好(READY)位呈有效狀態(tài)(高電平)。

(2)數據到達接口后,接口在狀態(tài)寄存器中使外設準備好狀態(tài)位置位,以便CPU查詢,接口也可向CPU發(fā)送中斷請求信號。

(3)接口把數據傳送到內部的輸入緩沖寄存器,同時使數據輸入回答信號有效,以作為對外設的響應。

(4)外設收到輸入數據的應答信號后,撤銷數據及數據輸入準備好信號(無效的低電平)。

(5)

CPU接到接口要求輸入數據的中斷請求信號或查詢到接口的狀態(tài)位READY(準備好)信號為高電平時,從并行接口的輸入緩沖寄存器中讀取數據。此時,接口自動清除狀態(tài)寄存器相應的準備好標志位,并使數據呈高阻狀態(tài),結束一次輸入傳輸過程。

2)并行接口的輸出過程

(1)如果CPU查詢到外設已經取走數據,即接口的狀態(tài)寄存器中數據輸出準備好狀態(tài)位有效(一般為輸出緩沖器空)或接口有輸出數據的中斷請求信號,則CPU向接口輸出數據。

(2)當輸出的數據到達接口的輸出緩沖寄存器時,接口自動清除狀態(tài)寄存器中的數據輸出準備好標志位。

(3)接口向外設發(fā)送一個驅動信號來啟動外設接收數據。

(4)外設收到啟動信號后接收數據,并向接口發(fā)送應答信號(數據輸出回答),表示外設已經取走數據。

(5)接收到外設的應答信號,接口使狀態(tài)寄存器中的輸出準備好狀態(tài)位重新置位,結束本次輸出操作,以便開始進行下一個數據的輸出。

由此可見,所謂并行接口,是指I/O接口與外設或被控對象之間的傳送是并行的(并行指的是I/O接口與主機一側的傳送)。I/O接口與主機一側的系統(tǒng)總線的連接總是并行連接的,即以字節(jié)或字為單位并行傳送,因此,這里所指的并行接口是針對I/O接口與外圍設備或被控對象一側的連接方式,是用多根傳輸線同時傳送一個數據字節(jié)的傳送方式。一個并行接口可以設計成單獨作為一個輸入接口或輸出接口,也可以設計成既可作輸入又可作輸出的接口。要實現(xiàn)在一個并行接口中既可作輸入又可作輸出的方式,在設計中可利用兩個通道來完成,一個通道作輸入口,一個通道作輸出口,也可設計成一個雙向通路,既用做輸出又用做輸入。

并行接口與主機的連接和外圍設備之間的連接要滿足一般典型接口的基本要求,即與主機系統(tǒng)總線的連接(包括AB、DB和CB的連接),與時序上的配合,與外設之間的聯(lián)絡方式及端口的設置。在實際使用中,不是主機與外設之間需要兩位以上信息同時傳送時,一般都采用并行接口。當所需傳送的并行數據的寬度超過8位時,可分多次傳送。并行接口分為可編程并行接口和不可編程并行接口兩種。不可編程并行接口的工作方式及功能是通過硬件連接來設定的,用戶不能用軟件編程的方法隨意改變其工作方式或狀態(tài);而可編程并行接口的工作方式、功能和工作狀態(tài)則可以用軟件編程的方法來指定和加以改變。這樣就能適應各種不同外設所指定的要求,即并行接口的工作方式、功能以及狀態(tài)是由接口芯片的初始化程序來確定的。由此可見,可編程并行接口具有方便、靈活、適應性強等優(yōu)點。

由于可編程并行接口的工作方式、功能和工作狀態(tài)可以用軟件編程的方法來指定或加以改變,因此,用戶在使用時可根據需要來選擇芯片中的各種端口(包括數據口、控制口和狀態(tài)口)與外設相連,選擇端口與CPU之間采用何種方式進行數據交換,確定端口中哪些位作為輸入用,哪些位作為輸出用,哪些位作某一狀態(tài)位等。5.28255A的工作原理這些選擇是由用戶通過寫入相應的方式字或控制字來指定的,并行接口與主機和外設之間都采用并行傳送,因此,其結構比較簡單。由于可編程接口具有結構簡單、靈活性和適應性強等優(yōu)點,因此它在微機系統(tǒng)及微機控制系統(tǒng)中得到了廣泛應用。不同型號的CPU都有與其配套的并行接口芯片,如Zilog公司的Z-80PIO與8位的Z-80CPU相配,Motorola公司的MC6820(PIA)與M6800相配,Intel公司的8255A(PPI)與IBM-PC系列機相配等。本章主要介紹Intel公司的編程并行接口芯片8255A。5.2.18255A的基本性能

Intel8088/8086系列的可編程外設接口電路(PPI,ProgrammablePeripheralInterface)的型號為8255(改進型為8255A及8255A-5),它是一個典型的可編程并行接口芯片。它使用單一的

+5V電源,是具有40個引腳的雙列直插式大規(guī)模集成電路,如圖5-2所示。

圖5-28255A的引腳圖

(1)

8255A具有三個相互獨立的8位并行輸入/輸出端口,即端口A、端口B和端口C,其中端口C分成兩個4位(C口高4位和C口低4位)來配合端口A和端口B工作,它為Intel系列CPU與外設之間提供TTL電平兼容的接口。

(2)

8255A可以工作在無條件傳送、條件傳送和中斷方式等多種數據傳送方式下。

(3)

8255A可以工作在方式0、方式1和方式2三種工作方式下,其中端口A可以工作在這三種不同的方式下,而端口B只能工作在方式0和方式1下,端口C則配合端口A和端口B工作。

(4)

8255A沒有設置專門的聯(lián)絡信號線,但是可以由端口中的某些位來擔任。端口A、B和C可以配合使用,以構成所需的單線、雙線或三線聯(lián)絡信號的并行接口。5.2.28255A的內部結構及外部特性

1.8255A的內部結構

8255A的內部結構如圖5-3所示,它由以下三部分組成。

圖5-38255A的內部結構圖

1)與CPU的接口部分

8255A與CPU的接口部分通過數據總線緩沖器和讀/寫控制邏輯完成。

(1)數據總線緩沖器。這是一個8位雙向三態(tài)數據緩沖器,8255A通過它與CPU的系統(tǒng)數據總線連接。CPU所有的輸入/輸出數據、CPU通過輸出指令發(fā)送給8255A的控制字和用輸入指令讀入的外設的當前狀態(tài)信息,都是通過這個數據緩沖器傳送的。

(2)讀/寫控制邏輯。讀/寫控制邏輯通過6根控制線與CPU連接,它負責對8255A的數據傳送過程進行控制。該電路接收到來自CPU控制總線的RESET、 、 和來自地址總線的A1A0(在8086系統(tǒng)中為A2A1)后,將這些信號進行組合,得到對A組控制邏輯和B組控制邏輯的相應控制命令,再用這些控制命令控制這兩個邏輯按初始化編程要求,完成對數據的輸入/輸出、對狀態(tài)信息的讀取和控制命令的傳送。

2)與外設的接口部分

8255A與外設的接口是通過三個輸入/輸出數據端口來實現(xiàn)的,即端口A、端口B和端口C。每個端口都是8位的數據端口,它們都可以用軟件編程來設置成輸入端口或輸出端口。

(1)端口A。端口A有一個8位的數據輸出鎖存器/緩沖器和一個8位的數據輸入鎖存器。因此,端口A在進行輸入或輸出時,其數據都受到鎖存。

(2)端口B。端口B有一個8位的數據輸出鎖存器/緩沖器和一個8位的數據輸入緩沖器。因此,端口B只有在進行輸出時,才能對數據進行鎖存。

(3)端口C。端口C有一個8位的數據輸出鎖存器/緩沖器和一個8位的數據輸入緩沖器。端口C也只能在作輸出端口時,才會對數據進行鎖存。

在實際使用中,如果與外設之間不需要任何聯(lián)絡信號,則這三個端口都可以作為獨立的輸入端口或輸出端口使用。當這些端口與外設之間需要建立聯(lián)絡信號時,通常將端口C分為兩個4位的端口,分別配合端口B和端口A工作,作為它們的控制信息和狀態(tài)信息的端口。

3)內部控制邏輯

8255A的內部控制邏輯由A組控制電路和B組控制電路組成。這兩組控制電路根據CPU寫入的控制命令字和讀/寫控制命令分別去控制兩組端口的工作方式和讀/寫操作。其中,A組控制電路控制端口A和端口C的高4位(即PC7~PC4),B組控制電路控制端口B和端口C的低4位(即PC3~PC0)。

2.8255A的外部特性

8255A的外部特性是指其引腳信號的功能。8255A共有40個引腳,除電源和地以外,其他引腳信號可分為兩組,如圖5-2所示。

1)

CPU連接的引腳信號

·D7~D0:雙向數據線,通過它與系統(tǒng)數據總線連接,CPU輸出給8255A的數據、控制命令、8255A向CPU送回的狀態(tài)信息和數據都經過這8位雙向數據線。

表5-1端口選擇·A1A0:端口選擇信號,與系統(tǒng)地址總線的低位連接。兩位地址正好編碼形成四個端口地址,分配給8255A內部的四個端口,即3個數據端口(A端口、B端口和C端口)和1個控制端口,如表5-1所示。若在8086系統(tǒng)中使用8255A,則要將8255A的A1和地址總線的A2相接,將8255A的A0與地址總線的A1連接,地址總線的A0為奇偶地址空間的分配線。這是由于8255A的D7~D0通常接到系統(tǒng)總線的低8位,而在8086系統(tǒng)中,總是將低8位的數據送入偶地址端口,從偶地址端口輸入到CPU的數據也通過低8位傳送。因此,從CPU角度來講,要求8255A的4個端口地址必須都是偶地址;而對8255A本身來講,又要滿足4個端口地址從00、01、10到11的變化。

· :片選信號,低電平有效。當 為低電平時,8255A才被選中。該信號由系統(tǒng)地址總線經I/O地址譯碼器產生,只有當 有效時,讀 和寫 信號才對8255A有效。

· :讀信號,與系統(tǒng)總線的 連接。當

有效時,CPU可以從8255A中讀取數據。

· :寫信號,與系統(tǒng)總線的 連接。當

有效時,CPU可以對8255A寫入控制字或輸出數據。

·RESET:復位信號,與系統(tǒng)的復位信號線相連或與自行設置的復位信號相連。高電平有效,當它有效時,8255A內部所有寄存器都被清除,三個數據端口被自動設為輸入端口。

· 、 、 和A1、A0五根引腳信號的組合及其所完成的功能如表5-2所示。

表5-28255A的端口選擇及其功能

2)與外設連接的引腳信號

PA7~PA0:端口A數據線。

PB7~PB0:端口B數據線。

PC7~PC0:端口C數據線。

5.2.38255A的工作方式

8255A共有三種工作方式可選擇,每個端口可選擇的工作方式都有所差別。8255A端口A可以在方式0、方式1和方式2三種方式下工作,而端口B只能在方式0和方式1兩種方式下工作。8255A工作在什么方式下是由控制寄存器的內容決定的。8255A的各個I/O端口在不同工作方式下的功能如表5-3所示。下面介紹這三種工作方式的特點、功能、時序及使用場合等。

表5-38255A的各個I/O端口在不同工作方式下的功能表

1.方式0——基本輸入/輸出方式

在這種方式中,8255A的全都I/O線都用做數據傳送,不設置專用的聯(lián)絡信號。在該工作方式下,三個端口中的每一個都可以用方式選擇控制字設為輸入端口或輸出端口,其中端口C分為兩個4位端口,這兩個4位端口分別設置為輸入端口和輸出端口,而且屬于同一組的端口可以分別設置為輸入端口或輸出端口。例如,B組的端口B為輸出端口,而端口C的下半部(即PC3~PC0)為輸入端口,端口C不一定要與端口B的輸入/輸出形式相同。各個端口的輸入或輸出可以有多種不同的組合,因此具有多種用途。按照方式0工作時,CPU可以通過簡單的傳送指令對任意一個端口進行讀/寫,PA口、PB口、PC口的高4位和PC口的低4位分別作為輸入或輸出,它們共有16種組合,如圖5-4所示。這樣,各端口既可以作為無條件輸入/輸出接口,也可以作為查詢式輸入/輸出接口。按查詢方式工作時,可以選擇PA口、PB口、PC口的高4位和PC口的低4位作為輸入數據端口、輸出數據端口、控制端口或狀態(tài)端口。例如,設PA口作為數據輸入端口,PB口作為數據輸出端口,PC口的低4位中某位作為狀態(tài)輸入線(RDY)接收外圍設備的狀態(tài),PC口的高4位的某位作為選通線(

)由位操作產生選通信號給外圍設備,則相應輸入或輸出操作流程如圖5-5所示。

圖5-48255A在方式0下的功能引腳圖

圖5-58255A在方式0下的流程圖

2.方式1——選通輸入/輸出方式

這種方式中,通常端口A和端口B作為數據口,而端口C則配合端口A和端口B,用來固定專用的聯(lián)絡信號。由于用端口C來固定專用的聯(lián)絡信號,因此,方式1常??梢允褂脳l件(查詢)傳送或中斷,數據的輸入/輸出都有鎖存能力。

當8255A的端口A和端口B都工作在方式1時,任何一個端口都可作為輸入端口或輸出端口,這時端口C中有6位將被規(guī)定為配合方式1的聯(lián)絡信號,其中3位作為端口A的聯(lián)絡信號,另外3位作為端口B的聯(lián)絡信號。端口C剩下的2位可由程序設定為輸入或輸出,也具有置位/復位功能。如果8255A的端口A和端口B中只有一個工作在方式1,則此時端口C中的3位被規(guī)定為配合工作在方式1的聯(lián)絡信號。另外一個端口(端口A或端口B)可以工作在方式0,端口C中的其他位也可以工作在方式0,作為輸入或輸出。

1)方式1的輸入情況

當端口A或端口B工作在方式1的輸入情況時,其端口C對應的聯(lián)絡信號的規(guī)定如圖5-6所示。

由圖5-6可知,每個端口各有三個聯(lián)絡信號,其中用于和外設聯(lián)絡的信號是和IBF,而另外一個信號INTR則用于向CPU發(fā)出中斷請求。這三個聯(lián)絡信號的意義及功能如下所述。

圖5-68255A在方式1下的輸入聯(lián)絡信號圖

·

(Strobe):選通信號輸入。這是由外設產生的數據選通信號,由端口C的PC4(A組)或PC2(B組)輸入。

低電平有效。當它有效時,表明由外設送來一個8位數據到端口A或端口B,并鎖存到相應的輸入緩沖器中。

·

IBF(InputBufferFull):輸入緩沖器滿。這是一個由8255A輸出的狀態(tài)信號,它由端口C的PC5(A組)或PC1(B組)輸出。IBF高電平有效。當它有效時,表示此時有一個新的數據存放在輸入緩沖器中,以供CPU來讀取,CPU通過查詢這個信號來確認是否有數據輸入。當 有效時,IBF被置成高電平,只要CPU不從輸入緩沖器中讀取數據,IBF就會一直保持高電平,直到讀信號 出現(xiàn)。 的上升沿使IBF置位。

·

INTR(InterruptRequest):中斷請求信號。當 結束(即從緩沖器中送入一個數據)并且IBF也為高電平時,8255A會將INTR端置成高電平,并通過端口C的PC3(A組)或PC0

(B組)向CPU發(fā)出中斷請求。INTR高電平有效。當它有效時,表明CPU可以從8255A的輸入緩沖器中讀入已經準備好的數據,再由 的下降沿將INTR置為低電平。

·

INTE(InterruptEnable):中斷允許信號。INTE是一個控制中斷請求INTR的信號,從圖5-6中可以看出,只有INTE=1和IBF有效時,端口A或端口B才能向CPU發(fā)出中斷請求。當INTE=0時,相應端口處于中斷屏蔽狀態(tài)。INTE是通過軟件來設置的,即通過對PC4(用于端口A)或PC2(用于端口B)置0或置1來控制。因此,當要使用中斷功能時,應該用軟件使相應的端口處于中斷允許狀態(tài)。常見的8255A的輸入接口(中斷I/O)的連接圖如圖5-7所示,工作時序如圖5-8所示。

圖5-78255A在方式1下的輸入連接

圖5-88255A在方式1下的工作時序

2)方式1的輸出情況

當端口A或端口B工作在方式1的輸入情況時,其端口C對應的聯(lián)絡信號的規(guī)定如圖5-9所示。

圖5-98255A在方式1下的輸出聯(lián)絡信號圖由圖5-9可知,方式1的輸出情況與輸入情況相似,同樣有三個聯(lián)絡信號,其中兩個用于和外設聯(lián)絡,其余一個用于發(fā)出中斷請求。其具體含義和功能如下所述。

·

(OutputBufferFull):輸出緩沖寄存器滿,低電平有效。當它有效時,表明CPU已經向指定的端口輸出了一個數據。外設可以從這個端口取走數據。顯然,這是8255A發(fā)給外設的聯(lián)絡信號。

·

(Acknowledge):外設的回答信號,低電平有效。這是由外設發(fā)給8255A的回答信號,當它有效時,表明外設已經從8255A的輸出端口取走了數據。

·

INTR(InterruptRequest):中斷請求信號,高電平有效。當外設從8255A的端口取走數據后,一旦 =1、

=1和INTE=1,8255A便向CPU發(fā)出中斷請求,這時INTR信號有效。CPU接受中斷請求后,便可再次輸出數據。

·

INTE(InterruptEnable):中斷允許,與輸入情況時的INTE含義相同,即當INTE=1時允許中斷,當INTE=0時禁止中斷。它通過軟件設置PC6=1時,端口A的INTE=1,反之亦然。PC2=1時,端口B的INTE=1,反之亦然。

8255A用于方式1的輸出接口(中斷I/O),其一般連接如圖5-10所示。其工作過程為:8255A初始化, 置無效(置位)等待CPU送出數據,當CPU將數據送出時,8255A的PA口或PB口鎖存數據, 有效(復位),當輸出設備準備好時,向8255A發(fā)出 有效信號,從8255A取走數據,然后向CPU發(fā)出中斷請求信號INTR,要求CPU繼續(xù)發(fā)送下一個數據,并向外設輸出 無效信號,通知外設暫無數據。8255A在方式1下的輸出時序圖如圖5-11所示。

圖5-108255A在方式1下的輸出連接圖圖5-118255A在方式1下的輸出時序圖

3.方式2——雙向輸入/輸出方式

這種方式只能用于端口A。所謂雙向傳輸,就是在PA7~PA0的8條數據線上,外設既可以從8255A向CPU發(fā)送數據,又可以從CPU接收數據。方式2中,端口C會自動配合端口A提供相應的聯(lián)絡信號。由于方式2只適用于端口A,因此,端口A工作在方式2時,端口C的PC7~PC3要用5條數據線自動配合端口A,提供相應的控制信號。方式2中輸入和輸出都是鎖存的。作為相應的聯(lián)絡信號,具體的聯(lián)絡信號如圖5-12所示。系統(tǒng)的連接圖如圖5-13所示。

圖5-13中所示各信號的具體含義和功能如下所述。

圖5-128255A在方式2下的聯(lián)絡信號圖

圖5-138255A在方式2下的系統(tǒng)連接圖

·

(Strobe):選通信號。這是外設送給8255A的選通信號,低電平有效,它的作用是將外設輸入給8255A的數據送入輸入鎖存器。

· IBFA(InputBufferFull):輸入緩沖器滿信號。這是8255A供CPU查詢的狀態(tài)信號,它表明目前已經有一個數據輸入到輸入鎖存器中,CPU可以來取數了。

·

(OutputBufferFull):輸出緩沖器滿信號,低電平有效。這是一個由8255A送給外設的選通信號。當它有效時,表明CPU已經將一個數據輸出到8255A的A端口,告訴外設可以來取數了。

·

(Acknowledge):外設的回答信號,即外設對 的響應信號,低電平有效。當它有效時,8255A的端口A的輸出緩沖器打開,表示外設已經將數取走。

·

INTRA(InterruptRequest):中斷請求信號,高電平有效。當它有效時,表示8255A向CPU發(fā)出中斷請求,要求完成一次輸入或輸出操作。

·

INTE1(InterruptEnable):中斷允許信號。INTE1是端口A工作在方式2、輸出一個數據時的中斷允許信號。當INTE1為高電平時,允許8255A向CPU發(fā)出中斷請求信號INTR,告訴CPU現(xiàn)在可以向8255A輸出一個數據。相反,當INTE1為低電平時,禁止8255A產生中斷請求信號INTR,即使8255A的數據輸出緩沖器空,也會屏蔽中斷請求。INTE1是高電平或低電平,都是通過軟件使PC6=1和PC6=0來實現(xiàn)的。PC6=1時,INTE1=1;PC6=0時,INTE1=0。

·

INTE2(InterruptEnable):中斷允許信號。INTE2是端口A工作在方式2、輸入一個數據時的中斷允許信號。當INTE2=1時,允許8255A向CPU發(fā)中斷請求信號INTR,通知CPU接收一個數據;而當INTE2=0時,端口A的輸入處于中斷屏蔽狀態(tài)。同樣,INTE2也是由軟件來設置的。當PC4=1時,INTE2=1;當PC4=0時,INTE2=0。

方式2的時序圖如圖5-14所示。從圖5-14可以看出,它相當于方式1的輸入時序和方式1的輸出時序的組合。由于方式2是雙向傳輸,因此其輸入過程和輸出過程之間的順序不是固定的,它們的執(zhí)行順序和次數是任意的或隨機的,即根據實際傳送數據的需要來選定。

圖5-148255A在方式2下的時序圖通過上面對方式2的基本功能、特點、控制信號以及時序的分析可以看出,方式2適用于具有輸入和輸出功能,且輸入和輸出不是同時進行的外設。比如,常用的磁盤驅動器就是這類外設,它既可接收來自主機的數據,又可以向主機提供數據,且這樣的輸入/輸出過程不是同時進行的。通過以上對8255A的三種基本工作方式的分析可以得出這樣的結論:端口A可以工作在這三種工作方式中的任何一種,端口B只能工作在方式0或方式1,端口C則通常配合端口A和端口B工作,為端口A和端口B提供其輸入/輸出過程中所需的聯(lián)絡信號,方式2只有端口A使用。同一組的兩個端口(A組或B組)可以分別工作在輸出方式或輸入方式,并不要求一定要同為輸入方式或同為輸出方式,各端口具體工作在什么工作方式下,作為輸入端口還是輸出端口,這些都是通過寫入方式選擇控制字來決定的。

5.3.18255A的控制字

8255A的工作方式是通過CPU向8255A中的控制端口寫入相應的控制字來決定的。8255A的控制字分為兩類:一類是方式選擇控制字,該控制字決定了8255A中三個端口的工作方式,即輸入或輸出方式,它將三個端口分為兩組來設定工作方式;另一類是C端口按位置1/置0控制字,它可以對端口C中的任何一位進行置位或復位。5.38255A的編程

1.方式選擇控制字

8255A具有三種基本的工作方式,在對8255A進行初始化編程時,應向控制字寄存器寫入方式選擇控制字,用來規(guī)定8255A各端口的工作方式。這三種基本工作方式是:

方式0——基本輸入/輸出方式;

方式1——選通輸入/輸出方式;

方式2——雙向總線I/O方式。

當系統(tǒng)復位時,8255A的RESET輸入端為高電平,使8255A復位,所有的數據端口都被置成輸入方式;當復位信號撤除后,8255A繼續(xù)保持復位時預置的輸入方式。如果希望它以這種方式工作,就不用另外再進行初始化了。通過用輸出指令對8255A的控制字寄存器進行編程,寫入設定工作方式的控制字,可以讓3個數據口以不同的方式工作。其中,端口A可工作于三種方式中的任一種;端口B只能工作于方式0和方式1,而不能工作于方式2;端口C常被分成兩個4位的端口,除了用做輸入/輸出端口外,還能用來配合A口和B口工作,為這兩個端口的輸入/輸出操作提供聯(lián)絡信號。

8255A的方式選擇控制字格式如圖5-15所示。

圖5-158255A的方式選擇控制字格式圖5-15中,D7位為標志位,必須使D7=1;D6D5位用于選擇A口的工作方式;D2位用于選擇B口的工位方式;其余4位分別用于選擇A口、B口、C口高4位和C口低4位的輸入/輸出功能,置1時表示輸入,置0時表示輸出。

【例5-1】

設端口A工作在方式1輸出,端口C上半部為輸出,下半部為輸入,端口B工作在方式0輸入,則這時的方式選擇控制字應為10100011B或A3H。

如果把這個方式選擇控制字通過輸出指令寫入到8255A的控制寄存器中,便完成了對8255A的初始化。顯然,對8255A初始化后,8255A就會按照初始化時所設定的方式選擇控制字指定的工作方式來完成工作。

設8255A的控制端口地址為FFF6H,那么對8255A的初始化程序為

MOV DX,0FFF6H;控制端口地址

MOV AL,0A3H;寫入控制字

OUT DX,AL

2.置位/復位控制字

端口C的數位常用做控制或應答信號,

通過對8255A的控制端口寫入置位/復位控制字,可使端口C的任意一個引腳的輸出單獨置1或置0,

或者為應答式數據傳送發(fā)出中斷請求信號。在基于控制的應用中,經常希望在某一位上產生一個TTL電平的控制信號,利用端口C的這個特點,只需要用簡單的程序就能形成這樣的信號,從而簡化了編程。8255A置位/復位控制字的格式如圖5-16所示。

圖5-168255A的置位/復位控制字的格式圖5-15中,D7位為置位/復位控制字標志位,必須使D7=0;D3~Dl位用于選擇對端口C中某一位進行操作;D0位指出對選中位是置1還是清0。D0=1時,使選中位置1;D0=0時,使選中位清0。

【例5-2】

設一片8255A的端口地址為60H~63H,PC5平時為低電平,要求從PC5的引腳輸出一個正脈沖??梢杂贸绦蛳葘C5置1,輸出一個高電平,再把PC5清0,輸出一個低電平,結果PC5引腳上便輸出一個正脈沖。實現(xiàn)這個功能的程序段如下:

MOV AL,000010l1B

OUT 63H,AL ;置PC5為高電平

MOV AL,00001010B

OUT 63H,AL ;置PC5為低電平

【例5-3】

要把端口C的PC7置成1,則控制字應為00001111B或0FH。把該控制字的內容寫入8255A的控制寄存器中,就實現(xiàn)了對端口C的PC7位置1的操作。

其程序如下:

MOV DX,0FFF6H ;8255A控制端口地址

MOV AL,0FH ;PC7置1的控制字

OUT DX,AL;寫入控制端口

若要使端口C的PC3置0,則控制字應為00000110B或06H。其程序段如下:

MOV DX,0FFF6H ;控制端口地址

MOV AL,06H ;PC3置0的控制字

OUT DX,AL;寫入控制端口

端口C置1/置0控制字雖然是對端口C進行操作,但它是一種控制字,因此,必須寫入控制端口而不能寫入端口C的地址中。

8255A中的兩類控制字是通過設置特征位來區(qū)別的,因為它們是送往8255A中的同一個控制端口,用控制字的D7位來區(qū)分。若寫入的控制字的D7=1,則表明該控制字為方式選擇控制字;若寫入的控制字的D7=0,則表明該控制字為按位置1/置0控制字,該控制字可以使8255A作為位控制接口來實現(xiàn)對外設的按位控制。5.3.28255A的C端口狀態(tài)字

當8255A工作于方式0時,C端口各位用做輸入/輸出。當它工作于方式1和方式2時,C端口產生或接收與外設間的聯(lián)絡信號,這時,讀取C端口的內容可使編程人員測試或檢查外設的狀態(tài),用輸入指令對C端口進行讀操作就可讀取C端口的狀態(tài)。C端口的狀態(tài)字有以下幾種格式。

1.方式1狀態(tài)字

輸入狀態(tài)字的格式如下:

其中,D7~D3位為A組狀態(tài)字,D2~D0位為B組狀態(tài)字。

輸出狀態(tài)字的格式如下:

其中,D7~D3位為A組狀態(tài)字,D2~D0位為B組狀態(tài)字。

2.方式2狀態(tài)字

方式2狀態(tài)字的格式如下:

其中,D7~D3位為A組狀態(tài)字,D2~D0位為B組所用,當B口工作于方式1時,這幾位作B口的狀態(tài)字,當B口工作于方式0時,這幾位不是狀態(tài)位,而是用做輸入/輸出。

5.4.18255A設計中常用的方法

一般來講,設計并行接口電路時需要考慮以下幾個方面。

1.選擇合適的接口芯片

常用的并行接口芯片按功能可分為輸入接口、輸出接口和輸入/輸出接口芯片三種;按結構可分為可編程接口和不可編程接口芯片兩種。5.48255A的應用不可編程接口芯片適合于較簡單的輸入/輸出要求。最簡單的輸入接口電路是輸入緩沖器,最簡單的輸出接口電路是輸出鎖存器。使用可編程并行接口具有較好的靈活性,這是因為可編程接口芯片的部分功能可由程序設定。同時,可編程接口芯片的集成度較高,可靠性較好,一個芯片內部包含有多個輸入/輸出端口,因此得到了廣泛應用。

2.確定合理的I/O端口地址

選擇I/O端口地址包含兩方面的問題:不同I/O接口電路的地址分配和同一接口電路中的端口地址分配。針對每一個接口電路,除了數據端口外,根據需要還可以有狀態(tài)端口和控制端口。每個端口都應分配一個端口地址。一個微機系統(tǒng)有不同的接口電路,每一個接口電路對應不同的端口地址。在接口電路的設計中,應該充分考慮,避免地址重疊。

3.選用有效的數據傳送方式

由于外部設備種類繁多,因此其工作速度相差很大,數據傳輸速率相距懸殊。為了保證CPU與外設在時間上的同步,并行接口常用的數據傳送方式分為無條件傳送方式、程序查詢方式和中斷傳送方式三種。

(1)無條件傳送方式:對硬件接口電路和程序設計要求都較簡單,但使用這種傳送方式的前提是外設應處于就緒狀態(tài)。因此這種傳送方式使用得不多,一般用于一些簡單外設的操作,如7段顯示器、按鍵開關等。

(2)程序查詢方式:由CPU通過執(zhí)行程序不斷讀取外設狀態(tài),確定是否執(zhí)行輸入/輸出操作與外設交換信息。因此,采用程序查詢方式,接口電路不僅需要數據端口,而且需要狀態(tài)端口。

(3)中斷傳送方式:通過硬件方式通知CPU當前外設的狀態(tài),由CPU在中斷服務程序中完成對外設數據的傳送。因此,當CPU與外設的速度差異較大時,采用中斷傳送方式可以有效地提高CPU的工作效率。5.4.2應用舉例

1.8255A與系統(tǒng)的連接

8255A內部包括A、B、C三個端口和一個控制寄存器,共占四個外設地址,由高位地址線通過譯碼產生的片選信號和A1A0來決定。例如,當A1A0

=

00時指向的是A端口(參見表5-1)。對每一個端口都可以分別進行讀/寫操作。例如,讀A端口是CPU將A端口的數據讀入到AL寄存器,寫A端口是CPU將AL中的數據寫入A端口輸出。對這四個地址進行不同操作時各引腳的狀態(tài)如表5-2所示。根據表5-2可以很方便地實現(xiàn)8255A與系統(tǒng)總線的連接。圖5-17所示的硬件電路是利用全譯碼方式將一片8255A連接到系統(tǒng)總線上。

圖5-17中芯片所占的地址范圍由A15~A2決定,為0FF00H~0FF03H,而A1和A0的狀態(tài)則決定尋址芯片的哪一個端口或控制寄存器。

圖5-178255A與系統(tǒng)總線連接圖

2.基本輸入/輸出應用舉例

在工業(yè)控制等實際應用中,經常需要檢測某些開關量的狀態(tài)。例如,在某一系統(tǒng)中有8個開關K7~K0,要求不斷檢測它們的通斷狀態(tài),并隨時在發(fā)光二極管LED7~LED0上顯示出來。開關斷開,相應的LED點亮;開關合上,LED熄滅。我們選用8086CPU、8255A和74LS138譯碼器等芯片構成如圖5-18所示的硬件電路來實現(xiàn)上述功能。

圖5-188255A與開關LED顯示器硬件連接圖由圖5-18可見,8255A的A端口作輸入端口,8個開關K7~K0分別接PA7~PA0;B端口為輸出端口,PB7~PB0分別接顯示器LED7~LED0。8255A的 、 和RESET引腳分別與CPU的相應輸出端相連。8255A的數據線D7~D0與8086的低8位數據總線D7~D0相連。由第4章的討論可知,這時8255A的4個端口地址都應為偶地址,A0必須總等于0,用地址線的A2A1來選擇片內的4個端口。圖5-18中,地址線A7接譯碼器的G1,M/ 與 相連,A6A5接與非門輸入端,與非門輸出與 相連。當A7A6A5=111、A4A3A0=100時, =0,選中8255A。這樣,4個端口地址分別為0F0H、0F2H、0F4H和0F6H,對應于8255A的A端口、B端口、C端口和控制字寄存器。編程時先要確定方式選擇控制字。由于A端口為方式0輸入,B端口為方式0輸出,C端口未用,因此控制字中與C端口對應的位可以被置為0,這樣寫入控制端口0F6H的控制字為10010000。完成初始化后,即可將A端口的開關狀態(tài)讀入寄存器AL。若開關合上,AL中的相應位為0,斷開則為1。當把AL中的內容從B端口輸出時,相應于0位的LED熄滅,表示對應的開關是合上的;否則LED點亮,指示開關斷開。程序如下:

MOV DX,0F6H ;控制字寄存器

MOV AL,10010000B ;控制字

OUT DX,AL ;寫入控制字

READ:MOV DX,0F0H ;指向A端口

IN AL,DX ;從A端口讀入開 關狀態(tài)

MOV DX,0F2H ;指向B端口

OUT DX,AL ;B端口控制LED

指示開關狀態(tài)

JMP READ ;循環(huán)檢測,

3.鍵盤接口舉例

在微型計算機系統(tǒng)中,鍵盤是一種最常用的外設,它由多個開關組合而成??梢杂脕碇圃戽I盤的按鍵開關有多種,最常用的有機械式、薄膜式、電容式和霍爾效應式四種。機械式開關較便宜,但按鍵時會產生觸點抖動,即在觸點可靠地接通前會通斷多次,而且長期使用可靠性會降低。高質量機械式開關的壽命約100萬次。薄膜式開關可做成很薄的密封單元,不易受外界潮氣或環(huán)境污染,常用做微波爐、醫(yī)療儀器或電子秤等設備的按鍵。不同薄膜開關的壽命差別很大。電容式開關沒有抖動問題,但需要特制電路來測電容的變化,平均壽命約2000萬次?;魻栃存I是另一種無機械觸點的開關,具有很好的密封性,平均壽命高達1億次甚至更高,但開關機制復雜,價格很貴。計算機上用的鍵盤一般都是機械式開關。當在鍵盤上按一個鍵時,等于按下一個開關。因此,從原理上講,鍵盤可以采用如圖5-19所示的結構。不過,這會帶來一個很大的缺點,那就是每個鍵要用一條線,每8個開關還要占用一個8位的并行端口。一個具有64個鍵的鍵盤需要64條連線,與8個8位的并行端口相連。所以,這種結構只能用在僅有幾個鍵的小鍵盤中。對于大多數的鍵盤,按鍵被排成行和列的矩陣。下面以機械式開關構成的16個鍵的鍵盤為例來討論鍵盤接口的工作原理及按鍵識別的方法,這種原理對采用其他類型的開關鍵盤也是適用的。

圖5-198255A與矩陣式鍵盤接口電路原理圖常用的鍵盤分為兩類,即非編碼式鍵盤和編碼式鍵盤。非編碼式鍵盤是在主機的控制下對鍵盤進行掃描,主機通過程序將鍵開關的閉合狀態(tài)取回,再由程序完成對按鍵的識別。這種鍵盤的硬件結構非常簡單,但要占用主機較多的時間。另一種編碼式鍵盤能夠識別是否有鍵按下以及按下的是哪一個鍵,并能將按下鍵的編碼送給主機。

非編碼式鍵盤只能簡單地提供鍵盤的行和列矩陣的按鍵,它用程序來解決按鍵在識別時產生的被按鍵的代碼以及防串鍵和防抖動等問題。非編碼式鍵盤中,識別被按鍵的辦法一般有兩種:行掃描法和反轉法。

1)行掃描法

行掃描法就是逐行輸出0,然后讀入列值,并檢查有無為0的位(與某一列相對應)。若有,則當前行該列的鍵被按下。在實際應用中往往采用一些技巧來加快掃描速度。具體掃描步驟如下:

(1)識別有無鍵按下。PA3~PA0輸出全0,然后從PB3~PB0讀入,若讀入的數據中有一位為0,則表明有某個鍵被按下,轉第(2)步,否則在本步驟中循環(huán)。

(2)去抖動。延時20ms左右,過濾掉按鍵的抖動,然后按第(1)步的方法再做一次。若還有鍵閉合,則認為確實有一個鍵被按下,否則返回第(1)步。

(3)查找被按下的鍵。從第0行開始,按順序逐行掃描,即逐行輸出0。每掃描一行,讀入列線數據,若數據中有一位為0,則表示該位對應的列與當前掃描行的交點處的按鍵被按下。

通過以上3個步驟即可檢查出哪一個鍵被按下。

2)反轉法

此法不需要逐行掃描,僅用兩步即可找到按下的鍵。

(1)將PA3~PA0設定為輸出,

PB3~PB0設定為輸入。

然后向行線輸出全0,接著從PB3~PB0讀入列線的值,若讀入的數據中有一位為0,則表明與該位對應的列線上有某個鍵被按下,存儲此值作為“列值”,轉第(2)步,否則在本步驟中循環(huán)。

(2)將PA3~PA0設定為輸入,PB3~PB0設定為輸出。把第(1)步讀入的值再輸出到列線上,接著從PA3~PA0讀入行線的值,其中必有一位為0,為0的位所對應的行線就是被按鍵所在的行,存儲此值作為“行值”。將行值和列值組合在一起,用查表的方法即可得到按鍵的鍵號。

例如,若第0行第2列(0,2)的鍵被按下,則第(1)步從列線讀回的列值為1011B。第(2)步再將1011B從列線輸出,從行線讀回的行值為1110B,二者組合,得到該鍵的行列值組合為11101011B。因為在鍵盤掃描過程中要反轉行線與列線的輸入/輸出方向,所以此法被稱為反轉法。

本例中我們假設16個鍵分別為十六進制數字0~9和A~F。鍵盤排列、連線及接口電路如圖5-19所示。16個鍵排成4行×4列的矩陣,接到微機的一對端口上。端口由8255A構成,其中端口A作輸出,端口B作輸入。矩陣的4條行線接到輸出端口A的PA3~PA0,用程序能改變這4條行線上的電平。4條列線連到輸入端口B的PB3~PB0,4條行線還同時接到輸入端口B的PB7~PB4上。這樣,用輸入指令讀取B端口狀態(tài)時,可同時讀取鍵盤的行列信號。在無鍵被壓下時,由于

+5V的上拉電阻的作用,列線被置成高電平。按下某一鍵后,該鍵所在的行線和列線接通。這時,如果向被按下鍵所在的行線上輸出一個低電平信號,則對應的列線也呈現(xiàn)低電平。當從B端口讀取列線信號時,便能檢測到該列線上的低電平信號。讀取B端口的狀態(tài)時,還能讀到行線上的低電平信號。這樣,根據讀入的行和列狀態(tài)中低電平的位置,便能確定哪個鍵被按下。識別鍵盤上哪個鍵被按下的過程稱為鍵盤掃描。上述鍵盤的掃描過程歸納起來包含以下幾步:

(1)檢測是否所有鍵都松開了,若沒有則反復檢測。

(2)當所有鍵都松開時,再檢測是否有鍵按下,若無鍵按下則反復檢測。

(3)若有鍵按下,則還要消除鍵抖動,確認有鍵按下。

(4)對按下的鍵進行編碼,將該鍵的行列信號轉換成十六進制碼,由此可確定哪個鍵被按下。如出現(xiàn)多鍵重按的情況,則只有在其他鍵均釋放后,僅剩一個鍵閉合時,才把此鍵當作本次按下的鍵。

(5)該鍵釋放后,再回到步驟(2)。

檢測矩陣中是否有鍵按下的一種簡單方法是:自輸出端口A向所有行線輸出電平0,再通過B端口的低4位讀取列值,若其中有0值,便表示有鍵按下。

在開始一次掃描時,首先應確認上一次按下的鍵是否已松開,即先向所有行線輸出低電平,再讀入各列線值。只有當所有的行線和列線均為高電平時,表示以前按下的鍵都已釋放,才開始檢測是否有鍵按下。

當檢測到有鍵按下后,必須消除鍵抖動(Debacle)。消除鍵抖動的常用方法是在檢測到有鍵按下后,延長一定時間(通常為20ms),再檢查該鍵是否仍被按下。若是,才認定該鍵確實被按下,而不是干擾。確認有鍵按下后,再確定被按下鍵所在的行列號。為獲取行列信息,先從A端口輸出一個低電平到一行線上,再從B端口讀入各列的值,若沒有一列為低電平,說明按下的鍵不在此行。于是,向下一行輸出一個低電平,再檢測各列線上是否有低電平。依次對每一行重復這個過程,直至查到某一列線上出現(xiàn)低電平為止。被置成低電平的行和讀到低電平的列,便是被按下鍵所在的行列值。已知被按下的鍵所在的行號(0~3)和列號(0~3)后,就能得到該鍵的掃描碼。例如,對于數字0,它位于3行3列,按下“0”鍵時,從B端口可讀得D7位和D3位為0,其余位為1,所以數字0的編碼為01110111B=77H;對于數字6,處于2行1列,按下“6”鍵時,D6位和D1位為0,其余位為1,所以數字6的編碼為10111101B=BDH。類似地,其余各鍵的編碼也可一一求得。將這些編碼值列成表,放在數據段中,用查表程序來查對,便能確定按下的是什么鍵。下面是鍵盤檢測、去抖動、鍵值編碼和確定鍵名的匯編語言程序。程序運行后,若返回值AH=0,則表示已讀到有效的鍵值,并在AL中存有0~F鍵的十六進制代碼;若AH=1,則表示出錯。實現(xiàn)該接口功能的程序段如下:

;端口地址

PORTAEQU0FF9H;8255A端口地址

PORTBEQU0FFBH;8255B端口地址

PORTCEQU0FFFH;8255控制端口地址

;數據段,鍵盤掃描碼表

DATASEGMENT

; 0 l

2

3 4 5 6

7

TABLE DB 77H,7BH,7DH,7EH, 0B7H, 0BBH, 0BDH, 0BEH

; 8 9

A

B

C D E F

DB

0D7H,0DBH,0DDH,0DEH,0E7H,0EBH,0EDH, 0EEH

DATA ENDS

;堆棧段

STACK SEGMENTSTACK

DW100 DUP(0)

TOPSTAC LABELWORD

STACK ENDS;代碼段

CODE SEGMENT

ASSUMECS:CODE,DS:DATA,SS:STACK

START:MOVAX,STACK

MOVSS,AX

LEASP,TOPSTAC

MOVAX,DATA

MOVDS,AX;初始化8255A,方式0,A端口作輸出,B端口和C端口為輸入

MOVDX,PORTC ;控制端口地址

MOVAL,10001011B;控制字

OUT DX,AL;寫入控制字

;向所有行送0

MOV DX,PORTA;A端口

MOV AL,00H

OUT DX,AL;向A端口各位輸出0;讀列,查看是否所有鍵均松開

MOV DX,PORTB

WAIT:IN AL,DX;鍵盤狀態(tài)讀入B端口

AND AL,0FH;只檢查低4位(列值)

CMP AL,0FH;是否都為1(各鍵均松 開)

JNE WAIT ;否,繼續(xù)查;各鍵均已松開,再查列是否有0,即是否有鍵按下

WAITPRES:IN AL,DX;讀B端口

AND AL,0FH ;只檢查低4位

CMP AL,0FH ;是否有鍵按下

JE WAITPRES ;無,等待

;有鍵按下,延時20ms,消除抖動

MOV CX,16EAH

DELAY:LOOP DELAY ;延時20ms;再查列,看鍵是否仍被按著

IN AL,DX

AND AL,0FH

CMP AL,0FH

JE WAITPRES;已松開,轉出等待按 鍵

;鍵仍被按著,確定哪一個鍵被按下

MOV AL,0FEH;先使D0=0

MOV CL,AL;CL=11111110B

NEXTROW:MOV DX,PORTA ;A端口

OUT DX,AL;下一行輸出低電平

MOV DX,PORTB;B端口

IN AL,DX;讀入B端口狀態(tài)

AND AL,0FH;只截取列值

CMP AL,0FH;是否均為1

JNE ENCODE;否,表示有鍵按下, 轉去編碼

ROL CL,01;均為1,使下行輸出0

MOV AL,CL

JMP NEXTROW;查看下一行;已找到有一列為低電平,對按下鍵的行列值編碼

ENCODE: MOV BX,000FH;建立地址指針, 先指向F鍵對應的地址

IN AL,DX ;從B端口讀入行 列號

NEXT: CMP AL,TABLE[BX] ;讀入的行列值與 表中查得的是否相等 JE DONE ;相等,轉出

DEC BX ;不等,指向下一 個(鍵值較小者)地址

JNS NEXT ;若地址尚未減為負值,繼續(xù)查

MOV AH,01 ;若減為負值,置出錯碼01→AH中

JMP EXIT ;退出

DONE: MOV AL,BL ;BL中存有按鍵的十六進制代碼

MOV AH,00

EXIT: HLT

CODE ENDS

END

4.打印機接口舉例

【例5-4】利用8255A作為打印機的連接接口,并通過該打印機接口打印字符串,字符串長度放在DS段的COUNT單元中,要打印的字符放在從DATA單元開始的數據區(qū)中。

8255A與系統(tǒng)及打印機接口的連接電路如圖5-20所示。圖5-21所示是打印機的工作時序圖。CPU通過8255A接口將數據傳送到打印機的D7~D0端,然后利用一個負脈沖

(寬度≥1

μs)將數據鎖存在打印機內部,以便打印機進行處理。同時,打印機的BUSY端送出高電平信號,表示其正忙。僅當BUSY端信號變低時,CPU才可以將下一個數據送給打印機。

圖5-208255A與系統(tǒng)及打印機接口的連接電路

圖5-21打印機的工作時序圖根據上述需求,本例讓8255A工作于方式0輸出。利用A端口作為輸出端口,向打印機輸出數據;C端口的PC6用做選通輸出, 與連接;PC1用做狀態(tài)輸入,與打印機的忙信號BUSY連接。因此,可通過初始化使C端口的高4位為輸出,C端口的低4位為輸入。B端口不使用,初始化時可任意定義為輸入或輸出端口(本例中將B端口定義為輸出端口)。另外,由于數據輸出后要通過PC6端輸出一個負脈沖,因此在初始化時先要將PC6初始化為高電平。由此可得出8255A的初始化程序(8255A的地址范圍為0FBC0H~0FBC3H):INIT:MOV DX,0FBC3H;8255的控制寄存器端口地址 送DX

MOV AL,10000001B ;A組方式0:A端口輸出,C端 口高4位輸出

;B組方式0:B端口輸出,C端 口低4位輸入

OUT DX,AL ;方式控制字送控制寄存器

MOV AL,00001101B ;C端口的按位操作控制字,使 PC6初始狀態(tài)置為1

OUT DX,AL ;C端口位操作控制字送控制寄 存器下邊是打印一批字符的程序段:

MOV CX,COUNT ;將字符串長度作 為循環(huán)次數

MOV SI,OFFSETDATA ;取字符串首地址

LOOP1:MOV DX,0FBC2H ;0FBC2H為C端 口的地址

IN AL,DX ;從C端口讀入打 印機的BUSY信號狀態(tài)

AND A1,02H

JNZ LOOP1 ;若BUSY為高電 平,則循環(huán)等待

MOV AL,[SI] ;否則取一個字符

MOV DX,0FBC0H ;0FBC0H為A端 口的地址

OUT DX,AL ;輸出一個字符到 A端口

MOV DX,0FBC2H ;準備在PC6上生 成一個負脈沖

MOV AL,00H

OUT DX,AL;因僅PC6接打印機,故 由C端口輸出00H將使PC6 變低

MOV AL,40H

OUT DX,AL;再使PC6變高,在PC6 上生成一個

負脈沖

INC SI

LOOP LOOP1 ;指向下一個字符

HLT ;若未結束,則繼續(xù)上面程序中,負脈沖是通過往C端口輸出數據(先將PC6初始化為1,然后輸出一個0,再輸出一個1)而形成的。當然,也可以利用控制字對C端口進行按位置位/復位操作來實現(xiàn):

MOV DX,0FBC3H

MOV AL,00001100B ;PC6復位=0

OUT DX,AL

MOV AL,00001101B ;PC6置位=1

OUT DX,AL

【例5-5】

在上例中,若使8255A工作在方式1下,并利用中斷方式進行數據傳送,則8255A與打印機的電路連接方法如圖5-20所示。

由打印機的工作時序圖(圖5-21)可知,打印機每接收一個字符后,會送出一個低電平的響應信號, 利用這個信號可使工作于方式1的8255A通過中斷來打印字符。

將8255A設置為方式1,A端口為數據輸出口,此時PC7自動作為 信號的輸出端,PC6自動作為 信號的輸入端,而PC3則自動作為INTR信號的輸出端,將其接到8259A的IR2端,所以中斷類型碼為0AH。輸出時,先輸出一個空字符,以引起中斷過程。在中斷時輸出要打印的字符,利用 的下降沿觸發(fā)一個單穩(wěn)觸發(fā)器,產生打印機所需要的 脈沖,將字符鎖存到打印機中。接收到字符后,打

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論