57
第第第 第第第 I/O 第第第第第第

第七章 单片机 I/O 口扩展及应用

  • Upload
    clarke

  • View
    144

  • Download
    0

Embed Size (px)

DESCRIPTION

第七章 单片机 I/O 口扩展及应用. 7.1 I/O 口扩展概述 7.1.1 I/O 口扩展的原因 MCS-51 系列单片机共有四个并行 I/O 口,分别是 P 0 、 P 1 、 P 2 和 P 3 。其中 P 0 口一般作地址线的低八位和数据线使用; P 2 口作地址线的高八位使用; P 3 是一个双功能口,其第二功能是一些很重要的控制信号,所以 P 3 一般使用其第二功能。这样供用户使用的 I/O 口就只剩下 P 1 口了。另外,这些 I/O 口没有状态寄存和命令寄存的功能,因此难以满足复杂的 I/O 操作要求。. 7.1.2 I/O 口的编址技术 - PowerPoint PPT Presentation

Citation preview

Page 1: 第七章   单片机 I/O 口扩展及应用

第七章 单片机 I/O 口扩展及应用

Page 2: 第七章   单片机 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 操作要求。

Page 3: 第七章   单片机 I/O 口扩展及应用

7.1.2 I/O 口的编址技术 用户可以通过对 I/O 口进行读和写操作来完成数据的输入和输出。例如: P0 口的地址为 80H 。用户可以使用 MOV 指令对 P0

口进行写操作。 MOV P0 , A

7.1.3 单片机 I/O 传送的方式 1. 无条件传送方式

Page 4: 第七章   单片机 I/O 口扩展及应用

2. 查询方式3. 中断方式 中断方式大大提高了单片机系统的工作效率,所以在单片机中被广泛应用。

7.2 简单 I/O 口扩展 7.2.1 简单输入口扩展1. 两个输入口扩展 简单输入口扩展使用的集成芯片,比较典型的如 74LS244 缓冲驱动芯片。图 7.1 为 74LS244芯片的引脚。

Page 5: 第七章   单片机 I/O 口扩展及应用

图 7.1 74LS244 芯片的引脚 图 7.2 74LS244 扩展两个输入口2. 多输入口扩展 使用多片 74LS244 实现多个(例如 5 个)输入口扩展的电路连接如图 7.3 。

1

5

10

CCV

11

15

201CS2CS1A1

2A1

3A1

4A1

3A2

2A2

1A2

4A21Y1

2Y1

3Y1

4Y11Y2

2Y2

3Y2

4Y2

GND

输入设备

74LS244

1CS 2CS

地址选通信号

RD

ALE

P0 74LS3732716

74LS244 74LS

244

P2.7

80C31

Page 6: 第七章   单片机 I/O 口扩展及应用

ALE

P0 74LS373 2716

RD

7.23.2 P~P

CSY YCS CS CS CSY Y Y

74LS244

图 7.3 多个(例如 5 个)输入口扩展的电路 7.2.2 简单输出口扩展1. 简单输出口扩展使用的典型芯片 简单输出口扩展通常使用 74LS377 芯片,该芯片是一个具有“使能”控制端的锁存器。其信号引脚如图 7.4 所示。其中:1D ~ 8D 为 8 位数据输入线, 1Q ~ 8Q 为 8 位数据输出线,CK 为时钟信号上升沿数据锁存,为使能控制信号,低电平有效。 VCC 为+ 5V 电源。 74LS377 的逻辑电路如图 7.5 所示。

Page 7: 第七章   单片机 I/O 口扩展及应用

图 7.4 74LS377 引脚图 图 7.5 74LS377 的逻辑电路

由逻辑电路可知, 74LS377 是由 D 触发器组成的, D触发器在上升沿输入数据,即在时钟信号( CK )由低电平跳变为高电平时,数据进入锁存器。其功能表如表 7-1所示。

G1Q

1D

3D 6D

2D 7D

GND

4D

7Q2Q

8Q

4Q

CK

5Q

3Q 6Q

5D

8D

CCV

74LS377

8D

1D

CK

G

1Q

~8Q

D QCK G

GCKD Q

Page 8: 第七章   单片机 I/O 口扩展及应用

输出口扩展连接:扩展单输出口只需要一片 74LS377 ,其连接电路如图 7.6 所示。

1Q~8Q

1D~8DP0. 0~P0. 7

WR

地址译码信号

80C51

74LS377

输出设备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 作输出口扩展

Page 9: 第七章   单片机 I/O 口扩展及应用

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

Page 10: 第七章   单片机 I/O 口扩展及应用

PA3

PA2

PA1

PA0

8255

RD

GND

A1

A0

PC7

PC4

PC0

PC3

PB0

PB3

PA3 PA4

PA7

WR

RESET

D0

D7

Vcc

PB7

PB3

图 7.7

Page 11: 第七章   单片机 I/O 口扩展及应用

:片选信号线,低电平(有效)时, 才选中该芯片,才能对 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 地址编码

Page 12: 第七章   单片机 I/O 口扩展及应用

由 、 、 和可以确定 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 RD WR

Page 13: 第七章   单片机 I/O 口扩展及应用

2. 内部结构 8255 的内部结构框图如图 7.8 所示。从图可以看到,左边的信号与系统总线相连。而右边是与外设相连接的三个口。三个口均为 8 位。其中 A 口输出有锁存能力,输入亦有锁存能力。 B 口输入输出均有锁存能力。 C 口输出有锁存能力,输入没有锁存能力,在使用上要注意到这一点。

Page 14: 第七章   单片机 I/O 口扩展及应用

数据总线缓冲器

/读 写控制逻辑

A组控制

A组C端口

高四位

B组控制

A组端口

A

B组B端口

B组C端口

低四位

DB

RD

1A0A

RESET

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

Page 15: 第七章   单片机 I/O 口扩展及应用

7.3.2 8255 的扩展逻辑电路 MCS-51 单片机可以和 8255 直接连接,图 7.9 给出了一种扩展电路。

RESET

CS 70 PAPA ~

70 PBPB ~

70 PCPC~

WR

0.0P

7.0P7.2P

1A0A0D

7D

8031 8255

74LS373

RST

ALE

RDRDWR

图 7.9 8255 的扩展逻辑电路

Page 16: 第七章   单片机 I/O 口扩展及应用

7.3.3 8255 的工作方式8255 共有三种工作方式,这些工作方式可用软件编程来指定。

1. 工作方式 0 ,又称基本输入输出方式2. 工作方式 1 ,又称选通输入输出方式

在这种方式下, A 口和 B 口仍作为数据的输出或输入口而同时要利用 C 口的某些位作为控制和状态信号,从而实现这种工作方式。 ( 1 )方式 1 下, A 口和 B 口均为输出 各条控制引线的定义如图 7.10 所示。 各控制信号的含义如下:

Page 17: 第七章   单片机 I/O 口扩展及应用

: 输出缓冲器满信号,低电平有效。用来告诉外设,在规定的接口上 CPU 已输出一个有效的数据,外设可以从该口取走此数据。 :外设响应信号,低电平有效。用来通知接口外设已经将数据接收,并使 。 INTR :中断请求信号,高电平有效。当外设已从接口取走数据,口的缓冲器变空,且接口允许中断时, INTR 有效。即, 且允许中断,则 INTR=1 。

OBF

ACK

1OBF

1ACK 1OBF

Page 18: 第七章   单片机 I/O 口扩展及应用

( 2 )方式 1 下, A 口和 B 口均为输入 这种情况和两口均为输出类似,各条控制引线的定义如图 7.11 所示。

A口

B口

PC7 PC6 PC3

PC2 PC0 PC1

OBFAACKA

ACKBOBFB

INTRA

INTRB

8255

A口

B口

PC4 PC5 PC3

PC2

PC0 PC1

STBA

STBB

INTRA

INTRB

IBFA

IBFB

8255

图 7.10 A 口和 B 口作输出口时,C 口提供的控制引线 图 7.11 A 口和 B 口作输入口时,

C 口提供的控制引线

Page 19: 第七章   单片机 I/O 口扩展及应用

各控制信号的含义如下: :输入选通信号,低电平有效。它由外设提供,利用该信号可以将外设数据锁存于 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

Page 20: 第七章   单片机 I/O 口扩展及应用

A口

PC4 PC5

PC3

OBFAACKASTBA

PC6 PC7

IBFAINTRA

8255

图 7.12 工作方式 2 时, C 口提供的控制线 7.3.4 8255 的控制字及初始化程序 8255 是编程接口芯片,通过控制字(控制寄存器)对其端口的工作方式和 C 口各位的状态进行设置。 8255 共有两个控制字,一个是工作方式控制字,另一个是 C 口置位 / 复位控制字。这两个控制字共用一个地址,通过最高位来选择使用那个控制字。1. 工作方式控制字 主要功能:确定 8255 接口的工作方式及数据的传送方向。各位的控制功能如图 7.13 所示。

