设为首页 加入收藏

TOP

微机原理与系统设计笔记8 | 可编程并行接口芯片8255A&&可编程定时器、计时器芯片8253、8254(一)
2023-07-23 13:28:50 】 浏览:60
Tags:计笔记 程并行 8255A&& 程定时 计时器 8253 8254

  • 打算整理汇编语言与接口微机这方面的学习记录。本部分介绍可编程并行接口芯片8255A&&可编程定时器、计时器芯片8253、8254,增加了一些具体系统的设计案例。

  • 参考资料

    • 西电《微机原理与系统设计》周佳社
    • 西交《微机原理与接口技术》
    • 课本《汇编语言与接口技术》王让定
    • 小甲鱼《汇编语言》

Part1 8255A

1. 有关并行接口

第一章就已经提过,外设和CPU之间不能直接进行数据交换,要增加接口电路,并行接口就是数据在多根线上同时传送。并行接口的特点:

  • 具有端口寄存器
  • 与CPU和外设进行联络的控制端
  • 中断控制端
  • 可编程器件提供多种工作方式供编程选择。
1

常用的并行接口芯片是Intel 8255A。串行接口芯片是8250和8251。

2. 8255A的结构及其功能

2
  • PA0~PA7:端口A,连接外设

  • PC0~PC7:端口C,连接外设

  • PB0~PB7:端口B,连接外设

    这几个端口输入还是输出是可编程的。

  • D0~D7:数据总线(双向),连接CPU

  • VCC、GND、CSfei、RDfei、WRfei耳熟能详了

  • 工作方式控制寄存器,可以OUT数据线写,控制芯片工作方式

  • A0、A1:端口地址线,连接CPU

    有四个端口,A B C端口+ 工作方式控制寄存器

    CSfei A0 A1 端口
    0 0 0 PA
    0 0 1 PB
    0 1 0 PC
    0 1 1 内部控制寄存器
    1 / / /

    因此也可以看出8086系统中,8255A的A1接地址线A2,A0接A1,高12位参加译码。

    如果地址是偶地址,地址线A0也参加译码,D0D7连接低八位数据线。奇地址则BHEfei参加译码,D0D7连接高8位数据线。

  • RESET,复位端,高电平有效

    设备复位应当早于CPU复位。

3. 8255A工作方式及其控制字

3.1 工作方式

  • 工作方式0:无联络信号的输入/输出方式,等效于无条件输入输出方式,PA PB PC三个端口均可工作在工作方式0。

  • 工作方式1:有联络信号的输入输出方式,相当于查询法、中断法。只有PA和PB可工作在工作方式1。PC口来作联络信号线(A组使用高四位的PC,B组使用低四位PC)

  • 工作方式2:有联络信号的双向方式,准双向(半双工),只有PA口可以工作在工作方式2。PB PC用于联络。

    • 注意,工作方式1是单向的。
    • PC可以进行位管理,也就是一位一位的赋值,而PB PA没有这个功能

3.2 控制字

就是操作8255A内部的工作方式寄存器,类似于8259A的操作:

  • 首先CSfei=0,A0 A1=1 1,选中该寄存器端口

  • D7=1,说明要进行工作方式的选择,也就是在写控制字

    如果D7=0,8255A认为正在进行PC端口的位管理。此时D6D4无效,D3D1编码PC的每一位。D0位表示将编码PC的位赋予D0的值。

  • D6~D5:控制A组工作方式

    编码 方式
    0 0 方式0
    0 1 方式1
    1 x 方式2
  • D4:设置A组的输入输出方向,0为输出,1为输入。

  • D3:控制A组的PC7~PC4的方向,0为输出,1为输入。

  • D2:控制B组的工作方式(只有两种工作方式),0 方式0,1 方式1

  • D1:B组中PB口的方向,0 输出,1 输出

  • D0:控制B组的PC3~PC0的方向,0为输出,1为输入。


