并行IO接口8255
文章目录
- 8255A
- 芯片组成
- 外设接口
- 三个端口
- 两组端口
- 关于C口(★)
- 内部逻辑
- CPU接口
- 8255A的控制字(★)
- 位控字(D7=0)
- 方式选择控制字(D7=1)
- 8255A的工作方式
- 工作方式0(基本输入/输出方式)(★)
- 工作方式1(选通输入/输出方式)
- 工作方式2(双向传输方式)
- 补充(★)
8255A
8255A包含3个带锁存或缓冲的数据端口,可与外设并行进行数据交换。
- 含3个独立的8位并行输入/输出端口,各端口均具有数据的控制和锁存能力,即A端口(通道)、B端口(通道)、C端口(通道)
- 也可联合使用,构成单线、双线或三线联络信号的并行接口,此时,C端口完全服务于A、B端口。
- 可通过编程设置各端口的工作方式和数据传送方向(入/出/双向)。
芯片组成

外设接口
三个端口
- 端口A:PA0~PA7(8位)
A组,工作方式0、1、2
常作数据端口,功能最强大。 - 端口B:PB0~PB7(8位)
B组,工作方式0、1
常作数据端口 - 端口C:PC0~PC7(8位)
A组控制高4位PC4~PC7,B组控制低4位PC0~PC3,仅支持工作方式0
可作数据、状态和控制端口;分两个4位,每位可独立操作
两组端口
A组:
- 端口A(PA0~PA7)
- 端口C的高4位(PC4~PC7)
B组:
- 端口B(PB0~PB7)
- 端口C的低4位(PC0~PC3)
关于C口(★)
-
C端口被分成两个4位端口,两个4位端口只能以方式0工作,可分别选择输入或输出
-
在控制上,C端口上半部和A端口编为A组,C端口下半部和B端口编为B组
-
当A和B端口工作在方式1或方式2时,C端口的部分或全部引脚将被用来为A、B端口输出控制信号或输入状态信号。
内部逻辑
三个端口在内部分成两组控制
A组控制电路控制A端口和端口C的上半部分
B组控制电路控制B端口和端口C的下半部分
- 根据CPU的命令字控制8255A的工作方式,每组控制电路从读写控制逻辑接受各种命令,从内部数据总线接受控制字并发出命令到各自相应的端口。
- 根据CPU的命令字对端口C的每一位实现按位置位(1)或复位(0)。
CPU接口

连接系统端的主要引线:
D0~D7——控制字输入端口CS——片选信号RD、WR——决定内外部总线上信息传送的方向A0、A1——端口寻址RESET——复位信号,接系统总线的RESET,使8255A复位
| A1 | A0 | 选择 |
|---|---|---|
| 0 | 0 | 端口A |
| 0 | 1 | 端口B |
| 1 | 0 | 端口C |
| 1 | 1 | 控制寄存器 |
8255A的控制字(★)
2个控制字:
- 方式选择控制字(方式控制字):确定三个端口的工作方式,给出标识位。
- 通道C置位复位控制字(位控字):控制C口的某一位的输出,或用于设置
INTE位。
两个控制字共用一根地址线,即A0、A1选择是控制器还是端口。
使用D7位判断控制字,即选择方式控制字和位控字。
D7=1表示为方式选择控制字(方式控制字)
D7=0表示为通道C置位/复位控制字(位控字)
位控字(D7=0)
-
通道C 置位 / 复位控制字用于对单个位的操作。
-
端口C的每一位都可以通过控制寄存器写入 置位 / 复位控制字,使之置位(输出为1)或复位(输出为0)。
-
C口的控制靠写入控制字,而不是直接写入C口。
-
D6,D5,D4——未用 -
D3,D2,D1——选择C口某一位 -
D0——置位 / 复位

方式选择控制字(D7=1)

