微機(jī)原理 第七章 8255接口電路_第1頁(yè)
微機(jī)原理 第七章 8255接口電路_第2頁(yè)
微機(jī)原理 第七章 8255接口電路_第3頁(yè)
微機(jī)原理 第七章 8255接口電路_第4頁(yè)
微機(jī)原理 第七章 8255接口電路_第5頁(yè)
已閱讀5頁(yè),還剩56頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

本章學(xué)習(xí)的知識(shí)點(diǎn):1)掌握并行接口8255的基本功能2)掌握并行接口8255的三種工作方式的特點(diǎn)和用法3)掌握并行接口8255的硬軟件設(shè)計(jì)方法本章學(xué)習(xí)的難點(diǎn):1)掌握8255的3種工作方式的特點(diǎn)和用法2)掌握8255的硬軟件設(shè)計(jì)方法第七章可編程并行接口電路82558255是Intel公司為其8086/8088系列微處理器生產(chǎn)的8位(數(shù)據(jù)線)通用可編程并行輸入輸出接口芯片。它具有很強(qiáng)的功能,在使用中可利用軟件編程來(lái)指定它將要完成的功能。因此,8255獲得了廣泛的應(yīng)用。7.1可編程并行接口8255引腳功能和結(jié)構(gòu)1)外部引線8255的外部引線如圖所示D0~D7:雙向數(shù)據(jù)信號(hào)線RD:讀信號(hào)線WR:寫(xiě)信號(hào)線CS:片選信號(hào)線A0、A1:口地址選擇信號(hào)線RESET:復(fù)位輸入信號(hào)PA0-PA7:A口輸入輸出信號(hào)線PB0-PB7:B口輸入輸出信號(hào)線PC0-PC7:B口輸入輸出信號(hào)線1、8255的外部引線及內(nèi)部結(jié)構(gòu)圖7-18255的外部引線圖(1)與外設(shè)接口部分有三個(gè)8位的輸入輸出端口:端口A、端口B、端口C,其編號(hào):PA7~PA0、PB7~PB0、PC7~PC0。端口都是8位,都可以作為輸入或輸出,但功能上各有特色:2)內(nèi)部結(jié)構(gòu)8255的內(nèi)部結(jié)構(gòu)框圖如圖7.2所示,由三部分組成。口A:對(duì)應(yīng)一個(gè)8位數(shù)據(jù)輸出鎖存和緩沖器;一個(gè)8位數(shù)據(jù)輸入鎖存器??贐和口C:對(duì)應(yīng)一個(gè)8位數(shù)據(jù)輸出鎖存和緩沖器;一個(gè)8位數(shù)據(jù)輸入緩沖器。注意:口B和口C都沒(méi)有輸入鎖存,用于輸入方式時(shí)不能對(duì)數(shù)據(jù)鎖存,即如第一次進(jìn)來(lái)的數(shù)據(jù)沒(méi)被取走時(shí),第二次進(jìn)來(lái)的數(shù)據(jù)把第一次進(jìn)來(lái)的數(shù)據(jù)淹沒(méi)。圖7.28255的內(nèi)部結(jié)構(gòu)框圖(2)與微處理器接口部分

這部分主要完成數(shù)據(jù)傳送及邏輯控制。有:RD、WR、CS、RESET、D0-D7,8255的各端口地址線A0、A1。(3)內(nèi)部控制部分

由A、B兩組控制電路組成。主要作用是根據(jù)CPU送來(lái)的控制字用以決定兩組端口(A組為A口和C口的高4位,B組為B口和C口的低4位)的工作方式,也可根據(jù)控制字的要求對(duì)C口按位進(jìn)行置位或復(fù)位。8255四個(gè)端口:8255有三個(gè)8位的數(shù)據(jù)輸入輸出口外,還有一個(gè)控制口,其功能是用于對(duì)8255的工作方式進(jìn)行設(shè)置。重點(diǎn)掌握和理解的內(nèi)容:哪個(gè)口工作由A0、A1的組合實(shí)現(xiàn)選擇:A1A0選中的口地址號(hào)00選中A口01選中B口10選中C口11選中控制口A1A0RDWRCS完成的操作000010000111000端口A→數(shù)據(jù)總線端口B→數(shù)據(jù)總線端口C→數(shù)據(jù)總線00110101111100000000數(shù)據(jù)總線→端口A數(shù)據(jù)總線→端口B數(shù)據(jù)總線→端口C數(shù)據(jù)總線→控制口X1XX1XX0XX11100D7~D0數(shù)據(jù)總線呈高阻狀態(tài)非法狀態(tài)D7~D0數(shù)據(jù)總線呈高阻狀態(tài)8255四個(gè)端口尋址邏輯關(guān)系與微處理器接口部分的硬件電路圖實(shí)例圖7-3口C上半部口C下半部口A口BRDWRRESETA1A0A1A0825574LS138G1G2AG2BCBAA5M/IOA6A4A3A2D0~D7CSY0地址譯碼邏輯關(guān)系:G2AG1G2BCB

