欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

微机原理与接口技术之8255A和8253/5254 必须掌握的编程题

程序员文章站 2022-03-15 15:14:31
...

可编程并行通信接口8255A

微机原理与接口技术之8255A和8253/5254 必须掌握的编程题
1.如下图所示:现将8255A的B口作为传送字符的通道,工作于方式0,输出方式,A端口未用,端口C也工作于方式0,PC0作为BUSY信号的输入端,PC7作为STB信号输出端,负脉冲时外设才能接收一个数据。设8255A的端口地址为: C0H-C6H,试对8255A进行初始化编程,并写出通过查询方式把CL中内容向打印机传送一次数据的程序段。(15分)
微机原理与接口技术之8255A和8253/5254 必须掌握的编程题

    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,连接示意图如图所示:微机原理与接口技术之8255A和8253/5254 必须掌握的编程题

    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的应用举例

微机原理与接口技术之8255A和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。
微机原理与接口技术之8255A和8253/5254 必须掌握的编程题
请完成以下任务:
(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分
计数器0MOV DX,186H
      MOV AL,00110111B                              2OUT DX,AL
      MOV DX,180H
      MOV AL,00H                                    1OUT DX,AL
      MOV AL,05H
      OUT DX,AL                                     1分
计数器1MOV DX,186H
        MOV AL,01110111B                              2OUT DX,AL
        MOV DX,182H
        MOV AL,00H                                    1OUT 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