并行通信接口8255A

AB口为两个数据端口,C口可以作为数据端口也可以作为状态端口

8255A是一个40引脚的双列直插式芯片

引脚如下

D0-D7:双向数据信号线。

RD:读信号线。

WR:写信号线。

CS:片选信号线。

A0、A1:口地址选择信号线。

00--A端口;01--B端口;10--C端口;11--控制口。

RESET:复位输入信号,复位时三个端口自动置为输入口

PA0-PA7:A口的8条输入输出信号线。

PB0-PB7:B口的8条输入输出信号线。

PC0-PC7:C口的8条输入输出信号线。

数据端口:8255A具有3个8位的输入输出端口,即PA0-PA7,PB0-PB7,PC0-PC7,这三个端口分别受到A,B控制,端口C被分为两部分。一般情况下,C用来配合 A和B

端口A具有一个8位数据输入锁存器和一个数据输出锁存器/缓冲器;

端口B具有一个8位数据输入缓冲器和一个数据输出锁存器/缓冲器;

端口C具有一个8位数据输入缓冲器和一个数据输出锁存器/缓冲器,一般作为控制或状态信息端口。

数据总线缓冲器:是一个双向的、三态的8位数据寄存器,他与系统总线相连,构成CPU和8255A之间的数据通道

A组控制电路和B组控制电路

控制端口A与端口C的高4位(PC7-PC4)

控制端口B与端口C的低4位(PC3-PC0)

读写控制逻辑:接受CPU的控制信号,并将其组合成A和B组的控制信号

RESET 复位信号

CS# 片选信号,通常由高位地址译码产生

A1,A0选择端口(端口选择信号)00为选择A,01选择B,10选择C,11只能从总线读取数据,D7为1的时候写入方式控制字,D7为0的时候对C进行复位

RD# 读信号,低电平有效,当为低电平的时候,CPU可以从8255中读取数据

WD# 写信号,低电平有效,当为低电平的时候,CPU可以往8255A中写数据/控制字

下面介绍8255A的工作模式

方式0

方式0式基本的输入输出方式,不需要应答式联络信号

任何端口都可以做输入输出,特别是C端口,高四位和低四位可以分别设置

一般用于无条件传输/程序查询式传输

8255A中方式0对输出进行锁存(和总线相连肯定要锁存的),输入不锁存

8255A中没有时钟输入信号,所有的时序都是由引脚控制信号定时的

当CPU执行IN指令的时候,产生RD#信号,控制8255A从端口读取外设的输入数据,然后从D0-D7中输入到CPU

当CPU执行OUT指令的时候,产生WD#信号,完成CPU从端口向外传输数据

方式1

方式1是单方向的输入/输出工作模式

将3个端口分成两组,端口A和B可以两个数据口,分别工作在方式1,而端口C用来配合端口A和B在方式1下进行工作,作为选通信号

注:

A口工作于方式1输入,固定用PC5-PC3作联络信号线;

A口工作在方式1输出的时候,PC7,PC6和PC3作为选通信号

B口工作于方式1输入输出的时候,固定用PC2-PC0作联络信号线。

如果AB都用方式1进行传输,C口剩下的两位可以工作在方式0下

在8255方式1下,输入输出都可以锁存

方式1进行输入的时候

所用到的控制信号的定义如下:

① STB为低电平有效的输入选通信号,由外设提供的输入信号,当它有效时,把输入装置来的数据送入输入锁存器。

② IBF为高电平有效的输入缓冲器满信号,通知外设送来的数据已被接收,由STB信号的前沿产生。当CPU用输入指令读走数据后,此信号被清除。

③ INTR为中断请求信号,高电平有效。CPU响应中断请求后在服务程序中读走数据时,由RD信号将其清除。

④ INTE为中断允许状态,可事先用位控方式写入。

实现过程如下

  1. 当外设数据准备好的时候,将选通信号STB#设置为有效,来通知8255
  2. 8255利用STB#信号,将数据锁存到数据锁存器中,置缓冲区满,IBF信号有效,缟素外设数据已经读入,防止再次读入数据
  3. 当STB#和IBF都为高,触发中断,向CPU发中断请求INTR(CPU也可以用查询方式)
  4. CPU执行IN指令,发出RD#信号,信号持续一段时间后抹除INTR
  5. RD#信号结束后,清除IBF信号(表示数据已经送到CPU中,输入锁存器空了),接着从外设读取数据

