94
80C51 的的 的的 80C51 的的的的的的的 ROM RAM) 80C51 的的的的的的的的的的的 的的的 80C51 的的的的的的 ( 的的 8155

模块七

  • Upload
    jolene

  • View
    31

  • Download
    1

Embed Size (px)

DESCRIPTION

模块七. 80C51 的系统扩展. 本章主要内容. 80C51 存储器扩展 ( 扩展 ROM 、 RAM ). 80C51 并行接口扩展 ( 芯片 8155 ). 80C51 单片机键盘和显示器扩展. 问题的提出 1. 80C51 系列典型产品资源配置. 芯片型号. ROM 类型及字节数. RAM 字节数. 分类. 基本型. 80C31. 无 ROM. 128B. 80C51. 4KB 掩膜 ROM. 128B. 87C51. 4KBEPROM. 128B. 89C51. 4KBFLashROM. 128B. 80C32. 增强型. - PowerPoint PPT Presentation

Citation preview

Page 1: 模块七

80C51 的系统扩展

80C51 存储器扩展(扩展 ROM 、 RAM)

本章主要内容 80C51 单片机键盘和显示器扩展

模块七

80C51 并行接口扩展 (芯片 8155 )

Page 2: 模块七

问题的提出1 80C51 系列典型产品资源配置

分类 RAM 字节数芯片型号 ROM 类型及字节数

基本型

80C31

80C51

87C51

89C51

80C32

80C52

87C52

89C52

增强型

无 ROM

4KB 掩膜 ROM

4KBEPROM

4KBFLashROM

无 ROM

8KB 掩膜 ROM

8KBEPROM

8KBFLashROM

128B

128B

128B

128B

256B

256B

256B

256B

Page 3: 模块七

问题的提出2

并行口 P0 、 P1 、 P2 、P3

1234567891011121314151617181920

4039383736353433323130292827262524232221

RST

XTAL2XTAL1

VSS

VCC

EA/VPP

PSEN

8031

8051

8751

89C51

RXDTXD/INT0/INT1T0T1/WR/RD

P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7

P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7

P2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.7

P3.0P3.1P3.2P3.3P3.4P3.5P3.6P3.7

ALE/PROG

Page 4: 模块七

接口名称

第一功能 第二功能

P0 I/O 口(需接上拉电

阻 )

地址 /数据总线(扩展片外ROM/RAM 时使用) MOVC/MOV

X)P1 I/O 口

(需接上拉电阻 )

P2 I/O 口(需接上拉电

阻 )

高 8位地址总线(扩展片外ROM/RAM 时使用) (MOVC/MO

VX)P3 I/O 口

(需接上拉电阻 )

P3.0 : RXD ; P3.1 : TXD ; 等等

并行口 P0 、 P1 、 P2 、P3

Page 5: 模块七

问题的提出3

在单片机的应用系统设计中,往往出现 ROM 、 RAM 和 I/O 口不够用时怎么办?

▼ ROM 扩展

▼ RAM 扩展▼ I/O 接口扩展

Page 6: 模块七

一、存储器的扩展当系统要求扩展时,为了便于与各种芯片相连接,应将其外部连线变为与一般 CPU 类似的三总线结构形式,即

数据总线( DB ):

地址总线 (AB ):

控制总线( CB ):

宽度为 8位 ,由 P0 口提供 ;

宽度为 16 位 ,低 8位地址由 P0口分时复用,高 8位地址由 P2口提供 ;/RD 、 /WR 、 /EA 、 ALE 和 /PSEN 等信号组成。

Page 7: 模块七

1 、程序存储器的扩展片内资源: ▼80C31 片内无 ROM , 80C51 片内 RO

M 容量为 4KB 。

▼片外最大可扩展 ROM 为 64KB 。

用到锁存器芯片:

能够作为片外 ROM 的芯片主要有 EPROM 存储器和 E2PROM 存储器。

例如 74LS373

▼相关引脚: EA

Page 8: 模块七

①常见 EPROM 芯片的主要技术特性

芯片型号 容量 /KB

引脚数

读出时间 /ns

最大工作电流 /mA

最大工作电流 /mA

2732

4

24

100 ~ 300

2764

8

28

100 ~ 300

27128

16

28

100 ~ 300

27256

32

28

100 ~ 300

27512

64

28

100 ~ 300

100

35

75

35

100

40

100

40

125

40

Page 9: 模块七

②常见 E2PROM 芯片的主要技术特性

芯片型号 容量 /KB

引脚数

读操作电压

2816

4

24

5V

2816A

8

24

5V

2817

16

28

5V

2817A

32

28

5V

2864

64

28

5V

写操作电压 21V 5V 21V 5V 5V

擦除时间 /ms 10 9~15 10 10 10

写入时间 /ms 10 9~15 10 10 10

▼E2PROM 具有 ROM 的非易失性,同时又具有 RAM的随机读 /写特性,可使用单片机系统的 5V 电源在线擦除和改写。每个单元可以重复进行 1万次改写。

Page 10: 模块七

③ 8KB EPROM 2764 引脚功能VPP

A12A7A6A5A4A3A2A1A0D0D1D2GND

2764

2764 引脚功能A0~A12 地址线

D0~D7 数据线

地址线

地址线

编程脉冲输入