A0A7A6A5A4A3A2A1

A0110000XXY0=0Y1=0C0H~C3HC0H→A口C1H→B口C2H→C口C3H→控制口C0HC2HC1H&A7

8255有三種工作方式,三種工作方式都可由CPU向8255的控制口寫(xiě)入控制字來(lái)決定8255的工作方式??刂谱钟袃煞N:①方式選擇控制字

②C口的按位置位/復(fù)位控制字7.28255方式控制字及狀態(tài)字(重點(diǎn)內(nèi)容)1、8255的工作方式1)方式選擇控制字方式選擇控制字用來(lái)決定8255A三個(gè)數(shù)據(jù)端口各自的工作方式,它由一個(gè)8位的寄存器組成,它的格式如下所示。D7D6D5D4D3D2D1D0特征位A組方式00=方式001=方式11X=方式2A口0=輸出1=輸入C口C7~C40=輸出1=輸入B組方式0=方式01=方式1B口0=輸出1=輸入C口C3~C00=輸出1=輸入A組控制B組控制D7位為“1”時(shí),為方式選擇控制字的標(biāo)識(shí)位。D6、D5位決定A端口的工作方式。D4位決定A端口工作在輸入還是輸出方式。D3位決定C端口高4位PC7~PC4是作為輸入端口,還是作為輸出端口。D2位用來(lái)選擇B端口的工作方式。D1位決定B端口作為輸入還是輸出端口。D0位決定C端口低4位PC3~PC0作為輸入,還是輸出。D7D6D5D4D3D2D1D0特征位A組方式00=方式001=方式11X=方式2A口0=輸出1=輸入C口C7~C40=輸出1=輸入B組方式0=方式01=方式1B口0=輸出1=輸入C口C3~C00=輸出1=輸入A組控制B組控制例:要求A口為輸入,B口為輸出,C口為輸出,A口方式0,B口方式1。根據(jù)要求設(shè)置方式控制字:94HMOVAL,94HOUT(PORTC),AL;PORTC為控制口地址號(hào)

注意:8255在工作過(guò)程中如果改變工作方式,則控制口設(shè)置的內(nèi)容全部復(fù)位(CPU自動(dòng)完成),接著要設(shè)置新的方式控制字后才能進(jìn)入新的工作方式。3種工作方式可用軟件編程對(duì)控制口設(shè)置來(lái)指定。三種基本的工作方式為:方式0-基本的輸入輸出方式方式1-選通輸入輸出方式方式2-雙向傳送方式。7.38255的工作方式

1)工作方式0(基本輸入輸出方式)功能:方式0不使用聯(lián)絡(luò)信號(hào),也不使用中斷,A口和B口可定義為輸入或輸出口,C口分成兩個(gè)部分(高四位和低四位),C口的兩個(gè)部分也可分別定義為輸入或輸出。在方式0,所有口輸出均有鎖存,輸入只有緩沖,無(wú)鎖存,C口還具有按位將其各位清0或置1的功能。常用于與外設(shè)無(wú)條件的數(shù)據(jù)傳送或接收外設(shè)的數(shù)據(jù)。

2)工作方式1(選通輸入輸出方式)

A口借用C口的一些信號(hào)線用作控制和狀態(tài)信號(hào),組成A組,B口借用C口的一些信號(hào)線用作控制和狀態(tài)信號(hào),組成B組。在方式1下,C口的某些位被占用。