方式1下的输出

当端口A和B都处于方式1工作的时候,PC0-PC2,PC3,PC6,PC7控制A

控制的引脚如图

关于控制信号的含义

控制过程如下

当CPU相应了8255的中断后,发出WD#信号,输出数据到锁存器中。输送完了之后,WD有效的时候,打开OBF#为0,缓冲器满,告诉CPU不要写数据到8255A了,(OBF#也是外设的选通信号)同时INTR为0(已经响应了中断)。当外设读完了数据,WD为1,发送响应信号ACK#,ACK#的上升沿也把OBF置为1,缓冲器空,INTR为1,发送下一个中断,可以读下一个数据了

方式2 双向传输方式(只适用于A端口)

当A端口工作方式2的时候(需要PC3-PC7),B口还可以工作在方式1(需要PC0-PC2)和方式0(PC0-PC2可以在方式0啦)

方法和方式1的输入输出是一样的

如果A口外设输入数据到8255中的时候,STB#有效,外设数据输入到A的PA0-PA7,输完数据后,STB为1,同时IBF为1,触发中断,INTR为1,CPU响应中断,发出IN指令,RD为0,当RD有效的时候,INTR为0(表示已经响应了中断),数据传输到数据总线中,读完后,INFA为0,继续开始读取数据

如果8255发送了一个中断,CPU响应了中断,发出WR#信号,数据从总线中到锁存器中,在WR有效的时候清除INTR(响应了中断)。同时让OBFA为0(PC7),告诉外设要读数据了,外设读完后发出响应信号ACK#,ACK上升沿恢复为1的时候,触发OBFA为1,又触发了中断

注意,由于A口的输入锁存器和输出锁存器是互相独立的,故当CPU向A口输出数据时,外部设备也可同时向A口输入数据。反之亦然。

8255A的初始化编程

要使用8255A,必须要初始化编程

有两种方式(都是在同一个端口)

第一种,方式选择控制字

从高将其

第一位,选择控制字的方式,0为位操作(操作PC的),1为控制方式

如果我们选1,就是控制字方式

2,3位是选择端口A的工作方式,00为方式0,01为方式1,10为方式2

接着4是决定这个A口是输入还是输出,输入为1,输出为0

5位是决定这个PC4-PC7输出(其实很好记,因为高位是控制A的),0位输出,1位输入

接着第6位是决定B的工作方式(为啥A有两位,B只有一位应该是B只能选择方式0和方式1吧)

第七位决定B的输入还是输出,0位输出,1位输入

第八位是决定C的低四位输入还是输出,输入位1,输出位0

注意:位控字是通过向8255A的控制寄存器写入的,不是直接对C口写入

第二种写控制字的方式是对C进行操作

第一位肯定要为0(为1就是上面了)

后面三位直接舍弃,不要操作(最好位000,方便计算,你不想算0101算到吐吧)

接着三位是选择C口的位数,这个就是2进制了,比如说010就是操作PC2,110就是操作PC6

最后1位用来复位,0位复位,1位置位

说句实话,这么看8255的难度也还好,但是8255真正难的地方是这玩意是一个扩展芯片,很适合和其他芯片一起来(比如说AD,DA芯片之类的,写作业的时候真的恶心)出大题。再加上汇编语言写个if语句都很麻烦,这玩意的出现简直是烦人,后面我也有自己总结这方面的大题的题目出来