VPP 编程电源

CE

OE

VccPGMN.CA8A9A11OEA10CED7D6D5D4D3

PGM

Page 11: 模块七

④ 地址锁存器的结构地址锁存器一般选用带三态缓冲输出的 8D锁存器 74LS373 。

G 高电平 Q=D

D

G Q

D0

D

G Q

D7

. . .

Q0

Q7

. . .

G

D 触发器三态门

OE

D 锁存在 Q 中

G低电平, D变化时Q不再随之变化

74L

S37

3

GOE

D7

D0

Q7

Q0

地址锁存器

Page 12: 模块七

D0D1D2D3D4D5D6D7

Q0Q1Q2Q3Q4Q5Q6Q7

8D 锁存器 三态门

⑤ 地址锁存器的工作原理

G

OE

G 高电平Q=D

D 锁存在 Q 中

G 低电平, D变化时Q不再随之变化

IN OUT

Page 13: 模块七

74L

S37

3276480C31

80C31 扩展 2764A 程序存储器

P2.7

P2.0~P2.4

ALE

P0

EA

A8~A12

CE

A7

A0

D0~D7

OE

8KB ROM

G OED7

D0

Q7

Q0

PSEN

Page 14: 模块七

扩展 ROM 地址分配表及其读操作

P2.7 P2.6 P2.5 P2.4~P2.0 P0.7~P0.0

0 × × 0 0 0 0 0 0 0 0 0 0 0 0 0

0 × × 1 1 1 1 1 1 1 1 1 1 1 1 1

扩展 ROM 地址可以为: 0000H ~ 1FFFH.

MOV DPTR,#1000H

MOVC A,@DPTR

读 ROM 1000H 单元操作

Page 15: 模块七

74L

S37

3276480C51

80C51 扩展 2764A 程序存储器

P2.7

P2.0~P2.4

ALE

P0

EA

A8~A12

CE

A7

A0

D0~D7

OE

8KB ROM

G OED7

D0

Q7

Q0

PSEN

VCC

Page 16: 模块七

扩展 ROM 地址分配表及其读操作

P2.7 P2.6 P2.5 P2.4~P2.0 P0.7~P0.0

0 × 0 1 0 0 0 0 0 0 0 0 0 0 0 0

0 × 1 0 1 1 1 1 1 1 1 1 1 1 1 1

片外 ROM 地址可以为: 1000H ~ 2FFFH 。

由于 80C51 内部已经有 4KBROM ( 0000H ~0FFFH ),同时 /EA 接高电平,所以扩展 ROM地址范围为:

Page 17: 模块七

74L

S37

3

276480C31

P2.7

P2.0~P2.4

ALE

P0

EA

A8~A12

CE

A7

A0

D0~D7

OE

G OED7

D0

Q7

Q0

PSEN

执行 MOVC A, @DPTR 读片外 ROM 指令时,使 /PSEN 信号变为低电平,从而选通 /OE 。

Page 18: 模块七

2 、数据存储器的扩展片内资源: ▼80C51 片内仅 128BRAM , 80C52 片

内也仅 256BRAM 。

▼片外最大可扩展 RAM 为 64KB 。

用到锁存器芯片:

常用的数据存储器 SRAM 芯片有 6116 、 6264 、62256 等。

例如 74LS373

片外 RAM 的读和写由 80C51 的 RD 和 WR 信号控制。

Page 19: 模块七

① 8KB SRAM 6264 引脚功能

6264

2764 引脚功能A0~A12 地址线

D0~D7 数据线

片选

CE

OE

WE

N.CA12A7A6A5A4A3A2A1A0D0D1D2GND

VccWECSA8A9A11OEA10CED7D6D5D4D3

Page 20: 模块七

74L

S37

3626480C31

80C31 扩展 6264A 程序存储器

P2.7

P2.0~P2.4

ALE

P0

WR

RD

A8~A12

CE

A7

A0

D0~D7

WE

OE

8KB RAM

G OED7

D0

Q7

Q0

CS

+ 5V

Page 21: 模块七

扩展 RAM 地址分配表及其读操作P2.7 P2.6 P2.5 P2.4~P2.0 P0.7~P0.0

0 × × 0 0 0 0 0 0 0 0 0 0 0 0 0

0 × × 1 1 1 1 1 1 1 1 1 1 1 1 1

扩展 RAM 地址可以为: 0000H ~ 1FFFH ,地址不是唯一的 ,也可以为: 6000H ~ 7FFFH

MOV DPTR,#1000H

MOVX A,@DPTR

读 RAM 操作实例

写 RAM 操作实例MOV DPTR,#1000H

MOVX @DPTR,A

Page 22: 模块七

读写片外 RAM8KB RAM

74L

S3

73

626480C31

P2.7

P2.0~P2.4

ALE

P0

EA

WR

RD

A8~A12CE

A7

A0D0~D7

WEOE

G OED7

D0

Q7

Q0

执行 MOVX A,@DPTR 片外读指令时,使 /RD 信号变为低电平,从而选通 /OE执行 MOVX @DPTR , A 片外写指令时,使 /WR 信号变为低电平,从而选通 /WE 。

CS

Page 23: 模块七

二、并行接口( I/O 接口)的扩展

▼对于简单的 I/O 设备可以直接于单片机的 4个并行接口或 1个串行接口连接。

