##可編程並行通信接口8255A
1.如下圖所示:現將8255A的B口作爲傳送字符的通道,工作於方式0,輸出方式,A端口未用,端口C也工作於方式0,PC0作爲BUSY信號的輸入端,PC7作爲STB信號輸出端,負脈衝時外設才能接收一個數據。設8255A的端口地址爲: C0H-C6H,試對8255A進行初始化編程,並寫出通過查詢方式把CL中內容向打印機傳送一次數據的程序段。(15分)
MOV AL, 81H
OUT 0C6H, AL
MOV AL, 00001111B ;
OUT 0C6H, AL
LPST: IN AL, 0C4H ;查詢
TEST AL, 01H ;
JNZ LPST
MOV AL, CL ;數據
OUT 0C2H, AL
MOV AL, 00001110B ;啓動脈衝
OUT 0C6H, AL
INC AL
OUT 0C6H, AL
2.CPU通過8255A的B口(採用簡單I/O工作方式)向打印機傳送100個字符,這些字符在內存中的起始地址爲0100:1000H,共100個字節。8255A的端口地址爲400~403H,連接示意圖如圖所示:
mov dx, 403H (1分)
mov al, 10000001b(或者81h) (1分)
out dx, al ;初始化8255A的方式選擇控制字,設定工作模式
mov al, 00001101b(或者0DH) (1分)
out dx, al ;向STB引腳發送高電平
mov ax, 0100H (0.5分)
mov ds, ax
mov si, 1000H (0.5分)
mov cx, 100
lp: mov dx, 402H (1分)
in al, dx ;讀取PC3的狀態
and al, 08H (1分)
jnz lp ;如果PC3爲高電平,表示打印機還未處理完畢,需等待
mov dx, 401H (1分)
mov al, [si]
out dx, al ;將要打印的字符內容通過B口輸出至打印機
mov dx, 403H (1分)
mov al, 00001100b(或者0CH) (1分)
out dx, al
nop
nop
mov al, 00001101b(或者0DH) (1分)
out dx, al ;在PC6上發出一個負脈衝後,然後回到高電平狀態
inc si
dec cx
jnz lp
##計數器與定時器8253/5254的應用舉例
1.設8253的端口地址爲60H~63H。要求通道0工作在方式3,計數初值0166H。試編制初始化程序。(5分)
MOV AL,00110110B ;36H
OUT 63H,AL
MOV AL,66H ;初值
OUT 60H,,AL
MOV AL,01H
OUT 60H,AL
2.設8253端口地址爲340H~343H,CLK0、CLK1的時鐘頻率均爲2MHz,要求OUT0每20ms向CPU發出一中斷請求信號,OUT1輸出頻率爲1000Hz的方波,請編寫初始化程序。 (10分)
MOV DX,343H
MOV AL,00110000B ;30H
OUT DX,AL
MOV DX,340H
MOV AX,40000 ;初值
OUT DX,AL
MOV AL,AH
OUT DX,AL
MOV DX,343H
MOV AL,01110110B ;76H
OUT DX,AL
MOV DX,341H
MOV AL,2000 ;初值
OUT DX,AL
MOV AL,AH
OUT DX,AL
3.計數器/定時器8253,振盪器(頻率爲1MHZ)連線如下圖所示,其中振盪器的脈衝輸出端接通道0的計數輸入端CLK0,設8253的端口地址爲180H~186H。
請完成以下任務:
(1)該電路中通道0的OUT0輸出2KHZ連續方波,通道0的計數初值爲多少(寫出計算式)?GATE0應接何電位?在圖上畫出。
(2)若要8253的OUT1端,能產生週期爲1秒的連續方波,該如何解決?在圖上畫出。
(3)寫出實現上述功能的8253初始化程序。
(1)N0=1MHZ/2KHZ=500,GATE0接高電平,+5V; 2分
(2)可將OUT0與CLK1相連,作爲輸入時鐘脈衝; 3分
(3)N1=2KHZ/2HZ=1000 2分
計數器0:MOV DX,186H
MOV AL,00110111B 2分
OUT DX,AL
MOV DX,180H
MOV AL,00H 1分
OUT DX,AL
MOV AL,05H
OUT DX,AL 1分
計數器1:MOV DX,186H
MOV AL,01110111B 2分
OUT DX,AL
MOV DX,182H
MOV AL,00H 1分
OUT DX,AL
MOV AL,10H
OUT DX,AL 1分
4.設8253的選通地址爲240H~243H,採用BCD計數,計數器2輸出用於申請中斷。如果計數器2的輸入時鐘頻率爲20KHz,輸出信號每秒引起100次中斷。要求 (1) 算出計數初值,(2) 編寫初始化程序。(20分)
(1) 初值爲20KHZ/100=200或C8H
(2) 編程: MOV DX,243H
MOV AL,10110001B(或B1H)
OUT DX,AL ;
MOV DX,242H
MOV AL,8CH
OUT DX,AL ;
MOV AL,00H (該句也可以爲:XOR AL,AL)
OUT DX,AL ;
5.已知芯片8253的端口地址爲4F0H~4F3H,設計數器1工作在方式1,計數器初值爲3060H,採用二進制計數,請設計實現上述功能的8253初始化程序。
因爲計數器初值爲3060H,即爲16位的,所以讀/寫格式爲11
因此控制字爲:01110010 =72
控制字: MOV AL, 72H
OUT 4F3H, AL
低8位: MOV AL, 60H
OUT 4F1H, AL
高8位: MOV AL, 30H
OUT 4F1H, AL