8255A的功能與結構


8255A可編程外圍設備接口(programmable perphheral interface,PPI)是一種通用的可編程並行I/O接口器件。它可以作為Intel系列微處理器或其它系列微處理器的接口器件,可以將任何與TTL兼容的I/O設備與微處理器連接。在與主頻不高於8MHz的微處理器一起工作時,不需要插入等待周期。

它有24個可編程I/O引腳,分為兩組,每組12個,可以以3種不同的操作方式工作。它的每個I/O引腳可以提供2.5mA的吸入電流,最大4mA。8255A常常用作鍵盤和打印機端口。它的價格低廉,使用方便,得到了廣泛的應用。

8255A的功能結構

由圖可得:

(1)數據總線緩沖器

D7~D0與系統數據總線相連,負責與CPU進行數據交換。包括輸入輸出數據、控制字和狀態字。

(2)讀/寫控制邏輯

接收來自CPU的地址信息和控制信息。

(3)A組控制和B組控制

這兩組控制邏輯電路接收來自CPU的控制字,控制兩組端口的工作方式及讀/寫操作。A組控制端口A和端口C的高4位,B組控制端口B和端口C的低4位。

(4)端口A、B、C

8255A有3個8位數據輸入/輸出端口:端口A、端口B和端口C,分別簡稱為A口、B口和C口。它們對外的引線分別是PA7~PA0、PB7~PB0和PC7~PC0。C口可分成兩個4位的端口:C口高4位(PC7~PC4)和C口低4位(PC3~PC0)。

三個端口按組編程

端口A和端口B都有一個8位數據輸入鎖存器和一個8位數據輸出鎖存/緩沖器。端口C有一個8位數據輸入緩沖器和一個8位數據輸出鎖存/緩沖器。

端口C可以按位操作。

8255A的引腳功能

雙列直插,40根引腳

D7~D0:數據信號線

CS:片選信號輸入引腳,低電平有效

RD:讀信號輸入引腳,低電平有效

WR:寫信號輸入引腳,低電平有效

RESET:復位信號輸入引腳,高電平有效。用於將8255A控制字寄存器清“0”,並將A、B、C口置成輸入狀態

A1、A0:端口選擇信號輸入引腳

8255A的工作方式

8255A可以無條件方式、查詢方式和中斷方式完成CPU與外設的數據交換。

以無條件方式工作時,端口A、B和C都可以作為數據輸入/輸出端口。

以查詢或中斷方式工作時,A口與B口可以作為數據輸入/輸出端口,C口作為握手聯絡信號,負責輸出控制信息或輸入狀態信息。

8255有三種工作方式:方式0、方式1、方式2;

方式0:基本輸入輸出方式

  • 適合於三個端口;
  • A口、C口的高4位、B口、C口的低四位可分別定義為輸入或輸出,共有四個部分,故共有16種組合。
  • C口可以按位進行置位(置0)和復位(置1)。

方式0最適用於無條件傳送方式

也能用於查詢工作方式,比較勉強,這時可以把C口的高4位定義為輸入口,輸入外設的狀態信號,而將C口的低四位定義為輸出口,輸出控制信息;(C口的輸入端和輸出端不固定,可根據圖中C口與外設相連的方向決定),這時可用A、B口傳送數據;

方式0不能工作在中斷方式

例:8255A作為連接打印機的接口,工作方式0,端口地址為:0D0H~0D6H,寫出相應的初始化程序和控制程序

注:第一行的81H如何得來?

81H=>10000001B

表示A口輸出,而通過看圖得知,(PC6為高四位),C口高四位輸出,C口低四位輸入。

方式1:選通輸入輸出方式

A口、B口作為數據的輸入口或輸出口,但數據的輸入輸出要在控制信號的控制下,控制信號由C口的某些位來提供;

方式1適用於程序查詢和中斷控制方式,它不能工作在無條件傳送方式下;

選通輸出

在方式1下,A口、B口都可以選通輸出數據,C口的6條線作為選通控制信號:PC3、PC6、PC7配合A口,PC0、PC1、PC2配合B口;

