第 8章
并行通信和并行接口
8255A
【 本章重点 】 本章重点掌握计算机系
统并行通信的概念;并行接口
Intel8255A的结构功能、三种工作方
式和应用。
【 本章难点 】 难点是并行接口
Intel8255A的工作方式选择及特点,
8255A与 8086系统的连接应用。
8.1.1 并行通信
所谓通信就是计算机与外部设备或者计算机之间的信息交
换, 数据传输, 在计算机中, 通信是通过输入输出 ( I/O) 接
口电路来实现的与外部设备或者其他的计算机数据传输及信息
交换的 。 计算机的两种基本通信方式是并行通信和串行通信 。
并行通信是指将构成一组数据的各位同时进行传送的一种
通信方式, 并行通信强调的是被传送的各位同时输入或输出,
例如一组 8位数据或 16位数据的同时传入或传出 。
并行通信的优点是传输速度快, 信息率高, 缺点是电缆耗
损高 。 由于同时传送所需的每一位二进制位都需要一根通信电
缆, 在进行长距离传输时, 电缆的损耗会成为突出的问题,而
且传输的可靠性随着距离的增加而下降, 因此并行通信适用于
数据传输率较高, 传输距离较短的场合 。
8.1 并行通信与并行接口 8255A
8.1.2 并行 I/O接口
实现并行通信的接口称为并行接口 。 一个并行接口可以设计成负
责输入信息的输入接口, 也可以设计成负责输出信息的输出接口, 如果
设计成同时具有输入 /输出功能的接口就是所谓的双向通信接口 。 在计
算机系统中连接打印机的接口, 显示器接口就是输出接口;连接磁盘驱
动器的接口是双向接口 。
并行接口可以分为不可编程的硬件接口和可编程接口。不可编程
的硬件接口是接口的工作方式及功能是由硬件连接来设定,不能用软件
编程的方法加以改变的,采用这种方式完成的硬件电路的连接设计,接
口的工作方式就被固定下来,例如 8位双向三态缓冲驱动器 74LS245,8
位三态数据锁存器 74LS373等。所以多用于组成功能比较简单的接口电
路,如前面所讲述开关量信号的读取,LED发光管的控制等。可编程接
口电路一般由可编程通用接口芯片组成,如有 Zilog公司的 Z80PIO,
Intel的 8255A等。这些芯片除了具有硬件连接接口的性能外,最主要的
就是具有可选择性。如选择端口的哪一位或哪几位作为输入,哪一位或
哪几位作为输出;选择端口与 CPU之间采用哪种方式传送数据等,都可
由编程人员通过编程来进行设定。因而可编程接口具有广泛的适应性和
很高的灵活性,在微机系统中得到广泛的应用。
8.2 并行 I/O接
口芯片 8255A
8.2.1 8255A的外部
引脚及内部结构
1,8255A的外部引脚
8255A的外部引脚布局如
图 8-1所示。它有 40根引脚,
可分为与系统总线(如 8086)
连接的引脚和与外部设备连接
的引脚。
图 8-1 8255A的外部引脚
D7~ D0为双向数据信号线, 用于 8255A与系统数据线相连, 传送
CPU与 8255A之间的数据, 控制信息, 状态信息 。
( 输入 ), 8255A读信号, 低电平有效 。 当有效时, CPU从 8255A
的指定端口读取数据或状态信息 。 通常接系统总线的信号 。
( 输入 ), 8255A写信号, 低电平有效 。 当有效时, CPU向 8255A
指定端口写入控制字或数据 。 通常接系统总线的信号 。
( 输入 ),片选信号, 当它为低电平 ( 有效 ) 时, 才能选中该
8255A芯片, 使 8255A正常工作 。
A1,A0( 输入 ) 为片内地址选择信号 。 当有效选中 8255A时, 由
A1A0的编码来决定是选中 A口, B口, C口, 还是选中控制字寄存器, 如
表 8-1所示
CS
A1 A0 选中对象
0 0 0 A端口
0 1 0 B端口
1 0 0 C端口
1 1 0 控制字寄存器
╳ ╳ 1 未选中
通常 A1,A0分别接系统的 A1,A0,它们与一起来决定 8255
的接口地址。
RESET( 输入 ),复位信号, 高电平有效 。 当 RESET信号到
来时, 8255A所有内部寄存器均被清零 。 复位后, 8255的 A口,
B口, C口均被定义为输入状态 。
PA7~ PA0( 双向 ), 8255A A口的输入输出信号线, 用于
8255A与外设进行数据传送 。 这 8条引线是输入, 输出还是双向
( 输入, 输出 ) 方式由软件编程决定 。
PB7~ PB0( 双向 ), 8255A B口的输入输出信号线, 用于
8255A与外设进行数据传送 。 这 8条引线是输入还是输出方式可
由软件编程决定 。
PC7~ PC0 (双向 ),8255A C口的输入输出信号,可用于
8255A与外设进行数据的输入或输出线,也可用作控制信号的
输出或状态信号的输入线。
2,8255A的内部结构
8255A的内部结构框图如图 8-2所示, 它由四个部分组成:
( 1) 输入输出接口
从图 8-2中可以看到, 左边的信号与系统总线连接, 而右边是与外设相连接的 3个
口, 即 PA,PB,PC,3个口均为 8位, 将这三个口分为两组,A组 ( A口的 8位和 C口的高 4
位 ), B组 ( B口的 8位和 C口的低 4位 ), 每个端口都可由程序设定为各种不同的工作方
式 。
端口 A( PA口 ) 有一个 8位数据输入锁存器和一个 8位数据输出锁存 /缓冲器, 所以,
用端口 A作为输入或输出时, 数据均受到锁存;
端口 B( PB口 ) 有一个 8位数据输入缓冲器和一个 8位数据输出锁存 /缓冲器;
端口 C (PC口 ) 有一个 8位数据输入缓冲器和一个 8位数据输出锁存 /缓冲器 。
( 2) 数据总线缓冲器
数据总线缓冲器是 8位双向三态缓冲器, 8255A与系统总线之间的命令, 数据,
控制字等信息都是通过它来完成的, 它是系统总线与 8255A之间交换信息的必经之路 。
( 3) 读 /写控制逻辑
用来管理数据信息, 控制字和状态字的传送, 地址线 A1,A0,片选信号 ( ) 和读,
写控制信号 (, ), 完成内部端口的选择和读写操作 。
( 4) A组和 B组控制电路
这两组控制电路根据 CPU发出的方式控制字来控制 8255A的工作方式,每个控制组
都接受来自读 /写控制逻辑的命令,接受来自内部数据线的控制字,然后向各有关端口
发出相应的控制命令。
图 8-2 8255A的内部结构
8.2.2 8255A的工作方式
8255A有三种基本的工作方式, 这些工作方式可用软件编程来指定 。
方式 0---基本输入 /输出方式
方式 1---选通输入 /输出方式
方式 2---双向输入 /输出方式
1,方式 0,基本输入 /输出工作方式
在方式 0下, 8255A与外设相连的三个端口均被定义为输入 /输出传送方式, 包括 A
口的 8条线, C口的高 4位对应的 4条线, B口的 8条线, C口的 8条线 。 因为上述 4部分的输
入或输出是可以独立定义的, 故它们输入输出有 16种不同的组合 。
8255A在方式 0工作时, CPU可以采用无条件传输方式与 8255A交换数据, 如果把 C
口的两个部分用作控制和状态口, 与外设的控制和状态端相连, CPU也可以通过对 C口
的读写实现 A口与 B口的查询工作方式 。 方式 0仅有输出数据锁存功能, 输入数据是不锁
存的 。 且在方式 0下, C口还有按位置位和复位的功能 。
概括地说,方式 0的基本特点如下:
( 1) 任何一个端口可以作为输入口, 也可以作为输出口, 各端口之间没有规定
必然的关系 。
( 2) 各端口的输入或输出, 可以有 16种不同的组合, 所以可以使用在多种不同
的场合 。
方式 0的使用的场合:
方式 0的使用场合有两种,一种是同步传送,另一种视察寻访时传送。
2.方式 1,选通的输入 /输出方式
在方式 1下, A口和 B口仍作为数据的输入和输出口而同时要利用 C口的某些位作为
控制和状态信号 。
A组将 A口作为数据口, 可设定为输入或输出, 并指定 C口某些位为控制和状态信
号 。 B组将 B口作为数据口, 也设定为输入或输出, 并以 C口某些位作为控制和状态信号 。
工作在方式 1时, 数据的输入 /输出均有锁存功能, 这种方式常用于中断和程序查询传
送 。
① 方式 1的输入操作
当 A口和 B口设定为输入时,各指定了 C口的 3根线作为 8255A与外设及 CPU之间的控
制信号,如图 8-3所示。
图 8-3 方式 1输入时引脚定义和端口结构
B 口
8 位
S T B B
I B F B
I N T R B
D
7
~ D
0
R D
I N T E
B
P C
0
P C
2
P C
1
P B
7
~ P B
0
8 位
S T B A
I B F A
I N T R A
I /O
D
7
~ D
0
R D
A 口
I N T E
A
P C
3
P C
4
P C
5
P A
7
~ P A
0
P C
7
,P C
6
( 一 ) 各控制信号的定义如下:
·( Strobe),输入选通信号, 低电平有效 。 它有效时,
表示外设的数据已准备好, 同时将外设送来的数据锁存到
8255A端口的输入数据缓冲器中,等待 CPU通过 INTR信号输入 。
·IBF(Input Buffer Full):输入缓冲器满信号, 高电平
有效 。 当它有效时, 说明输入缓冲器中锁存有信息, 且尚未
被 CPU取走, 通知外设不能再传送新数据;只有当它为低电平
时, 即表示 CPU已读取了数据, 输入缓冲器变空, 此时才允许
外设传送新的数据 。
·INTR:中断请求信号, 高电平有效 。 它有效时, 请求
CPU从 8255A读取外设已送入的数据 。
·INTE:中断允许信号, 它既不是输入也不是输出信号,
而是一个内部控制位 。 通过对 PC4( 端口 A) 或者 PC2(端口 B)
置位 /复位来开放 /禁止端口输入中断请求 。
·PC7,PC6:通用输入输出信号 。
图 8-4 方式 1输出时引脚定义和端口结构图,
( 二 ) 方式 1的输入工作过程
当外设准备好数据, 在送出数据的同时, 送一个选通信号, 使 8255A的 IBF
为高电平, 告诉外设当前输入缓冲器已满, 暂时不要送入数据 。 再由后沿将 INTE
置, 1”,它使输出的 INTR有效, 向 CPU发出中断请求信号, 待 CPU响应这一中断请
求时, 可以在中断服务程序中安排 IN指令读取数据, 然后将 IBF置, 0”,外设才可
以继续输入后面的数据 。
② 方式 1的输出
当 A口与 B口设定为方式 1输出时, 也各指定了 C口的 3根线为信号线, 其引脚
定义和端口结构如图 8-4所示 。
( 一 ) 各控制信号的定义如下:
·( Output Buffer Full),输出缓冲器满信号, 低电平有效 。
它有效时, 表示 CPU已将数据写到 8255A的输出端口, 通知外设来取数 。
·:外设送来的响应信号, 低电平有效 。 当它为低电平时, 表示
外设已经接收到了 CPU送来的数据 。 它是对的回答信号 。
·INTR:中断请求信号输出, 高电平有效 。 当它有效时, 请求 CPU
向 8255A端口写入数据 。
·INTE:中断允许控制位, 它既不是输入也不是输出信号, 而是
一个内部控制位 。 通过对 PC6( 端口 A) 或者 PC2(端口 B)置位 /复位来开
放 /禁止端口输入中断请求 。
·PC5,PC4:通用输入输出信号 。
( 二 ) 方式 1的输出工作过程
当外设接受了由 CPU送给 8255A的数据后, 对 8255A发送一个响应信号,”,
同时被复位为高电平, 并将相应端口的 INTE置成高电平, 于是 INTR信
号向 CPU发出中断请求, 请求 CPU再输出后面的数据 。 可以在中断服务
程序中安排 OUT指令继续输出后续字节 。
3.方式 2:双向选通输入 /输出方式
在方式 2下, 即能发送数据, 又能接收数据, 通过 8位数据线与外设进行双向
通信, 只限于端口 A使用, 它用 A口的 8位数据线, C口的 5根线 ( PC3— PC7) 进行信
息传送 。 这种方式提供了一组与外设通信时既能发送又能接收的 8位双向输入 /输出
数据端口 。 此时 A口就像一个数据传送站, CPU和外设可同时向 A口发送或读取数据 。
当 A口工作在方式 2时, B口仍可以工作在方式 0或方式 1。
在 A口方式 2的情况下, 各控制信号定义如下:
· INTR:中断请求信号, 高电平有效 。 它有效时, 输入输出都用这个信号向 CPU
申请中断 。
·,输入选通信号, 低电平有效 。 它有效时, 外设送来的数据锁存到
8255A端口的输入数据缓冲器中 。
·,输出缓冲器满信号, 低电平有效 。 它有效时, 表示 CPU已将数据
写到 8255A的输出端口, 通知外设来取数 。
·,外设送来的响应信号, 低电平有效 。 它有效时, 启动口 A的三态
输出缓冲器送出数据, 否则, 输出缓冲器处于高阻态 。
·INTE 1:与有关的中断允许信号, 由 PC6置 /复位 。
·IBF,输入缓冲器满信号, 高电平有效 。 当它有效时, 说明输入缓冲器中锁
存有信息 。
·INTE 2:与 IBF有关的中断允许信号, 由 PC4置 /复位 。
STB
OBF
ACK
在方式 2下,C口
实际上就是 A口在方式
1输入和输出时两组信
号线的组合。因此,
各个引脚的定义也与
方式 1的相同,只不过
中断请求信号 INTR既
可在输入时向 CPU请求
中断,也可在输出时
向 CPU请求中断。其引
脚定义和端口结构如
图 8-5所示。
图 8-5 方式 2的引脚定义和端口结构
A口方式 2的工作过程简要叙述如下 。
工作在方式 2的 A口, 可以认为是前面方式 1的输入和输出相结合而分时工作
的 。 其工作过程和方式 1的输入输出过程一样 。 值得注意的是, 在这种工作
方式下, 8255A与外设之间是通过 A口的 8条线 PA7~ PA0交换数据的 。 在 PA7~
PA0上, 可能出现 8255A口输出数据到外设, 也可能出现外设通过 PA7~ PA0的
数据送给 8255A。 这就要防止 PA7~ PA0上的数据线竞争问题 。
概括地说, 方式 2的基本特点如下:
( 1) 方式 2只适用于端口 A。
( 2) 端口 A工作与方式 2 时端口 C用 5个数位自动配合端口 A提供控制信号和
状态信号 。
方式 2的使用场合:
方式 2是一种双向工作方式,如果一个并行外部设备既可以作为输入设备,
又可以作为输出设备,并且输入输出动作不会同时进行,那么,将这个外
设和 8255A的端口 A相连,并使它工作于方式 2,就会非常合适。比如,磁盘
驱动器就是这样一个外设,主机即可以往磁盘输出数据,也可以从磁盘输
入数据,但数据输出过程和数据输入过程总是不重合的,所以,可以将磁
盘驱动器的数据线与 8255A的 PA7~ PA0相连,再使 PC7~ PC3和磁盘驱动器的
控制线和状态线相连即可。
8.2.3 8255A的控制字
8255A是可编程的并行接口, 通过前面的叙述可知, 8255A有很强的功能,
可以工作在不同的工作方式下 。 可以利用软件编程来指定 8255A的工作方式
。 只要将不同的控制字装入芯片中的控制寄存器, 即可确定 8255A的工作方
式 。 8255A共有两个控制字:方式选择控制字和 C口按位置位 /复位控制字 。
这两个控制字共用一个端口地址, 用特征位 D7来区分 。 若控制字的 D7 =1,
则为方式选择控制字;若控制字 D7 =0,则是 C口按位置位 /复位控制字 。 控
制字必须写入控制寄存器 。
1,控制字
( 1) 方式选择控制字 (D7 =1)
方式选择控制字的格式如图 8-6所示 。
图 8-6 8255A的方式选择控制字
( 2) C口按位置位 /复位控制字 (D7 =0)
C口按位置位 /复位控制字的格式如图 8-7所示。
图 8-7 8255A C口按位置位 /复位控制字
【 例 8-1】 编写 8255A工作在方式 0,方式 1,方式 2等不同形式的初始化程
序 。
假设 8255A端口地址为 0500H~ 0503H,试编写 8255A工作在以下方
式:
( 1) 将 A组和 B组置成方式 0,端口 A和 C作为输入口, 端口 B作为
输出口;
( 2) 将 A组置成方式 2,B组置成方式 1,端口 B作为输出口;
( 3) 将 A组置成方式 1,且端口 A作为输入口, PC6和 PC7作为输出,
B组置成方式 1,且端口 B作为输入口 。
以下为 8255A工作在上述三种情况下的方式控制字及程序 。
( 1) 方式控制字为,10011001B 即 99H;
程序为:
MOV DX,0503H
MOV AL,99H
OUT DX,AL
(2) 方式控制字为,11XXX10XB,其中 X为 0或 1任意, 将 X设为 0则方式控制字为 11000100B,
即 C4H;
程序为:
(3)方式控制字为,1011011XB或 10110110B 即 B6H。 因为 B口设定为方式 1输入, 所以 PC2~
PC0已自动确定了输入 /输出;端口 A被设定为方式 1输入, 所以 PC3自动作为中断请求线, 因
此 PC3~ PC0不受 D0位的控制 。
程序为:
MOV DX,0503H
MOV AL,0C4H
OUT DX,AL
MOV DX,0503H
MOV AL,0B6H
OUT DX,AL
【 例 8-2】 用程序将 PC口的第 7位置, 1”,第 3位置, 0”,设控制字的
地址为 0EBH。
第 7位的编码为 D3D2D1=111,使之置 1的控制字编码为
00001111B=0FH
第 3位的编码为 D3D2D1=011,使之置 0的控制字编码为
00000110B=06H
初始化程序如下:
MOV AL,0FH ;设置 PC7为, 1”的控制字送 AL
OUT 0EBH,AL ;将控制字送 8255A控制寄存器
MOV AL,06H ;设置 PC3为, 0”的控制字送 AL
OUT 0EBH,AL ;将控制字送 8255A控制寄存器
8.3 8255A与 CPU的连接使用
8255A占外设的 4个地址,即 A口,B口,C口和控制寄存器各占一个
外设接口地址。对同一个地址分别进行读写工作。例如:读 A口可
将 A口的数据读出;写 A口可将 CPU的数据写入 A口并输出。利用
8255A的片选信号,A0,A1,以及读写信号,既可方便的对 8255A
进行寻址。这些信号的功能如下表所示。
A1 A0 操作
0 0 0 0 1 读 A口
0 0 1 0 1 读 B口
0 1 0 0 1 读 C口
0 0 0 1 0 写 A口
0 0 1 1 0 写 B口
0 1 0 1 0 写 C口
0 1 1 1 0 写控制寄存器
1 × × 1 1 D0~ D7三态
图 8-8为 8255A与 8086总线连接,8255A右边的信号线与系统
总线连接,左边的 3个口分别与外设的数据输入输出线、状态信息
连接。
AEN
D
0
D
7
~
R E S E T
RD
WR
A
0
A
1
CS
8255
D
0
D
7
~
R E S E T
I O R
I OW
A
0
A
1
G
G 2 A
G 2 B
C
B
A
0
Y
A
2
A
3
A
4
A
7
A
5
1?
&
A
6
A
9
A
8
PA
0
PA
7
~
PB
0
PB
7
PC
0
PC
7
~
~
图 8-8 8255A与 8086系统连接图
8.4 8255A初始化和应用实例
8.4.1 8255A初始化
8255A初始化编程可以分两步进行:首先把
方式选择控制字写入控制口,确定所用端口的
工作方式,如果端口选择为工作方式 1或方式 2,
还要确定 CPU和 8255A之间是用查询方式还是用
中断方式交换信息,并以此来组织 C口置位 /复
位控制字,写入 8255A控制口,使相应的中断
允许标志( INTE)置 0或置 1,从而达到禁止或
开放中断的目的。完成了初始化编程之后,
CPU就可以用 IN和 OUT指令通过 8255A与外设交
换数据了。
【 例 8-3】, 8255A的控制器寄存器地址为 0120H,工作状态为 A口方
式 0输入, B口方式 1输出, C口低半字节输入, C口高半字节输出,
写出它的初始化程序段;如果要把 C口的 PC4置位, 写出它的初始
化程序段 。
方式选择控制字:
10010101B=95H
C口置位 /复位控制字:
00001001=09H
初始化程序段:
MOV DX, 0120H ; 8255A控制字寄存器口地址
MOV AL,95H ;设置方式选择控制字
OUT DX,AL ;送入控制字寄存器中
MOV DX,0120H
MOV AL,09H ;使 PC4=1的控制字
OUT DX,AL
8.4.2 8255A应用举例
1.简单开关接口电路
【 例 8-4】,在工业控制领域, 经常需要检测某些开关量的状态 。 在
某一系统中, 有 8个开关 K7~ K0,要求不断检测它们的通断状态,
并通过发光二极管 LED7~ LED0显示出来 。 开关断开, 相应的 LED点
亮;开关合上, LED熄灭 。 选用 8086CPU,8255A和译码器等芯片,
构成应用电路 。 如图 8-9所示, 8255A的 PA口做输出口, 8个开关
K7~ K0分别接 PB7~ PB0,PB口为输入口 。 8255A端口地址为 0120H~
0123H,编写一个完整的程序完成此功能 。
PA7~ PA0分别接显示器 LED7~ LED0。 8255A的, 和 RESET引脚分别与 CPU
的相应位置输出相连 。 8255A的数据线 D7~ D0与 8086的低 8位数据
总线 D7~ D0相连 。
编程时先要确定方式控制字 。 因为 PB口工作于方式 0输入, PA口
为方式 0输出, PC口未用, 其中的各位可以被置 0,这样, 写入控
制口 0123H的控制字为 82H。 完成初始化后, 即可将 PA口的开关状
态读入寄存器 AL。 若开关合上, AL中的相应位为 0,断开则为 1。
当把 AL中的内容从 PB口输出时, 相应于 0的位上的 LED熄灭, 表示
对应的开关是合上的;否则 LED点亮, 指示开关断开 。
STACK SEGMENT STACK
DW 256 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS,CODE
START,MOV DX,0123H ;控制字寄存器初始化
MOV AL, 10000010B
OUT DX, AL
TESTA,MOV DX,0122H ;读 PB口的状态
IN AL, DX
MOV DX,0121H ; PA口控制 LED,指示开关状态
OUT DX, AL
JMP TESTA ;循环检测
CODE ENDS
END START
图 8-9 8086CPU,8255A和开关的接口电路
2,D/A,A/D与接口电路
可编程并行接口芯片 8255A与数模转换器 DAC连接, 可以控制输出
模拟量的大小, 这个模拟量可以是电压的高低, 电流的大小, 速
度的快慢, 声音的强弱等等, 而模数转换器 ADC可将它们变换为数
字量, 通过 8255A送回到微机系统中, 这种闭环式的调节系统在实
践中应用非常广泛 。
【 例 8-5】,利用 8255A,数模转换器 DAC,模数转换器 ADC及 8086CPU
进行检测电压是否超标, 电路如图 8-10所示:
此系统的功能是检测电压信号是否符合标准, 如果符合则停止检测;
否则将预先设置好的标准数字量通过数模转换器 DAC传送给控制现
场 。 当然, 实践中用到的闭环式的调节系统比这个要复杂得多,
有些需要配合中断系统, 定时系统等等来完成 。
ADC的变换的工作过程是由 8255A的 START输入一个正脉冲启动 ADC转
换器, 开始将传感器送来的电压信号的模拟量变换为数字量,ADC
变换一次结束的同时 BUSY变为低电平, 从ADC变换器的 D7~ D0
端输出稳定的数字量 。
图 8-10 闭环式电压的调节系统原理图
DAC变换器是由负脉冲降加在 D7~ D0上的数字量,锁存在DAC转换器中,再把
它变成模拟信号输出给传感器,送给控制电压现场。
它的整个工作过程都是用查询的方式完成的,设 8255A的A口、B口均工作在
方式0下,A口为输出,B口初始化为输入,C口的高4位为输入,C口的低
4位为输出。
为了启动 ADC和 DAC要从C口的 PC1和 PC0分别送一个正脉冲和一个负脉冲,利用
C口的按位置位/复位控制字来完成。
8255A的端口地址为,0FFFCH~ 0FFFFH,设电压标准数字量为 78H,它的初始化
编程及控制编程如下:
STACK SEGMENT STACK
DW 256 DUP(?)
STACK ENDS
DATA SEGMENT
ADC DB DUP(?)
DAC DB 78H ;定义电压标准数字量
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START,MOV AX,STACK ;段寄存器的装入
MOV SS,AX
MOV AX,DATA
MOV DS,AX
MOV DX,0FFFFH ;初始化 8255A
MOV AL,10001010B
OUT DX,AL
MOV AL,00000010B ;C口初始化 ( PC1=0 )
OUT DX,AL
MOV AL,00000001B ;C口初始化 ( PC0=1 )
OUT DX,AL
ATEST,MOV AL,00000001H ;使 START有效 ( PC0=1 )
OUT DX,AL
MOV AL,00000010H ;使 PC0=0
OUT DX,AL ;输出正脉冲
TESTX,IN AL,DX ;读 PC口状态
TEST AL,40H ;检测 BUSY( PC6) 状态
JNZ TESTX ; PC6=1, 循环查询
MOV DX,0FFFDH ; PC6=0, 进行 A/D转换
IN AL,DX ;读 PB口状态
MOV ADC,AL ;将数据写入 ADC单元
CMP AL,DAC ;比较 ADC是否等于标准电压值
JNZ DTEST ;不等于, 进行 D/A转换
JMP OK ;等于, 转去执行 OK
DTEST,MOV AL,DAC ;输入标准值, 进行 D/A转换
MOV DX,0FFFCH
OUT DX,AL
MOV AL,00H ;使 PC0=0
MOV DX,0FFFFH
OUT DX,AL
MOV AL,01H ;使 PC0=1
OUT DX,AL ;输出负脉冲
OK,MOV AL,4CH ;返回DOS
INT 21H
CODE ENDS
END START
3,红绿灯控制电路
【 例 8-6】 编制程序, 通过 8255A控制发光二极管, 以模拟交通路灯的管
理 。 其中 L1~ L4为黄灯, L5~ L8为红灯, L9~ L12为绿灯 。
( 1) 图 8-11为连接硬件线路:
( 2) 编程提示
首先我们应该了解交通灯的熄灭规律 。 设有一个十字路口 1,3为南,
北方向, 2,4位东, 西方向, 初始状态为 4个路口的红灯全亮 。 之后, 1,
3路口的绿灯亮, 2,4路口的红灯亮, 1,3路口方向通车 。 延迟一段时间
后, 1,3路口的绿灯熄灭, 而 1,3路口的黄灯开始闪烁 。 闪烁若干次后,
1,3路口的红灯亮, 而同时 2,4路口的绿灯亮, 2,4路口方向开始通车,
延迟一段时间后, 2,4路口的绿灯熄灭, 而黄灯开始闪烁, 闪烁若干次
后, 再切换到 1,3路口方向 。 之后, 重复上述过程 。 ( 注,L1~ L4分别为
黄灯的 1,2,3,4; L5~ L8分别为红灯的 1,2,3,4; L9~ L12分别为绿灯
的 1,2,3,4)
程序中应设定好 8255A的工作模式, 使 3个端口均工作于方式 0,并
处于输出状态 。 各 LED发光二极管共阳极, 使其点亮应使 8255A相应端口
的相应位清 0。
D
0
~ D
7
I O R
A
0
A
1
R E S E T
D
0
~ D
7
R D
W R
A
0
A
1
R E S E T
C S
P A
0
~ P A
7
P B
0
~ P B
3
P B
4
P B
5
P B
6
P B
7
P C
0
P C
1
P C
2
P C
3
P C
4
P C
5
P C
6
P C
7
8 2 5 5 A
I O W
A
2
A
3
A
4
A
9
G 2 A
G 2 B
C
B
A
1?
A
8
A
7
A
6
A
5
Y
6
+ 5 V
L
1
L
2
L
3
L
4
L
5
L
6
L
7
L
8
L
1 1
L
1 2
L
1 0
L
9
G
图 8-11红绿灯模拟显示图
DATA SEGMENT
PB DB?
MESS DB ‘ENTER ANY KEY CAN EXIT TO DOS!’,0DH,0AH,’$’
DATA ENDS
STACK SEGMENT STACK
DW 50DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATAES:DATA,SS,STACK
START,MOV AX,DATA
MOV DS,AX ;段寄存器初始化
MOV ES,AX
MOV AH,09H
MOV DX,OFFSET MESS ;显示提示信息
INT 21H
MOV DX,21BH
MOV AL,82H ;写控制字, 均工作于方式 0,B口为输入, A口, C口
为输出OUT DX,AL
MOV DX,219H
IN AL,DX ;读取 PB数据, 保存在 PB单元中
MOV PB,AL
MOV DX,21BH
MOV AL,80H ;写控制字, 均工作于方式 0,均为输出口
OUT DX,AL
MOV DX,219H
MOV AL,PB ;置位 PB口的高 4位, 熄灭黄灯
OR AL,0F0H
OUT DX,AL
MOV DX,21AH
MOV AL,0F0H ;使 PC0~ PC3为 0,PC4~ PC7为 1,
OUT DX,AL 即点亮红灯, 熄灭绿灯
CALL DELAY10 ;延迟
LLL, MOV AL,10100101B
MOV DX,21AH ;使 1,3路口绿灯亮, 同时 2,4路口
OUT DX,AL 红灯亮
CALL DELAY10
CALL DELAY10 ;延迟
OR AL,0F0H ;熄灭 1,3路口的绿灯
OUT DX,AL
MOV CX,0008H ;置计数值为 8
TTT, MOV DX,219H
MOV AL,PB ;点亮 1,3路口黄灯
AND AL,10101111B
OUT DX,AL
CALL DELAY1 ;延迟一较短时间
OR AL,01010000B ;熄灭 1,3路口的黄灯
OUT DX,AL
CALL DELAY1 ;延迟一较短时间
LOOP TTT ;黄灯闪烁 8次
MOV DX,21AH
MOV AL,0F0H ;点亮四个红灯, 熄灭四个绿灯
OUT DX,AL
CALL DELAY1 ;延迟
MOV AL,01011010B ;点亮 2,4路口绿灯
OUT DX,AL ;同时 1,3路口红灯亮
CALL DELAY10 ;延迟
CALL DELAY10
OR AL,0F0H ;熄灭 2,4路口绿灯
OUT DX,AL
MOV CX,0008H ;计数值为 8
GGG,MOV DX,219H
MOV AL,PB ;点亮 2,4路口黄灯
AND AL,01011111B
OUT DX,AL
CALL DELAY1 ;延迟
OR AL,10100000B ;熄灭 2,4路口黄灯
OUT DX,AL
CALL DELAY1 ;延迟
LOOP GGG ;循环, 以使黄灯闪烁 8次
MOV DX,21AH
MOV AL,0F0H
OUT DX,AL ;点亮四个红灯, 熄灭四个绿灯
CALL DELAY1 ;延迟
MOV AH,06H
MOV DL,0FFH ;判断是否有键按下, 有键按下
INT 21H 则转 PPP
JNZ PPP
JMP LLL ;继续
PPP,MOV AX,4C00H ;返回 DOS
INT 21H
DELAY
1
PROC NEAR ;延迟子程序 1
PUSH CX
MOV CX,8000H
CCC,LOOP CCC
POP CX
RET
DELAY
1
ENDP
DELAY
10
PROC NEAR ;延迟子程序 2
PUSH AX
PUSH CX
MOV CX,0030H
UUU,CALL DELAY1
LOOP UUU
POP CX
POP AX
RET
DELAY
10
ENDP
CODE ENDS
END START
点亮 1,3路口的绿灯
延迟
熄灭 1,3路口的绿灯
入口
段寄存器初始化
显示提示信息
写控制字,使 B口为输入
读取 PB数据,保存在 PB单元中
写控制字,使各端口均为输出口,且均工作于方式 0
使 4个路口的红灯全亮
延迟一段时间
已有键按下?
返回 DOS
1,3路口的黄灯闪烁 8次
四个红灯全亮
点亮 2,4路口的绿灯
延迟
熄灭 2,4路口的绿灯
2,4路口的黄灯闪烁 8次
四个红灯全亮
N
Y
图 8-12 红绿灯显示流程图