微型計算機原理與接口技術(shù):第8章 輸入輸出系統(tǒng)_第1頁
微型計算機原理與接口技術(shù):第8章 輸入輸出系統(tǒng)_第2頁
微型計算機原理與接口技術(shù):第8章 輸入輸出系統(tǒng)_第3頁
微型計算機原理與接口技術(shù):第8章 輸入輸出系統(tǒng)_第4頁
微型計算機原理與接口技術(shù):第8章 輸入輸出系統(tǒng)_第5頁
已閱讀5頁,還剩95頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第8章 輸入/輸出系統(tǒng),8.1 輸入/輸出系統(tǒng)概述,一. 概 述 1. 接口電路的作用 CPU數(shù)據(jù) 輸出接口電路 輸出設(shè)備 CPU 輸入接口電路 輸入設(shè)備數(shù)據(jù),接口: 是CPU與外部設(shè)備交換信息的中轉(zhuǎn)站,I/O設(shè)備與總線之間的連接,輸出接口電路,輸出設(shè)備,輸入接口電路,輸入設(shè)備,系 統(tǒng) 總 線,I/O接口電路,2. 接口電路的功能 應(yīng)具有數(shù)據(jù)暫存功能 應(yīng)有端口地址譯碼器 (便于使用IN, OUT指令讀寫數(shù)據(jù)) 與外設(shè)之間有聯(lián)絡(luò)功能 有中斷管理能力 有數(shù)據(jù)轉(zhuǎn)換功能(并 串,串 并),3. 關(guān)于端口的概念 “端口”是接口電路中, 能與CPU交換信息(使用IN, OUT) 的寄存器。,端口分類: 數(shù)

2、據(jù)口: 存放CPU向外設(shè)輸出或外設(shè)輸入的數(shù)據(jù)。 控制口: 存放控制信息-控制接口電路、外設(shè)的 工作。 狀態(tài)口: 存放狀態(tài)信息 反映外設(shè)的狀態(tài)。 注意:接口電路必須具有數(shù)據(jù)口。,注:每個端口,系統(tǒng)都為它編了一個地址,系統(tǒng)只要給出某個地址,通過譯碼電路,就能找到相應(yīng)的I/O接口電路中的端口寄存器。 問 題:系統(tǒng)給出的地址是內(nèi)存單元地址還是I/O端口寄存器的地址? 解決方案:合理安排I/O端口寄存器的編址方式。,4. 端口的編址方式 存儲器映像方式 把端口和存儲單元等同看待, 統(tǒng)一編址。 特點: 凡訪問存儲單元的指令都可訪問 I/O端口,端口地址占用存儲空間。, I/O端口獨立編址 特點: I/O

3、端口不占用存儲空間, CPU要有專用的 I/O 指令。,5. PC系列機的端口編址, PC系列機采用端口獨立編址; 從8088 奔騰微處理器, 設(shè)計時用A15 A0 低16位地址尋址 I/O 端口; 所以, CPU的端口尋址能力為216=65536個; 基于微處理器的PC系列, 實際使用A9 A0 做I/O地址; 所以, PC系列機 I/O 端口地址最多為 210=1024個。 這1024個口地址, 系統(tǒng)本身(主板上, 以及常 規(guī) I/O接口)已經(jīng)占用了一部分。 端口地址( I/O 空間)沒有分段的概念。,二. 最常用的 I/O 指令,1.直接尋址 I/O 指令,設(shè)n為8位端口地址 IN AL

4、 , n ; 口地址為n的端口中取數(shù) AL OUT n , AL ; AL內(nèi)容 口地址為n的端口寄存器 IN AX , n ; (n) AL, (n+1) AH OUT n , AX ; AL n口, AH n+1口,如: IN AL , 61H OUT 61H, AL,2. DX間址的I/O指令 當(dāng)口地址 n 8位二進制數(shù)時, 用DX間址,注意: I/O 指令只能在端口和AL, AX, EAX之間 交換信息, 用DX間址, 但不能使用方括號, 即不能寫成: IN AL, DX。,IN AL , DX ; DX的端口內(nèi)容 AL OUT DX , AL ; AL DX的端口寄存器 IN AX ,