OBF:輸出緩沖器滿信號,低電平有效,當A口/B口有數據時,OBF就會變成低電平,高電平時,CPU可往A口/B口放送數據

ACK:外設收到數據的應答信號,低電平有效

INTE:中斷允許狀態

(工作原理:與PC7通過與門設置PC3的值,當OBF為高電平時,表示CPU可向外設傳數據,但CPU遲遲為將數據傳來,此時可通過PC6將INTE設置為高電平,兩者通過與門后,將PC3置為高電平,向CPU發起中斷請求信號(實際上是提醒CPU往外設傳輸數據)

INTR:中斷請求信號,高電平有效

總結:

  • 查詢方式

    查詢端口C的BIT7,如果是0則等待;如果不是0,則CPU發送數據。

    WAIT:  IN  AL,PORTC  # 從端口C讀取數據
    
           TEST AL,BIT7
    
           JZ  WAIT
    
           MOV  AL,[SI]
    
           OUT PORTA,AL
    
  • 中斷方式

    1. PC3置1,請求中斷
    2. 置位PC6,允許中斷
    3. 數據從端口輸出,導致OBF變成高電平,證明端口數據被取走,CPU就會往端口放送數據
    4. INTE與PC7構成一個與門,導致PC3再次置1

選通輸入

A口、B口都可以選通輸入數據,C口的6條線作為選通控制信號:PC3、PC4、PC5配合A口,PC0、PC1、PC2配合B口;

方式1:

STB:輸入選通信號,外設用它將數據鎖存於輸入數據緩沖器中,低電平有效

IBF:數據輸入緩沖器滿,STB的應答信號,高電平有效

INTE:中斷允許狀態

{工作原理:當IBF為高電平時,表示數據輸入緩沖器滿,但CPU遲遲沒來拿走輸入的數據,這時候就會向CPU發出中斷請求信號,提醒CPU拿走數據)

INTR:中斷請求信號,高電平有效

方式2:雙向傳輸方式

只有A口可以工作在這種方式下。既能發送數據,又能接收數據;它還要利用C口的5條線作為控制信號線; A口的輸入輸出均具有數據鎖存能力,數據的輸入輸出均可以引起中斷;

方式2適用於程序查詢和中斷控制方式。它不能工作在無條件傳送方式下。

這時B口可以工作在方式0或方式1,C口剩余的3條線可以作為輸入輸出線或方式1下的控制線。

8255的控制字

  1. 方式選擇控制字

【例題】

​ 設8255的端口地址為FBC0~FBC3H,A口設置方式0輸入,B口方式0輸出,C口高4位方式0輸出,C口低4位方式0輸入。

控制字為:10010001B => 91H

8255初始化程序為:

# 由8255的端口地址為FBC0~FBC3H可知,控制端口為FBC3H
MOV  DX, 0FBC3H # 以字母F開頭,須在前面加一個0

MOV  AL, 91H
 
OUT  DX, AL
  1. 按位操作控制字

    設置PC0為置位,則:00000001

    設置PC4為復位,則:00001000

【例題】

​ 設8255的端口地址為FBC0~FBC3H,A口設置方式0輸出,B口方式0輸入,C口高4位方式0輸出,C口低4位方式0輸入,利用C口PC5產生連續的方波信號,信號的高、低電平寬度可調用延時子程序DELAY實現。

控制字為:10000011B =>83H

8255初始化程序為:

     MOV  DX, 0FBC3H

     MOV  AL, 83H

     OUT  DX, AL

FB : MOV  AL, 0BH   #00001011B 高電平

     OUT  DX, AL     ;PC5置位

     CALL  DELAY   ;維持高電平

     MOV  AL, 0AH

     OUT  DX, AL     ;PC5=0

     CALL  DELAY    ;維持低電平

     JMP   FB      ;連續輸出方波信號

8255與微處理器的連接

  1. 8255A的D7~D0分別與系統總線的D7~D0相連;

  2. RD、WR分別與系統總線的RD、WR信號或者IOR和IOW﷯信號相連;

  3. A1、A0分別與系統地址線A1、A0相連;

  4. CS由系統地址總線A2~A15譯碼生成。

    在PC機中,8255A的I/O端口地址為60H63H和端口378H37BH。端口60H63H用於鍵盤、揚聲器和定時器,端口378H37BH用於並行打印機(LPT1)端口。

端口地址

8255A包含A口、B口、C口三個獨立的數據端口,及一個控制端口。各端口地址如下:

A1A0=00 A口

A1A0=01 B口

A1A0=10 C口

A1A0=11 控制端口

  1. 該圖表示8255A有四個地址,因為這里有兩根線 A1 A0,這兩根線決定了8255有四個地址

  2. 8255要正常工作,必須CS為有效,而CS與Y2相連,也就是Y2必須輸出有效信號

  3. 如果Y2要有效,必須讓74LS138譯碼器有效,而要74LS138譯碼器有效,必須使得:G1為高電平,G2A為低電平,G2B為低電平這三個一定要滿足

  4. C B A 決定Y2是否有效 (不一定是Y2,所以C B A 的值根據下面的值變化)

    C  B  A

    0   0   0  Y0有效

    0   0   1  Y1有效

    0   1   0  Y2有效

    0   1   1  Y3有效

    1   0   0  Y4有效

    1   0   1  Y5有效

    1   1   0  Y6有效

    1   1   1  Y7有效

  5. 把圖中CPU的所以地址線A7~A0列出來計算得出地址值

8255A初始化

​ 8255A初始化,設定端口的工作方式和輸入/輸出方向,即將方式控制字寫入控制端口。

初始化程序段如下:

MOV  DX, PORT-Ctrl       ;8255A的控制口地址送DX

MOV  AL, mode          ;將方式選擇控制字內容送AL

OUT  DX, AL            ;寫入控制口,完成初始化

鍵盤接口

利用8255A可以很方便地連接線性鍵盤和矩陣鍵盤。

  • 按鍵數量大的鍵盤通常采用矩陣結構,如計算機鍵盤,利用一片8255A的A口和C口的高4位作為行線,B口和C口的低4位作為列線,可以構成12X12=144的矩陣鍵盤。
  • 識別鍵盤上哪個鍵被壓下的過程稱為鍵盤掃描。
  • 鍵盤掃描有兩種方法:行掃描法和反轉法。

行掃描法

  1. PC7~PC4 輸出全 0(所有行置0),從 PC3~PC0 讀入,若讀入的數據不是 0FH,表明某一列有鍵按下;
  2. 延時 20ms 去抖動(按鍵按下時的訊號不穩定),重復第一步動作,若還有鍵閉合,則認為確實有鍵閉合;否則返 回第一步;
  3. 查找被確認的鍵;從第 0 行開始逐行輸出 0,其他行輸出1(每次只有掃描到的行為0,其他的都為1),然后讀入列的值,檢測是否為0FH,如果是0FH則檢測下一行,如果不是則已經找到按鍵所在的行,輸出所在的行;
  4. 將輸出的行值數據與第 1 步輸入的數據組成一個字節,查表(鍵的位置碼表),確定鍵值。(如上圖的鍵值8,其位置碼位BE)

反轉法

圖上每行每列比行掃描法都多了一個電阻

  1. 將 PC7~PC4 設定為輸出,PC3~PC0 設定為輸入。然后 PC7~PC4 輸出全 0,從 PC3~PC0 讀入列值,若讀入的數據有一位為 0,表明該列有鍵按下,保存列值;
  2. 延時 20ms 去抖動,重復第一步動作,若還有鍵閉合,則認為確實有鍵閉合;否則返 回第一步;
  3. 將 PC7~PC4 設定為輸入,PC3~PC0 設定為輸出。把保存的列值從 PC3~PC0 輸出, 從 PC7~PC4 讀入行值,讀入的數據必有一位為 0,保存行值。將行值和列值組合在 一起,用查表的方法得到按鍵的鍵值。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM