第七章
单片机 I/O口扩展及应用
7.1 I/O口扩展概述
7.1.1 I/O口扩展的原因
MCS-51系列单片机共有四个并行 I/O口, 分别是 P0,P1、
P2和 P3。 其中 P0口一般作地址线的低八位和数据线使用; P2口
作地址线的高八位使用; P3是一个双功能口, 其第二功能是一
些很重要的控制信号, 所以 P3一般使用其第二功能 。 这样供用
户使用的 I/O口就只剩下 P1口了 。 另外, 这些 I/O口没有状态寄
存和命令寄存的功能, 因此难以满足复杂的 I/O操作要求 。
7.1.2 I/O口的编址技术
用户可以通过对 I/O口进行读和写操作来完成数据的输
入和输出 。
例如,P0口的地址为 80H。 用户可以使用 MOV指令对 P0口进
行写操作 。
MOV P0,A
7.1.3 单片机 I/O传送的方式
1,无条件传送方式
2,查询方式
3,中断方式
中断方式大大提高了单片机系统的工作效率, 所以在
单片机中被广泛应用 。
7.2 简单 I/O口扩展
7.2.1 简单输入口扩展
1,两个输入口扩展
简单输入口扩展使用的集成芯片, 比较典型
的如 74LS244芯片 。 图 7.1为 74LS244芯片的引脚 。
图 7.1 74LS244芯片的引脚 图 7.2 74LS244扩展两个输入口
2,多输入口扩展
使用多片 74LS244实现多个(例如 5个)输入口扩展的电路
连接如图 7.3。
1
5
10
CC
V
11
15
201CS
2CS1A1
2
A1
3
A1
4
A1
3
A2
2
A2
1
A2
4
A2
1
Y1
2
Y1
3
Y1
4
Y1
1
Y2
2
Y2
3
Y2
4
Y2
GN
D
输入
设备
7 4 L S2 4 4
1CS 2CS
地址选通
信号
RD
A L E
P0 7 4 L S3 7 3
2716
74L S
244
74L S
244
AL
E
P0 74L S
373 2716
RD
7.23.2
P~P
? ? ? ? ?
CSY Y CS CS CS CSY Y Y
74L S
244
图 7.3 多个(例如 5个)输入口扩展的电路
7.2.2 简单输出口扩展
1,简单输出口扩展使用的典型芯片
简单输出口扩展通常使用 74LS377芯片,该芯片是一个具
有, 使能, 控制端的锁存器。其信号引脚如图 7.4所示。其中:
1D~ 8D为 8位数据输入线,1Q~ 8Q为 8位数据输出线,CK为
时钟信号上升沿数据锁存,为使能控制信号,低电平有效。
VCC为+ 5V电源。 74LS377的逻辑电路如图 7.5所示。
图 7.4 74LS377引脚图 图 7.5 74LS377的逻辑电路
由逻辑电路可知, 74LS377是由 D触发器组成的, D触
发器在上升沿输入数据, 即在时钟信号 ( CK) 由低电平跳
变为高电平时, 数据进入锁存器 。 其功能表如表 7-1所示 。
G
1Q
1D
3D 6D
2D 7D
G N D
4D
7Q2Q
8Q
4Q
CK
5Q
3Q 6Q
5D
8D
CC
V
74L S 377
8D
1D

CK
G
1Q

