微機原理與接口技術之8255A和8253/8254 必須掌握的編程題

##可編程並行通信接口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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章