5、 DX ; DX AL, DX+1 AH OUT DX , AX ; AL DX, AH DX+1 的端口寄存器 如: MOV DX, 3F8H IN AL , DX ;從3F8H端口取數(shù) AL,8.2 微機系統(tǒng)與外設(shè)交換信息的方式,微機系統(tǒng)與 I/O 端口的信息交換有四種方式: 無條件傳送 查詢方式 中斷方式 DMA方式 采用何種方式與接口的硬件電路有直接關(guān)系,1.無條件傳送 輸入接口:,執(zhí)行IN指令之前, 外設(shè)數(shù)據(jù)已經(jīng)準備好。, 輸出接口,執(zhí)行OUT指令時: AL內(nèi)容 數(shù)據(jù)線, 口地址 地址線上, IOW=低, 把數(shù)據(jù)鎖存到 鎖存器中。,【例】 假設(shè)微機系統(tǒng)外擴了6位共陰極數(shù)碼管電路,要求

6、每隔一秒完成一次“8”字左移,循環(huán)往復(fù),直到主機鍵盤按下任意鍵時停止。,h,共陰結(jié)構(gòu),a,b,c,d,e,f,g,h,com,對應(yīng)關(guān)系,(200H選中),D7-D0,(201H選中),D0,D7,D6,D5,D4,D3,D2,D1,a,b,c,d,e,f,g,h,CS,CS,7FH,6位數(shù)碼管接口電路,8位鎖存器(段選),8位鎖存器(位選),COM,D7-D0,6位反相驅(qū)動器,D0,D5,20H,0 0 0 0 0 1,1 1 1 1 1 0,0 1 1 1 1 1 1 1,數(shù)碼管顯示原理 使用段選碼和位選碼進行控制 段選碼:顯示什么字符。6個數(shù)碼管的同名段共享連接,并且a接D0;b接D1、;

7、g接D6、h接D7。顯示字符“8”的段選碼是 01111111B=7FH。 位選碼:選擇被點亮的數(shù)碼管(僅D5-D0有效)。 點亮第6個,位選碼為00100000B(20H) 點亮第5個,位選碼為00010000B(10H) 點亮第4個,位選碼為00001000B(08H) 點亮第3個,位選碼為00000100B(04H) 點亮第2個,位選碼為00000010B(02H) 點亮第1個,位選碼為00000001B(01H),設(shè)計思路 主要解決四個問題: (1)字符“8”的顯示控制問題,包括段選碼和位選碼; (2)時間間隔1秒鐘如何實現(xiàn); (3)每隔一秒鐘“8”如何左移一位顯示; (4)顯示過程如

8、何結(jié)束,MOV DX,201H MOV AL,7FH ; “8”的段選碼 OUT DX, AL MOV DX,200H MOV AL,位選碼 ;初值=20H OUT DX, AL,SHR 位碼,1 :,SCAN:MOV AL,1 INT 16H JZ SCAN 結(jié)束準備,【程序清單】,.486 DATA SEGMENT USE16 ORIGIN DB 20H ;數(shù)碼管位選碼初值 TTT DW 100 ;延時時間 DATA ENDS CODE SEGMENT USE16 ASSUME CS: CODE, DS: DATA BEG: MOV AX, DATA MOV DS, AX ;DS段賦值 M

9、OV DX, 201H MOV AL, 7FH OUT DX, AL ;輸出“8”字型碼 LAST: MOV AL, ORIGIN MOV DX, 200H OUT DX, AL ;輸出位選碼,CALL DELAY ;延時1秒 SHR ORIGIN,1 JNC NEXT MOV ORIGIN, 20H NEXT: MOV AH, 1 INT 16H ; 有鍵入? JZ LAST ;否 MOV AH, 4CH INT 21H,;延時子程序 DELAY PROC MOV AH,2DH MOV CX,0 MOV Dx,0 INT 21H READ: MOV AH,2CH INT 21H MOV AL

10、,100 MUL DH MOV DH,0 ADD AX,DX CMP AX,TTT JC READ RET DELAY ENDP CODE ENDS END BEG,2.查詢方式 用查詢方式交換信息, 必先了解外設(shè)的狀態(tài)。,查詢方式輸入接口示意圖,查詢式輸入核心程序 設(shè)狀態(tài)口地址=200H 數(shù)據(jù)口地址=201H RSCAN : MOV DX , 200H IN AL , DX TEST AL , 80H JZ RSCAN MOV DX , 201H IN AL , DX, 查詢式輸出接口示意圖,查詢式數(shù)據(jù)輸出核心程序 設(shè)狀態(tài)口地址=200H=數(shù)據(jù)口地址 TSCAN: MOV DX, 200H

