微机原理与接口技术复习笔记(二):8255芯片

8255的功能与结构

  • 3个8位I/O口
    • A口、C口、B口
    • 端口内部含有缓冲器
  • 两组控制逻辑
    • A组:控制PA和 P C 7 − 4 PC_{7-4} PC74
    • B组:控制 P C 3 − 0 PC_{3-0} PC30和PB
  • 读写控制:根据地址线A1 A0
    • 00:A口
    • 01:B口
    • 10:C口
    • 11:控制字

示意图
![[Pasted image 20240519091418.png|400]]

  • 如果是8088这种8位数据线:地址是连续的。
  • 如果是8086这种16位数据线:
    • 数据线:用低8位。
    • 地址线:A0=0表示使用低8位。因为A0=1走的是数据线高8位。所以8255连接8086的时候,A0必须是0,这就导致了地址都是偶数。

![[Pasted image 20240502093911.png|400]]

8255控制字

什么是控制字

  • 控制字是一个八位数,要送到控制口里。
  • 在8255中,A1A0=11就表示送到控制口。

控制字的分类

  1. 方式控制字。
  2. C口置位/复位控制字

方式控制字

示意图:1入0出。

在这里插入图片描述

解释

  • D7=1:标志位,表示是方式控制字。
  • D6-D5:控制A口的工作方式,有0、1、2三种。
  • D4:A口的出入。
  • D3:C口高4位的出入。
  • D2:B口工作方式。有0和1两种。
  • D1:B口的出入。
  • D0:C口低4位的出入。

C口置位/复位控制字

示意图

在这里插入图片描述

解释

  • D7=0:标志位,表示C口置位/复位控制字
  • D3-D1:位选择。分别选择PC0-PC7
  • D0:表示这是置位or复位

例子

  • 题目:从PC5输出一个正脉冲,假设8255的端口地址是60H-63H,写出汇编程序。
  • 分析:输入正脉冲,就是先设置1然后设置0。
MOV AL, 00001011 ; PC5=1的控制字
MOV DX,63H
OUT DX,AL
MOV AL, 00001010 ; PC5=0的控制字
OUT DX,AL

8255的工作方式

8255的工作方式有两种:

  • 方式0:基本的I/O方式
  • 方式1:选通的I/O方式

方式0:基本I/O方式

特点

  • 适用场景为无需应答联络的场合。
  • 输出锁存,输入无锁存
  • PA、PB、PC7-4、PC3-0可以组成16种工作方式

例子

MOV AL,9AH
;1001 1010。即设置方式控制字,A口为方式0,PA入,PC高入,B口方式0,B口入,C口低出
OUT 63H, AL

方式1:选通I/O方式

PA、PB口可分别工作于方式1,均可以作为输入/输出。

特点

  • PA、PB口之一工作于方式1时,PC口就有3位需要配合。此时,另一个端口以及PC口其它数据位可以工作于方式0.
  • PA、PB口都工作于方式1时,PC口就有6位需要配合,其余2位仍可作I/O。

方式1又分为

  • 选通输入方式
  • 选通输出方式
  • 选通输入输出方式

例:A口选通输入方式

![[Pasted image 20240519100121.png|400]]

解释

  • 根据控制字高4位可以知道,A口是选通输入
  • 外设的8位的数据从PA口进入,外设占用PC4口发送STB_A的负脉冲,表示要输入数据。
  • 8255向外设发送IBF_A表示输入缓冲区满,占用PC5口
  • 内部的中断使能和IBF_A都是1,则发出中断信号INTRA,告诉CPU将数据取走,占用PC3口。
  • CPU执行READ指令将数据读走,此时IBF变低。

![[Pasted image 20240502105313.png|400]]

例子:选通输出

一个道理,只不过输入输出反过来。
![[Pasted image 20240519101731.png|400]]

方式2:双线总线方式

特点

  • 只有A口能工作于此方式,既能输出又能输入,但不能同时。
  • A口工作于方式2,B口可工作于方式0或者方式1
  • PB方式0:PC2-0可以作I/O
  • PB方式1:PC2,1,0作B口的联络线。

例子:主机和软盘交换数据。

![[Pasted image 20240519102055.png|300]]

C口状态字

通过读取C口状态字,可以测试或者检查外设状态。

方式1状态字
![[Pasted image 20240519102211.png|400]]

方式2状态字
![[Pasted image 20240519102222.png|400]]

重点例题

例1:基本I/O

题目:检测开关K0-7的状态,并用LED0-7实时指示。

电路图
![[Pasted image 20240519103556.png|500]]

