8255A可编程并行接口实验
- 实验目的
- 掌握并行接口芯片8255A和微机接口的连接方法;
- 掌握并行接口芯片8255A的工作方式及其编程方法;
- 掌握小键盘的工作原理及接口技术;
- 利用8255A并行接口芯片与小键盘的接口电路,实现并行接口实验。
- 实验原理和内容
- 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系统数据总线相连。
- 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口的控制位。
小键盘按键处理有:行扫描法和行反转法。
- 行扫描法
•首先判断小键盘是否有某键按下;
•其次判断哪一个键被按下,并显示其结果。
编程流程图如图3-4所示。
- 行反转法
•首先判断小键盘是否有某键按下;
•其次行线输出,列线输入;
•再次列线输出,行线输入;
•最后判断哪一个键被按下,并显示其结果。
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