11、IN AL, DX TEST AL, 1 JNZ TSCAN MOV DX, 200H MOV AL, 某數(shù) OUT DX, AL,3. 中斷控制方式,在有多個外設(shè)的系統(tǒng)中,多個外設(shè)要求CPU為它服務(wù)是隨機的 若采用查詢方式工作,就不能保證系統(tǒng)實時地對外設(shè)的請求作出響應(yīng) 為了提高CPU的效率,使系統(tǒng)有實時性能,導(dǎo)致了中斷處理技術(shù)的產(chǎn)生,特點: 在外設(shè)沒有作好數(shù)據(jù)傳送準備時,CPU可執(zhí)行與傳送數(shù)據(jù)無關(guān)的其它指令 當(dāng)外設(shè)作好傳送準備后,主動向CPU請求中斷 若CPU響應(yīng)這一請求,則暫停正在運行的程序,轉(zhuǎn)入中斷服務(wù)程序,完成數(shù)據(jù)傳送 待服務(wù)完畢后,自動返回原來運行的程序,4.直接存儲器存?。―MA)

12、方式,為什么要有DMA?,什么是DMA?,特點: 用硬件實現(xiàn)在外設(shè)與內(nèi)存間直接進行數(shù)據(jù)交換,而不通過CPU 數(shù)據(jù)傳送速度的上限就取決于存儲器的工作速度 速度快,8.3 8254定時器/計數(shù)器,計算機中的定時和延時控制、對外部事件或信號的計數(shù),軟件方法 固定時間的硬件定時 可編程的硬件定時,計算機系統(tǒng)中采用可編程定時/計數(shù)器I8253和I8254,8254內(nèi)部集成了3個16位的計數(shù)器, 每個計數(shù)器有6種工作方式,計數(shù)初值可設(shè)定為二進制或BCD碼。最高工作頻率10兆。,一.8254內(nèi)部結(jié)構(gòu) (24腳),數(shù)據(jù)總線 緩沖器,讀寫控制,控制字寄存器,0號 計數(shù)器,1號 計數(shù)器,2號 計數(shù)器,A1,D70

13、,GATE0,OUT0,CLK0,GATE1,OUT1,CLK1,GATE2,OUT2,CLK2,數(shù)據(jù)總線緩沖器: 完成和系統(tǒng)數(shù)據(jù)線的配接。 對外有8條數(shù)據(jù)線D70,8254的內(nèi)部結(jié)構(gòu),數(shù)據(jù)總線 緩沖器,讀寫控制,控制字寄存器,0號 計數(shù)器,1號 計數(shù)器,2號 計數(shù)器,A1,D70,GATE0,OUT0,CLK0,GATE1,OUT1,CLK1,GATE2,OUT2,CLK2,讀寫控制模塊: 選擇芯片內(nèi)部的控制寄存器和計數(shù)器, 在讀寫命令的控制下對選中的端口進行讀寫操作。對外有5條引線。,8254的內(nèi)部結(jié)構(gòu),8254的內(nèi)部結(jié)構(gòu),數(shù)據(jù)總線 緩沖器,讀寫控制,控制字寄存器,0號 計數(shù)器,1號 計數(shù)

14、器,2號 計數(shù)器,控制寄存器: 寄存CPU對其初始化編程時寫入的控制字,以決定計數(shù)器的工作方式和并設(shè)置讀出命令。,8254的內(nèi)部結(jié)構(gòu),數(shù)據(jù)總線 緩沖器,讀寫控制,控制字寄存器,0號 計數(shù)器,1號 計數(shù)器,2號 計數(shù)器,計數(shù)器: 每個計數(shù)器對外有3條線 GATE 控制信號 CLK 計數(shù)脈沖輸入 OUT 計數(shù)器輸出,8254的內(nèi)部結(jié)構(gòu),二. 8254與系統(tǒng)總線的連接,I/O口地址分2段 A9A2參加譯碼,譯碼 輸出負脈沖。使CS=0, 選中8254 A1,A0直接與芯片A1,A0 相連,選擇片內(nèi)寄存器 執(zhí)行IN時從選中的內(nèi)部 寄存器讀 執(zhí)行OUT時向選中的內(nèi) 部寄存器寫,三.8254內(nèi)部寄存器/計