Page 21: 第七章   单片机 I/O 口扩展及应用

0D1D2D3D4D5D6D7D

标志位1:方式控制字0:C口置位/复位控制字

C口低四位输入还是输出0:输出1:输入

B口输入还是输出0:输出1:输入B口工作方式0:方式01:方式1

A口输入还是输出0:输出1:输入

C口高四位输入还是输出0:输出1:输入

A口工作方式00:方式001:方式11 :方式2×

图 7.13 8255 工作方式控制字

Page 22: 第七章   单片机 I/O 口扩展及应用

对工作方式控制字作如下说明: A 口可工作在方式 0 、方式 1 和方式 2 , B 口可工作在方式 0 和方式 1 在方式 1 或方式 2 下,对 C 口的定义(输入或输出)不影响作为控制信号使用的 C 口各位功能 最高位是标志位,作为方式控制字使用时,其值固定为 1 。 2. 置位 /复位控制字 在某些情况下, C 口用来定义控制信号和状态信号,因此 C 口的每一位都可以 进行置位或复位。对 C 口的置位或复位是由置位 / 复位控制字进行的。各位的功能如图 7.14 所示。其中,最高位必须固定为“ 0” 。

Page 23: 第七章   单片机 I/O 口扩展及应用

0D1D2D3D4D5D6D0

标志位1:方式控制字2:C /口置位 复位控制字

未使用 确定对那个位进行置位或复位。000:001:010:011:100:101:110:111:

确定某位置位还是复位0:复位1:置位PC0

PC7

图 7.14 8255置位 / 复位控制字

10

Page 24: 第七章   单片机 I/O 口扩展及应用

3. 8255初始化 8255初始化就是向控制寄存器写入工作方式控制字和 C 口置位 / 复位控制字。例如,对 8255 各口作如下设置: A 口方式0 输入, B 口方式 1 输出, C 口高位部分为输出,低位部分为输入。设 8255 的扩展电路如图 7.8 所示,则控制寄存器的地址为 7FFFH 。按各口的设置要求,工作方式控制字为 10010101 ,即 95H 。所以初始化程序应为:MOV DPTR, #7FFFHMOV A, #95HMOVX @DPTR, A

7.3.5 8255 的应用举例1. 光二极管显示器的工作原理 LED显示器中的发光二极管共有两种连接方法,一种是共阴极连接,另一种共阳极连接。其连接图如图 7.15 ( b )所示。

Page 25: 第七章   单片机 I/O 口扩展及应用

图 7.15 七段 LED显示器 使用 LED显示器时,要注意区分这两种不同的接法。为了显示数字或字符,必须对数字或字符进行编码。七段数码管加上一个小数点,共计 8段。因此为 LED显示器提供的编码正好是一个字节。用 LED显示器显示 16 进制数的编码已列在表 7-4 所示。

a b

cde

g

GND

f

dp

GND

a

b

ce

fg

d ·dp

a

bc

defg

dp dpgf

ed

cb

a

+5V

a( ) b( )

Page 26: 第七章   单片机 I/O 口扩展及应用

字型 共阳极代码 共阴极代码

01234567 0F8H 07H

82H 7DH92H 6DH99H 66H0B0H 4FH0A4H 5BH0F9H 06H0C0H 3FH

8 80H 7FH

字型 共阳极代码 共阴极代码9ABCDEF灭 0FFH 00H

8EH 71H86H 79H0A1H 5EH0C6H 39H83H 7CH88H 77H90H 6FH

为了实现 LED显示器的动态扫描除了要给显示器提供段码(字形编码)的输入之外,还要对显示器加位的控制(控制LED显示器亮灭),这就是通常所说的位控和段控。

表 7-4 LED显示器 16 进制数编码

Page 27: 第七章   单片机 I/O 口扩展及应用

2. 应用举例具体要求:      6 个 LED采用共阴极连接         79H ~ 7EH 分别存放 6 位显示器的显示数据( 0 ~9 )         8255 的 A 口接 LED显示器位控         8255 的 B 口接 LED显示器段控 ( 1 )       电路设计RD

RESET

CS

5PA

0PBWR

0.0P

7.0P7.2P

1A0A0D

8031 8255

74LS373

RST

ALE

WR

· · · · · ·

0PA

7PB

RD

7D

Page 28: 第七章   单片机 I/O 口扩展及应用

经分析知: 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  