▼现在许多 I/O 接口已经系列化、标准化,并具有可编程功能。

▼当 I/O 接口不够用或当系统较为复杂时,往往要借助于输入 /输出接口电路(简称 I/O 接口)完成单片机与 I/O 设备的。

本小节主要学习可编程接口芯片 8155

Page 24: 模块七

单片机与 I/O 设备

80C51

P1

P0

P2

P3 I/O

设备

数据 /地址复用

高 8位地址

第二功能

存在的问题

③I/O 设备信号类型多样,有些不能与单片机直接连接。等等

①单片机的 I/O口有限;

②单片机要比 I/O 设备快很多;

Page 25: 模块七

单片机与 I/O 设备

80C51

P1

P0

P2

P3 I/O

设备

数据 /地址复用

高 8位地址

第二功能

I/O接口

数据

控制信号

状态信号

Page 26: 模块七

74L

S37

3

80C51

1 、单片机与 I/O 设备的关系

P2

ALE

P0

WR

RD

G OED7

D0

Q7

Q0

状态端口

数据端口

控制端口

I/O设备

I/O 接口状态信号

数据

控制信号

Page 27: 模块七

2 、 I/O 接口的功能① 对单片机输出的数据锁存单片机要比 I/O 设备快得多, I/O 接口的数据端口要锁存数据线上 瞬间出现的数据,以解决单片机与 I/O 设备的速度协调问题。

② 对输入设备的三态缓冲单片机的数据是所有 I/O 设备分时复用的,利用I/O 接口的三态缓冲功能,可以实现 I/O 设备与数据总线的隔离,从而实现 I/O 设备的总线共享。

Page 28: 模块七

③ 信号转换必须利用 I/O 接口实现单片机与 I/O 设备间信号类型(数字与模拟、电流与电压)、信号电平(高与低、正与负)、信号格式(并行与串行)等的转换。

④ 时序协调

I/O 接口的功能

单片机输入输出数据时,只有 I/O 设备准备好了,才能进行读写操作。不同的 I/O 设备的定时与控制逻辑是不同的,需要 I/O 接口进行时序的协调。

Page 29: 模块七

3 、可编程接口 8155 与显示器

本小节主要内容:

2) 8155 的引脚及结构3) 8155 的工作方式

6) 计数器输出模式7) 选通 I/O 的组态

4) 8155 芯片与单片机的接口

1) 七段 LED 显示器工作原理

5) 8155 的状态字格式

Page 30: 模块七

LED 显示器由若干个发光二极管组成,当发光二极管导通时,相应的一个笔画或一个点发光。

b

c

d

fg

e

aa b c d e f g

1 1 1 1 1 1 0

0 1 1 0 0 0 0

1 1 0 1 1 0 1

1 )七段显示器件的工作原理

Page 31: 模块七

数码显示器简介 七段半导体数码显示器 (LED)

a

b

c

d

e

fg

DP

ag f COM b

ce d COM DP

a

b

c

d

e

fg

DP

  发光字段,由管脚 a ~ g 电平控制是否发光。

小数点,需要时 才点亮。

显示的数字形式

常用共阴极 LED

Page 32: 模块七

主要优点:字形清晰、工作电压低、体积小、可靠 性高、响应速度快、寿命长和亮度高等。

主要缺点:工作电流大,每字段工作电流约 10 mA 。

共阳接法 共阴接法

半导体数码显示器内部接法

COM

COMDP g f e d c b a

DP g f e d c b aCOM

COM

VCC

+5 V

串接限流电阻

a ~ g 和 DP 为低电平时才能点亮相应发光段。

a ~ g 和 DP 为高电平时才能点亮相应发光段。

  共阳接法数码显示器需要配用输出低电平有效的译码器。

  共阴接法数码显示器需要配用输出高电平有效的译码器。

R

R

共阳极

共阴极

Page 33: 模块七

b

c

d

fg

e

aa b c d e f g

1 1 1 1 1 1 0

0 1 1 0 0 0 0

1 1 0 1 1 0 1

共阳顺序段码: C0H , F9H , A4H , B0H , 99H , 92H , 82H , F8H , 80H , 90H

共阴顺序段码: 3FH , 06H , 5BH , 4FH , 66H , 6DH , 7DH , 07H , 7FH , 6FH

Page 34: 模块七

项目七:六位动态 LED 显示1 、项目内容

2、项目分析

将 79H开始的六个单元依次送入 06H , 05H , 08H , 00H , 00H ,02H ,并将这些数据用六位 LED依次显示。

由于所需 LED 位数较多,采用动态 LED 显示较合适,采用 8155 接口芯片的 PA 口作为扫描口(字位口 ),PB 口作为段数据口(字型口)。

Page 35: 模块七

8155

PB0PB1PB2PB3PB4PB5PB6PB7

+5V

PA5PA4PA3PA2PA1PA0

7407×2

7406

3 、项目电路

AD0~AD7

CE

IO/M

RESET

ALE

RD

WR

80C51P2.7

P2.0

RESET

ALE

RD

WR

EA

P0

ab

cd

ef

gdp

+ 5V

COM

Page 36: 模块七

4 、画流程图

程序开始

送数据到 79H开始的显示缓冲单元

调用显示子程序

结束