當(dāng)A口工作于方式1且用作輸出口時(shí),C口的PC7線用作輸出緩沖器滿(mǎn)OBF信號(hào),PC6用作外設(shè)收到數(shù)據(jù)后的響應(yīng)信號(hào)ACK,PC3用作中斷請(qǐng)求輸出信號(hào)線INTR。方式1的輸出:當(dāng)B口工作于方式l且用作輸出口時(shí),C口的PC1線用作輸出緩沖器滿(mǎn)OBF信號(hào),PC2用作外設(shè)收到數(shù)據(jù)后的響應(yīng)信號(hào)ACK,PC0用作中斷請(qǐng)求輸出信號(hào)線INTR。

方式1下A口、B口為輸出圖7.4方式1下,A、B口均為輸出的信號(hào)定義控制字的設(shè)置D7D6D5D4D3D2D1D00A組方式01=方式1A口0=輸出C口I/OB組方式1=方式1B口0=輸出C口I/O①OBF為輸出緩沖器滿(mǎn)信號(hào),低電平有效。8255輸出信號(hào),當(dāng)其有效時(shí),CPU已將數(shù)據(jù)送到指定的口,用于通知外設(shè)可將數(shù)據(jù)取走。各個(gè)控制位的作用(重點(diǎn)掌握和理解的內(nèi)容)

②ACK為外設(shè)響應(yīng)信號(hào),低電平有效。由外設(shè)送來(lái),有效時(shí)表明8255的數(shù)據(jù)已被外設(shè)取走。③INTR為中斷請(qǐng)求信號(hào),高電平有效。它是當(dāng)外設(shè)將數(shù)據(jù)取走并給出應(yīng)答ACK信號(hào)之后,8255向CPU提出中斷請(qǐng)求,讓CPU輸出一個(gè)新的數(shù)據(jù)。④INTE中斷允許信號(hào),高電平有效。為低時(shí)則屏蔽中斷請(qǐng)求,即不發(fā)出中斷請(qǐng)求信號(hào)INTR。INTE的狀態(tài)由通過(guò)對(duì)C口PC6或PC2置1后A口和B口才允許中斷。INTE=1,允許A口或B口向CPU申請(qǐng)中斷,INTE=0,禁止A口或B口向CPU申請(qǐng)中斷。

8255的中斷設(shè)置方法:中端允許信號(hào)INTE是由軟件通過(guò)對(duì)C口的按位置位/復(fù)位的控制字來(lái)置1或清0的設(shè)置的,PC6置1時(shí),A口允許中斷,PC2置1時(shí),B口允許中斷。注意:在方式1輸出方式時(shí),PC4和PC5的工作狀態(tài)由控制字決定其為輸出還是輸入。設(shè)置后不影響其它位的作用。方式1下A口、B口為輸入(重點(diǎn)掌握和理解的內(nèi)容)

1)A口工作于方式1且用作輸入口時(shí),C口的PC4線用作選通輸入信號(hào)線STB,PC5用作輸入緩沖器滿(mǎn)輸出信號(hào)線IBF,PC3用作中斷請(qǐng)求輸出信號(hào)線INTR。2)B口工作于方式1且用作輸入口時(shí),C口的PC2線用作選通輸入信號(hào)線STB,PC1用作輸入緩沖器滿(mǎn)輸出信號(hào)線IBF,PC0用作中斷請(qǐng)求輸出信號(hào)線INTR。