Page 29: 第七章   单片机 I/O 口扩展及应用

  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  

Page 30: 第七章   单片机 I/O 口扩展及应用

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

Page 31: 第七章   单片机 I/O 口扩展及应用

:地址数据复用线。:片选信号。低电平有效。

: 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

Page 32: 第七章   单片机 I/O 口扩展及应用

TIMERIN :定时器 /计数器的计数脉冲输入端。 TIMEROT :定时器 /计数器。2. 内部逻辑结构 8155 的内部逻辑结构如图 7.17 所示。由图可以看出, 81

55 由三部分组成,即:存储单元为 256 字节的静态 RAM ; 3

个可编程的 I/O ,其中 2 个口( A 口和 B 口)为 8 位口, 1 个口( C 口)为 6 位口; 1 个 14 位的定时器 /计数器

Page 33: 第七章   单片机 I/O 口扩展及应用

图 7.17 8155 的内部逻辑结构 由以上可知 8155 有 A 口、 B 口、 C 口和定时器 /计数器低 8位以及定时器 /计数器高 8 位五个端口,另外 8155 内部还有一个命令 / 状态寄存器,所以 8155 内部共有 6 各端口。对它们只需要使用即可实现编址,如表 7-5 所示。

RD

CS70 AD~AD

RESET

WR

TIMERIN

TIMEOUT

M/IO

ALE

256字节静态RAM

14位定时计数器

A

B

C

70 PA~PA

70 PB~PB

50 PC~PC

Page 34: 第七章   单片机 I/O 口扩展及应用

表 7-5 8155 的端口地址编码AD

7

AD6

AD5

AD4

AD3

AD2

AD1

AD0

对应端口

× × × × × 0 0 0 命令 / 状态寄存器× × × × × 0 0 1 A 口

× × × × × 0 1 0 B 口

× × × × × 0 1 1 C 口

× × × × × 1 0 0 定时器 /计数器低 8 位× × × × × 1 0 1 定时器 /计数器高 8 位

Page 35: 第七章   单片机 I/O 口扩展及应用

7.4.2 8155 的命令 / 状态字1. 8155 的命令字 由以上内容可知, 8155 的 A 口有输入和输出两种工作方式, B 口也有输入和输出两种工作方式,而 C 口有输入方式( ALT1 ),输出方式( ALT2 ), A 口控制端口方式( ALT3 )以及 A 口 和 B 口控制端口方式( ALT4 )四种工作方式。这些端口的工作方式是由 8155 内部的命令寄存器(命令字)来控制的。命令字除了规定端口的工作方式还规定了定时器 /计数器的工作方式。命令字只能进行写操作。其格式如图 7.18 所示。

Page 36: 第七章   单片机 I/O 口扩展及应用

图 7.18 8155 的命令字 当 A 口或者 B 口以中断方式进行数据传送时,所需要的联络信号由 C 口提供,其中为 A 口提供,为 B 口提供。各联络信号的定义如表 7-6 所示。

0D1D2D3D4D5D6D7D

A口工作方式0:输入1:输出

B口工作方式0:输入1:输出

A口中断0:禁止1:允许

C口工作方式00 ALT1:01 ALT2:10 ALT3:11 ALT4:

B口中断0:禁止1:允许

定时器工作方式:00:无操作01:停止计数10:计满后停止11:开始计数

Page 37: 第七章   单片机 I/O 口扩展及应用

表 7-6 联络信号

0PC

1PC

2PC

3PC

4PC

5PC BSTB

ASTB ASTB

C 口 对 A 口控制( ALT3 ) 对 A 口和 B 口控制( AL

T4 ) AINTR AINTR

ABF ABF

输出 BINTR

输出 BBF

输出

Page 38: 第七章   单片机 I/O 口扩展及应用

联络信号共有三个,其中: INTR :中断请求信号(输出),高电平有效。送给 MCS-51 单片机的外中断请求 BF :缓冲器满状态信号(输出),高电平有效。 :选通信号(输入),低电平有效。数据输入时, 是外设送来的选通信号;数据输出时, 是外设送来的应答信号。 以中断方式进行数据输入输出时,其过程和 8255 基本相同,在此不作赘述。2. 8155 的状态字 状态字只能读不能写,所以 8155 的命令字和状态字共用一个地址。当对命令 / 状态字进行写操作时,写进去的是命令,当对命令 / 状态字进行读操作时,读出来的是状态。状态字用于寄存各端口及定时器 /计数器的工作状态。其格式如图 7.19所示。