设置 8155 工作方式

5、源程序

主程序流程图

主程序 ORG 0000H

START: AJMP MAIN

MAIN:ORG 0030H

MOV 79H,06HMOV 7AH,05HMOV 7BH,08HMOV 7CH,00HMOV 7DH,00HMOV 7EH,02HMOV DPTR,#7F00 H

MOV A,#03H

MOVX @DPTR,A

ACALL DISPLAY

ENDSJMP LOOP

LOOP:

Page 37: 模块七

扫描到第 6 个显示器否?

显示数据缓冲区首地址送 R0

使显示器最右边位亮

数据指针指向 A 口

送扫描值

数据指针指向 B口

取欲显示的数据

查表,取出字型码

调用延时子程序

未到,扫描码左移 1 位

4 、画流程图 显示子程序子程序入口

送显示

指向下一个显示段数据地址

Page 38: 模块七

5 、源程序 显示子程序

DISPLAY : MOV R0,#79H

MOV R3,#01H

MOV A, R3

MOV DPTR,#7F01H

MOVX @DPTR,A

INC DPTR

MOV A,@R0

ADD A,#0DH

MOVC A,@A+PC

MOVX @DPTR, A ACALL DEALY

MOV A,R3JB ACC.5 ,ELD1

INC R0

RL A

MOV R3,AAJMP LD0

ELD1:;-------------------- 段码DSEG: DB 3FH,06H,5BH,4FH DB 66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH DB 39H,5EH,79H,71H, DB 40H,00H

;R3 存放扫描值

DELAY: MOV R7,#200

DEL1: MOV R6,#123

NOP

DEL2: DJNZ R6,DEL2

DJNZ R7,DEL1

RET

LD0:

RET

Page 39: 模块七

2) 8155 的内部结构

256×8静态 RAM

命令 /状态寄存器

计数器

A

B

C

AD0~AD7

IO/M

CE

ALE

RD

WRRESET

TIMER IN

TIMER OUT

GND

VCC

PA0~PA7

PB0~PB7

PC0~PC5

Page 40: 模块七

8155 的引脚1234567891011121314151617181920

4039383736353433323130292827262524232221

ALEAD0AD1AD2AD3AD4AD5AD6AD7

GND

VCC

PA7PA6PA5.PA4PA3PA2.PA1PA0

8155

AD7~AD0: 三态地址 /数据总线

ALE: 地址锁存允许信号输入端CE

RESET: 复位信号输入端

RDWR

IO/M

PA0~PA7:A 口的 8根通用 I/O 口线PB0~PB7:B口的 8根通用 I/O 口线PC0~PC5:C 口的 6根数据 /控制线TIMER IN 、 TIMER OUT :计数器时钟输入输出端。

PB7PB6PB5PB4PB3PB2PB1PB0

PC2PC1PC0

PC3PC4

RESETTIMER IN

TIMER OUTPC5

CE: 片选信号

IO/M: 内部 端口和 SRAM 选择信号

WR 、 RD: 读写信号

Page 41: 模块七

3) 8155 的工作方式设置

命令寄存器和状态寄存器可以采用同一编址 ,简称命令 / 状态寄存器 , 用 C/S 表示。

▼8155 的工作方式设置通过命令字写入命令寄存器实现。

▼8155 的状态可以由读出状态寄存器的内部 获得。

▼从逻辑上说,只允许写入命令寄存器和读出状态寄存器,所以

Page 42: 模块七

工作方式设置▼8155 的状态可以由读出状态寄存器的内部 获得。

D7 D6 D5 D4 D3 D2 D1 D0

000PAPBPC2 PC1IEAIEBTM1TM2

A 口的中断允许设置位0:禁止; 1:允许

A口数据传送方向设置位。0:输入; 1:输出

C口工作方式设置位

计数器工作方式设置位

Page 43: 模块七

C 口工作方式

PC2 PC1 工作方式 说明0 0 ALT1

A 、 B 口为基本 I/O , C 口方向为输入

1 1 ALT2A 、 B 口为基本 I/O , C 口方向为输

0 1 ALT3A 口为选通 I/O , PC0~PC2 作为 A 口的选通

应答B 口为基本 I/O , PC3 ~ PC5方向为输出

1 0 ALT4A 、 B 口为基本 I/O , C 口方向为输

Page 44: 模块七

定时 / 计数器命令字

TM2 TM1 工作方式 说明0 0 方式 0 空操作,对计数器无影响0 1 方式 1 使计数器停止计数1 0 方式 2 减 1 计数器回 0后停止工作

1 1 方式 3未计数时,送完初值及方式后立即启动计数;正常计数时,重置初值后,减 1

计数器回 0则按新计数初值计数

Page 45: 模块七

4 ) 8155 的内部编址

▼8155 的内部 RAM 地址为 00H~FFH 。

▼8155 的内部 端口地址为 :000—命令 /状态寄存器001—A 口010—B 口011—C 口

100— 计数器低 8 位101— 计数器高 6 位及计数器方式设置位

Page 46: 模块七

8155

PB0PB1PB2PB3PB4PB5PB6PB7

+5V

PA5PA4PA3PA2PA1PA0

7407×2

7406

3 、项目电路

AD0~AD7

CE

IO/M

RESET

ALE

RD

WR

