微機(jī)技術(shù)第11章 并行接口.ppt_第1頁
微機(jī)技術(shù)第11章 并行接口.ppt_第2頁
微機(jī)技術(shù)第11章 并行接口.ppt_第3頁
微機(jī)技術(shù)第11章 并行接口.ppt_第4頁
微機(jī)技術(shù)第11章 并行接口.ppt_第5頁
已閱讀5頁,還剩120頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第第 11 11 章章 第11章 并行接口 教學(xué)重點(diǎn) n 8255A的工作方式和編程 n 8255A的應(yīng)用 n 簡易鍵盤的掃描程序 n LED數(shù)碼管的多位顯示 并行數(shù)據(jù)傳輸方式 n以計(jì)算機(jī)的字長,通常是8位、16位或32 位為傳輸單位,一次傳送一個字長的數(shù)據(jù) n適合于外部設(shè)備與微機(jī)之間進(jìn)行近距離、 大量和快速的信息交換 n例如:微機(jī)與并行接口打印機(jī)、磁盤驅(qū)動器 n微機(jī)系統(tǒng)中最基本的信息交換方法 n例如:系統(tǒng)板上各部件之間,接口電路板上 各部件之間 11.1 并行接口電路8255A n具有多種功能的可編程并行接口電路芯片 n最基本的接口電路:三態(tài)緩沖器和鎖存器 n與CPU間、與外設(shè)間的接口電路:狀態(tài)寄存 器和控制寄存器 n還有端口的譯碼和控制電路、中斷控制電路 n分3個端口,共24個外設(shè)引腳 n共三種輸入輸出工作方式 11.1.1 8255A的內(nèi)部結(jié)構(gòu)和引腳 數(shù)據(jù) 總線 緩沖器 內(nèi)部控制線 內(nèi)部數(shù)據(jù)線 D0D7 A組 控制 A組 端口A A組 端口C 上部 B組 控制 B組 端口B B組 端口C 下部 讀寫 控制 邏輯 PC0PC3 PB0PB7 PC4PC7 PA0PA7 RD WR A0 A1 CS RESET 1. 外設(shè)數(shù)據(jù)端口 n端口A:PA0PA7 nA組,支持工作方式0、1、2 n端口B:PB0PB7 nB組,支持工作方式0、1 n端口C:PC0PC7 n僅支持工作方式0 nA組控制高4位PC4PC7 nB組控制低4位PC0PC3 n端口A:PA0PA7 n常作數(shù)據(jù)端口,功能最強(qiáng)大 n端口B:PB0PB7 n常作數(shù)據(jù)端口 n端口C:PC0PC7 n可作數(shù)據(jù)、狀態(tài)和控制端口 n分兩個4位,每位可獨(dú)立操作 n控制最靈活,最難掌握 2. 與處理器接口 CS* A1 A0I/O地址讀操作RD*寫操作WR* 0 0 0 0 0 1 0 1 0 0 1 1 60H 61H 62H 63H 讀端口A 讀端口B 讀端口C 非法 寫端口A 寫端口B 寫端口C 寫控制字 D0 D7數(shù)據(jù)線A0 A1地址線 RD*讀信號WR*寫信號 CS*片選信號RESET復(fù)位信號 11.1.2 8255A的工作方式 n方式0:基本輸入輸出方式 n適用于無條件傳送和查詢方式的接口電路 n方式1:選通輸入輸出方式 n適用于查詢和中斷方式的接口電路 n方式2:雙向選通傳送方式 n適用于與雙向傳送數(shù)據(jù)的外設(shè) n適用于查詢和中斷方式的接口電路 方式0輸入時序 data data輸入端口 D0D7 RD CS,A1,A0 請?bào)w會這里8255A的數(shù)據(jù)緩沖作用 方式0輸出時序 WR data data 輸出端口 D0D7 CS,A1,A0 8255A對CPU通過它輸出給外設(shè)的數(shù)據(jù)進(jìn)行鎖存 方式1輸入引腳:A端口 數(shù)據(jù)選通信號 表示外設(shè)已經(jīng)準(zhǔn)備好數(shù)據(jù) 輸入緩沖器滿信號 表示A口已經(jīng)接收數(shù)據(jù) 中斷請求信號 請求CPU接收數(shù)據(jù) PC4 PC5 PC3 PA7PA0 INTEA IBFA INTRA STBA 中斷允許觸發(fā)器 方式1輸入引腳:B端口 PC2 PC1 PC0 PB7PB0 INTEB IBFB INTRB STBB 數(shù)據(jù)選通信號 表示外設(shè)已經(jīng)準(zhǔn)備好數(shù)據(jù) 輸入緩沖器滿信號 表示A口已經(jīng)接收數(shù)據(jù) 中斷請求信號 請求CPU接收數(shù)據(jù) 中斷允許觸發(fā)器 方式1需借用端口C用做聯(lián)絡(luò)信號 同時還具有中斷請求和屏蔽功能 方式1輸入聯(lián)絡(luò)信號 nSTB*選通信號,低電平有效 n由外設(shè)提供的輸入信號,當(dāng)其有效時,將輸入設(shè)備送 來的數(shù)據(jù)鎖存至8255A的輸入鎖存器 nIBF輸入緩沖器滿信號,高電平有效 n8255A輸出的聯(lián)絡(luò)信號。當(dāng)其有效時,表示數(shù)據(jù)已鎖 存在輸入鎖存器 nINTR中斷請求信號,高電平有效 n8255A輸出的信號,可用于向CPU提出中斷請求, 要求CPU讀取外設(shè)數(shù)據(jù) 方式1輸入時序 data INTR IBF data 輸入端口 D0D7 STB RD STB*和IBF是外設(shè)和8255A間 的一對應(yīng)答聯(lián)絡(luò)信號, 為的是可靠地輸入數(shù)據(jù) 方式1中斷控制 n8255A的中斷由中斷允許觸發(fā)器INTE控制 n置位允許中斷,復(fù)位禁止中斷 n對INTE的操作通過寫入端口C的對應(yīng)位實(shí) 現(xiàn),INTE觸發(fā)器對應(yīng)端口C的位是作應(yīng)答 聯(lián)絡(luò)信號的輸入信號的哪一位,只要對那 一位置位/復(fù)位就可以控制INTE觸發(fā)器 n選通輸入方式下 n端口A的INTEA對應(yīng)PC4 n端口B的INTEB對應(yīng)PC2 方式1輸出引腳:A端口 外設(shè)響應(yīng)信號 表示外設(shè)已經(jīng)接收到數(shù)據(jù) 輸出緩沖器滿信號 表示CPU已經(jīng)輸出了數(shù)據(jù) 中斷請求信號 請求CPU再次輸出數(shù)據(jù) PC6 PC7 PC3 PA7PA0 INTEA OBFA INTRA ACKA 中斷允許觸發(fā)器 方式1輸出引腳:B端口 PC2 PC1 PC0 PB7PB0 INTEB OBFB INTRB ACKB 外設(shè)響應(yīng)信號 表示外設(shè)已經(jīng)接收到數(shù)據(jù) 輸出緩沖器滿信號 表示CPU已經(jīng)輸出了數(shù)據(jù) 中斷請求信號 請求CPU再次輸出數(shù)據(jù) 中斷允許觸發(fā)器 方式1輸出聯(lián)絡(luò)信號 nOBF*輸出緩沖器滿信號,低有效 n8255A輸出給外設(shè)的一個控制信號,當(dāng)其有效時,表 示CPU已把數(shù)據(jù)輸出給指定的端口,外設(shè)可以取走 nACK*響應(yīng)信號,低有效 n外設(shè)的響應(yīng)信號,指示8255A的端口數(shù)據(jù)已由外設(shè)接 受 nINTR中斷請求信號,高有效 n當(dāng)輸出設(shè)備已接受數(shù)據(jù)后,8255A輸出此信號向 CPU提出中斷請求,要求CPU繼續(xù)提供數(shù)據(jù) 端口A的INTEA對應(yīng)PC6 端口B的INTEB對應(yīng)PC2 方式1輸出時序 INTR data data 輸出端口 D0D7 WR OBF ACK OBF*和ACK*是外設(shè)和8255A間 的一對應(yīng)答聯(lián)絡(luò)信號, 為的是可靠地輸出數(shù)據(jù) 方式2雙向方式 n方式2將方式1的選通輸入輸出功能組合成一個 雙向數(shù)據(jù)端口,可以發(fā)送數(shù)據(jù)和接收數(shù)據(jù) n只有端口A可以工作于方式2,需要利用端口C的 5個信號線,其作用與方式1相同 n方式2的數(shù)據(jù)輸入過程與方式1的輸入方式一樣 n方式2的數(shù)據(jù)輸出過程與方式1的輸出方式有一點(diǎn) 不同:數(shù)據(jù)輸出時8255A不是在OBF*有效時向 外設(shè)輸出數(shù)據(jù),而是在外設(shè)提供響應(yīng)信號ACK* 時才送出數(shù)據(jù) 方式2雙向引腳 PC6 PC7 PC3 PA7PA0 INTE1 OBFA INTRA ACKA PC4 PC5 IBFA STBA INTE2 用PC6設(shè)置INTE1(輸出) 用PC4設(shè)置INTE2(輸入) 輸入和輸出中斷通過 或門輸出INTRA信號 方式2雙向時序 data-out INTR data-out data-in data-inPA0PA7 D0D7 IBF WR OBF ACK STB RD 11.1.3 8255A的編程 n初始化編程:一個方式控制字 n采用控制I/O地址:A1A011 n工作過程中:通過數(shù)據(jù)端口對外設(shè)數(shù)據(jù) 進(jìn)行讀寫 n數(shù)據(jù)讀寫利用端口A、B和C的I/O地址, A1A0依次等于00、01、10 nIBM PC/XT機(jī)上,端口A、B、C和控制 端口的I/O地址為60H、61H、62H和63H 1. 寫入方式控制字:控制字格式 1. 寫入方式控制字:示例 n要求: nA端口:方式1輸入 nC端口上半部:輸出,C口下半部:輸入 nB端口:方式0輸出 n方式控制字:10110001B或B1H n初始化的程序段: mov dx,0fffeh;假設(shè)控制端口為FFFEH mov al,0b1h ;方式控制字 out dx,al;送到控制端口 2. 讀寫數(shù)據(jù)端口 n初始化編程后: n當(dāng)數(shù)據(jù)端口作為輸入接口時,執(zhí)行輸入IN指 令將從輸入設(shè)備得到外設(shè)數(shù)據(jù) n當(dāng)數(shù)據(jù)端口作為輸出接口時,執(zhí)行輸出OUT 指令將把CPU的數(shù)據(jù)送給輸出設(shè)備 n8255A具有鎖存輸出數(shù)據(jù)的能力 n對輸出方式的端口同樣可以輸入 n不是讀取外設(shè)數(shù)據(jù) n讀取的是上次CPU給外設(shè)的數(shù)據(jù) 2. 讀寫數(shù)據(jù)端口:示例 n利用8255A的輸出鎖存能力,可實(shí)現(xiàn)按位 輸出控制 n對輸出端口B的PB7位置位的程序段: mov dx,0fffah;B端口假設(shè)為FFFAH in al,dx;讀出B端口原輸出內(nèi)容 or al,80h;使PB71 out dx,al;輸出新的內(nèi)容 3. 讀寫端口C:歸納1 nC端口被分成兩個 4位端口,兩個端 口只能以方式0工 作,可分別選擇 輸入或輸出 n在控制上,C端口上半部和A端口編為A 組,C端口下半部和B端口編為B組 3. 讀寫端口C:歸納2 n當(dāng)A和B端口工作 在方式1或方式2時 ,C端口的部分或 全部引腳將被征用 n其余引腳仍可設(shè)定工作在方式0 3. 讀寫端口C:歸納3 n對端口C的數(shù)據(jù)輸出有兩種辦法 n通過端口C的I/O地址:向C端口直接寫入 字節(jié)數(shù)據(jù)。這一數(shù)據(jù)被寫進(jìn)C端口的輸出 鎖存器,并從輸出引腳輸出,但對設(shè)置為 輸入的引腳無效 n通過控制端口:向C端口寫入位控字,使C 端口的某個引腳輸出1或0,或置位復(fù)位內(nèi) 部的中斷允許觸發(fā)器 端口C的位控制字 n位控制字寫入控制端口 n特別便于置位復(fù)位內(nèi)部 中斷允許觸發(fā)器INTE 3. 讀寫端口C:歸納4 n讀取的C端口數(shù)據(jù)有兩種情況 n未被A和B端口征用的引腳:將從定義為輸 入的端口讀到引腳輸入信息;將從定義為 輸出的端口讀到輸出鎖存器中的信息 n被A和B端口征用作為聯(lián)絡(luò)線的引腳:將讀 到反映8255A狀態(tài)的狀態(tài)字 D7D6D5D4D3D2D1D0 方式1輸入 I/OI/OIBFAINTEAINTRAINTEBIBFBINTRB 方式1輸出 OBFAINTEAI/OI/OINTRAINTEBOBFBINTRB 方式2雙向 OBFAINTE1IBFAINTE2INTRA 端口C的狀態(tài)字 A組 B組 11.2 8255A的應(yīng)用 作為通用的并行接口電路芯片, 825A具有廣泛的應(yīng)用 n應(yīng)用在IBM PC/XT微機(jī)上 n應(yīng)用于打印機(jī)接口電路 n連接簡易鍵盤 n驅(qū)動LED數(shù)碼管 n 11.2.1 8255A在IBM PC/XT上的應(yīng)用 n工作在基本輸入/輸出方式0 n端口A為方式0輸入,用來讀取鍵盤掃描碼 n端口B工作于方式0輸出,例如控制揚(yáng)聲器等 n端口C為方式0輸入,讀取系統(tǒng)狀態(tài)和配置 n系統(tǒng)的初始化編程: mov al,10011001b;方式控制字99H out 63h,al 打印機(jī)接口的信號與時序 BUSY DATA07 ACK STROBE n主機(jī)把數(shù)據(jù)送給引腳DATA0DATA7 n同時送出數(shù)據(jù)選通信號STROBE* n打印機(jī)在BUSY信號線上發(fā)出忙信號 n打印機(jī)處理好輸入的數(shù)據(jù)時 n撤消忙信號 n同時又送出一個響應(yīng)信號ACK* 11.2.2 用8255A方式0與打印機(jī)接口 BUSY DATA07 8255A PC7 PC2 PA0PA7 打印機(jī) STROBE 8255A的初始化 mov dx,0fffeh ;控制端口地址:FFFEH mov al,10000001B ;方式控制字:91H out dx,al ;A端口方式0輸出,C端口上輸出、下輸入 mov al,00001111B ;端口C的復(fù)位置位控制字,使PC71 out dx,al 例11.1 打印子程序:查詢 printcproc push ax push dx prn: mov dx,0fffch ;讀取端口C in al,dx;查詢打印機(jī)狀態(tài) and al,04h;PC2BUSY0? jnz prn ;PC21,打印機(jī)忙,則循環(huán)等待 例11.1 打印子程序:輸出 mov dx,0fff8h ;PC20,打印機(jī)不忙,則輸出數(shù)據(jù) mov al,ah out dx,al;將打印數(shù)據(jù)從端口A輸出 例11.1 打印子程序:打印 mov dx,0fffeh;從PC7送出控制低脈沖 mov al,00001110B ;置STROBE*0 out dx,al nop;產(chǎn)生一定寬度的低電平 nop mov al,00001111B ;置=1 out dx,al ;最終,STROBE*產(chǎn)生低脈沖信號 例11.1 打印子程序:返回 pop dx pop ax ret printcendp 例11.1 11.2.3 用8255A方式1與打印機(jī)接口 1000pf 2K 15 3 2 14 41 LS123 單穩(wěn) 電路 +5V DATA07 8255A PC6 INTR PC3 PC7 PA0PA7 打印機(jī) ACK ACK OBF STROBE 8255A方式1與打印機(jī)接口時序配合 PA0PA7 (DATA07) ACK OBF STROBE 方式1時序打印機(jī)時序 8255A的初始化 mov dx,0fffeh mov al,0a0h out dx,al mov al,0ch ;使INTEA(PC6)為0,禁止中斷 out dx,al mov cx,counter;打印字節(jié)數(shù)送CX mov bx,offset buffer ;取字符串首地址 call prints;調(diào)用打印子程序 例11.2 打印子程序:輸出 printsproc push ax;保護(hù)寄存器 push dx print1:mov al,bx;取一個數(shù)據(jù) mov dx,0fff8h out dx,al;從端口A輸出 例11.2 打印子程序:查詢 mov dx,0fffch print2:in al,dx test al,80h ;檢測(PC7)為1否? jz print2 ;為0,說明打印機(jī)沒有響應(yīng),繼續(xù)檢測 例11.2 打印子程序:返回 inc bx ;為1,說明打印機(jī)已接受數(shù)據(jù) loop print1 ;準(zhǔn)備取下一個數(shù)據(jù)輸出 pop dx;打印結(jié)束,恢復(fù)寄存器 pop ax ret;返回 printsendp 例11.2 11.2.4 雙機(jī)并行通信接口 PA0PA7 PC4 PC0 8255A 甲方(發(fā)送) PA0PA7 PC7 PC6 8255A 已方(接收) 甲機(jī)的初始化 mov dx,0fffeh mov al,0a0h out dx,al ;工作方式字:端口A方式1輸出 mov al,0dh ;使PC6(INTEA)1,允許中斷 out dx,al 例11.3 甲機(jī)發(fā)送程序 trsmt: mov dx,0fffch in al,dx ;查詢PC3(INTRA)1? and al,08h jz trsmt mov dx,0fff8h ;發(fā)送數(shù)據(jù) mov al,ah out dx,al 例11.3 乙機(jī)的初始化 mov dx,0fffeh mov al,98h out dx,al ;工作方式字:端口A方式0輸入 mov al,01h ;使PC0(ACK*)1,因尚未收到數(shù)據(jù) out dx,al 例11.3 乙機(jī):查詢接收 receive: mov dx,0fffch in al,dx ;查詢PC4(OBF*)0? and al,10h jnz receive mov dx,0fff8h ;接收數(shù)據(jù) in al,dx mov ah,al 例11.3 乙機(jī):接收響應(yīng) mov dx,0fffeh mov al,00h;使PC0(ACK*)0 out dx,al nop ;適當(dāng)延時,產(chǎn)生一定寬度的低脈沖 nop mov al,01h;使PC0(ACK*)1 out dx,al;產(chǎn)生低脈沖ACK*信號 例11.3 實(shí)驗(yàn)5 并行接口實(shí)驗(yàn) n 要求類似習(xí)題11.8 n 要求對應(yīng)例題11.2 n 請?jiān)趯Ρ冗^程中,掌握例題 、習(xí)題和完成實(shí)驗(yàn)要求 提示 11.3 鍵盤及其接口 n鍵盤是微機(jī)系統(tǒng)最常使用的輸入設(shè)備 n小鍵盤:適用于單板機(jī)或以微處理器為基 礎(chǔ)的儀器,實(shí)現(xiàn)數(shù)據(jù)、地址、命令及指令 等的輸入 n獨(dú)立鍵盤:通過5芯電纜與PC微機(jī)主機(jī)連 接 11.3.1 簡易鍵盤的工作原理 +5V +5V +5V n最簡單的線性結(jié)構(gòu)鍵盤 n每一個引腳連接一個鍵 n輸入0/1反映健是否高低 11.3.1 簡易鍵盤的工作原理 +5V +5V 控制線 檢 測 線 n常用的矩陣結(jié)構(gòu)鍵盤 n每行連接一個引腳 n每列連接一個引腳 n利用控制線為低、 讀取檢測線來識別閉合鍵 1. 掃描法 n先使第0行接低電平,其余行為高電平,然后看第 0行是否有鍵閉合(通過檢查列線電位實(shí)現(xiàn)) n此后,再將第1行接地,然后檢測列線是否有變?yōu)?低電位的線。如此往下一行一行地掃描,直到最 后一行 n在掃描過程中,當(dāng)發(fā)現(xiàn)某一行有鍵閉合時,便在 掃描中途退出 n通過組合行線和列線可識別此刻按下的是哪一鍵 第1段:是否有鍵按下 key1:mov al,00 mov dx,rowport out dx,al ;使所有行線為低電平 mov dx,colport in al,dx;讀取列值 cmp al,0ffh ;判定是否有列線為低電平 jz key1;無閉合鍵,循環(huán)等待 call delay ;有,延遲20ms清除抖動 鍵盤掃描程序 第2段:識別按鍵(掃描) mov cx,8 ;行數(shù)送CX mov ah,0feh;掃描初值送AH key2:mov al,ah mov dx,rowport out dx,al ;輸出行值(掃描值) mov dx,colport in al,dx;讀進(jìn)列值 鍵盤掃描程序 第2段:識別按鍵(判斷) cmp al,0ffh ;判斷有無低電平的列線 jnz key3;有,則轉(zhuǎn)下一步處理 rol ah,1;無,則移位掃描值 loop key2;準(zhǔn)備下一行掃描 jmp key1 ;所有行都沒有鍵按下,則返回繼續(xù)檢測 key3: ;此時,al列值,ah行值 鍵盤掃描程序 2. 反轉(zhuǎn)法 n首先,將行線作為控制線接一個輸出端口,將列 線作為檢測線接一個輸入端口 nCPU通過輸出端口將行線(控制線)全部設(shè)置為低電 平,然后從輸入端口讀取列線(檢測線) n然后,將行線和列線的作用互換,即將列線作為 控制線接輸出端口,行線作為檢測線接輸入端口 n將剛才讀得的列值從列線所接端口輸出,再讀取行線 的輸入值 n這樣,當(dāng)一個鍵被按下時,必定可以讀得一對唯 一的行值和列值 條件:連接行線和列線的接口電路 必須支持動態(tài)改變輸入、輸出方式 第1段:是否有鍵按下 ;設(shè)置行線接輸出端口,列線接輸入端口 key2:mov al,00 mov dx,rowport out dx,al;設(shè)置行線全為低 mov dx,colport in al,dx;讀取列值 cmp al,0ffh jz key2;無閉合鍵,循環(huán)等待 push ax;有閉合鍵,保存列值 push ax 鍵盤掃描程序 第2段:識別按鍵(反轉(zhuǎn)法) ;設(shè)置行線接輸入端口,列線接輸出端 mov dx,colport pop ax out dx,al;輸出列值 mov dx,rowport in al,dx;讀取行值 pop bx;組合行列值 mov ah,bl;此時,al行值,ah列值 鍵盤掃描程序 行列值表和鍵代碼表 ;鍵盤的行列值表 tabledw 0fefeh;鍵0的行列值(鍵值) dw 0fdfeh;鍵1的行列值 dw 0fbfeh;鍵2的行列值 ;其他鍵的行列值 ;鍵盤的鍵代碼表 chardb ;鍵0的代碼值 db ;鍵1的代碼值 ;其他鍵的代碼值 鍵盤掃描程序 第3段:查找鍵代碼 mov si,offset table mov di,offset char mov cx,64;CX鍵的個數(shù) key3:cmp ax,si ;與鍵值比較 jz key4;相同,說明查到 inc si;不相同,繼續(xù)比較 inc si inc di loop key3 jmp key1 ;全部比較完,仍無相同,說明是重鍵 鍵盤掃描程序 第4段:等待按鍵釋放 key4:mov al,di;獲取鍵代碼送AL ;判斷按鍵是否釋放,沒有則等待 call delay ;按鍵釋放,延時消除抖動 ;后續(xù)處理 鍵盤掃描程序 3. 抖動和重健問題 n機(jī)械按鍵存在抖動現(xiàn)象 n當(dāng)按下或釋放一個鍵時,往往會出現(xiàn)按鍵在閉合位置 和斷開位置之間跳幾下才穩(wěn)定到閉合狀態(tài) n抖動的持續(xù)時間通常不大于10ms n采用硬件消抖電路或軟件延時方法解決 n重鍵指兩個或多個鍵同時閉合 n出現(xiàn)重鍵時,讀取的鍵值必然出現(xiàn)有一個以上的0 n是否給予識別和識別哪一個鍵 重健問題的處理 n簡單情況:不予識別,認(rèn)為是錯誤的按鍵 n通常情況:只承認(rèn)先識別出來的鍵 n連鎖法:直到所有鍵都釋放后,讀入下一個鍵 n巡回法:等被識別的鍵釋放以后,就可以對其 他閉合鍵作識別,而不必等待全部鍵釋放 n正常的組合鍵:都識別出來 DB PB6 PB7 PA IRQ1 T1 P10 P21 P11 P22 P20 4 GND 1 CLOCK 2 DATA 5 +5V 3 RESET PC機(jī)鍵盤系統(tǒng)板 8048 8255A 8259A LS322 串 并 轉(zhuǎn) 換 器 鍵 盤 陣 列 按鍵 選通 11.3.2 PC機(jī)鍵盤的工作原理 1. PC機(jī)鍵盤的工作過程 n鍵盤電路正常工作時不斷地掃描鍵盤矩陣 n有按鍵,則確定按鍵位置之后以串行數(shù)據(jù) 形式發(fā)送給系統(tǒng)板鍵盤接口電路 n鍵按下時,發(fā)送該鍵的接通掃描碼 n鍵松開時,發(fā)送該鍵的斷開掃描碼 n若一直按住某鍵,則以拍發(fā)速率(每秒2 30次)連續(xù)發(fā)送該鍵的接通掃描碼 接通掃描碼反映該鍵在鍵盤上的位置 斷開掃描碼(接通掃描碼最高位置1) 接通掃描碼80H 2. 鍵盤接口電路的工作過程 n接收一個串行形式字符以后,進(jìn)行串并轉(zhuǎn)換 n然后產(chǎn)生鍵盤中斷IRQ1請求,等待讀取鍵盤數(shù)據(jù) nCPU響應(yīng)中斷,則進(jìn)入09H鍵盤中斷服務(wù)程序: 讀取鍵盤掃描碼:用IN AL,60H即可 響應(yīng)鍵盤:系統(tǒng)使PB71 允許鍵盤工作:系統(tǒng)使PB70 處理鍵盤數(shù)據(jù) 給8259A中斷結(jié)束EOI命令,中斷返回 3. PC機(jī)鍵盤中斷服務(wù)程序 n09H號中斷服務(wù)程序(kbint過程) n完成常規(guī)的操作 n處理鍵盤數(shù)據(jù):將獲取的掃描碼通過查表轉(zhuǎn)換 為對應(yīng)的ASCII碼送緩沖區(qū)。對于不能顯示的 按鍵,則轉(zhuǎn)換為0,且不再送至緩沖區(qū) n鍵盤I/O功能程序(kbget子程序) n從緩沖區(qū)中讀取轉(zhuǎn)換后的ASCII碼 n功能調(diào)用(主程序) n循環(huán)顯示鍵入的字符 鍵盤緩沖區(qū) n中斷服務(wù)程序與子程序之間傳遞參數(shù) n先進(jìn)先出循環(huán)隊(duì)列 n隊(duì)列空 n進(jìn)隊(duì)列 n出隊(duì)列 n隊(duì)列滿 buffer 0 1 2 9 隊(duì)列始端 隊(duì)列末端 鍵盤緩沖區(qū) bufferdb 10 dup(0) bufptr1dw 0;隊(duì)列頭指針 bufptr2dw 0;隊(duì)列尾指針 例11.4 buffer 0 1 2 9 隊(duì)列始端 隊(duì)列末端 bufptr1 bufptr2 鍵盤代碼表 scantbdb 0,1,1234567890-=,08h ;鍵盤第1排的按鍵,從ESC到退格 db 0,qwertyuiop,0dh ;鍵盤第2排的按鍵,從Tab到回車 db 0,0,789-456+1230. ;右邊小鍵盤,從Num Lock到Del 例11.4 設(shè)置中斷向量1 mov ax,3509h int 21h push es push bx;保存09H號原中斷向量 cli;關(guān)中斷 push ds;設(shè)置09H號新中斷向量 mov ax,seg kbint mov ds,ax mov dx,offset kbint 例11.4 設(shè)置中斷向量2 mov ax,2509h int 21h pop ds in al,21h;允許IRQ1中斷,其他不變 push ax and al,0fdh out 21h,al sti;開中斷 例11.4 調(diào)用并顯示 start1:call kbget ;獲取按鍵的ASCII碼 cmp al,1 jz start2;是ESC鍵,則退出 push ax;保護(hù)字符 mov dl,al ;顯示字符 mov ah,2 int 21h pop ax;恢復(fù)字符 例11.4 處理回車符 cmp al,0dh;該字符是回車符嗎? jnz start1;不是,取下一個按鍵字符 mov dl,0ah;是回車符,則再進(jìn)行換行 mov ah,2 int 21h jmp start1;繼續(xù)取字符 例11.4 恢復(fù)中斷向量 start2:cli pop ax out 21h,al pop dx pop ds mov ax,2509h int 21h sti mov ax,4c00h;返回DOS int 21h 例11.4 子程序:判斷緩沖區(qū)空否 kbgetproc kbget1: push bx;保護(hù)BX cli mov bx,bufptr1 ;取頭指針 cmp bx,bufptr2 ;與尾指針相等否? jnz kbget2 ;不相等,說明緩沖區(qū)有字符,轉(zhuǎn)移 sti ;相等,說明緩沖區(qū)空 pop bx jmp kbget1;等待緩沖區(qū)有字符 例11.4 子程序:獲取按鍵字符 kbget2: mov al,bufferbx;取字符送AL inc bx;隊(duì)列頭指針增量 cmp bx,10;是否指向隊(duì)列末端 jc kbget3;沒有,轉(zhuǎn)移 mov bx,0 ;指針指向隊(duì)列末端,則循環(huán),指向始端 kbget3: mov bufptr1,bx ;設(shè)定新隊(duì)列頭指針 sti pop bx ret kbgetendp 例11.4 中斷服務(wù)程序:響應(yīng)鍵盤 kbintproc sti;開中斷 push ax;保護(hù)寄存器 push bx in al,60h;讀取鍵盤掃描碼 push ax in al,61h;使PB71,響應(yīng)鍵盤 or al,80h out 61h,al and al,7fh;使PB70,允許鍵盤 out 61h,al 例11.4 中斷服務(wù)程序:數(shù)據(jù)處理 pop ax test al,80h;是斷開掃描碼? jnz kbint2;是,則退出 mov bx,offset scantb ;是接通掃描碼,取表首地址 xlat;將掃描碼轉(zhuǎn)換成ASCII碼 cmp al,0;是否為合法的ASCII碼? jz kbint2;不是,則退出 例11.4 中斷服務(wù)程序:指針增量 mov bx,bufptr2 mov bufferbx,al ;將ASCII碼存入緩沖區(qū)隊(duì)列尾 inc bx;隊(duì)列尾指針增量 cmp bx,10;是否指向隊(duì)列末端? jc kbint1;沒有,轉(zhuǎn)移 mov bx,0 ;指針指向隊(duì)列末端,則循環(huán),指向始端 例11.4 中斷服務(wù)程序:判斷緩沖區(qū)滿否 kbint1: cmp bx,bufptr1 jz kbint2 ;若隊(duì)列滿,則退出 mov bufptr2,bx ;隊(duì)列不滿,設(shè)置新的隊(duì)列尾指針 例11.4 bufptr1 bufptr2 buffer 41H0 31H1 32H2 39H9 隊(duì)列始端 隊(duì)列末端 中斷服務(wù)程序:中斷返回 kbint2:mov al,20h ;向8259A發(fā)送普通中斷結(jié)束命令 out 20h,al pop bx;恢復(fù)寄存器 pop ax iret ;中斷返回 kbintendp 例11.4 實(shí)驗(yàn)6 小鍵盤實(shí)驗(yàn) n認(rèn)真閱讀教材中掃描法和反轉(zhuǎn) 法識別按鍵的程序段 n 延時子程序可以采用軟件延 時程序 n 延時子程序也可以采用實(shí)時 時鐘的硬件延時,它更精確 提示 11.4 LED數(shù)碼管及其接口 n發(fā)光二極管LED是最簡單的顯示設(shè)備 n由7段LED就可以組成的LED數(shù)碼管 nLED數(shù)碼管廣泛用于單板微型機(jī)、微型機(jī) 控制系統(tǒng)及數(shù)字化儀器中 nLED數(shù)碼管可以顯示內(nèi)存地址和數(shù)據(jù)等 1. LED數(shù)碼管的工作原理 n主要部分是7段發(fā)光管 n順時針分別稱為a、b、c、d、e、f、g n有的產(chǎn)品還附帶有一個小數(shù)點(diǎn)h n通過7個發(fā)光段的不同組合 n主要顯示09 n也可顯示AF(16進(jìn)制數(shù)) n還可顯示個別特殊字符:、P h g f e d c b a LED數(shù)碼管的結(jié)構(gòu) 共陽極 陽極 +5V a b c d e f g h 陰極 a b c d e f g h 共陰極 2. 單個LED數(shù)碼管的顯示 8255A PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7 驅(qū) 動 電 路 a b c d e f g h 單個數(shù)碼管的顯示 LEDtb db 3fh,06h,5bh,;顯示代碼表 mov al,1;AL要顯示的數(shù)字 mov bx,offset LEDtb xlat ;換碼:ALDS:BXAL mov dx,port out dx,al;輸出顯示 軟件譯碼 3. 多個LED數(shù)碼管的顯示 n8個數(shù)碼管:用2個8位輸出端口控制 n硬件上用公用的驅(qū)動電路來驅(qū)動各數(shù)碼管 n軟件上用掃描方法實(shí)現(xiàn)數(shù)碼顯示 位控制端口電路 D7 D6 D5 D4 D3 D2 D1 D0 陽極 位0 位1位2 D0D7 位控制 反 相 寄 存 驅(qū) 動 bitport, IOW 位控制端口作用 n控制哪個(位)數(shù)碼管顯示 n當(dāng)位控制端口的控制碼某位為低電平時, 經(jīng)反相驅(qū)動,便在相應(yīng)數(shù)碼管的陽極加上 了高電平,這個數(shù)碼管就可以顯示數(shù)據(jù) 位控制:Di0,相應(yīng)位發(fā)光 D7D6D5D4D3D2D1D0 位7位6位5位4位3位2位1位0 段控制端口電路 D0 D1 D2 D3 D4 D5 D6 D7 陽極位0 a b c d e f g h 位1位2 D0D7 段控制 正 相 寄 存 驅(qū) 動 segport, IOW 段控制端口作用 n控制哪個段顯示,決定具體顯示什么數(shù)碼 n段控制端口送出顯示代碼到數(shù)碼管相應(yīng)段 n此端口由8個數(shù)碼管共用 段控制:Di0,相應(yīng)段發(fā)光 D7D6D5D4D3D2D1D0 hgfedcba 通過位、段控制端口的共同作用 才能確定哪個數(shù)碼管顯示什么數(shù)碼 數(shù)碼緩沖區(qū) ;數(shù)據(jù)段 LEDdtdb 8 dup(0);數(shù)碼緩沖區(qū) ;主程序 mov si,offset LEDdt call LEDdisp;調(diào)用顯示子程序 例11.5 獲取顯示代碼 LEDdisp proc push ax push bx push dx mov bx,offset LEDtb mov ah,0feh;指向最左邊數(shù)碼管 LED1: lodsb;取出要顯示的數(shù)字 xlat cs:LEDtb ;得到顯示代碼:ALCS:BXAL 例11.5 數(shù)碼顯示 mov dx,segport;segport為段控制端口 out dx,al;送出段碼 mov al,ah;取出位顯示代碼 mov dx,bitport;bitport為位控制端口 out dx,al;送出位碼 call delay;實(shí)現(xiàn)數(shù)碼管延時顯示 例11.5 顯示下位數(shù)碼 rol ah,1;指向下一個數(shù)碼管 cmp ah,0feh ;最右邊的數(shù)碼管? jnz LED1;顯示下一個數(shù)字 pop dx pop bx pop ax ret;8位數(shù)碼管都顯示 LEDtbdb 0c0h,0f9h, LEDdisp endp 例11.5 軟件延時 timer= 10 ;延時常量 delayproc push bx push cx mov bx,timer ;外循環(huán):timer確定的次數(shù) delay1:xor cx,cx delay2:loop delay2 ;內(nèi)循環(huán):216次循環(huán) 例11.5 軟件延時 dec bx jnz delay1 pop cx pop bx ret delayendp 例11.5 通過控制重復(fù)頻率和延時時間 就可以得到各種顯示效果 實(shí)驗(yàn)7 LED數(shù)碼管顯示實(shí)驗(yàn) n 請認(rèn)真閱讀教材中8位數(shù)碼管 顯示子程序 n 延時子程序可以采用軟件延 時程序 n 延時子程序建議采用實(shí)時時 鐘的硬件延時,它更精確,也便 于控制時間 提示 11.5 并行打印機(jī)接口 n一般采用Centronics標(biāo)準(zhǔn)接口或其簡化接口 nCentronics接口是的一個并行接口協(xié)議 n這個協(xié)議規(guī)定了36腳簧式插頭座和信號含義 n其中前11條線是關(guān)鍵信號,他們是8條數(shù)據(jù)線、 3條聯(lián)絡(luò)線(選通、響應(yīng)和打印機(jī)忙) n還

溫馨提示

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

最新文檔

評論

0/150

提交評論