方式1下A口、B口均為輸入圖7.5方式1下A、B口均為輸入時(shí)的信號(hào)定義D7D6D5D4D3D2D1D00A組方式01=方式1A口1=輸入C口I/OB組方式1=方式1B口1=輸入C口I/O控制字的設(shè)置①STB:選通控制,輸入信號(hào)。當(dāng)外部設(shè)備來(lái)的8位數(shù)據(jù)送入到8255的輸入緩沖器中時(shí)該位有效。在時(shí)間上,外部設(shè)備先把數(shù)據(jù)送到8255的數(shù)據(jù)口A或B,然后再送出STB信號(hào),用于把數(shù)據(jù)鎖存到8255的輸入數(shù)據(jù)寄存器,等待CPU取數(shù)據(jù)。②IBF:輸入緩沖器滿(mǎn)信號(hào),輸出信號(hào),高電平有效。當(dāng)8255的輸入緩沖器有新數(shù)據(jù)后,該位有效,為8255給外設(shè)的聯(lián)絡(luò)信號(hào),告知外設(shè)輸入的數(shù)據(jù)已被接收到,但還沒(méi)被CPU取走,不能再送新的數(shù)據(jù)。該信號(hào)在STB變?yōu)榈秃?300NS時(shí)間內(nèi)變?yōu)楦唠娖剑ㄗ詣?dòng)完成)。在CPU讀取了數(shù)據(jù)后,RD信號(hào)撤消后的300NS時(shí)間內(nèi)IBF信號(hào)才撤消,變?yōu)榈碗娖?,告知外設(shè)可輸入新的數(shù)據(jù)。③INTR:為中斷請(qǐng)求信號(hào),高電平有效。中端請(qǐng)求的條件:STB變高后300ns內(nèi),并IBF信號(hào)也為高。(要等數(shù)據(jù)全部進(jìn)入到輸入緩沖器后才發(fā)出中斷請(qǐng)求)④INTE:中斷允許信號(hào),高電平有效。為低時(shí)則屏蔽中斷請(qǐng)求。INTE的狀態(tài)由通過(guò)對(duì)C口PC4或PC2置1后A口和B口才允許中斷。(與INTR完全不同,是無(wú)條件的,由軟件對(duì)C口PC4或PC2置1即可實(shí)現(xiàn)中斷)3)工作方式2(雙向輸入輸出方式)功能:方式2是A組獨(dú)有的工作方式。外設(shè)既能在A口的8條引線上發(fā)送數(shù)據(jù),又能接收數(shù)據(jù)。此方式也是借用C口的5條信號(hào)線作控制和狀態(tài)線,A口的輸入和輸出均帶有鎖存。理解內(nèi)容:

圖7.6方式2下的信號(hào)定義OBF:輸出緩沖器滿(mǎn),輸出,低有效。這是8255A送給外設(shè)的控制信號(hào),有效時(shí)表示數(shù)據(jù)已送入到A口輸出鎖存器中,用該信號(hào)通知外設(shè)將數(shù)據(jù)取走。ACK:應(yīng)答,輸入,低有效。這是外設(shè)送來(lái)的信號(hào),有效時(shí)表示外設(shè)已經(jīng)從A口輸出線上將數(shù)據(jù)取走。STB:選通信號(hào),輸入,低有效。這是由外設(shè)送來(lái)的信號(hào),有效時(shí)將由外設(shè)送來(lái)的位于A口引線的8位數(shù)據(jù)鎖存到A口的輸入鎖存器中。INTR:中斷請(qǐng)求,輸出,高有效。這是8255A送給CPU的中斷請(qǐng)求信號(hào)。無(wú)論是輸入操作還是輸出操作,當(dāng)一個(gè)操作完成,要進(jìn)行下一個(gè)操作時(shí)8255A都通過(guò)該引腳向CPU發(fā)中斷請(qǐng)求信號(hào)。方式2的A口輸入和輸出傳送各自作為一個(gè)中斷源,兩個(gè)中斷請(qǐng)求信號(hào)在8255A內(nèi)部相或,只產(chǎn)生一個(gè)中斷請(qǐng)求通過(guò)PC3發(fā)給CPU。IBF:輸入緩沖器滿(mǎn),輸出,高有效。這是8255A送給外設(shè)的響應(yīng)信號(hào),有效時(shí)表示數(shù)據(jù)已送入到輸入鎖存器中,CPU可以取走。INTE1:中斷允許1。它是由內(nèi)部的中斷控制觸發(fā)器發(fā)出的允許中斷或屏蔽中斷的信號(hào)。INTE=l,允許A口在輸出緩沖器變空(數(shù)據(jù)已被外設(shè)取走)時(shí)向CPU申請(qǐng)中斷,讓CPU輸出一個(gè)新的數(shù)據(jù);INTE=0,則屏蔽了輸出中斷請(qǐng)求,這樣,即使A口的輸出緩沖器已經(jīng)變空了,也不能在INTR上產(chǎn)生中斷請(qǐng)求信號(hào)。INTE1為0還是為1是由軟件通過(guò)對(duì)PC6復(fù)位/置位來(lái)完成的,PC6=0使INTE1為0,PC6=l使INTE1為1。(由軟件置1實(shí)現(xiàn)中斷)INTE2:中斷允許2。它也是由內(nèi)部的中斷控制觸發(fā)器發(fā)出的允許中斷或屏蔽中斷的信號(hào)。INTE2=1,允許A口在輸入數(shù)據(jù)就緒時(shí)向CPU申請(qǐng)中斷,讓CPU將數(shù)據(jù)取走;INTE2=0,則屏蔽了輸入中斷請(qǐng)求。INTE2為0還是為1是由軟件通過(guò)對(duì)PC4復(fù)位/置位來(lái)完成的,PC4=0使INTE2為0,PC4=1使INTE2為1。(由軟件置1實(shí)現(xiàn)中斷)