下面讲了P312页的10.3:

  • A输出,B输入,工作在方式1。实现端口C低四位输入的值从高4位输出。

    可知控制字 D7~D0 应为:1000_0011

  • ;选中控制寄存器,写入控制字
    MOV DX, 303H 
    MOV AL, 83H
    OUT DX, AL
    ; 选中PC端口
    MOV DX, 302H
    IN AL, DX
    MOV CL,4
    SHL AL,CL ; 左移4次,低四位移到高四位了
    OUT DX, AL; 输出PC端口值
    

3.3 工作方式1

这部分好复杂啊,但是不是很难懂。先听一遍再慢慢梳理。

再详细讲讲工作方式1。此时三个端口的信号线分成了A B两组。PC7PC4用作A组的联络信号,PC3PC0用作B组联络信号。

A. 输入

输入:来看下面的图,先以PB端口为例,(其实PA PB两者除了控制字其他工作方式都一样)

3
  • 结合下面图片中的时序来看。

  • 数据线PB0~PB7上有数据时,还要CPU知道,而外设通过STBfei将有效数据信号(选通信号,一个负脉冲,接在PC2信号线上)到来后,此时8255A将数据拿进来存放到输入缓冲器。

  • 如果输入缓冲器满了,则应该告知设备不能再发送数据了,所以此时IBF信号(缓冲器满信号,通过PC1输出)置于高电平,告知设备。

    注意A组和B组各有一个输入缓冲器。

    4
  • CPU一方可以通过两种方式得知输入缓冲器满了。

    • 查询法:可以通过RD端口读IBF(其实是读PC端口状态,看PC1),如果IBF=1,则可以实施IN指令读走数据。IBF变低,此时8255A就可以继续接收外设的数据。

    • 中断法:B组通过PC0-INTRB线向CPU发送中断信号

      需要当8255A处于中断允许状态:见上图结构的INTEB=1则中断允许。RESET时INTEB清0。

      当IBFB和INTEB同时为1,则通过PC0发送中断请求(1,高电平了)。CPU响应后进入中断服务子程序读出数据,再IRET返回。

      下面看看INTE如何编程控制

      MOV DX,303H
      MOV AL,1XXXX110B;可以当做86H,也就是无效位都当0
      OUT DX,AL
      
      ;对PC2位置1,达到INTEB=1目的
      MOV AL,0xxx0101B
      OUT DX,AL;借助<位管理>达到目的
      
      ...;一个小循环,等待中断
      ; 中断产生,CPU响应进入服务程序
      ; 读出数据
      ; IRET返回
      

PA输入与上面类似。只不过用到的硬件是另一组。值得注意的是,A组的中断法那一步中,输出的INTR连接的是PC3(理论上分给了B组)。这是因为A组分到的四根C线,两根用于方式1的输入信号通讯(STB和IBF信号),两根用于方式1的输出信号通讯,已经用光了。这也是PB端口不能工作在方式2的原因,线不够用了。

A组工作在方式1富余的PC6和PC7,可以作为两根单独的IO线来使用。

还有一点,A组的中断屏蔽触发器INTEA设置的位管理还有一点不同:可见输入输出的位管理的相应位不同。

5

B. 输出

输出:先看图

6

  • 当CPU将数据输出到PA端口,输出缓冲器满,8255A通过OBFfei端口低电平通知输出设备缓冲器,同时OBFfei作为输出设备的选通信号(STBfei)。

  • 设备收到选通信号,回答ACKfei信号(一个负脉冲),8255A收到后,OBFfei就又变高了。

    PC7:OBFfei

    PC6:ACKfei

  • 如何得知输出缓冲器的情况?应当通过测试OBFfei信号是高电平来知道它是空的。这是查询法。

  • 中断法则8255A通过PC3(A组)输出INTRA高电平信号。这个信号的产生过程与前面类似:

    • 编程设置INTEA为1,允许中断。
    • 当OBFfei为1(空),则向中断控制器 8259A/CPU 发送中断
  • 与输入对称。空闲的PC5和PC4充当IO信号线。

3.4 工作方式二

只有PA端口可以工作在工作方式2:双向方式。这就是方式1中A组输入和输出的综合。

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇LWIP学习记录---ARP协议(2)ARP.. 下一篇STM32F10x SPL V3.6.2 集成 FreeR..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目