80C51P2.7

P2.0

RESET

ALE

RD

WR

EA

P0

ab

cd

ef

gdp

+ 5V

COM

Page 47: 模块七

8155

5 ) 8155 与单片机接口实例

AD0~AD7

CE

IO/M

RESET

ALE

RD

WR

80C51P2.7

P2.0

RESET

ALE

RD

WR

P0

PA

PB

PC

EA

+ 5V

TIME IN

TIME OUT

输出

输出

Page 48: 模块七

① 求 I/O端口地址P2.7 P2.6 ~ P2.1 P2.0 P0.7~P0.0 P0.2 P0.1 P0.0

0 ×××××××× 0 0 0

I/O 口

×××××× 1 命令状态口

0 ×××××××× 0 0 1×××××× 1 PA 口

0 ×××××××× 0 1 0×××××× 1 PB 口

0 ×××××××× 0 1 1×××××× 1 PC 口

0 ×××××××× 1 0 0×××××× 1 计数器低 8 位

0 ×××××××× 1 0 1×××××× 1 计数器高 6 位及方式

IO/M=1

Page 49: 模块七

P2.7~P2.0 P0.7 P0.1 P0.0

0××××××1 ×××××000

I/O 口

命令状态口

0××××××1 ×××××001 PA 口

0××××××1 ×××××010 PB 口

0××××××1 ×××××011 PC 口

0××××××1 ×××××100 计数器低 8 位

0××××××1 ×××××101 计数器高 6 位及方式

地址

7F00H

7F01H

7F02H

7F03H

7F04H

7F05H

▼ 一般将不用的 P2 口位置 1 ,而不用的 P0 口位置 0

Page 50: 模块七

② 求 RAM 地址 IO/M=0

P2.7 P2.6 ~ P2.1 P2.0 P0.7~P0.0

0 0000 0000

RAM 地址

×××××× 0 7E00H

0 0 7EFFH×××××× 1111 1111

▼RAM 地址因 P2.7=0 及 P2.0=0 ,故可选为

0111 1110 0000 0000B ( 7E00H )~ 0111 1110 1111 1111B ( 7EFFH )

Page 51: 模块七

② 求 8155 的工作方式字

D7 D6 D5 D4 D3 D2 D1 D0

000PAPBPC2 PC1IEAIEBTM1TM2

A 口数据传送方向设置位。0:输入; 1:输出

110 0000 0

所以本实例 8155 方式字可以为 03H8155 工作方式设置程序:

MOV DPTR,#7F00H

MOV A, #03H

MOVX @DPTR,A

;命令字为 03H

Page 52: 模块七

③ 对 PA 、 PB 口编程模式

I/O 口

命令状态口

PA 口

PB 口

地址

7F00H

7F01H

7F02H

▼若 PA 为输出口, PB 为输入口, 编程模式如下:

MOVX @DPTR,A

MOV A,#01H

MOV DPTR,#7F01H

MOVX A,@DPTR

INC DPTR ;数据指针指向 PB口

Page 53: 模块七

6) 8155 的状态字格式▼通过读 C/S寄存器的操作(即用输入指令),读出的是状态寄存器的内容。

D7 D6 D5 D4 D3 D2 D1 D0

000INTRAINTEABFBINTEBTIMER

A 口的中断允许 /禁止标志0 :禁止; 1:允许

A口中断请求标志位。0:无; 1:有

A口缓冲器空 /满标志0 :空; 1:满

计数器计满标志1 :原计数初值已计满回零

0 :计数器尚为计满

BFAINTRB

Page 54: 模块七

7 ) 8155 选通 I/O 的组态

▼A 或 B 口工作在选通方式时 ,C 口的 PC0~PC5就被定义为 A 或 B 口选通 I/O方式的应答和控制线

C 口的控制分配表

工作方式 PC5 PC4 PC3 PC2 PC1 PC0

ALT1 输入ALT2 输出ALT3 输出 BFA INTRA

ALT4 BFB INTRB BFA INTRA

STBA

STBASTBB

Page 55: 模块七

ALT3 输出 BFA INTRA

ALT4 BFB INTRB BFA INTRA

STBA

STBASTBB

当外设发出 STBA负脉冲信号时,在该信号下降沿将 PA0 ~ PA7 上的数据锁入 PA口,同时使输入缓冲器满输出线 BFA 变为高电平,用已通知输入设备数据已收到。

Page 56: 模块七

8155

PAPA0~PA7

8155 选通方式的组态逻辑如下图所示:

AD0~AD7

PC0PC1PC2PC3PC4PC5

&

PBPB0~PB7

INTEA

&INTEB

WR

RD

INTRABFASTBAINTRBBFBSTBB

均为1

申请中断

Page 57: 模块七

8 ) 8155 计数器输出模式8155 内部有一个 14 位减法计数器,计数脉冲来自其引脚“ TIMER IN”,使用定时器前要先装入“时间常数” ---14 位二进制数。其格式为:

D0D1D2D3D4D5D6D7D8D9D10D11D10D11M1M2

低 8 位计数值高 6 位计数值定时器方式

▼装入计数长度寄存器的值为 2H ~ 3FFFH 。

▼ 由于计数长度为 14 位,而每次装入的长度只能为 8 位,故必须分两次装入。

Page 58: 模块七