8255A和CPU傳輸數(shù)據(jù)的過(guò)程中,經(jīng)常將C端口的某幾位作為控制位或狀態(tài)位來(lái)使用,從而配合A端口或B端口的工作。7.4C口按位置位/復(fù)位控制字

控制字D7=0在8255A芯片初始化時(shí),C端口置1/置0控制字可以單獨(dú)設(shè)置C端口的某一位為0或某一位為1??刂谱值腄7位為“0”時(shí),是C端口置1/置0控制字中的標(biāo)識(shí)位,這個(gè)控制字只對(duì)C口起作用,任何一位都可以通過(guò)按位置位/復(fù)位控制字來(lái)設(shè)置。注意:對(duì)C口的置位/復(fù)位控制不是把控制字送到C口,而是由控制口決定各位的狀態(tài),是把控制字送到控制口圖7.7C口的按位操作控制字格式D0位的狀態(tài)決定了是對(duì)由D3-D1選中位是復(fù)位還是置位,每設(shè)置一次只能對(duì)其中的一位實(shí)現(xiàn)設(shè)置!D7位必須為0D7D6D5D4D3D2D1D0C口置位識(shí)別位D0=0任意值選中位置1/置0選擇D0=0:置0,D0=1:置1000:PC0001:PC1010:PC2011:PC3100:PC4101:PC5110:PC6111:PC7C口位選擇例:設(shè)置C7=1,C5=1,C3=0MOVAL,0FHOUT(PORTC),AL;C7=1MOVAL,0BHOUT(PORTC),AL;C5=1MOVAL,06HOUT(PORTC),AL;C3=0每位需兩條指令完成設(shè)置PORTC為控制口的地址號(hào)7.68255應(yīng)用設(shè)計(jì)舉例例1、8255與打印機(jī)連接的硬軟件設(shè)計(jì)查詢(xún)式,用C口的一些位做工作狀態(tài)(靈活應(yīng)用?。﹫D7.88255與打印機(jī)的連接

在使用中打印機(jī)的很多控制線中只使用少數(shù)的幾個(gè)控制信號(hào)就可以滿(mǎn)足正確打印的要求,其它信號(hào)線可以不要。8255PA0PA1PA7PC6PC1系統(tǒng)總線D0D1D7BUSYSTROBE打印機(jī)STROBE:告訴打印機(jī)是否能發(fā)數(shù)據(jù)。BUSY:=1,數(shù)據(jù)被打印機(jī)取走,=0,數(shù)據(jù)被打印機(jī)取走。打印程序如下:INIT55:MOVDX,0383H;控制口地址MOVAL,13H;A方式0、輸出、B方式0,輸入OUTDX,AL;C7-4輸出、C3-0輸入MOVAL,0DH;C6置1OUTDX,AL;給打印機(jī)一個(gè)接受數(shù)據(jù)信號(hào)PRINT:MOVAL,BLAK;BLAK為要打印的數(shù)據(jù)長(zhǎng)度MOVCL,AL;數(shù)據(jù)長(zhǎng)度送到CL保存MOVSI,OFFSETDATA1:取打印數(shù)據(jù)存放地址GOON:MOVDX,0382H;設(shè)C口地址PWAIT:INAL,DX;取回C口的內(nèi)容ANDAL,02H;判斷C1位,打印是否準(zhǔn)備好JNZPWAIT;C1=0ZF=0則轉(zhuǎn)去繼續(xù)查詢(xún)等待MOVAL,[SI];準(zhǔn)備好,取一個(gè)字符MOVDX,0380H;送打印字給A口OUTDX,AL;送數(shù)據(jù)MOVDX,0383HMOVAL,0CH:C6置0,使該位有跳變OUTDX,AL;按位置位控制字MOVAL,0DH;C6置1,給打印機(jī)一個(gè)接受數(shù)據(jù)信號(hào)OUTDX,AL;送脈沖INCSI;打印數(shù)據(jù)區(qū)地址移到下一個(gè)數(shù)據(jù)位置DECCL;數(shù)據(jù)長(zhǎng)度減1JNZGOON;全部數(shù)據(jù)打印完嗎?沒(méi)完返回繼續(xù)打印RET;全部數(shù)據(jù)打印完,返回主程序在此例中,為了保證打印機(jī)正確的接收到數(shù)據(jù),先給出一個(gè)查詢(xún)信號(hào)STROBE,在打印機(jī)接到這個(gè)信號(hào)后并且處在“閑”狀態(tài)時(shí),就回答給出BUSY=1,CPU就可以將要打印的數(shù)據(jù)送到A口,同時(shí)發(fā)出STROBE信號(hào),告訴打印機(jī),要發(fā)送下一個(gè)數(shù)據(jù)。例2:設(shè)計(jì)兩個(gè)8255,要求8255(1)地址為80H-83H,8255(2)地址為84H-87H地址譯碼:G1G2BG2ACBAA1A0A7M/IOA5+A6A4A3A2A1A0100000001000000110000010100000118255(1)Y0=0A口80HB口81HC口82H控制口83H100001001000010110000110100001118255(2)Y1=0A口84HB口85HC口86H控制口87H與CPU的硬件電路D0-7Y0Y1D0-7M/IOA7A6A5+A4A3A2ABCG2AG2BG1A1A0A1A0CSD0-7A1A0CSWRRDWRRDWRRDRESETRESETRESETA口B口A口B口C口C口對(duì)8255(1)的工作方式要求:A方式0、輸入,B方式1、輸出,C7-4輸出,C3-0輸入控制字為95H,初始化程序:MOVAL,95HOUT(83H),AL對(duì)8255(2)的工作方式要求:A方式1、輸出、B方式1,輸入,C7-4輸入,C3-0輸出控制字為AEH,初始化程序:MOVAL,AEHOUT(87H),AL要分別對(duì)兩個(gè)8255進(jìn)行初始化設(shè)置1、當(dāng)K全閉合時(shí),8支燈亮;當(dāng)有一個(gè)以上K斷開(kāi)時(shí),8支燈滅。例3:8255A的PA0~PA7端接有開(kāi)關(guān)K0~K7,PB0~PB7接有8支LED發(fā)光管。端口A、B均工作在方式0下,根據(jù)開(kāi)關(guān)狀態(tài)控制LED燈的顯示。設(shè)計(jì)任務(wù):2、測(cè)試開(kāi)關(guān)狀態(tài),控制相應(yīng)的燈亮或滅。CSA1A0WRRDPA0PA7PB0PB1PB73:8CBAG1G2AG2BWRA7A6A5A4A3A2A1A0Y4…..+5V+5V…..M/IORDK0K7D0~D7地址:90H,91H,92H,93H方式控制字:10010000=90HWRRDPB7WRY4…..+5V+5V…..RDK0K7D0~D7CSA1A074LS138CBAG1G2AG2BA7A6A5A4A3A2A1A0PA0PA7M/IO到CPU數(shù)據(jù)總線PB0PB1L0L1L7任務(wù)1編程:START:MOVAL,90H;8255初始化設(shè)置 OUT93H,ALSTATES:INAL,90H,讀A口ANDAL,0FFH,判斷K0-K7全閉合JZHIGH ;當(dāng)K全閉合時(shí),8支燈亮;MOVAL,0FFH ;有一個(gè)以上K斷開(kāi),OUT91H,AL ;8支燈滅;JMPDONEHIGH:MOVAL,00H;8支燈亮(注意電路的非門(mén))OUT91H,ALDONE:JMPSTATESSTART:MOVAL,90H OUT93H,ALAGAIN:INAL,90HOUT91H,ALJMPAGAIN任務(wù)2編程:例4用8255作為小鍵盤(pán)接口的設(shè)計(jì)

圖中8255A的A口工作于方式0輸出,B口工作于方式0輸入。0#8255APA0CPU總線行0+5VPA1PA2PA3PB0PB1PB2PB312#1#13#2#14#3#15#行1行2行3列0列1列2列31)CPU掃描8255的各行(使輸出逐位依此為0),讀回輸入,檢查是否有鍵按下(是否有某位為0)。設(shè)計(jì)思想:2)有鍵按下時(shí),與之對(duì)應(yīng)的行和列短接,使其為0,查鍵值。3)根據(jù)輸出行為0的順序,確定行值,然后根據(jù)輸入列為0的位,找到對(duì)應(yīng)的鍵值。工作原理:使全部輸出線為0,讀回輸入線的數(shù)據(jù),如有鍵被按下,則肯定有一條線的數(shù)據(jù)(有一位)為0。鍵盤(pán)工作過(guò)程:首先進(jìn)行第1次鍵盤(pán)掃描(判斷是否有鍵按下)。0#8255APA0CPU總線行0+5VPA1PA2PA3PB0PB1PB2PB312#1#13#2#14#3#15#行1行2行3列0列1列2列3工作原理:使全部輸出線為0,讀回輸入線的數(shù)據(jù),如有鍵被按下,則肯定有一條線的數(shù)據(jù)(有一位)為0。鍵盤(pán)工作過(guò)程:首先進(jìn)行第1次鍵盤(pán)掃描(判斷是否有鍵按下)。①使A口PA3PA0輸出均為0,然后讀入B口的值,查看PB3PB0是否有低電平,若沒(méi)有低電平,則說(shuō)明沒(méi)有鍵按下,繼續(xù)進(jìn)行掃描(重復(fù)過(guò)程①)。0#8255APA0CPU總線行0+5VPA1PA2PA3PB0PB1PB2PB312#1#13#2#14#3#15#行1行2行3列0列1列2列3若PB3PB0中有一位為低電平,使用軟件延時(shí)1020ms以消除抖動(dòng),若低電平消失,則說(shuō)明低電平是由干擾或按鍵的抖動(dòng)引起的,必須再次掃描,否則,則確認(rèn)有鍵按下,接著進(jìn)行第2次掃描(行掃描,判斷所按鍵的位置)。②通過(guò)A口輸出使PA0=0,PA1=1,PA2=1,PA3=1(逐位為0)對(duì)第0行進(jìn)行掃描,此時(shí),讀入B口的值,判斷PB3PB0中是否有某一位為低電平,若有低電平,則說(shuō)明第0行某一列上有鍵按下。0#8255APA0CPU總線行0+5VPA1PA2PA3PB0PB1PB2PB312#1#13#2#14#3#15#行1行2行3列0列1列2列3如果沒(méi)有低電平,接著使A口輸出PA0=1,PA1=0,PA2=1,PA3=1對(duì)第1行進(jìn)行掃描。按上述方法判斷,直到找到被按下的鍵,并識(shí)別出其在矩陣中的位置,從而可根據(jù)鍵號(hào)去執(zhí)行該鍵對(duì)應(yīng)的處理程序。設(shè)8255A的A口、B口和控制寄存器的地址分別為80H、81H和83H。MOVAL,82H;A口方式0輸出,B口方式0輸入OUT83H,AL;將工作方式控制字送控制寄存器MOVAL,00H OUT80H,AL;使PA3=PA2=PA1=PA0=0LOOA:INAL,81H;讀B口,判斷PB30是否有一位為低電平ANDAL,0FH;只考慮低四位的值 CMPAL,0FH;有鍵閉合嗎?JZLOOA ;無(wú)鍵被按下,轉(zhuǎn)LOOA等待CALLLD20ms;有鍵被按下,PB3PB0有一位為低,調(diào)延;時(shí)20ms子程序,消除抖動(dòng)引起的誤動(dòng)作。INAL,81H;再次讀入B口值。程序設(shè)計(jì):ANDAL,0FH ;有鍵按下,在檢查是否真的按下。CMP AL,0FH ;如果延時(shí)后PB3PB0中低電平不再存在,JZ LOOA ;說(shuō)明是由干擾或抖動(dòng)引起的,則轉(zhuǎn)LOOA繼續(xù)掃描,延時(shí)后仍有某位為0,說(shuō)明有鍵被按下,查鍵值。

下段程序?yàn)榕袛嗄囊粋€(gè)鍵按下