| 位 | 功能 |
|---|---|
| D7 | 必须是1 |
| D6,D5 | A组方式选择(0、1、2) |
| D4 | (PA0~PA7)输入、输出 |
| D3 | (PC4~PC7)输入、输出 |
| D2 | B组方式选择(0、1) |
| D1 | (PB0~PB7)输入、输出 |
| D0 | (PC0~PC3)输入、输出 |
8255A的工作方式
- 方式0:基本输入输出方式,适用于无条件传送和查询方式的接口电路。
- 方式1:选通输入输出方式,适用于查询和中断方式的接口电路。
- 方式2(仅A口):双向选通传送方式,适用于与双向传送数据的外设。适用于查询和中断方式的接口电路。
链接1
链接2
工作方式0(基本输入/输出方式)(★)
-
A口、C口的高4位,B口、C口的低4位 可分别定义为输入或输出,各端口互相独立,故共有16种不同的组合。
-
8255相当于三个独立的8位简单接口。
-
各端口既可设置为输入口,也可设置为输出口,但不能同时实现输入及输出。
-
定义为输出的口均有锁存数据的能力,而定义为输入的口则无锁存能力。
-
在方式0下,C口还可以通过位控字按位进行置位和复位。
-
C端口即可以是一个8位的简单接口,也可以分为两个独立的4位端口。
时序:
- A0 = 1、A1 = 1,D0~D7写入控制字
- 改变RD#和WR#,选择读写
- 对于输出:通过A0、A1选择A、B、C端口,通过D0~D7写入数据
- 对于输入:通过A0、A1选择A、B、C端口,通过D0~D7读出数据
应用:
- 用于连接简单外设。
- 适用于:无条件输入输出方式。查询输入输出的方式:把A、B口作为8位数据的输入或输出口,C口的高/低4位分别定义为A、B口的控制位和状态位。
工作方式1(选通输入/输出方式)
-
A、B口作输入或输出口,C口的部分位固定用作A、B口的选通控制信号。
-
每一个8位数据端口(A、B)均可设置为输入、输出方式,且两种工作方式均可锁存,而且可以进行中断控制。
-
输入时
PC3(INTR)、PC4(STB#)、PC5(IBF),输出时PC3(INTR)、PC6(ACK#)、PC7(OBF#)三位控制端口A状态。 -
输入时
PC2(STB#)、PC1(IBF)、PC0(INTR), 输出时PC2(ACK#)、PC1(OBF#)、PC0(INTR)三位控制端口B状态。 -
未被用到的C端口,都可用位控字随便设置输入输出。
-
A、B口的
INTR可输出中断到CPU,INTE可控制中断使能失能。 -
对
INTE的可通过写入端口C的对应位。输入时端口A的INTE对应PC4,端口B的INTE对应PC2。输出时端口A的INTE对应PC6,端口B的INTE对应PC2。
| 数据输入 | |
|---|---|
| STB# | 数据选通信号,表示外设已经准备好数据。将输入设备送来的数据锁存在输入锁存器中。 |
| IBF | 输入锁存器满,表示已经接收到数据,由STB的前沿产生,CPU的IN指令清除此信号。 |
| INTR | 中断请求信号,由STB后沿产生,要求CPU读取数据。 |
| INTE | 中断允许位,允许INTR发出中断请求。当INTE = 1和IBF位高电平时允许INTR请求。 |
| 数据输出 | |
|---|---|
| OBF# | 输出缓冲器满信号,通知外设取走数据 。 |
| ACK# | 外设响应信号,表示已从数据段口取走数据。会使OBF变成无效的高电平。 |
| INTR | 通知CPU输出下一个数据,ACK上升沿产生(常接到8259A)。 |
| INTE | 中断允许位,INTE = 1和OBF为高电平时,允许产生INTR信号。 |
| 输入 | |
|---|---|
![]() | ![]() |
| 输出 | |
|---|---|
![]() | ![]() |
时序:
应用:
- 主要用于中断控制方式下的输入输出。
- C口除部分位用作选通信号外,其余位可工作在方式0下,作为输入或输出线。特别是A、B均为方式1时仅使用C口的6条线,余下二条线可作为单独的输入输出线,用程序指定其数据传送方向。
工作方式2(双向传输方式)
-
外设通过端口A即可向CPU发送数据,又能从CPU接收数据。
-
工作方式2只适用于端口A,端口B仍按方式0或方式1工作。
-
端口A可工作于双向方式,端口C的PC7~PC3位作为端口A的控制/状态信号端口,PC2~PC0用于B组。
-
端口A的输入/输出均有锁存功能。在方式2工作状态下,端口A既可工作于查询方式,又可工作于中断方式。
-
读数据时,WR的下降沿使得中断信号intr关闭,屏蔽外界中断,对应的是箭头1
-
读数据的上升沿2,将数据送入到OBF中,OBF处于下降沿,表示数据已经保存到输出缓存区,即输出缓存区已经满了。OBF的下降沿使得ACK的成功接收数据,处于下降沿,处于有效位,对应箭头3
-
ack的上升沿,会打开intr的中断,使得中断有效。可以继续接受外部的数据。
-
写数据时,stb低电平有效,送来的数据已经保存在锁存器中,其下降沿使得IBF,输入数据缓冲区产生上升沿,对应的是箭头7
-
stb上升沿,打开中断,使得intr高电平有效,同之cpu调用中断处理程序,中断处理程序发出读指令RD,低电平有效,读出IBF中的数据,使得IBF从高电平变为低电平,数据清空,对应箭头9

时序:

-
地址在读数据以前就一定要稳定,并且前后都要有一定的保险时间,对应的就是CS,A1,A0
-
D0~D7表示的是总线上获取的数据,紧紧跟在RD后,RD是在下降沿写入,在上升输出到总线上
-
主要分清两种情况,一种是有外界事件引起的,一种是由当前的状态变化引起的。
应用:
- 可用于中断控制输入输出方式。
- 当A口工作于方式2时,B口可工作于方式1(此时C口的剩余位都用作B口选通控制线);B口也可工作于方式0(此时C口的剩余位也只能用作方式0下的输入输出线)。
补充(★)
对端口C的数据输出有两种办法:
-
通过端口C的I/O地址:向C端口直接写入字节数据。这一数据被写进C端口的输出锁存器,并从输出引脚输出,但对设置为输入的引脚无效
-
通过控制端口:向C端口写入位控字,使C端口的某个引脚输出1或0,或置位复位内部的中断允许触发器
相关文章:
并行IO接口8255
文章目录 8255A芯片组成外设接口三个端口两组端口关于C口(★) 内部逻辑CPU接口 8255A的控制字(★)位控字(D70)方式选择控制字(D71) 8255A的工作方式工作方式0(基本输入/输…...
Level DB --- SkipList
class SkipList class SkipList 是Level DB中的重要数据结构,存储在memtable中的数据通过SkipList来存储和检索数据,它有优秀的读写性能,且和红黑树相比,更适合多线程的操作。 SkipList SkipList还是一个比较简单的数据结构&a…...
第二十二周机器学习笔记:动手深度学习之——线性代数
第二十周周报 摘要Abstract一、动手深度学习1. 线性代数1.1 标量1.2 向量1.3 矩阵1.4 张量1.4.1 张量算法的基本性质 1.5 降维1.5.1 非降维求和 1.6 点积1.6.1 矩阵-向量积1.6.2 矩阵-矩阵乘法 1.7 范数 总结 摘要 本文深入探讨了深度学习中的数学基础,特别是线性代…...
leetcode 50个简单和中等难度的题
简单难度题目(25个) 两数之和 (Two Sum)有效的括号 (Valid Parentheses)罗马数字转整数 (Roman to Integer)最长公共前缀 (Longest Common Prefix)合并两个有序链表 (Merge Two Sorted Lists)移除链表元素 (Remove Linked List E…...
多模态大模型(5)--LLaVA
人类通过如视觉、语言、听觉等多种渠道与世界互动,每个单独的渠道在表示和传达某些概念时都有其独特的优势,人工智能(AI)的一个核心愿景是开发一个能够有效遵循多模态视觉和语言指令的通用助手,与人类意图一致…...
Vue实训---3-element plus的使用与布局
1.引入ElementPlus ElementPlus官网指南:快速开始 | Element Plus 在我们的项目main.js文件中,加入红框里的内容: import { createApp } from vue import App from ./App.vue // 引入全局样式,是对样式的初始化 import "/a…...
TritonServer中加载模型,并在Gunicorn上启动Web服务调用模型
TritonServer中加载模型,并在Gunicorn上启动Web服务调用模型 一、TritonServer中加载模型1.1 搭建本地仓库1.2 配置文件1.3 服务端代码1.4 启动TritonServer二、Gunicorn上启动Web服务2.1 安装和配置Gunicorn2.2 启动Gunicorn三、调用模型四、性能优化与监控五、总结在深度学习…...
快速删除 node_modules 目录的集中方法
要快速删除 node_modules 目录,可以使用以下几种方法: 方法 1: 使用 rimraf 如果你在 Windows 上或者想要一个跨平台的解决方案,可以使用 rimraf 这个工具,它是 Node.js 版本的 rm -rf。 安装 rimraf: npm install …...
shell编程--if判断与for循环
shell编程与其他编程语言一样都有if判断与循环,今天了解一下if判断语句和for循环语句。 if判断语句讲解 我们写出一个if判断 a 1 b 2if [ "$a" -eq "$b" ]; thenecho "相等" elseecho "不相等" fi 在shell中-eq是表示…...
Makefile基础应用
1 使用场景 在Linux环境下,我们通常需要通过命令行来编译代码。例如,在使用gcc编译C语言代码时,需要使用以下命令。 gcc -o main main.c 使用这种方式编译代码非常吃力,每次调试代码都需要重新在命令行下重新编译,重复…...
计算机网络基础全攻略:探秘网络构建块(1/10)
一、计算机网络基础概念 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路和通信设备连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统…...
SpringMVC-Day1
SpringMVC 1.SpringMVC介绍 springMVC是一种基于Java实现MVC模型的轻量级Web框架 优点: 使用简单,开发便捷(相较于Servelt) 灵活性强 使用SpringMVC技术开发web程序流程 创建web工程(Maven结构) 设置…...
【虚拟机】VMWare的CentOS虚拟机断电或强制关机出现问题
VMware 虚拟机因为笔记本突然断电故障了,开机提示“Entering emergency mode. Exit the shell to continue.”,如下图所示: 解决方法:输入命令: xfs_repair -v -L /dev/dm-0 注:报 no such file or direct…...
探索 RocketMQ:企业级消息中间件的选择与应用
一、关于RocketMQ RocketMQ 是一个高性能、高可靠、可扩展的分布式消息中间件,它是由阿里巴巴开发并贡献给 Apache 软件基金会的一个开源项目。RocketMQ 主要用于处理大规模、高吞吐量、低延迟的消息传递,它是一个轻量级的、功能强大的消息队列系统&…...
vue中v-if和v-for优先级
在Vue中,v-for的优先级高于v-if。这意味着在同一个元素上使用v-if和v-for时,v-for将首先被解析,然后是v-if。 下面是一个代码示例: <template><div><div v-for"item in items" v-if"item.isDispl…...
使用Kotlin写一个将字符串加密成short数组,然后可以解密还原成原始的字符串的功能
文章目录 一、运行效果1.1 单个字符串加解密1.2 多个字符串数组加解密二、源代码2.1 控制流图2.2 实现的源代码一、运行效果 1.1 单个字符串加解密 待加密的单个字符串: 测试字符串转化成short数组-----字节卷动 单个字符串加密后的数据: [19914, -21676, 31702, 23463, 2833…...
windows C#-取消任务列表(上)
如果不想等待异步控制台应用程序完成,可以取消该应用程序。 通过遵循本文的示例,可将取消添加到下载网站内容的应用程序。 可通过将 CancellationTokenSource 实例与每个任务进行关联来取消多个任务。 如果选择 Enter 键,则将取消所有尚未完成…...
Linux---ps命令
Linux ps 命令 | 菜鸟教程 (runoob.com) process status 用于显示进程的状态 USER: 用户名,运行此进程的用户名。PID: 进程ID(Process ID),每个进程的唯一标识号%CPU: 进程当前使用的CPU百分比%MEM: 进程当前使用的…...
解决k8s拉取私有镜像401 Unauthorized 问题
拉取镜像时未指定账户和密码通常是因为需要访问的镜像仓库启用了认证,但 Kubernetes 默认配置中未提供访问凭据。要解决此问题,可以按照以下步骤配置镜像仓库的认证信息: 1. 创建 Kubernetes Secret 为镜像仓库配置访问凭据,使用…...
Ruby 模块(Module)
Ruby 模块(Module) 概述 Ruby 是一种动态、开放源代码的编程语言,以其简洁明了的语法和强大的功能而闻名。在 Ruby 中,模块(Module)是一个重要的概念,它用于封装一组相关的方法和常量。模块提…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...