并行通信芯片8255A学习总结的更多相关文章

  1. 基于51单片机IIC通信的PCF8591学习笔记

    引言 PCF8591 是单电源,低功耗8 位CMOS 数据采集器件,具有4 个模拟输入.一个输出和一个串行I2C 总线接口.3 个地址引脚A0.A1 和A2 用于编程硬件地址,允许将最多8 个器件连接 ...

  2. 基于51单片机IIC通信的AT24C02学习笔记

    引言 最近在学习几种串行通信协议,感觉收获很多,这篇文章是学习IIC总线协议的第一篇文章,以后还会再写一篇关于PCF8591 IIC通信的ADDA转换芯片的文章. 关于IIC总线 IIC 即Inter ...

  3. 线程之间的通信socketpair【学习笔记】【原创】

    平台信息:内核:linux3.1.0系统:android5.0平台:tiny4412 作者:庄泽彬(欢迎转载,请注明作者) 说明: 韦老师的安卓视频学习笔记 一.在一个进程中多个线程如何进行通信,主要 ...

  4. 跨平台通信中间件thrift学习【Java版本】(转)

    转自:http://neoremind.com/2012/03/%E8%B7%A8%E5%B9%B3%E5%8F%B0%E9%80%9A%E4%BF%A1%E4%B8%AD%E9%97%B4%E4%B ...

  5. Socket通信之Java学习(一)

    最近从一篇博客中看到了Socket的介绍,是阿蜜果姐姐的博文:http://www.blogjava.net/amigoxie/archive/2007/02/11/99331.html,学习了下. ...

  6. JZ2440开发板:修改ARM芯片时钟(学习笔记)

    想要修改ARM芯片的时钟,需要去查询芯片手册和原理图,获取相关的信息(见下方图片) 首先来看时钟的结构图 根据结构图可以看出,时钟源有两种选择:1. XTIpll和XTOpll所连接的晶振 2. EX ...

  7. Android组件间通信库EventBus学习

    项目地址:   https://github.com/greenrobot/EventBus EventBus主要特点 1. 事件订阅函数不是基于注解(Annotation)的,而是基于命名约定的,在 ...

  8. Aidl跨进程通信机制-android学习之旅(87)

    Aidl简介 AIDL (Android Interface Definition Language) 是一种IDL 语言,用于生成可以在Android设备上两个进程之间进行进程间通信的代码. 如果在 ...

  9. arduino通信问题的学习与解决

    我想实现的是,我用电脑在串口监视器上输入一个字符串,arduino能识别这个字符串中的每一个字符并在相应的串口上给出相应的高低电平以驱动舵机,比如输入L1,RS,功能是左手腕舵机逆时针旋转90°,然后 ...

随机推荐

  1. Luogu P2668 斗地主(NOIP2015)

    还记得那道我只用特判得了30分的"斗地主"吗? 我今天脑抽打算把它改A掉.为什么不用这大好时光去干些更有意义的事 于是我就挖了这个坑. 题解: 题目链接:P2668 斗地主 本题就 ...

  2. nginx篇高级之优化整理

    优化思路: 一.修改连接数和工作线程让其支持更多的并发量. worker_processes 2;                    //与CPU核心数量一致 worker_connections ...

  3. 关于数论分块里r=sum/(sum/l)的证明!

    今天的模拟赛里T2要使用到数论分块,里面有一个重要的坎就是关于r=sum/(sum/l)的证明,网上关于这道题的题解里都没有关于这个的证明,那么我就来填补一下: 在以下的文章里,我都会使用lo(x)表 ...

  4. NFS共享目录

    NFS(Network Files System)即网络文件系统 NFS文件系统协议允许网络中的主机通过TCP/IP协议进行资源共享,NFS客户端可以像使用本地资源一样读写远端NFS服务端的资料,需要 ...

  5. php sublime常用插件

    php sublime常用插件 1 Sublime Text的默认设置是不开启显示编码的,如果想开启,可通过菜单Perference → Settings – User,在打开的配置文件里 ,在大括号 ...

  6. Docker学习-Kubernetes - 集群部署

    Docker学习 Docker学习-VMware Workstation 本地多台虚拟机互通,主机网络互通搭建 Docker学习-Docker搭建Consul集群 Docker学习-简单的私有Dock ...

  7. kubernetes实战(二十八):Kubernetes一键式资源管理平台Ratel安装及使用

    1. Ratel是什么? Ratel是一个Kubernetes资源平台,基于管理Kubernetes的资源开发,可以管理Kubernetes的Deployment.DaemonSet.Stateful ...

  8. Hadoop压缩的图文教程

    近期由于Hadoop集群机器硬盘资源紧张,有需求让把 Hadoop 集群上的历史数据进行下压缩,开始从网上查找的都是关于各种压缩机制的对比,很少有关于怎么压缩的教程(我没找到..),再此特记录下本次压 ...

  9. Thrift总结(四)Thrift实现双向通信

    前面介绍过 Thrift 安装和使用,介绍了Thrift服务的发布和客户端调用,可以查看我之前的文章:https://www.cnblogs.com/zhangweizhong/category/10 ...

  10. P0-Logisim简单部件与有限状态机

    #自学了6week,pre都挂了,做了做P0课下测试,觉得自己对有限状态机概念的的理解,特别是牵扯到时序还是很模糊:状态的抽象也不够熟练:logisim和Verilog的实现也存在问题.网上针对性的l ...