START:MOVBL,4 ;行數(shù)送BL(共四行) MOV BH,4 ;列數(shù)送BH(共四列) MOV AL,0FEH ;準(zhǔn)備掃描0行,使D0位=0。 MOV CL,0FH ;鍵盤(pán)屏蔽碼送CL(只要低四位) MOV CH,00H ;CH中存放起始鍵號(hào)LOP1:OUT 80H,AL ;A口輸出,掃描一行(D0=0) ROL AL,1 ;行值左移一位,修改掃描碼,準(zhǔn);備掃描下一行。 MOV AH,AL ;暫時(shí)保存行線值 IN AL,81H ;讀B口,以便確定所按鍵的列值A(chǔ)NDAL,CL;比較是低四位,只保留低四位 CMPAL,CL ;檢查該列線是否為0, JNZLOP2;有列線為0,轉(zhuǎn)LOP2,找列值A(chǔ)DDCH,BH;無(wú)鍵按下,修改鍵號(hào),檢查下一行 MOVAL,AH ;恢復(fù)掃描碼 DECBL ;行數(shù)減1 JNZ LOP1 ;行未掃描完轉(zhuǎn)LOP1,掃描下一行MOVCX,16;16個(gè)鍵,要找最多16次LOP2:MOVSI,TABLE;取鍵碼表值CMPAX,[SI];查找該鍵值JZLOP3;找到該值,到鍵處理子程序INCSIINCSILOOPLOP2鍵值表:

ORG1000HTABLE:DWFE0E;0鍵DWFD0E;1鍵DWFB0E;2鍵DWF70E;3鍵DWFE0D;4鍵DWFE0D;5鍵DWFD0D;6鍵DWFB0D;7鍵DWF70D;8鍵DWFE0D;9鍵;;鍵處理子程序:LOP3:MOVAX,SI;AL中的內(nèi)容就為該鍵值::

例5采用8255A進(jìn)行雙機(jī)并行通信的接口要求在甲乙兩臺(tái)微機(jī)之間并行傳送1K字節(jié)數(shù)據(jù)。兩機(jī)的CPU與接口之間都采用查詢(xún)方式交換數(shù)據(jù)。1.甲機(jī)發(fā)送,1方式,PA口為輸出,PC7和PC6引腳分別固定作聯(lián)絡(luò)線OBF和ACK2.乙機(jī)接收。0方式,PA口為輸入,PC4和PC0作聯(lián)絡(luò)線。雖然,兩側(cè)的8255A都設(shè)置了聯(lián)絡(luò)線,但有本質(zhì)的差別:甲機(jī)8255A是1方式,其聯(lián)絡(luò)線是固定的不可替換;乙機(jī)的8255A是0方式,其聯(lián)絡(luò)線是不固定的可選擇,比如可選擇PC4和PC1或PC3、PC2等任意組合。雙機(jī)并行傳送接口電路框圖

甲機(jī)發(fā)送程序:MOVDX,0303H;8255A命令口MOVAL,10100000B;初始化工作方式字OUTDX,ALMOVAL,0DH;置發(fā)送中斷允許INTEA=1OUTDX,AL;PC6=1MOVAX,0030H;發(fā)送數(shù)據(jù)內(nèi)存首址MOVES,AXMOVBX,00H;MOVCX,0400H;發(fā)送字節(jié)數(shù)MOVDX,0300H;向A口寫(xiě)第一個(gè)數(shù),產(chǎn)生第一個(gè)OBF信號(hào)分別對(duì)兩個(gè)系統(tǒng)進(jìn)行程序設(shè)計(jì)MOVAL,ES:[BX];送給對(duì)方,以便獲取對(duì)

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論