STB

STBSTB

Page 39: 第七章   单片机 I/O 口扩展及应用

0D1D2D3D4D5D6D

INTRA:A口中断请求

ABF A /: 口缓冲器满 空

I NTRB B: 口中断请求

INTEA:A口中断允许

TIMER:定时器中断(计数满时为高电平,读出状态字或硬件复位为低电平

×

BBF:B /口缓冲器满 空

INTEB:B口中断允许

图 7.19 8155 的状态字7.4.3 8155 的扩展逻辑电路 8155 与 MCS-51 单片机的连接比较简单,因为 8155 的许多信号与 MCS-51 单片机兼容,可以直接连接。表 7-7 列出了这些信号的对应关系。

Page 40: 第七章   单片机 I/O 口扩展及应用

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

Page 41: 第七章   单片机 I/O 口扩展及应用

RD

RESET

70 PAPA ~

70 PBPB ~

50 PCPC~

WR

8051 8155

RST

7.0P

0.0P

ALE

WRRD

0AD

7AD

ALE

M/IOCS1.2P

0.2P

图 7.20 高位地址直接作为信号 假设没有用到的地址位其值为系统复位后的值,即为 1 。则 时 , 端口地址范围为: 0FDF8H ~ 0FDFDH ; 时,8155 内部 RAM 地址范围是: 0FC00H ~ 0FCFFH 。7.4.4 8155 的定时器 /计数器1. 8155 定时器 / 计数器的计数结构

1M/IO 0M/IO

Page 42: 第七章   单片机 I/O 口扩展及应用

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

Page 43: 第七章   单片机 I/O 口扩展及应用

   ② MCS-51 单片机的定时器 /计数器有多种工作方式,而 8155 的定时器 /计数器只有一种固定的工作方式,即 14 位计数。通过软件方法进行计数初加载。③ MCS-51 单片机的定时器计数器有两种计数脉冲。定时功能时,以机器周期为计数脉冲;计数功能时,从芯片外部引入计数脉冲。但 8155 的定时器 /计数器,  不论是定时功能还是计数功能都是由外部提供计数脉冲,其信号引脚是 TIMERIN。④ MCS-51 单片机的定时器 / 计数器,计数溢出时,自动置位TCON寄存器的计数溢出标志位( TF) ,供用户查询或中断方式使用;但 8155 的定时器 / 计数器,计数溢出时向芯片外部输出一个信号( TIMEROUT)。而且这一信号还有脉冲和方波两种形式,可由用户进行选择。具体由 , 两位定义: 2M 1M

Page 44: 第七章   单片机 I/O 口扩展及应用

=00 单个方波 =01 连续方波 =10 单个脉冲 =11 连续脉冲这四种输出形式如图 7.22 所示。

2M 1M

0 0

0 1

1 0

1 1

单个方波

连续方波

单个脉冲

连续脉冲

开始计数 停止计数

12MM

图 7.22 8155 信号输出形式

12MM

12MM

12MM

Page 45: 第七章   单片机 I/O 口扩展及应用

3. 定时器 / 计数器的控制 8155 定时器 /计数器的工作方式由命令字中的最高两位进行控制(见图 7.18 )。具体说明如下: D7D6=00 不影响计数器工作。 D7D6=01 停止计数。如计数器未启动则无操作,如计数器正运行则停止计数。 D7D6=10 达到计数值(计数器减为 0 )后停止。 D7D6=11 启动,如果计数器没运行,则在装入计数值后开始计数;如果计数器已运行,则在当前计数值计满后,再以新的计数值进行计数。

Page 46: 第七章   单片机 I/O 口扩展及应用

7.4.5 8155 的初始化 要求使用 8155 定时器 /计数器对计数脉冲进行千分频,即计数 1000 后, TIAMEROUT 端电平状态发生变化,并重新置数以产生连续方波。此外假定 A 口为输出方式,允许中断; B 口为输入方式,不允许中断; C 口为对 A 口控制方式( ALT3 )。请编写初始化程序。 解:要求输出连续方波,所以定时器 /计数器的最高两位 M2 M1= 01 。计数器的其它 14 位装入计数初值。 8155

为减法计数,所以计数初值为 1000 ,化为 16 进制数为 03E8

H 。则定时器 /计数器的高 8 位为: 43H ,低 8 位为: 0E8

H 。命令名字的设置如下:

Page 47: 第七章   单片机 I/O 口扩展及应用

计数器 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 位

Page 48: 第七章   单片机 I/O 口扩展及应用

7.4.6 8155 的应用举例 8155 有很强的功能,在此以 8155 作单片机键盘接口为例进行说明。在讲此例之前首先说明单片机的键盘接口和键功能的实现。1. 单片机的键盘接口处理 单片机的键盘接口处理的内容包括以下几个方面:键扫描

(a) (b)

(c)

输入口

输入口

输入口

A A

A

1111

1111

1101

0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1

1 1 0 1 1 1 1 1

+5V

+5V +5V

输出口

输出口

输出口

图 7.23 键扫描示意图

Page 49: 第七章   单片机 I/O 口扩展及应用

去抖动 键按下

键稳定

前沿抖动 后沿抖动

图 7.24 键闭合和断开时的电压抖动键码计算例如图 7.25 所示的键号是按从左到右、从上向下的顺序编排的。 00H

19H18H

17H16H13H12H11H10H

08H 09H 0AH 0BH 0EH 0FH

07H06H03H02H01H

1AH 1BH 1EH 1FH

。。。。。。

。。。。。。

。。。。。。

。。。。。。

图 7.25 键码图

Page 50: 第七章   单片机 I/O 口扩展及应用

这样安排,使键码既可根据行号列号以查表求得,也可通过计算得到。图 7.25 所示的键码编排规律,各行首号依次是 00H 、 08H 、 10H 、 18H ,如列号按 0 ~ 7顺序,则键码的计算公式为:等待键释放 计算键码后,再以延时后进行行扫描的方法等待键释放。等待释放是为了保证键的一次闭合仅进行一次处理。2.键盘接口的控制方式 在单片机的运行过程中,何时执行键盘扫描和处理,可有下列三种情况:       随机方式,每当CPU空闲时执行键盘扫描程序       中断方式,每当有键闭合时才向 CPU发出中断请求中断响应后执行键盘扫描程序 定时方式,每隔一定时间执行一次键盘扫描程序,定时可由单片机的定时器完成。

Page 51: 第七章   单片机 I/O 口扩展及应用

3. 键处理子程序 在计算机中每一个键都对应一个处理子程序,得到闭合键的键码后,就可以根据键码,转到相应的键处理子程序(分支以 JMP等散转指令实现),进行字符、数据的输入或命令处理。这样就可以实现该键设定的功能。总结以上内容,键处理的流程如图 7.26 所示。

开始

键扫描

有无键按下

去抖动

键码计算

键释放

J MP@A+DPTR

00#键处理程序

01#键处理程序

· · #键处理程序

nn#键处理程序· · · · · · ·

A=00H A=01H A=· · H A=nnH

图 7.26 键处理的流程图

Page 52: 第七章   单片机 I/O 口扩展及应用

4. 用 8155 作单片机键盘接口① 接口电路逻辑图 以 8155 作 8×4键盘的接口为例。 A 口为输出口,接键盘列线。 C 口为输入口,以接键盘的 4 条行线。如图 7.27 所示。RD

RESET

WR

8051 8155

RST

7.0P

0.0P

ALE

WRRD

0AD

7AD

ALE

M/IOCS1.2P

0.2P

+5V

5.1K× 42 3 4 5 6 710151412 1311109823222120191817163130292827262524

图 7.27 8155 作键盘接口 则 A 口地址为 0FDF9H , C 口地址为 0FDFBH 。 ② 判定有无闭合键的子程序 判定有无闭合键的子程序为 KSI ,供在键盘扫描程序中调 用。程序如下:

Page 53: 第七章   单片机 I/O 口扩展及应用

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(

Page 54: 第七章   单片机 I/O 口扩展及应用

③键盘扫描程序 如前所述,在单片机应用系统中常常是键盘和显示器同时存在,因此可以把键盘扫描程序和显示程序配合起来使用,即:把显示程序作为键扫描程序的延时子程序。这样做既省去了一个专门的延时子程序,又能保证显示器常亮的可观效果。 假定本系统中显示程序为 DIR ,执行时间约为 6ms 。键盘扫描程序如下:

Page 55: 第七章   单片机 I/O 口扩展及应用

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 口

Page 56: 第七章   单片机 I/O 口扩展及应用

  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 ;扫描完毕,开始新一轮

Page 57: 第七章   单片机 I/O 口扩展及应用

键盘扫描程序的运行结果是把闭合键的键码放在累加器 A中。接下来的程序是根据键码进行程序转移,转去执行该键对应的