① 计数器输出方式

M2 M1 输出方式 说明0 0 方式 0 单方波输出0 1 方式 1 连续方波输出1 0 方式 2 单脉冲输出1 1 方式 3 连续脉冲输出(计数值自动重装)

▼8155 的计数最高频率约为 4MHz

▼硬件复位信号 RESET 的到达,会使计数器停止工作,直至由 C/S寄存器再发出启动计数器命令。

Page 59: 模块七

② 8155 计数器实例

实例内容:

若 A 口定义为基本输入 方式, B口也定义为基本输出方式,计数器作为方波发生器,对 80C51 输入脉冲进行 24分频,试编写 8155 I/O 口初始化程序。

24分频即计数初值为 24(000000 0011000B=18H)加上定时计数控制 01(连续方波),则送往定时计数器的时间常数及定时控制字应为: 01000000 00011000B=4018H

实例分析:

Page 60: 模块七

8155

③ 8155 计数器实例

AD0~AD7

CE

IO/M

RESET

ALE

RD

WR

80C51P2.7

P2.0

RESET

ALE

RD

WR

P0

PA

PB

PC

EA

+ 5V

TIME IN

TIME OUT

输出

输出

Page 61: 模块七

MOV DPTR,#7F00H MOV A,,#0C2HMOVX @DPTR,A

MOV DPTR,#7F04H MOV A , #18HMOVX @DPTR , A

I/O 口

命令状态口

PB 口

PA 口

PC 口

计数器低 8 位

计数器高 6 位及方式

地址

7F00H

7F01H

7F02H

7F03H

7F04H

7F05H

INC DPTRMOV A,,#40HMOVX @DPTR,A

;送 8155命令字

;计数器寄存器低 8位赋值

; 计数器寄存器高 8位赋值

Page 62: 模块七

三、静态显示与动态显示

1 、静态显示

▼ 所谓静态显示,是指显示器显示某一个字符时,相应段的发光二极管恒定地导通或截至。静态显示有并行输出和串行输出两种方式。

▼ 对于静态显示方式, LED 显示器由接口芯片直接驱动,采用较小的驱动电流就可以得到较高的显示亮度。

Page 63: 模块七

74LS138

① 并行输出的静态显示电路abcdefgdp

+5v

共阳 LED1

abcdefgdp

+5v

共阳 LED2

80C51

P0

P2.7 P2.6 P2.5

WR ≧1 1

C B A

Y0Y1≧1 1

D1D2D3D4D5D6D7D8

Q1Q2Q3Q4Q5Q6Q7Q8G

74L

S3

73

D1D2D3D4D5D6D7D8

Q1Q2Q3Q4Q5Q6Q7Q8G

74L

S3

73

Page 64: 模块七

② 串行输出的静态显示电路abcdefgdp

+5v

共阳 LED1

abcdefgdp

+5v

共阳 LED2

80C51

RXD

A

B

74L

S1

64

CP

Q1Q2Q3Q4Q5Q6Q7Q8

A

B7

4LS

16

4

CP

Q1Q2Q3Q4Q5Q6Q7Q8

TXD &P1.0

Page 65: 模块七

静态显示与动态显示

2 、动态显示

▼ 所谓动态显示就是一位一位地轮流点亮显示器的各个位(扫描)。对于显示的每一位而言,每隔一段时间点亮一次。

▼虽然在同一时刻只有一位显示器在工作(点亮),但由于人眼的视觉暂留效应和发光二极管熄灭时的余晖,我们看到的却是多个字符“同时”显示。

Page 66: 模块七

8155

PB0PB1PB2PB3PB4PB5PB6PB7

+5V

PA5PA4PA3PA2PA1PA0

7407×2

7406

3 、项目电路

AD0~AD7

CE

IO/M

RESET

ALE

RD

WR

80C51P2.7

P2.0

RESET

ALE

RD

WR

EA

P0

ab

cd

ef

gdp

+ 5V

COM

100Ω

Page 67: 模块七

4 、画流程图

程序开始

送数据到 79H开始的显示缓冲单元

调用显示子程序

结束

设置 8155 工作方式

5、源程序

主程序流程图

主程序 ORG 0000H

START: AJMP MAIN

MAIN:ORG 0030H

MOV 79H,06HMOV 7AH,05HMOV 7BH,08HMOV 7CH,00HMOV 7DH,00HMOV 7EH,02HMOV DPTR,#7F00 H

MOV A,#03H

MOVX @DPTR,A

ACALL DISPLAY

ENDSJMP LOOP

LOOP:

Page 68: 模块七

扫描到第 6 个显示器否?

显示数据缓冲区首地址送 R0

使显示器最右边位亮

数据指针指向 A 口

送扫描值

数据指针指向 B口

取欲显示的数据

查表,取出字型码

调用延时子程序

未到,扫描码左移 1 位

4 、画流程图 显示子程序子程序入口

送显示

指向下一个显示段数据地址

Page 69: 模块七

5 、源程序 显示子程序

DISPLAY : MOV R0,#79H

MOV R3,#01H

MOV A, R3

MOV DPTR,#7F01H

MOVX @DPTR,A

INC DPTR

MOV A,@R0

ADD A,#0DH

MOVC A,@A+PC

MOVX @DPTR, A ACALL DEALY