分析

  • 第一步:对芯片进行初始化,确定端口地址
    • 根据片选确定A4A3A0为100,A7=1才能开启74LS138,A5A6必须是11。
    • A2A1就是选端口
    • 这样就可以确定A口的地址:1111 0000=F0
    • 这样就可以确定B口的地址:1111 0100 = F2
    • C口:F4
    • D口:F6
  • 第二步:查询程序
    • 写控制字:

      • 方式控制字:标志位1、A口工作方式0、入、B口方式0,B出、C出=10010000=90H
      • ![[Pasted image 20240502112039.png]]
    • 从A口读:IN

    • 从B口写:OUT

  • 第三步,写程序
MOV DX,0F6H # 控制口地址
# 标志位 A口方式2 D4-D0 根据输入输出
MOV AL,90H # 控制字:1|00|1|0000
OUT DX,AL # 写控制字
TEST1:
MOV DX,0F0H # A口地址
IN AL,DX # 从A读数据
MOV DX,0F2H # B口地址
OUT DX,AL # 将数据送到B
CALL DELAY # 调用等待
JMP TEST1

例2:用数码管实时显示K3-K0的16种组合状态

题目
假定四个端口的地址分别是60H-63H。编程用数码管实时显示K3-K0的16种状态。

电路图
在这里插入图片描述

数码管
在这里插入图片描述

分析

; 段码表
TAB:
DB 40H,79H,24H,30H,19H,12H,02H,78H;
DB 00H,18H,08H,03H,43H,21H,06H,0EH;
; 方式控制字
MOV AL,10010000B; 方式0 A入B出
MOV DX,63H
OUT DX,AL
; 从K3-K0输入
IN_PORTA:
MOV DX,60H
IN AL,DX
; 对输入进行处理
AND AL,0FH ; 看电路图,高4位不要
MOV BX, OFFSET TAB ; 段码表基地址
XLAT ; 查表,BX+偏移量=>AL
; 输出
MOV DX,61H
OUT DX,AL
CALL DELAY
JMP IN_PORTA

例3:键盘电路

独立式按键和矩阵按键

独立式按键:一个端口连接一个开关。
![[Pasted image 20240504090905.png|300]]

矩阵连接:行列交叉连接。起作用的是四根行线:PA0-PA3,四根列线:PB0-PB3
在这里插入图片描述

原理:行线全0,列线全1表示没有键被按下。

编程要点

  1. 确定是否有键按下——行线置0(OUT)读列线(IN)——重点
    1. 初始化:设置行线是输出,列线是输入方式。
    2. 发行码0:行线输出全0
    3. 读列码:判断列线是否全1,否说明有键被按下
    4. 例子:6号线被按下了,那么PB1=0——说明有键被按下了。
    5. 机器键盘需要延时去抖动再次判断
  2. 确定键的位置——逐行扫描法
    1. 发行码:每次仅一行输出0,从第0行开始。
    2. 读列码:判断列线,如果全1,则闭合键不在此行。如此逐行判断。
    3. 获得键码:从B口读取行列值编码,即键码–>AL,前四位为0的是行,后四位为0的是列。
  3. 确定键名:将键码预先排列成表,通过获得键码查表确定键名。

假定A的端口地址是:0FF9H

; 1. 端口地址
PORT_A EQU 0FF9H;
PORT_B EQU 0FFBH;
PORT_CTL EQU 0FFFH;
; 2. 键码表
; 9号键是1101 1011
DATA SEGMEMT
TABLE
DB 77H,7BH,7DH,7EH,0B7H,0BBH,0BDH,0BEH;
DB 0D7H,0DBH,0DDH,0DEH,0E7H,0EBH,0EDH,0EEH;
DATA ENDS
; 程序开始
START:
; 初始化8255控制字:A出B入
;1(标)00(A方式)0(A)0(C)0(B方式)1(B入)0(C)
MOV DX,PORT_CTL
MOV AL,82H
OUT DX,AL

; 确定是否有键按下
MOV AL,0
MOV DX,PORT_A
OUT DX,AL ; 输出行码00H

WAIT_PRES:
MOV DX,PORT_B ; 读列值:B低4位
IN AL,DX
AND AL,0FH
CMP AL,0FH
JE WAIT_PRES ; 列码全1就继续读B口
MOV CX,16EAH ; 延时去抖动
DLY:
LOOP DLY

; 过滤后再判断是否有键按下
IN AL, DX
AND AL,0FH
CMP AL,0FH
JE WAIT_PRES