15、數(shù)器口地址,設(shè)8254與系統(tǒng)總線如上圖聯(lián)接: 口地址=40H43H,“選中”8254,則0#2#計 數(shù)器口地址=40H42H,控制口地址=43H。 口地址=2FCH2FFH,“選中”8254,則 0#2#計數(shù)器口地址=2FCH2FEH,控制口 地址=2FFH。,四.計數(shù)器內(nèi)部結(jié)構(gòu)示意圖,初始化編程時: 計數(shù)初值 計數(shù)初值寄存器 減1計數(shù)器,計數(shù)器的內(nèi)部結(jié)構(gòu),當(dāng)GATA=1時, CLK的下降沿使計數(shù)器減1,當(dāng)計數(shù)值減到0 (或某個值由工作方式確定)時, OUT有輸出。,計數(shù)器的內(nèi)部結(jié)構(gòu),計數(shù)初值 = f c l k / f o u t,收到鎖存命令后, 當(dāng)前計數(shù)值 計數(shù)值鎖存器(以便讀出檢查),

16、 而計數(shù)器仍然做減1計數(shù),計數(shù)器的內(nèi)部結(jié)構(gòu),作用: 選擇一個計數(shù)器, 確定工作方式, 并規(guī)定初 值的寫入順序和計數(shù)初值 (一串0, 1代碼) 的數(shù)制。,五. 8254命令字 / 狀態(tài)字, D7 D6=00 選擇0#計數(shù)器, =01 選擇1#計數(shù)器 =10 選擇2#計數(shù)器, =11 標志該命令字 是 “讀出命令”,1.方式選擇命令字, D5 D4=00 標志該命令為 “鎖存命令” =01 初值寫入時, 只寫低8位, 高8位自動 補0;計數(shù)值讀出時, 只能讀低8位 =10 初值寫入時, 只寫高8位, 低8位自動 補0;計數(shù)值讀出時, 只能讀高8位。 =11 初值寫入 / 計數(shù)值讀出的順序為先 低8

17、位,后高8位。,8254的命令字和狀態(tài)字, D0=0, 計數(shù)初值為二進制數(shù), D0=1, 初值為BCD碼數(shù)。,8254的命令字和狀態(tài)字,2. 鎖存命令( D5 D4=00 標志該命令為 “鎖存命令”),D7 D6 為鎖存對象。 = 0 0,鎖存0#當(dāng)前計數(shù)值 = 0 1,鎖存1#當(dāng)前計數(shù)值 = 1 0,鎖存2#當(dāng)前計數(shù)值,8254的命令字和狀態(tài)字,3.讀出命令,讀出命令是多通道的鎖存命令, 一條命令可以鎖存3個計數(shù)器的計數(shù)值、計數(shù)器狀態(tài)。,8254的命令字和狀態(tài)字,4. 狀態(tài)字,8254的命令字和狀態(tài)字,CPU對8254的初始化編程,例: 設(shè)8254的口地址為40H 43H, 要求2#計數(shù)器工

18、作在方式3, 計數(shù)初值=4000, 寫出2#的初始化程序段。,1. 對8254一個計數(shù)器的初始化編程步驟: 向控制寄存器寫入方式選擇命令字 目的: 選擇一個計數(shù)器, 并確定其工作方式 和計數(shù)值(計數(shù)初值)的讀 / 寫順序。 向選擇的計數(shù)器寫入計數(shù)初值。 注意: 如果方式選擇命令字D0=0, 則初值 應(yīng)是二進制, 否則初值應(yīng)是BCD碼數(shù)。,解1: 設(shè)初值為二進制, 初值寫入順序為先低8位后高8位。 MOV AL, 10110110B OUT 43H, AL MOV AX, 4000 OUT 42H, AL MOV AL, AH OUT 42H, AL,解2: 設(shè)初值為二進制, 寫入順序為僅寫高8

19、位。 MOV AL, 10100110B OUT 43H, AL MOV AL, 40 OUT 42H, AL,注意: 解2是錯誤的, 因為:4000=0FA0H, 其低8位不等于0。,8254的初始化編程,解3: 設(shè)初值為BCD碼, 寫入順序為先低后高。 MOV AL, 10110111B OUT 43H, AL MOV AL, 0 OUT 42H, AL MOV AL, 40H OUT 42H, AL,解4: 設(shè)初值為BCD碼, 僅寫高8位。 MOV AL, 10100111B OUT 43H, AL MOV AL, 40H OUT 42H, AL,注意: 4000的BCD碼數(shù)應(yīng)寫成400

