微机 —— 可编程并行接口芯片8255A 应用

a79bc531-a6e5-4954-a9fe-734f8277d391
例1:

CPU通过8255A控制8个开关和发光二极管,要求发光二极管的亮灭和开关状态一致,设计电路并编写程序。

答:可以认为,处于方式0输出工作状态的PA、PB、PC端口实际上等同一个锁存器,而处于方式0输入工作状态的PA、PB、PC端口实际上等同一个缓冲器。
8255控制开关、发光二极管电路如图所示:

首先根据电路确定8255A 4个端口的地址。确定端口地址用下述方法进行,为了能够访问8255A,必须使8255A的片选信号CS=0, A9~A4的信号必须如下:

  A9     A8     A7   A6    A5   A4    A3     A2
  1      0      0    1     1     0     0     0    PA端口
                                       0     1    PB端口
                                       1     0    PC端口
                                       1     1    控制端口
 而A3、A2 的组合和各个端口地址的关系也如上所示,由于A1、A0没有参与译码,其值对访问端口没有影响。综合以上讨论可以得出, PA 、PB、 PC和控制端口的地址分别是260H、 264H、 268H 和 26CH。
    A9   A8    A7   A6    A5    A4    A3   A2   A1   A0 
    1     0     0    1     1     0     0    0    0    0
    1     0     0    1     1     0     0    1    0    0
    1     0     0    1     1     0     1    0    0    0 
    1     0     0    1     1     0     1    1    0    0  

在确定工作方式控制字时必须知道, PA端口为方式0输出, PB端口为方式0输入,而PC端口没有参与电路工作,其输入输出方式随意,由此可确定控制字为  1 0 0 0 0 0 1 0(82H)。                
控制电路工作并使其保证开关状态和发光二极管亮灭一致(开关闭合,发光二极管亮,开关断开,发光二极管灭)的程序如下:
                
                MOV  DX, 26CH
                MOV  AL, 82H
                OUT  DX, AL              计数器0送控制字
                MOV  DX, 264H
                IN   AL, DX              将端口的数据输入到AL中
                NOT  AL                   AL 取反运算
                MOV  DX, 260H    
                OUT  DX, AL              将AL的数据输出到DX中

例二:

用一片8255A连接8个7段数码显示管,规定8255A的端口地址范围为340H~34FH, 用74LS138译码器实现8255A的片选电路,并根据电路编写在8个7段数码管上显示数字0~7的程序。

共阴极7段数码管逻辑结构图如下:
在这里插入图片描述
如图所示:当com端接低电平,a~g端接高电平,对应的发光二极管就发亮。
  如果想在7段数码管上显示数字0,需要在com端接低电平,a 、 b 、 c 、 d 、 e 、f端接高电平,g端接低电平。

 七段数码管的字形代码表如下:
 
 一片8255A只需4个端口地址,而题中给出的地址范围由16个地址,这意味着低4位地址中有些地址可以不参加地址译码。设计电路的第一部还需要设计出片选电路。必须用指定地址范围内状态不变的地址信号作为片选电路的输入信号。
   A9   A8    A7   A6   A5    A4    A3   A2   A1   A0
    1    1     0    1    0     0     0    0    0    0      340H
    1    1     0    1    0     0      0    0    0    1       341H
    1    1     0    1    0     0      0    0    1    0       342H
    1    1     0    1    0     0      0    0    1    1       343H
    1    1     0    1    0     0      0    1    0    0       344H
                                                 ...
                                                 ...    
                                                 ...
    1    1     0    1    0     0     1    1    1    1       34FH
 从上述分析中可以看出,指定地址范围内状态不变的地址信号是A9 A8 A7  A6 A5 A4 它们的状态分别是110100,这意味着A9~A4上出现的信号状态为1101008255A的CS必须为低电平。

下面讨论如何用74LS138译码器实现这一功能。

设计片选电路的基本原则是:用A9~A4作为74LS138的输入,用74LS138其中一个输出Yi去连接8255的CS,当且仅当 A9~A4=110100时,Yi才能变为低电平。

下图(用74LS138译码器实现8255的片选电路)中,用A6、A5、A4 分别连接74LS138的 G、 /(G2A ) 、/(G2B ) , 只有当A6 A(5 ) A4 =100时74LS138才能进行译码操作,用A9、A8、A7分别 连接74LS138的C、B、A,而用Y6输出连接8255的CS,这样,只有当A9 A8 A7=110时,Y6输出为低电平。
在这里插入图片描述

用一片8255A连接8个7段数码管。且使8个7段数码管显示8个不同的数字。开始,似乎感到有点困难。实际上,任何时刻只显示一个7段数码管,其余7个7段数码管都没有显示状态,CPU通过8255A逐个显示7段数码管,并在不同的7段数码管上显示不同的数字。在逐个显示完8个数码管后,又开始新一轮的逐个显示过程,当这个循环周期间隔足够短时,由于人的眼睛有滞后效应,使得人们发现每一个数码管都出于显示状态,且显示不同的数字。

从电路中可以得出,8255A 4个端口的地址分别是:
340H(PA端口)、 344H (PB端口)
348H(PC端口)、 34CH (控制口)、

程序的设计思路是先通过PB端口选中某个数码管(使其公共端为低电平),然后再从PA端口输出选中的数码管所对应的显示码,在完成当前数码管显示后,显示下一个数码管,在完成一轮显示后,开始下一轮的显示。
工作方式控制字: 10000000(80H)

data  segment
          org  100h
 buff1  db  3fh, 30h, 5bh, 4fh,66h,6dh,7dh,07h     ;定义07 的显示码
 buff2  db 0feh,0fdh,0fbh,0f7h,0efh,0dfh,0bfh,7fh  ;定义位码
data ends
code  segment
         assume cs:code, ds:data
  start: mov  ax,  data
          mov  ds,  ax            ;初始化ds 
          mov  dx,  34Ch          ;设置8255控制端口地址
          mov  al, 80h            ;使8255的A口、B口、C口为方式0输出       	      
          out  dx, al
  yyy1: mov  si, offset buff1     ;设置显示码指针
         mov  di, offset buff2     ;设置控制码指针
         mov  cx, 8                ;每一轮循环中显示的数码管的数目
  yyy2: mov  dx,  340h            ;先使所有数码管变黑
         mov  al ,  0
         out  dx,  al
         mov  dx , 344h            ;选中一个数码管  
         mov  al, [di]
         out  dx,  al
         mov  dx,  340h            ;输出该数码管对应的显示码  
         mov  al, [si]
         out  dx, al
         inc   si                  ;选择下一个数码管所对应的显示码          
         inc   di                  ;选择下一个数码管
         loop   yyy2               ;显示下一个数码管
         jmp    yyy1               ;开始新的一轮的显示
   code  ends
         end  start

	
  • 10
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柯糖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值