8Q
D Q
CK G
GCK
D Q
输出口扩展连接:
扩展单输出口只需要一片 74LS377,其连接电路如图 7.6所示。
1Q ~ 8Q
1D ~ 8D
P 0.0 ~ P 0.7
WR
地址译
码信号
8 0 C 5 1
7 4 L S3 7 7
输出
设备CK
G
Ck D Q
1 X X Q0
0 ↑ 1 1
0 ↑ 0 0
X 0 X Q0
G
表 7-1 74LS377功能表
图 7.6 74LS377作输出口扩展
7.3 8255可编程通用并行接口芯片
7.3.1 8255的外部引脚和内部结构
1,外部引脚
8255的外部引脚如图 7.7所示, 其中:
,A口的输入输出信号线 。 该口是输入还是输出或
双向, 由软件决定 。
,B口的输入输出信号线 。 该口是输入还是输出,
由软件决定 。
,C口信号线 。 该口可作输入, 输出, 控制和状态
线使用, 由软件决定 。
:双向数据信号线,用来传送数据和控制字。
:读信号线 。,写信号线 。
70 ~ PAPA
70 PB~PB
70 PC~PC
70 ~ DD
RD WR
:片选信号线, 低电平 ( 有效 ) 时, 才选中该芯片,
才能对 8255进行操作 。
RESET:复位输入信号, 高电平有效时, 复位 8255。 复位后
8255的 A口, B口和 C口均被定为输入 。
:口地址选择信号线 。 8255内部共有三个口, A口, B口,
C口和一个控制寄存器供用户编程 。 的不同编码可分别选择上述
三个口和一个控制寄存器 。 地址编码如表 7-2所示 。
端口
0 0 A口
0 1 B口
1 0 C口
1 1 控制寄存器
CS
10AA
CS
10 AA
表 7-2 地址编码
由,, 和可以确定 A口, B口, C口和
控制寄存器的, 如表 7-3所示 。
表 7-3 读写逻辑
所选断口 操作
0 0 0 0 1 A口 读 A口
0 0 0 1 0 A口 写 A口
0 0 1 0 1 B口 读 B口
0 0 1 1 0 B口 写 B口
0 1 0 0 1 C口 读 C口
0 1 0 1 0 C口 写 C口
0 1 1 1 0 控制寄存 器 写控制寄存 器
1 × × × × ∕ 高阻状态
RD WR CS
CS 10 AA WR CS
2,内部结构
8255的内部结构框图如图 7.8所示。从图可以看
到,左边的信号与系统总线相连。而右边是与外设
相连接的三个口。三个口均为 8位。其中 A口输出有
锁存能力,输入亦有锁存能力。 B口输入输出均有
锁存能力。 C口输出有锁存能力,输入没有锁存能
力,在使用上要注意到这一点。
数据
总线
缓冲器
读/写
控制
逻辑
A 组
控制
A 组
端口C
高四位
B 组
控制
A 组
端口
A
B 组
端口B
B 组
端口C
低四位
DB
RD
1
A
0
A
R E S E T
CS
70
PA~PA
70
PB~PB
30
PC~PC
74
PC~PC
WR
图 7.8 8255的内部结构框图
为了控制方便,将 8255的三个口分成 A,B两组。其中 A组包
括 A口的 8条口线和 C口的高四位 。 B组包括 B口的 8条口线
和 C口的低四位 。 A组和 B组分别由软件编程来加以控制。
74 ~ PCPC
30 ~ PCPC
7.3.2 8255的扩展逻辑电路
MCS-51单片机可以和 8255直接连接,图 7.9给出了一
种扩展电路。
R ES E T
CS
70
PAPA ~
70
PBPB ~
70
PCPC ~
WR
0.0
P
7.0
P
7.2
P
1
A
0
A
0
D
7
D
8031 8255
74LS
373
R S T
A L E
RDRD
WR
图 7.9 8255的扩展逻辑电路
7.3.3 8255的工作方式
8255共有三种工作方式, 这些工作方式可用软件编程来指定 。
1,工作方式 0,又称基本输入输出方式
2,工作方式 1,又称选通输入输出方式
在这种方式下, A口和 B口仍作为数据的输出或输入口而
同时要利用 C口的某些位作为控制和状态信号, 从而实现这种
工作方式 。
( 1) 方式 1下, A口和 B口均为输出
各条控制引线的定义如图 7.10所示 。
各控制信号的含义如下:
,输出缓冲器满信号, 低电平有效 。 用来告诉外设,
在规定的接口上 CPU已输出一个有效的数据, 外设可以从该
口取走此数据 。
:外设响应信号, 低电平有效 。 用来通知接口外设
已经将数据接收, 并使 。
INTR:中断请求信号, 高电平有效 。 当外设已从接口取
走数据, 口的缓冲器变空, 且接口允许中断时, INTR有效 。
即, 且允许中断, 则 INTR=1。
OBF
ACK
1OBF ?
1A CK ? 1OBF ?
( 2)方式 1下,A口和 B口均为输入
这种情况和两口均为输出类似,各条控制引线的定义如
图 7.11所示。
A 口
B 口
PC 7
PC 6
PC 3
PC 2
PC 0
PC 1
O B F A
A C K A
A C K B
O B F B
I N T R A
I N T R B
8255
A 口
B 口
PC 4
PC 5
PC 3
PC 2
PC 0
PC 1
S T B A
S T B B
I N T R A
I N T R B
I B F A
I B F B
8255
图 7.10 A口和 B口作输出口时,
C口提供的控制 引线
图 7.11 A口和 B口作输入口时,
C口提供的控制引线
各控制信号的含义如下:
:输入选通信号, 低电平有效 。 它由外设提供, 利用该
信号可以将外设数据锁存于 8255的口锁存器中 。
IBF:输入缓冲器满信号, 高电平有效 。 当它有效时, 表示
已有一个有效的外设数据锁存于 8255的口锁存器中 。 可用此信号
通知外设数据已锁存于接口中, 尚未被 CPU读走, 暂不能向接口
输入数据 。
INTR:中断请求信号, 高电平有效 。 当外设将数据锁存于
接口之中, 且又允许中断请求发生时, 就会产生中断请求 。
2,工作方式 2,又称双向输入输出方式 I/O操作
只有 A口才能工作在方式 2。 A口工作方式 2时要利用 C口的 5
条线才能实现 。 此时, B口只能工作在方式 0或者方式 1下, 而 C
口剩余的 3条线可作为输入线, 输出线或 B口方式 1之下的控制线 。
C口提供的控制线如图 7.12所示 。
STB
A 口
PC 4
PC 5
PC 3
O B F A
A C K A
S T B A
PC 6
PC 7
I B F A
I N T R A
8255
图 7.12 工作方式 2时,C口提供的控制线
7.3.4 8255的控制字及初始化程序
8255是编程接口芯片,通过控制字(控制寄存器)对其端口
的工作方式和 C口各位的状态进行设置。 8255共有两个控制字,
一个是工作方式控制字,另一个是 C口置位 /复位控制字。这两个
控制字共用一个地址,通过最高位来选择使用那个控制字。
1,工作方式控制字
主要功能:确定 8255接口的工作方式及数据的传送方向。
各位的控制功能如图 7.13所示。
0
D
1
D
2
D
3
D
4
D
5
D
6
D
7
D
标志位
1,方式控制字
0, C 口置位 / 复位控制字
C 口低四位输入还是输出
0,输出
1,输入
B 口输入还是输出
0,输出
1,输入
B 口工作方式
0,方式 0
1,方式 1
A 口输入还是输出
0,输出
1,输入
C 口高四位输入还是输出
0,输出
1, 输入
A 口工作方式
00,方式 0
01,方式 1
1,方式 2×
图 7.13 8255工作方式控制字
对工作方式控制字作如下说明:
l A口可工作在方式 0,方式 1和方式 2,B口可工作在方
式 0和方式 1
l 在方式 1或方式 2下, 对 C口的定义 ( 输入或输出 ) 不
影响作为控制信号使用的 C口各位功能
l 最高位是标志位, 作为方式控制字使用时, 其值固定
为 1。
2,置位 /复位控制字
在某些情况下, C口用来定义控制信号和状态信号, 因
此 C口的每一位都可以 进行置位或复位 。 对 C口的置位或复
位是由置位 /复位控制字进行的 。 各位的功能如图 7.14所示 。
其中, 最高位必须固定为, 0”。
0
D
1
D
2
D
3
D
4
D
5
D
6
D0
标志位
1,方式控制字
2, C 口置位/ 复位控制字
未使用
确定对那个位进行
置位或复位。
000,
001,
010,
011,
100,
101,
110,
111,
确定某位置位还是复位
0,复位
1,置位
PC 0
PC 7
图 7.14 8255置位 /复位控制字
3,8255初始化
8255初始化就是向控制寄存器写入工作方式控制字和 C口置
位 /复位控制字 。 例如, 对 8255各口作如下设置,A口方式 0输入,
B口方式 1输出, C口高位部分为输出, 低位部分为输入 。 设 8255
的扩展电路如图 7.8所示, 则控制寄存器的地址为 7FFFH。 按各口
的设置要求, 工作方式控制字为 10010101,即 95H。 所以初始化
程序应为:
MOV DPTR,#7FFFH
MOV A,#95H
MOVX @DPTR,A
7.3.5 8255的应用举例
1,光二极管显示器的工作原理
LED显示器中的发光二极管共有两种连接方法, 一种是共阴
极连接, 另一种共阳极连接 。 其连接图如图 7.15( b) 所示 。
图 7.15 七段 LED显示器
使用 LED显示器时,要注意区分这两种不同的接法。为了显
示数字或字符,必须对数字或字符进行编码。七段数码管加上一
个小数点,共计 8段。因此为 LED显示器提供的编码正好是一个字
节。用 LED显示器显示 16进制数的编码已列在表 7-4所示。
a b
cde
g
GND
f
dp
GND
a
b
c
e
f
g
d
·
dp
a
b
c
d
e
f
g
dp
dp
g
f
e
d
c
b
a
+ 5V
(a ) (b )
字型 共阳极代码 共阴极代码
0
1
2
3
4
5
6
7 0F8H 07H
82H 7DH
92H
6DH
99H 66H
0B0H 4FH
0A4H 5BH
0F9H 06H
0C0H 3FH
8 80H 7FH
字型 共阳极代码 共阴极代码
9
A
B
C
D
E
F
灭 0FFH 00H
8EH 71H
86H
79H
0A1H 5EH
0C6H 39H
83H 7CH
88H 77H
90H 6FH
为了实现 LED显示器的动态扫描除了要给显示器提供段码
(字形编码)的输入之外,还要对显示器加位的控制(控制
LED显示器亮灭),这就是通常所说的位控和段控。
表 7-4 LED显示器 16进制数编码
2,应用举例
具体要求:
l 6个 LED采用共阴极连接
l 79H~ 7EH分别存放 6位显示器的显示数据 ( 0~ 9)
l 8255的 A口接 LED显示器位控
l 8255的 B口接 LED显示器段控
( 1) 电路设计
RD
R E S E T
CS
5
PA
0
PBWR
0.0
P
7.0
P
7.2
P
1
A
0
A
0
D
8031 8255
74LS
373
R S T
A L E
WR
· · · · · ·
0
PA
7
PB
RD
7
D
经分析知,8255的 A口, B口, C口, 控制寄存器的地址分
别为 7FFCH,7FFDH,7FFEH,7FFFH。
( 1) 编写程序
MOV DPTR,#7FFFH
MOV R0, #79H
MOV A,#80H
MOVX @DPTR,A ;写控制字
MOV R3,#0FEH
MOV A,R3
LD,MOV DPTR,#7FFCH
MOVX @DPTR,A ;最左边灯亮
INC DPTR ;指向 B口
MOV A,@R0 ;取显示数据
ADD A,#13H
MOVC A,@A+PC ;查数据编码
MOVX @DPTR,A ;写 B口
ACALL DELAY ;延时
INC R0
MOV A,R3
JNB ACC.5,ED
RL A
MOV R3,A
AJMP LD
LEDTAB,DB 3FH
DB 06H
DB 5BH
DB 4FH
DB 66H
DB 6DH
DB 7DH
DB 07H
DB 7FH
DELAY,MOV R7,#02H
MOV R6,#FFH
LOOP,DJNZ R6,LOOP
DJNZ R7,DELAY
7.4 8155可编程通用并行接口芯片
7.4.1 8155的外部引脚及内部逻辑结构
1,外部引脚
8155芯片为 40引脚双列直插封装, 单一的+ 5V电源, 其引脚
排列如图 7.16所示 。 其中:
,A口的输入输出信号线 。 该口作输入还是输出,
由软件决定 。
,B口的输入输出信号线 。 该口作输入还是输出,
由软件决定 。
,C口信号线。该口可作输入、输出口外,还可以
传送控制和状态信号,因此 C口共有四种工作方式,即:输入方
式( ALT1),输出方式( ALT2),A口控制端口方式( ALT3)
以及 A口 和 B口控制端口方式( ALT4)。其工作方式由软件决定。
70 PA~PA
70 PB~PB
50 PC~PC
:地址数据复用线 。
:片选信号 。 低电平有效 。
,IO和 RAM的选择信号 。 = 0,选中 RAM;
= 1,选中 IO口 。
:地址锁存信号 。 除了进行 的地址锁存控制外还
用于把片选信号 和 等信号进行锁存 。
:读选通信号 。
:写选通信号 。
RESET:复位信号 。 复位后 A口, B口和 C口均为数据输入方式 。
70 ~ ADAD
M/IOCS
CS
M/IO
M/IOM/IO
ALE
RD
WR
70 ~ ADAD
TIMERIN:定时器 /计数器的计数脉冲输入端 。
TIMEROT:定时器 /计数器 。
2,内部逻辑结构
8155的内部逻辑结构如图 7.17所示 。 由图可以看出, 8155
由三部分组成, 即:存储单元为 256字节的静态 RAM; 3个可编
程的 I/O,其中 2个口 ( A口和 B口 ) 为 8位口, 1个口 ( C口 ) 为 6
位口; 1个 14位的定时器 /计数器
图 7.17 8155的内部逻辑结构
由以上可知 8155有 A口,B口,C口和定时器 /计数器低 8位
以及定时器 /计数器高 8位五个端口,另外 8155内部还有一个命
令 /状态寄存器,所以 8155内部共有 6各端口。对它们只需要使
用即可实现编址,如表 7-5所示。
RD
CS
70
AD~AD
R E S E T
WR
T I M E R I N
T I M E O U T
M/IO
A L E
256 字
节静态
R A M
14 位定
时计数

