汇编语言:8255A可编程并行接口实验

一、实验目的

  1. 掌握并行接口芯片8255A和微机接口的连接方法
  2. 掌握并行接口芯片8255A的工作方式及其编程方法
  3. 掌握小键盘的工作原理及接口技术
  4. 利用8255A并行接口芯片与小键盘的接口电路,实现并行接口实验

二、实验原理

1.8255A芯片原理

    8255A是可编程并行接口芯片,双列直插式封装,用+5V单电源供电,如图2-1是8255A的逻辑框图,内部有3个8位I/O端口:A口、B口、C口;也可以分为各有12 位的两组:

图2-1 8255A芯片管脚示意图

    A和B组,A组包含A口8位和C口的高四位,B组包含B口8位和C口的低4位。

    A 组控制和B组控制用于实现方式选择操作;读写控制逻辑用于控制芯片内寄存器的数据和控制字经数据总线缓冲器送入各组接口寄存器中。由于8255A 数据总线缓冲器是双向三态8位驱动器,因此可以直接和8088系统数据总线相连。

2.8255A端口地址

图2-2 8255A端口地址

3.8255A工作方式

    8255A芯片有三种工作方式:方式0、方式1、方式2。它通过对控制寄存器写入不同的控制字来决定其三种不同的工作方式。

    方式0 :基本输入/输出

    该方式下的A口8位和B口8位可以由输入的控制字决定为输入或输出, C 口分成高4 位(PC7~PC4)和低4位(PC3~PC0)两组,也有控制字决定其输入或输出。需注意的是:该方式下,只能将C口其中一组的四位全部置为输入或输出。

    方式1 :选通输入/输出

    该方式又叫单向输入输出方式,它分为A、B两组,A组由数据口A和控制口C 的高4位组成,B组由数据口B和控制口C的低4位组成。数据口的输入/输出都是锁存的,与方式0不同,由控制字来决定它作输入还是输出。C口的相应位用于寄存数据传送中所需的状态信号和控制信息。

    方式2 :双向输入输出

    本方式只有A组可以使用,此时A口为输入输出双向口,C口中的5位(PC3~PC7)作为A口的控制位。

4.8255A基本控制字

图2-3 8255A基本控制字

5.端口 C复位/复位控制字

图2-4 端口C复位控制字

6.8255A与小键盘连接示意图

键盘阵列由 8255芯片控制,用行列连接方式到8255芯片 A口,B口,同时连接 8255芯片的片选到 Y1 /IO地址(288H~28FH),以使键盘阵列由 8255芯片控制。如图2-5所示。

图2-5 8255A与小键盘连接示意图

三、编程要求

小键盘按键处理有:行扫描法和行反转法。

1.行扫描法

•首先判断小键盘是否有某键按下

•其次判断哪一个键被按下,并显示其结果

编程流程图如图3-1所示。

2.行反转法

•首先判断小键盘是否有某键按下

•其次行线输出,列线输入

•再次列线输出,行线输入

•最后判断哪一个键被按下,并显示其结果

编程流程图如图3-2所示。

3.实验硬件连接方法

    键盘矩阵由8255A芯片控制,并将PA0-PA3、PB0-PB3与键盘连接到8255A的A口和C口,同时片选地址288H-28FH,以便键盘矩阵由8255A控制。

•8255A的 PA0-PA3连接小键盘的行0-行3

•8255A的 PB0-PB7连接小键盘的列0-行3

•8255A的CS连接实验箱Y1/IO地址。从288H-28FH选择

图3-1 行扫描法编程流程图

图3-2 行反转法原理示意图

编写程序,按下小键盘任意键后,要求在用2号调用在计算机屏幕显示结果。

四、实验框图与流程图

图4-1 实验程序流程图

五、实验程序清单 

data    segment
tab1    DB  'F', 'E', 'D', 'C'
tab2    DB  'B', 'A', '9', '8'
tab3    DB  '7', '6', '5', '4'
tab4    DB  '3', '2', '1', '0'

kb    DB  00eh, 00dh,00bh,007h