; 有键按下
MOV AL,0FEH ;行线0设置0,逐行设置
MOV CL,AL;
NEXT_ROW: ; 接口输入输出和判断
MOV DX,PORT_A
OUT DX,AL
MOV DX,PORT_B
IN AL,DX
AND AL,0FH
CMP AL,0FH
JNE ENCODE ; 有键
ROL CL,1 ;有就右移1位
MOV AL,CL 
JMP NEXT_ROW

; 查表确定键值和键名
ENCODE:
MOV BX,000FH ;指针初始指向15,即F键
IN AL,DX ;从B口拿到行列码
NEXT_TRY:
CMP AL,TABLE[BX] ; 查表
JE DONE ; 查到
DEC BX ; 没有查到i--
JNS NEXT_TRY ; 未查完,继续
MOV AH,01H ; 设置错误标志位
JMP EXIT ; 退出
DONE: ;查到了
MOV AL,BL ; 将键盘码-->AL
MOV AH,00H ; 设置有效标志位

EXIT: ; 等待按键释放
MOV AL,0
MOV DX,PORT_A 
OUT DX,AL
MOV DX,PORT_B
WT_OPEN:
IN AL,DX
AND AL,0FH
CMP AL,0FH
JNE WT_OPEN ;发现有键按下继续等待,其实是等待案件释放
微机原理1.1 进制转换及计算 1.2 码元及转换 习题 第2章 微机硬件基础 2.1 计算机系统概述 2.2 微机发展概况 2.3 8086/88 CPU的编程结构 2.4 内存地址组织及存放次序 2.5 接口、端口、端口地址 习题 第3章 寻址方式及指令系统 3.1 基本概念 3.2 寻址方式 3.3 指令系统 3.4 常用DOS系统功能调用和BIOS中断调用 习题 第4章 MASM汇编语言 4.1 汇编语句格式 4.2 表达式 4.3 伪指令 4.4 完整汇编源程序的上机过程 习题 第5章 汇编程序设计 5.1 程序结构 5.2 顺序程序设计 5.3 分支程序设计 5.4 循环程序设计 5.5 子程序设计 5.6 综合应用举例 习题第部分 微机原理 第6章 Intel 8086/88微处理器 6.1 8086/88 CPU的内部结构 6.2 8086/88引脚及其功能 6.3 8086/88 CPU子系统的基本配置 6.4 总线工作时序 习题 第7章 内存组成、原理接口 7.1 微机存储系统概述 7.2 半导体存储器结构原理 7.3 典型的半导体存储器芯片 7.4 内存组成及其系统总线的连接 7.5 PC系列微机的内存组织 习题 第8章 输入输出(I/O)系统 8.1 接口技术概述 8.2 I/O端口读写技术 8.3 I/O设备数据传送控制方式 8.4 简单的输入/输出接口芯片 习题 第9章 中断技术 9.1 中断的基本原理 9.2 8086/88的中断系统 9.3 可编程中断控制器8259A(PIC) 9.4 8259A在微机系统中的应用 9.5 中断接口技术 习题第三部分 接口技术 第10章 可编程接口芯片及其应用 10.1 可编程并行接口芯片8255A 10.2 可编程的定时/计数器芯片8253 10.3 可编程串行接口芯片Intel 8251A 10.4 数据采集系统接口技术 10.5 可编程接口芯片的综合应用 习题 第11章 总线技术 11.1 概述 11.2 系统总线概述 11.3 ISA总线 11.4 EISA和VESA总线 11.5 PCI总线 11.6 第三代总线3GIO介绍 11.7 AGP总线 11.8 AMR、CNR、ACR总线 11.9 IEEE-488总线 习题 第12章 键盘接口 12.1 概述 12.2 非编码键盘接口及其控制 12.3 IBM PC的键盘接口 习题 第13章 显示接口 13.1 LED显示器件及其接口 13.2 液晶显示器(LCD)及其接口 13.3 CRT显示器及其接口 习题 第14章 打印机及并口通信技术 14.1 打印机的主要类型工作原理 14.2 打印机并行接口 14.3 并行打钱机适配器 14.4 并行打印机接口转换成GPIB-488接口 习题 第15章 串行通信技术 15.1 概述 15.2 RS-232串行接口技术 15.3 USB接口技术 习题第四部分 微机技术新发展及附录 第16章 微机最新发展概述 16.1 微处理器 16.2 主板芯片组 16.3 内存 16.4 显卡附录A DOS功能调用附录B BIOS中断附录C 汇编错误信息中英文对照表附录D DEBUG命令格式附录E 标准ASCII码表附录F CMOS参数特征附录G P4相对8086/88新增指令系统参考文献作者介绍 进行详细习题讲解
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值