A
B
C
70
PA~PA
70
PB~PB
50
PC~PC
表 7-5 8155的端口地址编码
AD
7
AD
6
AD
5
AD
4
AD
3
AD
2
AD
1
AD
0
对应端口
× × × × × 0 0 0 命令 /状态寄存 器
× × × × × 0 0 1 A口
× × × × × 0 1 0 B口
× × × × × 0 1 1 C口
× × × × × 1 0 0 定时器 /计数器低 8位
× × × × × 1 0 1 定时器 /计数器高 8位
7.4.2 8155的命令 /状态字
1,8155的命令字
由以上内容可知, 8155的 A口有输入和输出两种工作方
式, B口也有输入和输出两种工作方式, 而 C口有输入方式
( ALT1), 输出方式 ( ALT2), A口控制端口方式 ( ALT3)
以及 A口 和 B口控制端口方式 ( ALT4) 四种工作方式 。 这些
端口的工作方式是由 8155内部的命令寄存器 ( 命令字 ) 来
控制的 。 命令字除了规定端口的工作方式还规定了定时器 /
计数器的工作方式 。 命令字只能进行写操作 。 其格式如图
7.18所示 。
图 7.18 8155的命令字
当 A口或者 B口以中断方式进行数据传送时, 所需要的
联络信号由 C口提供, 其中为 A口提供, 为 B口提供 。 各联络
信号的定义如表 7-6所示 。
? ?? ??
0
D
1
D
2
D
3
D
4
D
5
D
6
D
7
D
A 口工作方式
0,输入
1,输出
B 口工作方式
0,输入
1,输出
A 口中断
0,禁止
1,允许
C 口工作方式
0 0,A L T 1
0 1,A L T 2
1 0,A L T 3
1 1,A L T 4
B 口中断
0,禁止
1,允许
? ?? ??
定时器工作方式:
0 0,无操作
0 1,停止计数
1 0,计满后停止
1 1,开始计数
表 7-6 联络信号
0PC
1PC
2PC
3PC
4PC
5PC BSTB
ASTB ASTB
C口 对 A口控制( ALT3) 对 A口和 B口控制( ALT4)
AINTR AINTR
ABF ABF
输出 BINTR
输出 BBF
输出
联络信号共有三个, 其中:
INTR:中断请求信号 ( 输出 ), 高电平有效 。 送给 MCS-
51单片机的外中断请求
BF,缓冲器满状态信号 ( 输出 ), 高电平有效 。
:选通信号 ( 输入 ), 低电平有效 。 数据输入时,
是外设送来的选通信号;数据输出时, 是外设送来的应答信
号 。
以中断方式进行数据输入输出时, 其过程和 8255基本相同,
在此不作赘述 。
2,8155的状态字
状态字只能读不能写,所以 8155的命令字和状态字共用一
个地址。当对命令 /状态字进行写操作时,写进去的是命令,
当对命令 /状态字进行读操作时,读出来的是状态。状态字用
于寄存各端口及定时器 /计数器的工作状态。其格式如图 7.19所
示。
STB
STB
STB
0
D
1
D
2
D
3
D
4
D
5
D
6
D
I NT R A, A 口中断请求
A B F,A 口缓冲器满/ 空
I N T R B,B 口中断请求
I NT E A, A 口中断允许
T I M E R, 定时器中断
(计数满时为高电
平,读出状态字或硬
件复位为低电平
×
BBF, B 口缓冲器满/ 空
I NT E B, B 口中断允许
图 7.19 8155的状态字
7.4.3 8155的扩展逻辑电路
8155与 MCS-51单片机的连接比较简单,因为 8155的许多
信号与 MCS-51单片机兼容,可以直接连接。表 7-7列出了这些
信号的对应关系。
RD
WR WR
8155 MCS-51单片机 8155 MCS-51单片机

ALE ALE
RESET RST
这种方法实际就是编址技术中的线选法。例如以
接,则 8155与 8051的连接如图 7.20所示。
这种 信号产生方法中,对 8155需要使用 16位地址进行编
址。这种方法适应于有多片 I/O扩展及存储器扩展的较大单片机系
统中,因此要使用片选信号。例如图中使用 作为片选信号与直
接相连。
70 ~ ADAD RD
表 7-7 8155与 MCS-51单片机兼容的信号
0.2P
M/IO
M/IO
1.2P
RD
R E S E T
70
PAPA ~
70
PBPB ~
50
PCPC ~
WR
8051
8155
R S T
7.0
P
0.0
P
A L E
WR
RD
0
AD
7
AD
A L E
M/IO
CS1.2
P
0.2
P
图 7.20 高位地址直接作为信号
假设没有用到的地址位其值为系统复位后的值,即为 1。则
时,端口地址范围为,0FDF8H~ 0FDFDH; 时,
8155内部 RAM地址范围是,0FC00H~ 0FCFFH。
7.4.4 8155的定时器 /计数器
1,8155定时器 /计数器的计数结构
1M/IO ? 0M/IO ?
8155的定时器 /计数器是一个 14位的减法计数器, 由两个 8位
寄存器构成, 如图 7.21所示 。 以其中的低 14位组成计数器, 剩下
的两个高位 (, ) 用于定义计数器输出的信号形式 。
图 7.21 8155定时器 /计数器的计数结构
2,定时器 /数器的使用
① 8155的定时器 /计数器是减法计数, 而 MCS-51单片机的定
时器 /计数器却是加法计数, 因此确定计数初值的方法是不同
的 。
0D1D2D3D4D5D6D7D
2M 1M 13T 12T 11T 10T 9T 8T
输出方式 计数器高6 位
0D1D2D3D4D5D6D7D
6T 5T 4T 3T 2T 1T 0T7T
计数器低8 位
2M 1M
② MCS-51单片机的定时器 /计数器有多种工作方式, 而 8155
的定时器 /计数器只有一种固定的工作方式, 即 14位计数 。 通过
软件方法进行计数初加载 。
③ MCS-51单片机的定时器计数器有两种计数脉冲。定时功
能时,以机器周期为计数脉冲;计数功能时,从芯片外部引入
计数脉冲。但 8155的定时器 /计数器,不论是定时功能还是计
数功能都是由外部提供计数脉冲,其信号引脚是 TIMERIN。
④ MCS-51单片机的定时器 /计数器,计数溢出时,自动置位
TCON寄存器的计数溢出标志位( TF),供用户查询或中断方式使
用;但 8155的定时器 /计数器,计数溢出时向芯片外部输出一个
信号( TIMEROUT)。而且这一信号还有脉冲和方波两种形式,
可由用户进行选择。具体由, 两位定义:2M 1M
=00 单个方波
=01 连续方波
=10 单个脉冲
=11 连续脉冲
这四种输出形式如图 7.22所示 。
2
M
1
M
0 0
0 1
1 0
1 1
单个方波
连续方波
单个脉冲
连续脉冲
开始计数 停止计数
12MM
图 7.22 8155信号输出形式
12MM
12MM
12MM
3,定时器 /计数器的控制
8155定时器 /计数器的工作方式由命令字中的最高两位进
行控制(见图 7.18)。具体说明如下:
D7D6=00 不影响计数器工作。
D7D6=01 停止计数。如计数器未启动则无操作,如
计数器正运行则停止计数。
D7D6=10 达到计数值(计数器减为 0)后停止。
D7D6=11 启动,如果计数器没运行,则在装入计数
值后开始计数;如果计数器已运行,则在当前计数值计满后,
再以新的计数值进行计数。
7.4.5 8155的初始化
要求使用 8155定时器 /计数器对计数脉冲进行千分频,即
计数 1000后,TIAMEROUT端电平状态发生变化,并重新置
数以产生连续方波。此外假定 A口为输出方式,允许中断; B
口为输入方式,不允许中断; C口为对 A口控制方式
( ALT3)。请编写初始化程序。
解:要求输出连续方波,所以定时器 /计数器的最高两
位 M2 M1= 01。计数器的其它 14位装入计数初值。 8155为减
法计数,所以计数初值为 1000,化为 16进制数为 03E8H。则
定时器 /计数器的高 8位为,43H,低 8位为,0E8H。
命令名字的设置如下:
计数器 B口 A口 C口 B口 A口
装入后启动 不允许 中断 允许中 断 ALT3 输入 输出
1 1 0 1 1 0 0 1
因此,命令字的内容为 0D9H。假定命令 /状态寄存器的地
址为 0FDF8H。则初始化程序为:
MOV DPTR,#0FDF8H ;命令 /状态寄存器地址
MOV A,#0D9H ;命令字
MOVX @DPTR,A ;装入命令字
MOV DPTR,#0FDFEH ;计数器低 8位地址
MOV A,#0E8H ;低 8位计数值
MOVX @DPTR,A ;写入计数值低 8位
INC DPTR ;计数器高 8位地址
MOV A,#43H ;高 8位计数值
MOVX @DPTR,A ;写入计数值高 8位
7.4.6 8155的应用举例
8155有很强的功能,在此以 8155作单片机键盘接口为例进行说
明。在讲此例之前首先说明单片机的键盘接口和键功能的实现。
1,单片机的键盘接口处理
单片机的键盘接口处理的内容包括以下几个方面:
键扫描
(a) (b)
(c)









A A
A
1
1
1
1
1
1
1
1
1
1
0
1
0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1
1 1 0 1 1 1 1 1
+ 5 V
+ 5 V
+5V
输出口
输出口
输出口
图 7.23 键扫描示意图
去抖动
键按下
键稳定
前沿抖动 后沿抖动
图 7.24 键闭合和断开时的电压抖动
键码计算
例如图 7.25所示的键号是按从左到右、从上向下的顺序编排的。
00H
19H18H
17H16H13H12H11H10H
08H 09H 0AH 0BH 0EH 0FH
07H06H03H02H01H
1AH 1BH 1EH 1FH
。。。。。。
。。。。。。
。。。。。。
。。。。。。
图 7.25 键码图
这样安排,使键码既可根据行号列号以查表求得,也可通
过计算得到。图 7.25所示的键码编排规律,各行首号依次是 00H、
08H,10H,18H,如列号按 0~ 7顺序,则键码的计算公式为:
等待键释放
计算键码后,再以延时后进行行扫描的方法等待键释放。
等待释放是为了保证键的一次闭合仅进行一次处理。
2.键盘接口的控制方式
在单片机的运行过程中, 何时执行键盘扫描和处理, 可有
下列三种情况:
l 随机方式, 每当 CPU空闲时执行键盘扫描程序
l 中断方式, 每当有键闭合时才向 CPU发出中断请求中断
响应后执行键盘扫描程序
l 定时方式,每隔一定时间执行一次键盘扫描程序,定
时可由单片机的定时器完成。
3,键处理子程序
在计算机中每一个键都对应一个处理子程序,得到闭合键的
键码后,就可以根据键码,转到相应的键处理子程序(分支以
JMP等散转指令实现),进行字符、数据的输入或命令处理。这
样就可以实现该键设定的功能。
总结以上内容,键处理的流程如图 7.26所示。
开始
键扫描
有无键按下
去抖动
键码计算
键释放
JMP@A+DPTR
00#键
处理程序
01#键
处理程序
··# 键
处理程序
nn#键
处理程序
·······
A=00H A=01H A= ·· H A=nnH
图 7.26 键处理的流程图
4,用 8155作单片机键盘接口
① 接口电路逻辑图
以 8155作 8× 4键盘的接口为例。 A口为输出口,接键盘列
线。 C口为输入口,以接键盘的 4条行线。如图 7.27所示。
RD
RE S E T
WR
8051 8155
R S T
7.0
P
0.0
P
A L E
WR
RD
0
AD
7
AD
A L E
M/IO
CS1.2P
0.2
P
+ 5V
5,1K × 42 3 4 5 6 710
151412 13111098
2322212019181716
3130292827262524
图 7.27 8155作键盘接口
则 A口地址为 0FDF9H,C口地址为 0FDFBH。
② 判定有无闭合键的子程序
判定有无闭合键的子程序为 KSI,供在键盘扫描程序中调
用。程序如下:
KSI,MOV DPTR,#0FDF9H ; A口地址
MOV A,#00H
MOVX @DPTR,A ; A口送 00H
INC DPTR
INC DPTR ; C口地址
MOVX A,@DPTR ;读 C口
CPL A
ANL A,#0FH ;屏蔽高四位
RET
执行 KSI子程序的结果是:有闭合键则, 无闭合则 。0)A( ? 0)A( ?
③ 键盘扫描程序
如前所述,在单片机应用系统中常常是键盘和显示器同时
存在,因此可以把键盘扫描程序和显示程序配合起来使用,即:
把显示程序作为键扫描程序的延时子程序。这样做既省去了一
个专门的延时子程序,又能保证显示器常亮的可观效果。
假定本系统中显示程序为 DIR,执行时间约为 6ms。键盘
扫描程序如下:
KEY1,ACALL KSI ;检查是否有键闭合
JNZ LK1 ; A非, 0”则转移
ACALL DIR ;显示一次 (, 延时 6s)
AJMP KEY1
LK1,ACALL DIR ;有键闭合二次延时
ACALL DIR ; 共 12ms去抖动
ACALL KSI ;再检查是否有键闭合
JNZ LK2 ;有键闭合转移到 LK2
ACALL DIR
AJMP KEY1 ;无键闭合, 延时 6ms后转 KEY1
LK2,MOV R2,#0FEH ;扫描初值送 R2
MOV R4,#00H ;扫描列号送 R4
LK4,MOV DPTR,# 0FDF9H ; A口地址
MOV A,R2
MOVX @DPTR,A ;扫描初值送 A口
INC DPTR
INC DPTR ; C口地址
MOVX A,@DPTR ;读 C口
JB ACC.0,LONE ; ACC.0=1,第 0行无键闭合, 转 LONE
MOV A,#00H ;装第 0行值
AJMP LKP
LONE,JB ACC.1,LTWO ; ACC.1=1,第 1行无键闭合, 转 LTWO
MOV A,#08H ;装第 1行值
AJMP LKP
LTWO,JB ACC.2,LTHR ; ACC.2=1,第 2行无键闭合, 转 LTHR
MOV A,#10H ;装第 2行值
AJMP LKP
LTHR,JB ACC.3,NEXT ; ACC.3=1,第 3行无键闭合, 转 NEXT
MOV A,#18H ;装第 3行值
LKP,ADD A,R4 ;计算键码
PUSH ACC ;保护键码
LK3,ACALL DIR ;延时 6ms
ACALL KSI ;检查是否继续闭合, 若闭合再延时
JNZ LK3
POP ACC ;若键起, 则键码送 A
RET
NEXT,INC R4 ;扫描列号加 1
MOV A,R2
JNB ACC.7,KND ;若第 7位 =0,已扫完最高列则转 KND
RL A
MOV R2,A
AJMP LK4 ;进行下一行扫描
KND,AJMP KEY1 ;扫描完毕, 开始新一轮
键盘扫描程序的运行结果是把闭合键的键码放在累加器 A
中。接下来的程序是根据键码进行程序转移,转去执行该键对
应的