20、0H, 解3、解4是正確的。,8254的初始化編程,2. 當(dāng)計數(shù)初值 9999時, “初值”選為二進制或 BCD碼都可以; 當(dāng)計數(shù)初值 9999時, “初值”只能選二進制。,3. 程序中如何表示BCD碼數(shù)? 設(shè)初值=(1234)10 則 MOV AX, 1234H 是正確的 寫成 MOV AX, 1234 是錯誤的,4. 方式選擇命令, 鎖存命令, 讀出命令必須寫入 控制口。,8254的初始化編程,6. 關(guān)于讀出命令 讀出命令也是鎖存命令, 如果在鎖存計數(shù)值 的同時, 也鎖存狀態(tài), 那么在隨后對計數(shù)器讀 出時, 先讀出的是狀態(tài)字, 后讀的是計數(shù)值。,5. 關(guān)于鎖存命令 當(dāng)程序員要了解計數(shù)器的當(dāng)

21、前計數(shù)值時, 先 向控制口寫入鎖存命令, 然后從選擇的計數(shù) 器端口讀取當(dāng)前計數(shù)值。,8254的初始化編程,六. 8254工作方式,有6種工作方式, 均在CLK下降沿計數(shù)一次。 有2種啟動方式: 軟件啟動, 硬件啟動。 軟件啟動: GATA=1, 初值寫入后, 開始計數(shù)。 硬件啟動: 初值寫入后, 不計數(shù)。當(dāng)GATE從 0 1后開始計數(shù)。,方式0: 計數(shù)結(jié)束OUT引腳輸出正躍變信號,軟件啟動, 計數(shù)值減到0, OUT從0 1。,8254的工作方式,方式1: (可重觸發(fā)的) 硬件啟動的單脈沖發(fā)生器,8254的工作方式,硬件啟動(由外部門控信號啟動計數(shù)) 初值寫入后不計數(shù), 當(dāng)GATE從0 1時,

22、OUT 從1 0。之后每個CLK下降沿計數(shù)值減1, 計 數(shù)值減到0時, OUT從0 1。 所以: 輸出負脈沖的寬度=NTCLK 計數(shù)過程中, GATE再次從0 1, 初值自動重 裝,從而使OUT輸出的負脈沖加寬 ( 即有可重 觸發(fā)的性能)。,8254的工作方式,方式2: 分頻器(脈沖發(fā)生器),軟件啟動 減1計數(shù), 減到1時OUT從1 0,下一CLK初值 自動重裝。所以: OUT為周期性波形, 輸出負脈 沖的寬度為一個TCLK, 周期=N TCLK,8254的工作方式,方式3: 方波發(fā)生器,軟件啟動, 減2計數(shù), 有初值自動重裝功能。 N=偶數(shù)時, 計數(shù)值減到0時初值重裝, 輸出1:1連續(xù)波形。

23、,8254的工作方式,N=奇數(shù)時: 裝入的及重新裝入的初值均為寫入的初值-1。 輸出正脈沖期間, 減到-2時重新裝初值 輸出負脈沖期間, 減到0時重新裝初值 輸出正脈沖寬度=TCLK (N+1) / 2 輸出負脈沖寬度=TCLK (N1) / 2,8254的工作方式,方式4: 軟件啟動, 單脈沖發(fā)生器,軟件啟動, 減1計數(shù),減到0 有輸出, 無初值自動重裝功能。,8254的工作方式,方式5: 硬件啟動, 單脈沖發(fā)生器,硬件啟動, 減1計數(shù), 減到0有輸出。,CLK,3 2 1 0 -1,OUT,8254的工作方式,6種工作方式的比較:,8254的工作方式,8254的工作方式,七. 8254在P

24、C機中的應(yīng)用 1. 電路:, 3個計數(shù)器的時鐘端都為1.193182 MHZ GATE0, GATE1固定接+5v GATE2, OUT2輸出受8255的PB0、PB1控制,2. 系統(tǒng)8254口地址為40H 43H。 3. 系統(tǒng)加電后,由BIOS完成對3個計數(shù)器初始化。 4. 各計數(shù)器的使用現(xiàn)狀如下:,8254的應(yīng)用,工作在方式3, 計數(shù)初值=0,OUT0=周期為 55ms的方波信號。 作用: 每隔55ms通過中斷系統(tǒng)提出 一次日時鐘中斷請求。,0#計數(shù)器,8254的應(yīng)用,工作在方式2, 計數(shù)初值=18, OUT1=周期為15.1s的連續(xù)脈沖。 作用: 每隔15.1s(向DMAC)提出一次“動