port      equ     288h
data    ends
stack   segment
sta     db 256 dup(?)
top        equ size sta
stack   ends
code    segment
    assume cs:code,ds:data,ss:stack
main    proc far
        mov ax,data
        mov ds,ax
      mov ax, stack
        mov ss,ax
      mov sp,top
;初始化8255
        mov dx, port+3
        mov al,10000010b  
            out dx,al    
                   
      
 begin:   
        mov al,0
        mov dx, port        
        out dx,al
        mov dx, port+1
        in al,dx
            and al,0fh        
            cmp al,0fh  
            je  begin
;若有键按下,按列查找哪个键

mov al,00001110b
        mov dx, port         
        out dx,al
        mov dx, port+1
        in al,dx                 
            lea bx,tab1              
        cmp al,0fh              
        jne  display

        mov al,00001101b
        mov dx, port         
        out dx,al
        mov dx, port+1
        in al,dx                
            lea bx,tab2              
        cmp al,0fh              
        jne  display

        mov al,00001011b
        mov dx, port         
        out dx,al
        mov dx, port+1
        in al,dx                  
            lea bx,tab3              
            cmp al,0fh 
        jne  display

            mov al,00000111b
        mov dx, port          
        out dx,al
        mov dx, port+1
        in al,dx                
            lea bx,tab4             
             cmp al,0fh             
        jne  display

nop
jmp    begin

;查找按下的键,并显示
display:
        mov di,bx
        lea si,kb    ;存小键盘扫描码

next:    cmp al,[si]  ;查键盘扫描码表
        je show    ;找到了,转去显示
        inc si      ;否则继续
        inc di
        jmp next
show:               ;显示键入字符  
    mov ah,2
    mov dl,[di]
    int 21h
;    cmp dl, 'F'   ;若是'P'则退出
;      je over
    call delay
    jmp    begin    ;重新开始查询


over:
    mov ah,4ch
        int 21h
main  endp

delay  proc near       ;延时循环 100*65536次  
      push di
      push cx
      mov cx,36h
      mov di,0 
again:
      nop
      dec di
      jnz again
      dec cx
      jnz again

      pop cx
      pop di
      ret
delay endp

code    ends
end main

六、实验分析与结果

1.代码分析

        在开始时,对8255芯片进行初始化,8255芯片被用于处理键盘的输入。接下来,程序进入一个循环,不断地检测是否有键被按下。当有键被按下时,程序将按照列来检测哪一个键被按下。这个通过向端口发送不同的信号,然后读取返回的值实现。如果返回值与0FH不同,那么就说明有一个键被按下。然后,程序将查找被按下的键是哪一个,并且显示出对应的字符。为了做到这一点,程序设置了一个查找循环,通过比较返回的键盘扫描码和KB数组的值来确定按下的是哪一个键。然后,它将使用DOS的INT 21H服务来在终端上显示字符。这个程序没有明显的退出逻辑,因此,它将一直运行,直到用户强制关闭或重启计算机。它的主循环(BEGIN)始终检测键盘输入,并在按下键时显示相应字符。然后调用一个延迟过程(DELAY),使得按键字符能够在显示一段时间后消失,然后再次进入检测循环。

2.实验分析

        行扫描法:先检测是否有键按下,再识别位置。先将8255A的所有行线置0,检查各列电平是否有变化,若有变化则说明有键按下,若无变化,则无键按下。若有键被按下,先把第一行置为低电平,其余各行为高电平,检查各列电平变化,若某列线电平为低,可确定此行列交叉点处的按键被按下。若各列线电平均为高电平,检查下一行,依次向后,直到识别出具体按下的键。

        行反转法:将行线输出为全低电平,则列线中电平由高到低的所在列为按键所在列,再将列线输出为全低电平,则行线中电平由高变低所在行为按键所在行,则可确定按键所在的行和列。

3.实验结果

将程序编译连接后在小键盘上按下不同的数字和字母,在屏幕上会出现相应的数字和字母。运行结果图如下:

 图5-1 实验结果展示

  • 28
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值