MOV A,R3JB ACC.5 ,ELD1

INC R0

RL A

MOV R3,AAJMP LD0

ELD1:;-------------------- 段码DSEG: DB 3FH,06H,5BH,4FH DB 66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH DB 39H,5EH,79H,71H, DB 40H,00H

;R3 存放扫描值

DELAY: MOV R7,#200

DEL1: MOV R6,#123

NOP

DEL2: DJNZ R6,DEL2

DJNZ R7,DEL1

RET

LD0:

RET

Page 70: 模块七

四、键盘及其接口

◇ 按键的特点、输入原理及抖动问题

◇ 独立式键盘

◇ 矩阵式(行列式)键盘

Page 71: 模块七

1 、 按键的特点、输入原理

▼按键的分类

触点式:机械无触点式:电气

▼按键输入原理

通过按键的接通与断开,实现两种相反的逻辑状态。

低电平“ 0” 与高电平“ 1”

Page 72: 模块七

2 、 键盘接口需要解决的问题

机械按键的抖动时间一般为 5ms~10ms

▼按键识别

▼键抖动及消除

消除方法

是否有键按下求键号

硬件方案—— 双稳去抖电路

软件方案——延时 10ms ~ 20ms后再次判断

Page 73: 模块七

1 )按键抖动现象

▼ 在触点抖动期间检测按键的通与断状态,可能导致判断出错,即按键一次按下或释放被错误地认为是多次操作,这种情况是不允许出现的。

理想波形

实际波形

按下抖动 释放抖动稳定闭合

Page 74: 模块七

2 )消除按键抖动① 硬件去抖动在硬件上可采用在键输出端加 R-S 触发器 (双稳态触发器 )或单稳态触发器构成去抖动电路

有抖动

无抖动

▼按键较少时,常采用硬件去抖动电路。

&

&

+ 5V

+5V

A

B

Page 75: 模块七

② 软件去抖动

▼在检测到有按键按下时,执行一个 10 ms左右的延时程序后,再确认该键电平是否仍保持闭合状态电平,若仍保持闭合状态电平,则确认该键处于闭合状态。

▼ 同理,在检测到该键释放后,也应采用相同的步骤进行确认,从而可消除抖动的影响。

Page 76: 模块七

3 、独立式键盘

80C51

P1.7

P1.6

P1.5

P1.4

P1.3

P1.2

P1.1

P1.0

▼ 芯片内部有上拉电阻

特点:

一键一口,按键识别(编程)简单,占用较多口线,适合 8 键以下使用。

Page 77: 模块七

80C51

D1

D2

D3

D4

D5

D6

D7

D8

▼ 芯片内部无上拉电阻

Q1

Q2

Q3

Q4

Q5

Q6

Q7

Q8

P0

+5V

5.1K×8

Page 78: 模块七

1 )独立式键盘识别

三种方法——随机扫描,定时扫描,中断扫描

定时扫描——每隔一段时间对键盘扫描一次,它是利用单片机内部的 定时 /计数器产生一定时间 (例如 10ms) 的定时,当定时时间到就产生溢出中断。CPU响应中断后,对键盘进行扫描,并在有键按下时,识别按键出该键,并执行该键的功能。

随机扫描——当 CPU空闲时调用键盘扫描子程序,

响应键盘的输入请求

Page 79: 模块七

&

中断扫描——为提高 CPU 工作效率,可采用中断扫描工作方式。当无键按下时, CPU做自己的事情,当有键按下时, CPU响应中断请求,执行键盘扫描程序,识别出键号,作相应处理。

80C51

P1.7

P1.6

P1.5

P1.4

INT0

Page 80: 模块七

2) 键盘扫描程序▼ 当任何一个键被按下时,与其相连的输入线被置成 “ 0”,平时该线为“ 1”。

START : MOV P1 , #0FFH ;先置 P1口为输入 MOV A , P1 ;输入键状

态JNB ACC.0 , P0F ;查询 0 号键JNB ACC.1 , P1F ;查询 1 号键JNB ACC.2 , P2F ;查询 2 号键JNB ACC.3 , P3F ;查询 3 号键JNB ACC.4 , P4F ;查询 4 号键JNB ACC.5 , P5F ;查询 5 号键JNB ACC.6 , P6F ;查询 6 号键JNB ACC.7 , P7F ;查询 7 号键AJMP START

Page 81: 模块七

P0F : LJMP PROM0 ;入口地址表P1F : LJMP PROM1

P7F : LJMP PROM7

……

PROM0 :… ... ; 0号键功能程序

PROM7 :… … ; 7号键功能程序

… …LJMP START ; 0号键处理完返回键盘扫描

LJMP START ; 7号键处理完返回键盘扫描

… …… …

… …

Page 82: 模块七

4 、行列式(矩阵式)键盘

80C51

P1.0

P1.1

P1.2

P1.3

P1.4

P1.5

P1.6

P1.7

Y1Y0 Y2 Y3

X0

X1

X2

X3

0 1 2 3

4 5 6 7

8 9 10 11

12 13 14 15

4×4 键盘

芯片内部有上拉电阻

4 行

4 列

Page 83: 模块七

8155PC0

PC1

PC2

PC3

PA0

PA1

PA2

PA3

Y1Y0 Y2 Y30 1 2 3 4 5