25、態(tài)存儲器刷新請求”。,1#計數(shù)器,8254的應(yīng)用,工作在方式3, 初值=533H,為音響 系統(tǒng)提供900HZ方波。,2#計數(shù)器,8254的應(yīng)用,用戶程序禁止使用1#計數(shù)器。 用戶程序可以使用0#, 2#計數(shù)器。,注意:,8254的應(yīng)用,八. 系統(tǒng)8254 應(yīng)用舉例: 編寫音樂程序, 演唱 “友誼地久天長”。,8254的應(yīng)用,8254的應(yīng)用,設(shè)計思路: 1.開 / 關(guān)揚聲器的子程序,8254的應(yīng)用,2. 使2#計數(shù)器產(chǎn)生單音頻的程序段 2#應(yīng)工作在方式3, 計數(shù)初值=1.193182兆 / 頻 率值,而(1.193182 106)10=1234DEH。 所以: 在2#寫入方式選擇命令字之后, 執(zhí)

26、行下 列程序段即可。 方式選擇命令字 控制口(BIOS已經(jīng)做了)。,MOV DX, 12H MOV AX, 34DEH MOV CX, 頻率值 DIV CX ;初值A(chǔ)X OUT 42H, AL MOV AL, AH OUT 42H, AL,8254的應(yīng)用,3.音符頻率表 一首歌曲由若干音符組成, 每一音符對應(yīng)一個 頻率。下表 給出了各種音符的頻率對照表。,8254的應(yīng)用,8254的應(yīng)用,8254的應(yīng)用,4. 音符的演唱時間,這是編程的關(guān)鍵,有兩種處理方法: 直接給出每一音符演唱的絕對時間 這種方法, 程序調(diào)試很困難, 特別是對于缺少 音樂細胞的人, 對于不太熟悉的歌曲, 很難把 握演唱的節(jié)奏。

27、 給出每一音符演唱的 “單位時間” 單位時間 N=演唱時間 N為調(diào)試參數(shù),預(yù)先給一個值,試聽后再 修改。這種方法, 大大加快了調(diào)試時間。,8254的應(yīng)用,5.怎樣確定 “單位時間”,因為: 一首歌曲中,每個音符的演唱時間有一拍、半拍、1/4拍如果最短的音符為1/8拍, 則定義: 一拍音符的單位時間為8 半拍音符的單位時間為4 1/4拍音符的單位時間為2 1/8拍音符的單位時間為1 如:,8254的應(yīng)用,根據(jù)選定的歌曲,將各音符對應(yīng)的頻率值列成一張頻率表,將各音符演唱的單位時間列成一張時間表。 頻率表的表項和時間表的表項要一一對應(yīng),不能錯位。,8254的應(yīng)用,6. 音樂程序框圖,數(shù)據(jù)段, 設(shè)置頻

28、率表, 時間表,8254的應(yīng)用,. 486 DATA SEGMENT USE16 TABF DW -1, 262, 350, 352, 350, 441, 393, 350, 393, 441 DW 350, 352, 441, 525, 589, 588, 589, 525, 441 DW 440, 350, 393, 350, 393, 441, 350, 293, 294, 262 DW 350, 589, 525, 441, 440, 350, 393, 350, 393, 589 DW 525, 441, 440, 525, 589, 700, 525, 441, 440, 350

29、DW 393, 350, 393, 441, 350, 294, 292, 262, 350, 0 TABT DB 4, 4, 6, 2, 4, 4, 6, 2, 4, 4 DB 6, 2, 4, 4, 12, 1, 3, 6, 2 DB 4, 4, 6, 2, 4, 4, 6, 2, 4, 4 DB 12, 4, 6, 2, 4, 4, 6, 2, 4, 4 DB 6, 2, 4, 4, 12, 4, 6, 2, 4, 4 DB 6, 2, 4, 4, 6, 2, 4, 4, 12 N EQU 150000 ;微秒 DATA ENDS,7. 程 序,8254的應(yīng)用,CODE SEGMENT

