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

8255A可编程并行接口实验

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

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

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

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

  1. 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口的控制位。

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

  1. 行扫描法

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

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

     编程流程图如图3-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


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值