微机原理与接口技术之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


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