30、USE16 ASSUME CS:CODE, DS:DATA BEG: MOV AX, DATA MOV DS, AX OPEN: IN AL, 61H OR AL, 00000011B OUT 61H, AL ;接通揚聲器 AGA: MOV SI, OFFSET TABF ;SI是頻率表指針 MOV DI, OFFSET TABT ;DI是時間表指針 LAST: CMP WORD PTR SI, 0 ;唱完一遍? JE AGA ;是,轉(zhuǎn) MOV DX, 12H MOV AX, 34DEH DIV WORD PTR SI ;頻率轉(zhuǎn)換成計數(shù)初值 OUT 42H, AL ;低8位送2號計數(shù)器 MOV

31、 AL, AH OUT 42H, AL ;高8位送2號計數(shù)器,8254的應(yīng)用,CALL DELAY ;延時 ADD SI, 2 ;頻率表指針加2 INC DI ;時間表指針加1 MOV AH, 1 INT 16H ;有鍵入? JZ LAST ; 否 CLOSE: IN AL, 61H AND AL, 11111100B OUT 61H, AL ;關(guān)閉揚聲器 MOV AH, 4CH INT 21H,8254的應(yīng)用,DELAY PROC ;延時子程序 MOV EAX, 0 MOV AL, DI IMUL EAX, EAX, N ;EAX=演唱時間 (微秒) MOV DX, AX ROL EAX,

32、16 MOV CX, AX MOV AH, 86H INT 15H RET DELAY ENDP CODE ENDS END BEG,8254的應(yīng)用,九. 外擴8254應(yīng)用舉例,例: 給定2兆信號發(fā)生器, 在ISA總線上外擴一片 8254??诘刂窞?18 21BH, 要求: 設(shè)計硬件電路 編程產(chǎn)生8 KHZ方波和1.6 KHZ的連續(xù)脈沖,解: 思路: 使用外擴8254的 0#選擇方式3, 產(chǎn)生8 KHZ方波 1#選擇方式2, 產(chǎn)生1.6 KHZ連續(xù)脈沖 方式2、 方式3均為軟件啟動, 故GATE0、 GATE1接+5 V,8254的應(yīng)用,硬件電路:,8254的應(yīng)用, 0#計數(shù)初值 N0=2兆

33、/ 8K=250 (256) 方式3 選擇命令字, 1#計數(shù)初值 N1=2兆 / 1.6K=1250 方式2 選擇命令字,=75H,(BCD碼),計數(shù)器選擇 讀寫方式 工作方式 數(shù)制,0 1 1 1 0 1 0 1,(先低后高),0 0 0 1 0 1 1 0,計數(shù)器選擇 讀寫方式 工作方式 數(shù)制,(只寫低8位),=16H,2進制,8254的應(yīng)用,.486 CODE SEGMENT USE16 ASSUME CS:CODE BEG: MOV DX, 21BH MOV AL, 16H OUT DX, AL MOV DX, 218H MOV AL, 250 OUT DX, AL MOV DX, 2

34、1BH MOV AL, 75H OUT DX, AL,8254的應(yīng)用,MOV DX, 219H MOV AX, 1250H MOV DX, AL MOV AL, AH OUT DX, AL MOV AH, 4CH INT 21H CODE ENDS END BEG,8254的應(yīng)用,例:測試8254計數(shù)器方式3的計數(shù)過程 1. 復(fù)習(xí)8254方式3 方式3 方波發(fā)生器, 減2計數(shù)器。 初值=偶數(shù)時, 計數(shù)到0, 輸出改變極性, 重裝初值。 初值=奇數(shù)時, 計數(shù)過程復(fù)雜。,實際裝入 / 重裝的初值, 比編程寫入的初值少1。 輸出為高電平時, 減2到-2時, 輸出改變極性, 重裝初值。 輸出為低電平時, 減2到0時, 輸出改變極性, 重裝初值。,8254的應(yīng)用,2. 問題: PC機8254電路已定型, 無法測試。 所以: 外擴一片8254, 設(shè)計測試電路。 8254計數(shù)過程是在CLK脈沖控制下自動地 快速完成的, 怎樣使計數(shù)過程受程序員控制?,3. 測試電路及編程思路: 在ISA 總線上外擴一片8254, 并設(shè)計口地址 譯碼電路。設(shè) 8254 口地址=218H 21BH,8254的應(yīng)用, 1#計數(shù)器是被測計數(shù)器, 令其工作在方式3,

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論