6 7 8 9 10 11

12 13 14 15 16 17

18 19 20 21 22 23

+5V

PA4PA5

5.1KΩ×4

4×6 键盘

芯片内部无上拉电阻

Y5Y4

Page 84: 模块七

1 )矩阵式键盘扫描过程

80C51

P1.0

P1.1

P1.2

P1.3

P1.4

P1.5

P1.6

P1.7

Y1Y0 Y2 Y3

X0

X1

X2

X3

0 1 2 3

4 5 6 7

8 9 10 11

12 13 14 15

+5V

▼ 先判断有无键按下

▼ 再确认哪个键被按下

▼ 再确定每个键的键号

0

0

0

0

11

11

内部上拉电阻

Page 85: 模块七

①、先判断有无键按下▼ 列线输出 0000 ,然后输入行线状态, 若没有键按下,则行线状态为全 1 ( 1111 ); 若有任一键按下,则行线状态不为全( 1111 );键按下 / 释放判断子程序 KS : MOV A,#00H

MOV P1,A

MOV P1,#0FH

MOV A,P1

CPL A

ANL A,#0FH

RET

;全扫描字# 00H送 P1口

;读入 P1 口状态;变正逻辑,高电平表示有键按下

;取低 4 位;返回, A≠0 表示有键按下

Page 86: 模块七

② 再确认哪个键被按下

▼ 列线逐行输出 0 (如 1110 ), 然后输入行线状态 ;

▼若没有键按下,则行线状态为全 1 ( 1111 );

▼若有任一键按下,则行线状态不为全为 1 (如 0111 ,说明右上角那个键被按下)

Page 87: 模块七

确认哪一键被按下子程序

ACALL KS 键按下 / 释放判断子程序JNZ LK1

ACALL DELAY10ms

AJMP SMKEY

ACALL KS

JZ WKEY

LK1:

SMKEY:

AJMP SMKEY

Page 88: 模块七

WKEY: MOV P1, #1110 1111B

MOV A,P1

ANL A,#0FH

CJNE A,#0FH,PKEY

; 置扫描码,检测 P1.4 列

;P1.4 列( Y0) 有键按下,转键处理MOV P1, #1101 1111BMOV A,P1

ANL A,#0FH

CJNE A,#0FH,PKEY

; 置扫描码,检测 P1.5 列

;P1.5 列( Y1) 有键按下,转键处理

;以下为逐列扫描哪一列有键按下程序

Page 89: 模块七

WKEY: MOV P1, #1011 1111B

MOV A,P1

ANL A,#0FH

CJNE A,#0FH,PKEY

; 置扫描码,检测 P1.6 列

;P1.5 列( Y2) 有键按下,转键处理MOV P1, #0111 1111BMOV A,P1

ANL A,#0FH

CJNE A,#0FH,PKEY

; 置扫描码,检测 P1.7 列

;P1.7 列( Y3) 有键按下,转键处理

;继续检测 P1.5 列及 P1.6 列

LJMP SMKEY

PKEY: … … ; 键处理

Page 90: 模块七

③ 确定每个键的键号(键处理)▼ 当第 0列处于低电平时,逐行查找是否有行线变 低,若有,则第 0列与该行的交叉点按键按下;若无,则表示第 0列无键按下,再让下一列处在低电平,依次循环。

键号=所在行号 × 键盘列数+所在列号

或 键号=行首键号( 0 、 4 、 8 、 12 )

+列号( 0 、 1 、 2 、3 )

Page 91: 模块七

模块七小结 1 、单片机应用系统的扩展中,通常都要用 到 ROM 的扩展,单片机的地址总线为 16位,所以,外扩片外存储器的最大容量为 64KB。虽然 ROM 与 RAM 的地址重叠,但由于使用的控制信号不同,所以不会发生混乱。外扩片外 RAM 的最大容量也为 64KB。

2、 8155 芯片内部 包括 256B的 SRAM ,两个 8位并行接口,一个 6位并行接口和一个 14位定时 /计数器,它与单片机的接口非常简单,是单片机应用系统中广泛使用的芯片之一。

Page 92: 模块七

模块七作业

P177

题 1 加油,努力!

Page 93: 模块七

作业题解析

编写程序,把外部 RAM 中 1000H ~ 1030H 的内容传送到内部 RAM 的 30H ~ 60H 中。

▼这是单片机内部和外部 RAM 数据批量传递的问题,所以会用到MOVX A,@DPTR 或 MOVX @DPTR,A ;

▼这样内容 RAM 单元用 R0 或 R1 作为指针,外部RAM 单元用 DPTR 作为指针,共有 31H 个单元,用R7 作为计数寄存器。

1、题目

2 、题意分析

Page 94: 模块七

3 、画流程图程序开始

结束

设置指针 R0 的初值设置指针 DPTR 的初值

设置计数寄存器 R7的初值为 31H

(R7)-1(R7)=0?

传送数据指针 R0 和 DPTR 各

加 1

N

Y

ORG 0000H

LJMP MAINORG 0030H

MAIN :MOV R0,#30H

MOV DPTR,#1000H

MOV R7,#31H

MOVX A,@DPTR

MOV @R0,A

DJNZ R7,LOOP

LOOP:

INC R0INC DPTR

END

4 、源程序