第四讲:
接口与系统扩展( 1)
本讲重点:
片外 RAM与片外 ROM扩展(参考范例应用) ;
简单 I/O扩展 (选用锁存器与驱动器) ;
扩展 8255,8155 (初始化,电路及应用) ;
LED显示接口(动态与静态,硬件译码与软件译码,电路与编程应用),
RAM,ROM存储器扩展单片机本身资源不足以满足应用需求的情况下,
必须借助外部器件对系统进行扩展主要介绍,并口,RAM,ROM、键盘,LED,DAC、
ADC 等 接口的扩展与应用,
其中涉及到 6264,2764,74LS373,74LS244、
74LS245,8255,8155,DAC0832,ADC0809
等芯片。
第四、六章 接口芯片与系统扩展以 AT89C51/52应用为例进行介绍
AT89C51/52 与 MCS-51系列的 8031/8032在 性能,
引脚,指令 等方面完全兼容,此 外,内部还集成了 4K/8K 的 Flash ROM。
① 程序存储器 EPROM 的扩展:
单片机 内部没有 ROM,或虽有 ROM但 容量太小 时,
必须扩展外部程序存储器方能工作。最常用的
ROM器件是 EPROM。 如,2764(8K)/27128(16K)
/27256(32K)/27040(512K)……
一,存储器的扩展 (EPROM) P.110
Vpp Vcc
A12 PGM
A7 NC
A6 A8
A5 A9
A4 A11
A3 OE
A2 A10
A1 CE
A0 D7
D0 D6
D1 D5
D2 D4
GND D3
2764
Vpp Vcc
A12 PGM
A7 A13
A6 A8
A5 A9
A4 A11
A3 OE
A2 A10
A1 CE
A0 D7
D0 D6
D1 D5
D2 D4
GND D3
27128
Vpp Vcc
A12 A14
A7 A13
A6 A8
A5 A9
A4 A11
A3 OE
A2 A10
A1 CE
A0 D7
D0 D6
D1 D5
D2 D4
GND D3
27256
程序存储器 2764 的扩展:
单片机 EPROM 2764锁存器74LS373
P0.0-P0.7
ALE
PSEN
P2.0-P2.4
8D 8Q
OE
A8-A12
A0-A7
D0-D7
G
EA OE
CE
51单片机能提供 16条地址线,可扩展 64K字节的
ROM。可以用一片 EPROM,也可以用多片 EPROM
(如书上 P115—116图所示 )。
② 数据存储器 RAM 的扩展:
有时需要扩展 外部数据存储器 RAM方能工作 (如数据采集系统数据量较大,需要专设 RAM或 Flash
RAM)。最常用的 RAM器件是 SRAM。
如,6116(2K)/6264(8K)/62128(16K)/628128(128K) ……
一,存储器的扩展 (RAM) P.117
A7 Vcc
A6 A8
A5 A9
A4 WE
A3 OE
A2 A10
A1 CE
A0 D7
D0 D6
D1 D5
D2 D4
GND D3
6116
Vpp Vcc
A12 WE
A7 CE2
A6 A8
A5 A9
A4 A11
A3 OE
A2 A10
A1 CE1
A0 D7
D0 D6
D1 D5
D2 D4
GND D3
6264
Vpp Vcc
A12 WE
A7 A13
A6 A8
A5 A9
A4 A11
A3 OE
A2 A10
A1 CE
A0 D7
D0 D6
D1 D5
D2 D4
GND D3
62128
数据存储器 6264 的扩展:
89C51单片机 SRAM6264
锁存器
74LS373
P0.0-P0.7
ALE
P2.7
P2.0-P2.4
8D 8Q
OE
A8-A12
A0-A7
D0-D7
G
EA OE
CE2
51单片机能提供 16条地址线,可扩展 64K字节的 RAM。可以用一片芯片,也可以用多片 RAM
(参见书上 P118—119图所示)。
RD
WR WE
CE1
+5V
简单 I/O,8255,8155
并口扩展在单片机的 I/O口线不够用的情况下,可以借助外部器件对 I/O口进行扩展。可资选用的器件很多,方案也有多种。
③ 简单 I/O扩展:(锁存器扩展)
二,并行接口的扩展 (简单 I/O) P.119
CLR VCC
1Q 8Q
1D 8D
2D 7D
2Q 7Q
3Q 6Q
3D 6D
4D 5D
4Q 5Q
GND CLK
OE VCC
1Q 8Q
1D 8D
2D 7D
2Q 7Q
3Q 6Q
3D 6D
4D 5D
4Q 5Q
GND G
OE VCC
1Q 8Q
1D 8D
2D 7D
2Q 7Q
3Q 6Q
3D 6D
4D 5D
4Q 5Q
GND CLK
74LS273 74LS373 74LS374
通常输出需要锁存,输入需要缓冲。 但并非一成不变简单 I/O扩展,(缓冲 /驱动器扩展 )P.120
单片机锁存器
74LS273
P0.0-P0.7
P2.0
P2.1
RD
WR
D0
D7
D0
D7
D0
D7
D0
D7
缓冲器
74LS244
≥1
≥1
CLK
CE1
CE2
输出输入或门或门输入指令,MOV DPTR,#0200H
MOVX A,@DPTR
输出指令,MOV DPTR,#0100H
MOVX @DPTR,A
④ 可编程并行 I/O接口芯片 8255扩展 I/O:
二,并行接口的扩展 (8255) P.164
PA3 PA4
PA2 PA5
PA1 PA6
PA0 PA7
RD WR
GND D0
A1 D1
A0 D2
PC7 D3
PC6 D4
PC5 D5
PC4 D6
PC0 D7
8255
PC2 PB7
PC3 PB6
PB0 PB5
PB1 PB4
PB2 PB3
CS RESET
PC1 VCC
8255的基本特性与引脚:
◆ PA,PB,PC 三个 8位 I/O口 ;
40 PIN
◆ PC口分 高 4位 和 低 4位。 高 4位可与 PA口合为一组 (A组 ),低 4
位可与 PB口合为一组 (B组 )。
◆ 3种工作方式。 内部有 4个寄存器,由 A1,A0与 读,写 信号选择。
片选 低有效,复位 高有效。
◆ PC可按位置位 /复位。
◆ 40条引脚,DIP封装。须注意
VCC与 GND引脚的位置。
一个 8位的数据口 D0~ D7。
8255的 PA,PB,PC口的三种工作方式,P.165
◆ 三种方式中只有 方式 0 用得最多 且 最容易使用 。
基本 输入 /输出方式 就是 简单 输入 /输出方式。
◆ 方式 1 和方式 2 使用复杂 。因单片机能 自动提供各种应答信号,这两种方式已 很难见到再有人用于单片机系统。
工作方式 A口 B口 C口
0 基本输入 /输出输出锁存,输入三态 基本输入 /输出输出锁存,输入三态 基本输入 /输出输出锁存,输入三态
1 应答式输入 /输出输入 /输出均锁存 应答式输入 /输出输入 /输出均锁存 提供 A口和 B口的应答信号
2 应答式 双向 输入 /输出输入 /输出均锁存 B口无此方式 提供 A口的应答信号
PA,PB,PC口的三种工作方式示意图,P.167
RD WR D7——D0 A1 A0
地址 总线控制总线数据 总线
A BC
PA0-7 PB0-7PC4-7 PC0-3
A组 B组
8255的方式 0
A B
PA0-7 PB0-7控制线 控制线
A组 B组
A B
PA0-7 PB0-7控制线 I/O
A组 B组
7 6 5 4 3 2 1 0
PC口
8255的方式 1
8255的方式 2
7 6 5 4 3 2 1 0
PC口
8255的端口选择表,P.166
注意,对 PA,PB,PC三个口的任何读 /写操作,就是对
PA,PB,PC这三个寄存器进行 I/O操作,
第 4个寄存器是 控制字寄存器 (命令字寄存器 )
A1A0 RD WR CS 操 作 说 明
0 0
0 1
0
CPU读取 PA口数据从 8255的 I/O口 读有效0 1 CPU读取 PB口数据
1 0 CPU读取 PC口数据
0 0
1 0
CPU向 PA口 输出 数据向 8255的 I/O口 写有效0 1 CPU向 PB口 输出 数据
1 0 CPU向 PC口 输出 数据
1 1 1 0 0 对 控制寄存器 写控制字 初始化 8255时必须做的工作
X X X X 1 没有选中,8255不工作 8255对系统总线呈 高阻态
1 1 0 1 0 非法状态 控制寄存器只能写不能读
X X 1 1 0 非法状态 8255对系统总线呈 高阻态
D7 D6 D5 D4 D3 D2 D1 D0
特征位
=1
A组 方式选择
0 0:方式 0
0 1:方式 1
1 X:方式 2
A 口 B 口 CL 口CH 口 B组 方式选择 =
0
,
方式
0
=
1
,
方式
1
=
0
,
输出
=
1
,
输入
=
0
,
输出
=
1
,
输入
=
0
,
输出
=
1
,
输入
=
0
,
输出
=
1
,
输入
8255控制寄存器 P.171~ 172
接受控制命令,告诉 8255以何种方式工作。 其地址是,A1,A0 = 11。它可以接受两条命令,第一条命令叫,方式控制字,,方式控制字格式如下:
A 组 B 组注意,对同一控制寄存器可写 两种 命令,故必须在命令本身用
,特征位,加以区别。第二条命令的 特征位 =0
D7 D6 D5 D4 D3 D2 D1 D0
特征位
=0
Don’t care bits 选中的位将要输出的状态 =
0
,
清
0
=
1
,
置
1
8255控制寄存器 可以接受的第 2条命令是,
可以对 PC口按位进行“置 1” 和“清 0” 操作 。
具体命令格式如下,(地址同样是,A1,A0 = 11)
例如:设 8255的控制寄存器在系统中的地址是,0003H,要将
PC5引脚置 1,可用如下指令完成:
MOV DPTR,#0003H
MOV A,#0BH
MOVX @DPTR,A
D3 D2 D1 选中 PCx引脚
0 0 0 PC0
0 0 1 PC1
0 1 0 PC2
0 1 1 PC3
1 0 0 PC4
1 0 1 PC5
1 1 0 PC6
1 1 1 PC7
在 P.174有这几句
8255与单片机的连接,(参见 P.173)
AT89C51 8255
74LS373
P0.0-P0.7
ALE
P2.7
8D Q0Q1
CS
RESET
A0
A1
D0-D7
G
EA
OE
RESET
RD
WR WR
RD
+5V
PA
PC
PB
P2.7接片选 /CS端,8255的 (一组 )寄存器地址 可以是,
PA口,7000H PB口,7001H PC口,7002H 命令口,7003H
8255与单片机的连接,(参见 P.174)
AT89C51
8255
74LS373
P0.0-P0.7
ALE
8D Q0Q1
Q7 CS
RESET
A0
A1
D0-D7
G
EA
OE
RESET
RD
WR WR
RD
+5V
PA
Q7接片选 /CS端,8255的 (一组 )寄存器地址 可以是,
PA口,0000H PB口,0001H PC口,0002H 命令口,0003H
也可以是,007CH,007DH,007EH,007FH……
PC7
PC0
微型打印机
8255的编程应用例:初始化 A口,B口,C口为基本 I/O输出口
MOV DPTR,#7003H ;指向控制字寄存器
MOV A,#80H ; A,B,C口均为输出口
MOVX @DPTR,A ;装入按照 8255控制寄存器 方式控制字格式写命令:
D7 D6 D5 D4 D3 D2 D1 D0
特征位
=1
A组 方式选择
0 0:方式 0
0 1:方式 1
1 X:方式 2
A 口 B 口 CL 口CH 口 B组 方式选择 =
0
,
方式
0
=
1
,
方式
1
=
0
,
输出
=
1
,
输入
=
0
,
输出
=
1
,
输入
=
0
,
输出
=
1
,
输入
=
0
,
输出
=
1
,
输入
8255硬件实验五,8255 A.B.C口输出方波
ORG 0100H
WAVE,MOV DPTR,#0FFDBH ;8255 控制字寄存器地址
MOV A,#80H ;初始化 A,B,C口为基本输出口
MOVX @DPTR,A
MOV A,#55H ;8位高 /低电平相间输出
REPT,MOV DPTR,#0FFD8H ;8255 A口地址
MOVX @DPTR,A
INC DPTR ;8255 B口地址( 0FFD9H)
MOVX @DPTR,A
INC DPTR ;8255 C口地址( 0FFDAH)
MOVX @DPTR,A
LCALL DELY1S ;延时
CPL A ;取反
SJMP RETP ;跳到 REPT去循环
8255硬件实验五,8255 A.B.C口输出方波
PA0输出
PA1输出
PA2输出
PA3输出
PA4输出
PA5输出
PA6输出
PA7输出
PB0输出 ……………………………………
⑤ 可编程 RAM/ IO/ CTC
接口芯片 8155:
二,并行接口的扩展 (8155) P.175
PC3 VCC
PC4 PC2
TIMERIN PC1
RESET PC0
PC5 PB7
IO/M PB5
RD PB3
WR PB2
ALE PB1
AD0 PB0
AD1 PA7
AD2 PA6
AD3 PA5
8155
AD5 PA3
AD6 PA2
AD7 PA1
CE/CE PB4
GND PA0
TIMEROUT PB6
AD4 PA4
40 PIN
8155与 8255 是 Intel推出的两个广泛应用的并行口扩展芯片:
8255扩展了 三个 8位 的并行口
8155扩展了 两个 8位 并行口 +
一个 6位 的并行口 +
一个 14位 Timer +
片内 256字节 RAM
8155有一个姊妹芯片 —— 8156
片选端为高有效,其他完全相同
⑤ 可编程 RAM/IO/CTC接口芯片 8155引脚:
PC3 VCC
PC4 PC2
TIMERIN PC1
RESET PC0
PC5 PB7
IO/M PB5
RD PB3
WR PB2
ALE PB1
AD0 PB0
AD1 PA7
AD2 PA6
AD3 PA5
8155
AD5 PA3
AD6 PA2
AD7 PA1
CE/CE PB4
GND PA0
TIMEROUT PB6
AD4 PA4
◆ PA,PB两个 8位和一个 6位 PC口。
◆ AD0—AD7,地址 /数据复用线。
◆ ALE,地址锁存使能,控制地址 /数据复用。
◆ /CE是 8155的 片选端,低有效 ;
8156的片选端是 CE,高有效。
◆ IO/M,I/O口或 RAM选择线。
◆ /RD是读信号; /WR是写信号;
RESET是复位信号,高有效。
◆ 片内 1个 14位减法 Timer,计数脉冲由 TIMERIN输入,分频后由
TIMEROUT 输出 。
◆ VCC,GND是电源端。
40 PIN
8155的 6个寄存器
8155有 2种工作方式 (基本 I/O和选通 I/O)。
内部有 6个 寄存器,由 AD2,AD1,AD0,ALE与 RD,WR,
IO/M信号线选择。 RESET高有效 ; /CE低有效。
◆
AD7——AD0 选中的寄存器 功 能
X X X X X 0 0 0 命令 /状态字寄存器 对它只能写命令从它只能读状态
X X X X X 0 0 1 A口寄存器 (PA7—PA0) 对应 A口的各个引脚
X X X X X 0 1 0 B口寄存器 (PB7—PB0) 对应 B口的各个引脚
X X X X X 0 1 1 C口寄存器 (PC7—PC0) 对应 C口的各个引脚
X X X X X 1 0 0 定时器低 8位寄存器 单纯存放低 8位初值
X X X X X 1 0 1 定时器高 6位和输出方式寄存器 高两位控制输出信号形式
TM2 TM1 IEB IEA PC2 PC1 PB PA
A口中断 B 口 A 口C 口方式选择
=
1
,
允许
=
0
,
禁止
=
1
,
输出
=
0
,
输入
=
1
,
输出
=
0
,
输入
8155命令 /状态字寄存器 是两个地址相同的寄存器,
命令字寄存器 接受控制命令 (只写 )。
地址,A2,A1,A0=000 命令字格式如下 (P179):
C口方式,ALT1—C口为 输入 口 (A,B为基本 I/O)。
ALT2—C口为 输出 口 (A,B为基本 I/O)。
ALT3—C口低 3位为 A口选通 I/O提供应答信号;
B口为基本 I/O,C口高 3位为输出口。
ALT4—C口的低、高 3位分别为 A口,B口的选通 I/O提供应答信号。
B口中断
=
1
,
允许
=
0
,
禁止
0 0 = ALT1
0 1 = ALT2
1 0 = ALT3
1 1 = ALT4
起 /停与运行控制位:
0 0 = 无操作 =NOP
0 1 = 立即停计数;
若未计数 =NOP
1 0 = 减到 0 停止;
若未计数 =NOP
1 1 = 立即开始计数;
若正在计数则减到 0后按新的方式和初值计数。
X D6 D5 D4 D3 D2 D1 D0
A 口中断请求
=
1
,
满
=
0
,
空
=
1
,
请求中断
=
0
,
无请求注,读取状态字信息多用在以 查询方式 与通过 8155
扩展的外部设备进行应答,或查询定时器的状态。
B 口中断允许 =
1
,
允许
=
0
,
禁止定时器中断状态
B 口中断请求
=
1
,
请求中断
=
0
,
无请求
A 口缓冲器状态
A 口缓冲器状态
=
1
,
满
=
0
,
空
A 口中断允许
=
1
,
允许
=
0
,
禁止
=
1
,
已经计满
=
0
,
读出或复位后
8155命令 /状态字寄存器 是两个地址相同的寄存器,
状态字寄存器 存放状态信息 (只读 )。
地址,A2,A1,A0=000 状态字格式如下 (P180):
D7 D6 D5 D4 D3 D2 D1 D0
8155定时 /计数器 ——14位的减法计数器工作时先要对低 8位寄存器和高 6位寄存器写入初始值。
其地址分别为,A2,A1,A0 = 100 和 101 b
D5 D4 D3 D2 D1 D0
TIMER低 8位:
TIMER高 6位:
M2 M1
(地址,100b)
(地址,101b)
D7 D6 D5 D4 D3 D2 D1 D0
8155定时 /计数器 输出信号的形式
M2,M1 定义定时 /计数器从 TIMEROUT输出信号的形式:
D5 D4 D3 D2 D1 D0
TIMER低 8位
TIMER高 6位 M2 M1
(100)
(101)
M2,M1=00
输出单个方波
M2,M1=01
输出连续方波
M2,M1=01
输出单个脉冲
M2,M1=01
输出连续脉冲计数开始 计数结束常常用作分频器
(自动重装初值 )
常常用作分频器
(自动重装初值 )
负脉冲宽度约等于
TIMERIN的 Tin
单方波宽度约等于初值的一半
8155定时 /计数器 的使用 (如何初始化 )
8155定时 /计数器是 减 2计数器,故:
√ 最小初值为 2。
√ 分频应用时,初值若为偶数,则输出等占空比方波 ;若为奇数,则正半周多一个脉冲周期。
① 先对 (04H)(05H)寄存器装入 14位初值和输出信号形式。 14位初值的范围是 2—3FFFH。
② 启动定时 /计数器。
即对命令 /状态字寄存器 (00H)的最高两位
TM2,TM1写入,11”。
③ 如果定时 /计数器在运行中要改换新的时间常数,务必先装入新的初值,然后再发送一次启动命令,即写入,TM2,TM1=11。
8155与单片机的连接,P.182
AT89C51 8155
P0.0-P0.7
ALE
P2.1
CE
RESET
AD0-AD7
EA
RESET
RD
WR WR
RD
+5V
PA
PB
PC
8位
6位
8位
P2.2
IO/M
ALE
Tin Tout
√ 8155内部有一个 锁存器,故不必再需要外加 74LS373
√ 由于用了 P2.2接 /CE; P2.1接 IO/M,它的 一组 地址是:
XXXX X01X XXXX X000 → 命令 /状态字寄存器
XXXX X01X XXXX X001~ 010 → A,B,C口寄存器
XXXX X01X XXXX X100~ 101 → 定时器低 /高位寄存器
√ 对 8155的片内 RAM寻址,必须 P2.1为低,故 RAM地址为:
XXXX X00X 0000 0000~ 1111 1111等 256个单元。 。
8155的编程应用 P.182
例 1,初始化 A口,C口 为 输入 口,B口为 输出 口 (均为基本 I/O)定时器为 24分频连续方波输出。
MOV DPTR,#0204H ;指向 Timer低 8位寄存器
MOV A,#24 ;初值即分频数,24=18H
MOVX @DPTR,A ;装入
√ 根据连线应该知道它的 一组 地址是,0200~ 0205H
命令 /状态字寄存器的
M2,M1=01
输出连续方波常常用作分频器 (自动重装初值 )
INC DPTR ;波形选择位与 Timer高 6位
MOV A,#40H ;01000000=连续方波 + TH=0
MOVX @DPTR,A ;装入
MOV DPTR,#0200H ;指向命令 /状态字寄存器
8155的编程应用 P.182
例 1,初始化 A口,C口 为 输入 口,B口为 输出 口 (均为基本 I/O)定时器为 24分频连续方波输出。
MOV DPTR,#0204H ;指向 Timer低 8位寄存器
MOV A,#24 ;初值即分频数,24=18H
MOVX @DPTR,A ;装入
TM2 TM1 IEB IEA PC2 PC1 PB PA
A口中断 B 口 A 口C 口方式选择
=
1
,
允许
=
0
,
禁止
=
1
,
输出
=
0
,
输入
=
1
,
输出
=
0
,
输入
C口方式,ALT1——C口为输入口 (A,B为基本 I/O)。
ALT2——C口为输出口 (A,B为基本 I/O)。
ALT3——C口低 3位为 A口选通 I/O提供应答信号;
B口为基本 I/O,C口高 3位为输出口。
ALT4——C口的低、高 3位分别为 A口,B口的选通 I/O提供应答信号。
B口中断
=
1
,
允许
=
0
,
禁止
0 0 = ALT1
0 1 = ALT2
1 0 = ALT3
1 1 = ALT4
起 /停与运行控制位:
0 0 = 无操作 =NOP
0 1 = 立即停计数;
若未计数 =NOP
1 0 = 减到 0 停止;
若未计数 =NOP
1 1 = 立即开始计数;
若正在计数则减到 0后按新的方式和初值计数。
1 1 0 0 0 0 1 0
题目要求 初始化 A口,C口 为 输入 口,B口为 输出 口
(均为基本 I/O)此例命令字寄存器地址是,0200H。
MOV A,#0C2H ;立即启动计数,A入 B出 C入
MOVX,@DPTR,A ;装入
MOV DPTR,#0200H ;指向命令 /状态字寄存器
INC DPTR ;波形选择位与 Timer高 6位
MOV A,#40H ;01000000=连续方波 + TH=0
MOVX @DPTR,A ;装入
8155的编程应用 P.182
例 1,初始化 A口,C口 为 输入 口,B口为 输出 口 (均为基本 I/O)定时器为 24分频连续方波输出。
MOV DPTR,#0204H ;指向 Timer低 8位寄存器
MOV A,#24 ;初值即分频数,24=18H
MOVX @DPTR,A ;装入显示器接口扩展三,LED显示器的扩展 (结构 ) P.186
LED数码管的 结构,①共阳与共阴
@ 单片机系统扩展 LED数码管时 多用 共阳 LED:
共阳数码管每个段笔画是用低电平 (“0”)点亮的,要求驱动功率很小;而共阴数码管段笔画是用高电平 (“0”)点亮的,
要求驱动功率较大。
@ 通常每个段笔画要串一个数百欧姆的 降压电阻 。
公共 阳 极
h g f e d c b a
a b
cd
g
e
f
h
公共 阴 极
h g f e d c b a
a b
cd
g
e
f
hh g f …… a
h g f …… a
高电平点亮低电平点亮接高电平接地
LED数码管的 译码,②硬件译码与软件译码硬件译码特点,采用专用的译码 /驱动器件,驱动功率较大 ;增加了硬件的开销 ;软件 编程简单 ;字型固定 (比如,只有七段,只可译数字,字型不好看 … )。
共阴 LED
a b
cd
g
e
f
h
g
f
e
d
c
b
a
D
C
B
A
P1.3
P1.2
P1.1
P1.0
CD4511AT89C51
74LS48/CD4511是,BCD码 → 七段 共阴 译码 /驱动,IC;
74LS47是,BCD码 → 七段 共阳 译码 /驱动,IC
三,LED显示器的扩展 (结构 ) P.186
三,LED显示器的扩展 (软件译码 )
LED数码管的译码,软件译码软件译码特点,
不用专用的译码 /驱动器件,驱动 功率较小 ; 不增加 硬件的开销;软件 编程较复杂 ;字型 灵活 (比如:
有八段,只可译多种字符,字型好看 …… )。
共阳 LED
a b
cd
g
e
f
h
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
+5VAT89C51硬件译码特点,采用专用译码 /驱动器件,
驱动功率较大;增加了硬件的开销;软件编程简单;
字型固定 (比如:只有七段,只可译数字,字型不好看 …… )。
LED数码管的软件译码八段 LED数码管 段代码编码表 (连线不同可有多种表 ):
公共阳极
h g f e d c b a
a b
cd
g
e
f
h
公共阴极
h g f e d c b a
a b
cd
g
e
f
hh g f …… a
h g f …… a
高电平点亮低电平点亮接高电平接地字形 0 1 2 3 4 5 6 7 8 9 黑共阳 0C0 0F9 0A4 0B0 99 92 82 0F8 80 90 0FF
共阴 3F 06 5B 4F 66 6D 7D 07 7F 6F 00
三,LED显示器的扩展 (显示方式 ) P.190
LED数码管的 显示方式,③静态与动态动态显示特点,
有闪烁,用 元器件少,占 I/O线少,必须扫描,花费 CPU时间,
编程复杂。 (有多个 LED时尤为突出)
静态显示特点,
无闪烁,用 元器件多,占 I/O线多,无须扫描,节省 CPU时间,
编程简单。
静态显示,
各数码管在显示过程中 持续 得到送显信号,与各数码管接口的 I/O口线 是 专用 的。
动态显示,
各数码管在显示过程中 轮流 得到送显信号,与各数码管接口的 I/O口线 是 共用 的。
A
B
CLK
h g f e d c b a
CLR AB CLK CLR AB CLK CLR
+5V
VCC
TxD
RxD
89C51
单片机
74LS164 74LS164 74LS164
h g f e d c b a h g f e d c b a
+5V
共阳 LED
数码管
LED数码管 静态 显示举例 (学习串行口已见过 )
有几个 LED就要几个 74LS164,但只要数据不变,
送一次就保持住了,且不闪烁,编程十分简单。
要求,根据上图编写通过串行口和 74LS164驱动 共阳 LED数码管 查表显示的子程序。
条件,系统有 6个 LED数码管,待显数据 (00H—09H)
已放在 35H—30H单元中 (分别对应 十万位 → 个位 ),
DSPLY:MOV DPTR,#TABLE ;共阳 LED数码管译码 表首址
MOV R0,#30H ;待显数据缓冲区的 个位 地址
REDO,MOV A,@R0 ;通过 R0实现寄存器 间接寻址
MOVC A,@A+DPTR ;查表
MOV SBUF,A ;经串行口 发送 到 74LS164
JNB TI,$ ;查询 送完一个字节的第 8位?
CLR TI ;为下一字节发送 作准备
INC R0 ;R0指向下一个 数据缓冲单元
CJNE R0,#36H,REDO ;判断 是否发完 6个数?
RET ;发完 6个数就 返回
TABLE,DB 0C0H,0F9H,0A4H,0B0H,99H ;共阳 LED译码表
DB 92H,82H,0F8H,80H,90H
LED数码管 动态 显示举例 (图见 P.189)
P1.5
P1.4
P1.3
P1.2
P1.2
P1.0
P0.7
P0.6
P0.5
P0.4
P0.3
P0.2
P0.1
P0.0
7406 OC门 X 3
上拉电阻
× 14
+5V
AT89C51
工作原理,从 P0口送段代码,P1口送位选信号 。段码虽同时到达 6个 LED,但 一次仅一个 LED被选中 。利用,视觉暂留,,每送一个字符并选中相应位线,延时一会儿,再送 /
选下一个 …… 循环扫描 即可。
共阴数码管位选线段代码
P1.5
P1.4
P1.3
P1.2
P1.2
P1.0
P0.7
P0.6
P0.5
P0.4
P0.3
P0.2
P0.1
P0.0
7406 OC门 X 3 +5V
AT89C51
位选线段代码要求,此处为共阴数码管,P0口送段代码,P1口送位选信号。
通过查表实现动态显示。
条件,待显数据 (00H—09H)已放在,7FH—7AH单元中 (分别对应 十万位 ~ 个位 )
说明,由于用了 反相驱动器 7406,要用共阳译码表。
共阴数码管上拉电阻
× 14
7406 OC门 X 3 +5V
(7FH) (7EH) (7DH) (7CH) (7BH) (7AH)
十万 万位 千位 百位 十位 个位数据缓冲区 / 显示缓冲区
P0口 送段代码,P1
口 送位选信号。
待显数据已经放在,
7FH—7AH
单元 (分别对应 十万位 → 个位 )
使用共阳译码表 。
DIR,MOV DPTR,#DSEG ;数码管译码 表首址
MOV R0,#7AH ;待显缓冲区 个位 地址
MOV R3,#01H ;个位的 位选信号 =01H
LD1,MOV A,@R0 ;通过 R0间接寻址
MOVC A,@A+DPTR ;查表
MOV P0,A ;字段码送到 P0口
MOV P1,R3 ;字位选择送到 P1口
LCALL DELY ;调延时 1ms子程序
INC R0 ;R0 指向下一字节
MOV A,R3
JB ACC.5,LD2 ;判 是否发完 6个数?
RL A ;R1指向下一个位
MOV R3,A ;位选信号存回 R1
SJMP LD1 ;跳去再显示下一个数
LD2,RET ;发完 6个数就 返回
DSEG,DB 0C0H,0F9H,0A4H,0B0H,99H;共阳译码表
DB 92H,82H,0F8H,80H,90H
P0口 送段代码,P1
口 送位选信号。
待显数据已经放在,
7FH—7AH
单元 (分别对应 十万位 → 个位 )
使用共阳译码表 。
动态 显示举例 (循环显示,8”的实验 )
实验箱 从 P0口扩展了两个 8位的简单 I/O口,
一个送段代码 (字形状 ),地址是 0DCH;
一个送位选信号 (字位置 ),地址是 0DDH。
ORG 0000H
MOV R0,#0DCH ;指向 字形口
MOV A,#80H ;送,8”的字形代码
MOVX @R0,A ;输出字形代码
MOV R1,#0DDH ;指向 字位口
MOV A,#20H ;从最高位开始
LEDO:MOVX @R1,A ;输出字位代码
ACALL DEYS ;调延时子程序
RR A ;右移一位
SJMP LEDO ;循环显示,8”
OVER !
接口与系统扩展( 1)
本讲重点:
片外 RAM与片外 ROM扩展(参考范例应用) ;
简单 I/O扩展 (选用锁存器与驱动器) ;
扩展 8255,8155 (初始化,电路及应用) ;
LED显示接口(动态与静态,硬件译码与软件译码,电路与编程应用),
RAM,ROM存储器扩展单片机本身资源不足以满足应用需求的情况下,
必须借助外部器件对系统进行扩展主要介绍,并口,RAM,ROM、键盘,LED,DAC、
ADC 等 接口的扩展与应用,
其中涉及到 6264,2764,74LS373,74LS244、
74LS245,8255,8155,DAC0832,ADC0809
等芯片。
第四、六章 接口芯片与系统扩展以 AT89C51/52应用为例进行介绍
AT89C51/52 与 MCS-51系列的 8031/8032在 性能,
引脚,指令 等方面完全兼容,此 外,内部还集成了 4K/8K 的 Flash ROM。
① 程序存储器 EPROM 的扩展:
单片机 内部没有 ROM,或虽有 ROM但 容量太小 时,
必须扩展外部程序存储器方能工作。最常用的
ROM器件是 EPROM。 如,2764(8K)/27128(16K)
/27256(32K)/27040(512K)……
一,存储器的扩展 (EPROM) P.110
Vpp Vcc
A12 PGM
A7 NC
A6 A8
A5 A9
A4 A11
A3 OE
A2 A10
A1 CE
A0 D7
D0 D6
D1 D5
D2 D4
GND D3
2764
Vpp Vcc
A12 PGM
A7 A13
A6 A8
A5 A9
A4 A11
A3 OE
A2 A10
A1 CE
A0 D7
D0 D6
D1 D5
D2 D4
GND D3
27128
Vpp Vcc
A12 A14
A7 A13
A6 A8
A5 A9
A4 A11
A3 OE
A2 A10
A1 CE
A0 D7
D0 D6
D1 D5
D2 D4
GND D3
27256
程序存储器 2764 的扩展:
单片机 EPROM 2764锁存器74LS373
P0.0-P0.7
ALE
PSEN
P2.0-P2.4
8D 8Q
OE
A8-A12
A0-A7
D0-D7
G
EA OE
CE
51单片机能提供 16条地址线,可扩展 64K字节的
ROM。可以用一片 EPROM,也可以用多片 EPROM
(如书上 P115—116图所示 )。
② 数据存储器 RAM 的扩展:
有时需要扩展 外部数据存储器 RAM方能工作 (如数据采集系统数据量较大,需要专设 RAM或 Flash
RAM)。最常用的 RAM器件是 SRAM。
如,6116(2K)/6264(8K)/62128(16K)/628128(128K) ……
一,存储器的扩展 (RAM) P.117
A7 Vcc
A6 A8
A5 A9
A4 WE
A3 OE
A2 A10
A1 CE
A0 D7
D0 D6
D1 D5
D2 D4
GND D3
6116
Vpp Vcc
A12 WE
A7 CE2
A6 A8
A5 A9
A4 A11
A3 OE
A2 A10
A1 CE1
A0 D7
D0 D6
D1 D5
D2 D4
GND D3
6264
Vpp Vcc
A12 WE
A7 A13
A6 A8
A5 A9
A4 A11
A3 OE
A2 A10
A1 CE
A0 D7
D0 D6
D1 D5
D2 D4
GND D3
62128
数据存储器 6264 的扩展:
89C51单片机 SRAM6264
锁存器
74LS373
P0.0-P0.7
ALE
P2.7
P2.0-P2.4
8D 8Q
OE
A8-A12
A0-A7
D0-D7
G
EA OE
CE2
51单片机能提供 16条地址线,可扩展 64K字节的 RAM。可以用一片芯片,也可以用多片 RAM
(参见书上 P118—119图所示)。
RD
WR WE
CE1
+5V
简单 I/O,8255,8155
并口扩展在单片机的 I/O口线不够用的情况下,可以借助外部器件对 I/O口进行扩展。可资选用的器件很多,方案也有多种。
③ 简单 I/O扩展:(锁存器扩展)
二,并行接口的扩展 (简单 I/O) P.119
CLR VCC
1Q 8Q
1D 8D
2D 7D
2Q 7Q
3Q 6Q
3D 6D
4D 5D
4Q 5Q
GND CLK
OE VCC
1Q 8Q
1D 8D
2D 7D
2Q 7Q
3Q 6Q
3D 6D
4D 5D
4Q 5Q
GND G
OE VCC
1Q 8Q
1D 8D
2D 7D
2Q 7Q
3Q 6Q
3D 6D
4D 5D
4Q 5Q
GND CLK
74LS273 74LS373 74LS374
通常输出需要锁存,输入需要缓冲。 但并非一成不变简单 I/O扩展,(缓冲 /驱动器扩展 )P.120
单片机锁存器
74LS273
P0.0-P0.7
P2.0
P2.1
RD
WR
D0
D7
D0
D7
D0
D7
D0
D7
缓冲器
74LS244
≥1
≥1
CLK
CE1
CE2
输出输入或门或门输入指令,MOV DPTR,#0200H
MOVX A,@DPTR
输出指令,MOV DPTR,#0100H
MOVX @DPTR,A
④ 可编程并行 I/O接口芯片 8255扩展 I/O:
二,并行接口的扩展 (8255) P.164
PA3 PA4
PA2 PA5
PA1 PA6
PA0 PA7
RD WR
GND D0
A1 D1
A0 D2
PC7 D3
PC6 D4
PC5 D5
PC4 D6
PC0 D7
8255
PC2 PB7
PC3 PB6
PB0 PB5
PB1 PB4
PB2 PB3
CS RESET
PC1 VCC
8255的基本特性与引脚:
◆ PA,PB,PC 三个 8位 I/O口 ;
40 PIN
◆ PC口分 高 4位 和 低 4位。 高 4位可与 PA口合为一组 (A组 ),低 4
位可与 PB口合为一组 (B组 )。
◆ 3种工作方式。 内部有 4个寄存器,由 A1,A0与 读,写 信号选择。
片选 低有效,复位 高有效。
◆ PC可按位置位 /复位。
◆ 40条引脚,DIP封装。须注意
VCC与 GND引脚的位置。
一个 8位的数据口 D0~ D7。
8255的 PA,PB,PC口的三种工作方式,P.165
◆ 三种方式中只有 方式 0 用得最多 且 最容易使用 。
基本 输入 /输出方式 就是 简单 输入 /输出方式。
◆ 方式 1 和方式 2 使用复杂 。因单片机能 自动提供各种应答信号,这两种方式已 很难见到再有人用于单片机系统。
工作方式 A口 B口 C口
0 基本输入 /输出输出锁存,输入三态 基本输入 /输出输出锁存,输入三态 基本输入 /输出输出锁存,输入三态
1 应答式输入 /输出输入 /输出均锁存 应答式输入 /输出输入 /输出均锁存 提供 A口和 B口的应答信号
2 应答式 双向 输入 /输出输入 /输出均锁存 B口无此方式 提供 A口的应答信号
PA,PB,PC口的三种工作方式示意图,P.167
RD WR D7——D0 A1 A0
地址 总线控制总线数据 总线
A BC
PA0-7 PB0-7PC4-7 PC0-3
A组 B组
8255的方式 0
A B
PA0-7 PB0-7控制线 控制线
A组 B组
A B
PA0-7 PB0-7控制线 I/O
A组 B组
7 6 5 4 3 2 1 0
PC口
8255的方式 1
8255的方式 2
7 6 5 4 3 2 1 0
PC口
8255的端口选择表,P.166
注意,对 PA,PB,PC三个口的任何读 /写操作,就是对
PA,PB,PC这三个寄存器进行 I/O操作,
第 4个寄存器是 控制字寄存器 (命令字寄存器 )
A1A0 RD WR CS 操 作 说 明
0 0
0 1
0
CPU读取 PA口数据从 8255的 I/O口 读有效0 1 CPU读取 PB口数据
1 0 CPU读取 PC口数据
0 0
1 0
CPU向 PA口 输出 数据向 8255的 I/O口 写有效0 1 CPU向 PB口 输出 数据
1 0 CPU向 PC口 输出 数据
1 1 1 0 0 对 控制寄存器 写控制字 初始化 8255时必须做的工作
X X X X 1 没有选中,8255不工作 8255对系统总线呈 高阻态
1 1 0 1 0 非法状态 控制寄存器只能写不能读
X X 1 1 0 非法状态 8255对系统总线呈 高阻态
D7 D6 D5 D4 D3 D2 D1 D0
特征位
=1
A组 方式选择
0 0:方式 0
0 1:方式 1
1 X:方式 2
A 口 B 口 CL 口CH 口 B组 方式选择 =
0
,
方式
0
=
1
,
方式
1
=
0
,
输出
=
1
,
输入
=
0
,
输出
=
1
,
输入
=
0
,
输出
=
1
,
输入
=
0
,
输出
=
1
,
输入
8255控制寄存器 P.171~ 172
接受控制命令,告诉 8255以何种方式工作。 其地址是,A1,A0 = 11。它可以接受两条命令,第一条命令叫,方式控制字,,方式控制字格式如下:
A 组 B 组注意,对同一控制寄存器可写 两种 命令,故必须在命令本身用
,特征位,加以区别。第二条命令的 特征位 =0
D7 D6 D5 D4 D3 D2 D1 D0
特征位
=0
Don’t care bits 选中的位将要输出的状态 =
0
,
清
0
=
1
,
置
1
8255控制寄存器 可以接受的第 2条命令是,
可以对 PC口按位进行“置 1” 和“清 0” 操作 。
具体命令格式如下,(地址同样是,A1,A0 = 11)
例如:设 8255的控制寄存器在系统中的地址是,0003H,要将
PC5引脚置 1,可用如下指令完成:
MOV DPTR,#0003H
MOV A,#0BH
MOVX @DPTR,A
D3 D2 D1 选中 PCx引脚
0 0 0 PC0
0 0 1 PC1
0 1 0 PC2
0 1 1 PC3
1 0 0 PC4
1 0 1 PC5
1 1 0 PC6
1 1 1 PC7
在 P.174有这几句
8255与单片机的连接,(参见 P.173)
AT89C51 8255
74LS373
P0.0-P0.7
ALE
P2.7
8D Q0Q1
CS
RESET
A0
A1
D0-D7
G
EA
OE
RESET
RD
WR WR
RD
+5V
PA
PC
PB
P2.7接片选 /CS端,8255的 (一组 )寄存器地址 可以是,
PA口,7000H PB口,7001H PC口,7002H 命令口,7003H
8255与单片机的连接,(参见 P.174)
AT89C51
8255
74LS373
P0.0-P0.7
ALE
8D Q0Q1
Q7 CS
RESET
A0
A1
D0-D7
G
EA
OE
RESET
RD
WR WR
RD
+5V
PA
Q7接片选 /CS端,8255的 (一组 )寄存器地址 可以是,
PA口,0000H PB口,0001H PC口,0002H 命令口,0003H
也可以是,007CH,007DH,007EH,007FH……
PC7
PC0
微型打印机
8255的编程应用例:初始化 A口,B口,C口为基本 I/O输出口
MOV DPTR,#7003H ;指向控制字寄存器
MOV A,#80H ; A,B,C口均为输出口
MOVX @DPTR,A ;装入按照 8255控制寄存器 方式控制字格式写命令:
D7 D6 D5 D4 D3 D2 D1 D0
特征位
=1
A组 方式选择
0 0:方式 0
0 1:方式 1
1 X:方式 2
A 口 B 口 CL 口CH 口 B组 方式选择 =
0
,
方式
0
=
1
,
方式
1
=
0
,
输出
=
1
,
输入
=
0
,
输出
=
1
,
输入
=
0
,
输出
=
1
,
输入
=
0
,
输出
=
1
,
输入
8255硬件实验五,8255 A.B.C口输出方波
ORG 0100H
WAVE,MOV DPTR,#0FFDBH ;8255 控制字寄存器地址
MOV A,#80H ;初始化 A,B,C口为基本输出口
MOVX @DPTR,A
MOV A,#55H ;8位高 /低电平相间输出
REPT,MOV DPTR,#0FFD8H ;8255 A口地址
MOVX @DPTR,A
INC DPTR ;8255 B口地址( 0FFD9H)
MOVX @DPTR,A
INC DPTR ;8255 C口地址( 0FFDAH)
MOVX @DPTR,A
LCALL DELY1S ;延时
CPL A ;取反
SJMP RETP ;跳到 REPT去循环
8255硬件实验五,8255 A.B.C口输出方波
PA0输出
PA1输出
PA2输出
PA3输出
PA4输出
PA5输出
PA6输出
PA7输出
PB0输出 ……………………………………
⑤ 可编程 RAM/ IO/ CTC
接口芯片 8155:
二,并行接口的扩展 (8155) P.175
PC3 VCC
PC4 PC2
TIMERIN PC1
RESET PC0
PC5 PB7
IO/M PB5
RD PB3
WR PB2
ALE PB1
AD0 PB0
AD1 PA7
AD2 PA6
AD3 PA5
8155
AD5 PA3
AD6 PA2
AD7 PA1
CE/CE PB4
GND PA0
TIMEROUT PB6
AD4 PA4
40 PIN
8155与 8255 是 Intel推出的两个广泛应用的并行口扩展芯片:
8255扩展了 三个 8位 的并行口
8155扩展了 两个 8位 并行口 +
一个 6位 的并行口 +
一个 14位 Timer +
片内 256字节 RAM
8155有一个姊妹芯片 —— 8156
片选端为高有效,其他完全相同
⑤ 可编程 RAM/IO/CTC接口芯片 8155引脚:
PC3 VCC
PC4 PC2
TIMERIN PC1
RESET PC0
PC5 PB7
IO/M PB5
RD PB3
WR PB2
ALE PB1
AD0 PB0
AD1 PA7
AD2 PA6
AD3 PA5
8155
AD5 PA3
AD6 PA2
AD7 PA1
CE/CE PB4
GND PA0
TIMEROUT PB6
AD4 PA4
◆ PA,PB两个 8位和一个 6位 PC口。
◆ AD0—AD7,地址 /数据复用线。
◆ ALE,地址锁存使能,控制地址 /数据复用。
◆ /CE是 8155的 片选端,低有效 ;
8156的片选端是 CE,高有效。
◆ IO/M,I/O口或 RAM选择线。
◆ /RD是读信号; /WR是写信号;
RESET是复位信号,高有效。
◆ 片内 1个 14位减法 Timer,计数脉冲由 TIMERIN输入,分频后由
TIMEROUT 输出 。
◆ VCC,GND是电源端。
40 PIN
8155的 6个寄存器
8155有 2种工作方式 (基本 I/O和选通 I/O)。
内部有 6个 寄存器,由 AD2,AD1,AD0,ALE与 RD,WR,
IO/M信号线选择。 RESET高有效 ; /CE低有效。
◆
AD7——AD0 选中的寄存器 功 能
X X X X X 0 0 0 命令 /状态字寄存器 对它只能写命令从它只能读状态
X X X X X 0 0 1 A口寄存器 (PA7—PA0) 对应 A口的各个引脚
X X X X X 0 1 0 B口寄存器 (PB7—PB0) 对应 B口的各个引脚
X X X X X 0 1 1 C口寄存器 (PC7—PC0) 对应 C口的各个引脚
X X X X X 1 0 0 定时器低 8位寄存器 单纯存放低 8位初值
X X X X X 1 0 1 定时器高 6位和输出方式寄存器 高两位控制输出信号形式
TM2 TM1 IEB IEA PC2 PC1 PB PA
A口中断 B 口 A 口C 口方式选择
=
1
,
允许
=
0
,
禁止
=
1
,
输出
=
0
,
输入
=
1
,
输出
=
0
,
输入
8155命令 /状态字寄存器 是两个地址相同的寄存器,
命令字寄存器 接受控制命令 (只写 )。
地址,A2,A1,A0=000 命令字格式如下 (P179):
C口方式,ALT1—C口为 输入 口 (A,B为基本 I/O)。
ALT2—C口为 输出 口 (A,B为基本 I/O)。
ALT3—C口低 3位为 A口选通 I/O提供应答信号;
B口为基本 I/O,C口高 3位为输出口。
ALT4—C口的低、高 3位分别为 A口,B口的选通 I/O提供应答信号。
B口中断
=
1
,
允许
=
0
,
禁止
0 0 = ALT1
0 1 = ALT2
1 0 = ALT3
1 1 = ALT4
起 /停与运行控制位:
0 0 = 无操作 =NOP
0 1 = 立即停计数;
若未计数 =NOP
1 0 = 减到 0 停止;
若未计数 =NOP
1 1 = 立即开始计数;
若正在计数则减到 0后按新的方式和初值计数。
X D6 D5 D4 D3 D2 D1 D0
A 口中断请求
=
1
,
满
=
0
,
空
=
1
,
请求中断
=
0
,
无请求注,读取状态字信息多用在以 查询方式 与通过 8155
扩展的外部设备进行应答,或查询定时器的状态。
B 口中断允许 =
1
,
允许
=
0
,
禁止定时器中断状态
B 口中断请求
=
1
,
请求中断
=
0
,
无请求
A 口缓冲器状态
A 口缓冲器状态
=
1
,
满
=
0
,
空
A 口中断允许
=
1
,
允许
=
0
,
禁止
=
1
,
已经计满
=
0
,
读出或复位后
8155命令 /状态字寄存器 是两个地址相同的寄存器,
状态字寄存器 存放状态信息 (只读 )。
地址,A2,A1,A0=000 状态字格式如下 (P180):
D7 D6 D5 D4 D3 D2 D1 D0
8155定时 /计数器 ——14位的减法计数器工作时先要对低 8位寄存器和高 6位寄存器写入初始值。
其地址分别为,A2,A1,A0 = 100 和 101 b
D5 D4 D3 D2 D1 D0
TIMER低 8位:
TIMER高 6位:
M2 M1
(地址,100b)
(地址,101b)
D7 D6 D5 D4 D3 D2 D1 D0
8155定时 /计数器 输出信号的形式
M2,M1 定义定时 /计数器从 TIMEROUT输出信号的形式:
D5 D4 D3 D2 D1 D0
TIMER低 8位
TIMER高 6位 M2 M1
(100)
(101)
M2,M1=00
输出单个方波
M2,M1=01
输出连续方波
M2,M1=01
输出单个脉冲
M2,M1=01
输出连续脉冲计数开始 计数结束常常用作分频器
(自动重装初值 )
常常用作分频器
(自动重装初值 )
负脉冲宽度约等于
TIMERIN的 Tin
单方波宽度约等于初值的一半
8155定时 /计数器 的使用 (如何初始化 )
8155定时 /计数器是 减 2计数器,故:
√ 最小初值为 2。
√ 分频应用时,初值若为偶数,则输出等占空比方波 ;若为奇数,则正半周多一个脉冲周期。
① 先对 (04H)(05H)寄存器装入 14位初值和输出信号形式。 14位初值的范围是 2—3FFFH。
② 启动定时 /计数器。
即对命令 /状态字寄存器 (00H)的最高两位
TM2,TM1写入,11”。
③ 如果定时 /计数器在运行中要改换新的时间常数,务必先装入新的初值,然后再发送一次启动命令,即写入,TM2,TM1=11。
8155与单片机的连接,P.182
AT89C51 8155
P0.0-P0.7
ALE
P2.1
CE
RESET
AD0-AD7
EA
RESET
RD
WR WR
RD
+5V
PA
PB
PC
8位
6位
8位
P2.2
IO/M
ALE
Tin Tout
√ 8155内部有一个 锁存器,故不必再需要外加 74LS373
√ 由于用了 P2.2接 /CE; P2.1接 IO/M,它的 一组 地址是:
XXXX X01X XXXX X000 → 命令 /状态字寄存器
XXXX X01X XXXX X001~ 010 → A,B,C口寄存器
XXXX X01X XXXX X100~ 101 → 定时器低 /高位寄存器
√ 对 8155的片内 RAM寻址,必须 P2.1为低,故 RAM地址为:
XXXX X00X 0000 0000~ 1111 1111等 256个单元。 。
8155的编程应用 P.182
例 1,初始化 A口,C口 为 输入 口,B口为 输出 口 (均为基本 I/O)定时器为 24分频连续方波输出。
MOV DPTR,#0204H ;指向 Timer低 8位寄存器
MOV A,#24 ;初值即分频数,24=18H
MOVX @DPTR,A ;装入
√ 根据连线应该知道它的 一组 地址是,0200~ 0205H
命令 /状态字寄存器的
M2,M1=01
输出连续方波常常用作分频器 (自动重装初值 )
INC DPTR ;波形选择位与 Timer高 6位
MOV A,#40H ;01000000=连续方波 + TH=0
MOVX @DPTR,A ;装入
MOV DPTR,#0200H ;指向命令 /状态字寄存器
8155的编程应用 P.182
例 1,初始化 A口,C口 为 输入 口,B口为 输出 口 (均为基本 I/O)定时器为 24分频连续方波输出。
MOV DPTR,#0204H ;指向 Timer低 8位寄存器
MOV A,#24 ;初值即分频数,24=18H
MOVX @DPTR,A ;装入
TM2 TM1 IEB IEA PC2 PC1 PB PA
A口中断 B 口 A 口C 口方式选择
=
1
,
允许
=
0
,
禁止
=
1
,
输出
=
0
,
输入
=
1
,
输出
=
0
,
输入
C口方式,ALT1——C口为输入口 (A,B为基本 I/O)。
ALT2——C口为输出口 (A,B为基本 I/O)。
ALT3——C口低 3位为 A口选通 I/O提供应答信号;
B口为基本 I/O,C口高 3位为输出口。
ALT4——C口的低、高 3位分别为 A口,B口的选通 I/O提供应答信号。
B口中断
=
1
,
允许
=
0
,
禁止
0 0 = ALT1
0 1 = ALT2
1 0 = ALT3
1 1 = ALT4
起 /停与运行控制位:
0 0 = 无操作 =NOP
0 1 = 立即停计数;
若未计数 =NOP
1 0 = 减到 0 停止;
若未计数 =NOP
1 1 = 立即开始计数;
若正在计数则减到 0后按新的方式和初值计数。
1 1 0 0 0 0 1 0
题目要求 初始化 A口,C口 为 输入 口,B口为 输出 口
(均为基本 I/O)此例命令字寄存器地址是,0200H。
MOV A,#0C2H ;立即启动计数,A入 B出 C入
MOVX,@DPTR,A ;装入
MOV DPTR,#0200H ;指向命令 /状态字寄存器
INC DPTR ;波形选择位与 Timer高 6位
MOV A,#40H ;01000000=连续方波 + TH=0
MOVX @DPTR,A ;装入
8155的编程应用 P.182
例 1,初始化 A口,C口 为 输入 口,B口为 输出 口 (均为基本 I/O)定时器为 24分频连续方波输出。
MOV DPTR,#0204H ;指向 Timer低 8位寄存器
MOV A,#24 ;初值即分频数,24=18H
MOVX @DPTR,A ;装入显示器接口扩展三,LED显示器的扩展 (结构 ) P.186
LED数码管的 结构,①共阳与共阴
@ 单片机系统扩展 LED数码管时 多用 共阳 LED:
共阳数码管每个段笔画是用低电平 (“0”)点亮的,要求驱动功率很小;而共阴数码管段笔画是用高电平 (“0”)点亮的,
要求驱动功率较大。
@ 通常每个段笔画要串一个数百欧姆的 降压电阻 。
公共 阳 极
h g f e d c b a
a b
cd
g
e
f
h
公共 阴 极
h g f e d c b a
a b
cd
g
e
f
hh g f …… a
h g f …… a
高电平点亮低电平点亮接高电平接地
LED数码管的 译码,②硬件译码与软件译码硬件译码特点,采用专用的译码 /驱动器件,驱动功率较大 ;增加了硬件的开销 ;软件 编程简单 ;字型固定 (比如,只有七段,只可译数字,字型不好看 … )。
共阴 LED
a b
cd
g
e
f
h
g
f
e
d
c
b
a
D
C
B
A
P1.3
P1.2
P1.1
P1.0
CD4511AT89C51
74LS48/CD4511是,BCD码 → 七段 共阴 译码 /驱动,IC;
74LS47是,BCD码 → 七段 共阳 译码 /驱动,IC
三,LED显示器的扩展 (结构 ) P.186
三,LED显示器的扩展 (软件译码 )
LED数码管的译码,软件译码软件译码特点,
不用专用的译码 /驱动器件,驱动 功率较小 ; 不增加 硬件的开销;软件 编程较复杂 ;字型 灵活 (比如:
有八段,只可译多种字符,字型好看 …… )。
共阳 LED
a b
cd
g
e
f
h
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
+5VAT89C51硬件译码特点,采用专用译码 /驱动器件,
驱动功率较大;增加了硬件的开销;软件编程简单;
字型固定 (比如:只有七段,只可译数字,字型不好看 …… )。
LED数码管的软件译码八段 LED数码管 段代码编码表 (连线不同可有多种表 ):
公共阳极
h g f e d c b a
a b
cd
g
e
f
h
公共阴极
h g f e d c b a
a b
cd
g
e
f
hh g f …… a
h g f …… a
高电平点亮低电平点亮接高电平接地字形 0 1 2 3 4 5 6 7 8 9 黑共阳 0C0 0F9 0A4 0B0 99 92 82 0F8 80 90 0FF
共阴 3F 06 5B 4F 66 6D 7D 07 7F 6F 00
三,LED显示器的扩展 (显示方式 ) P.190
LED数码管的 显示方式,③静态与动态动态显示特点,
有闪烁,用 元器件少,占 I/O线少,必须扫描,花费 CPU时间,
编程复杂。 (有多个 LED时尤为突出)
静态显示特点,
无闪烁,用 元器件多,占 I/O线多,无须扫描,节省 CPU时间,
编程简单。
静态显示,
各数码管在显示过程中 持续 得到送显信号,与各数码管接口的 I/O口线 是 专用 的。
动态显示,
各数码管在显示过程中 轮流 得到送显信号,与各数码管接口的 I/O口线 是 共用 的。
A
B
CLK
h g f e d c b a
CLR AB CLK CLR AB CLK CLR
+5V
VCC
TxD
RxD
89C51
单片机
74LS164 74LS164 74LS164
h g f e d c b a h g f e d c b a
+5V
共阳 LED
数码管
LED数码管 静态 显示举例 (学习串行口已见过 )
有几个 LED就要几个 74LS164,但只要数据不变,
送一次就保持住了,且不闪烁,编程十分简单。
要求,根据上图编写通过串行口和 74LS164驱动 共阳 LED数码管 查表显示的子程序。
条件,系统有 6个 LED数码管,待显数据 (00H—09H)
已放在 35H—30H单元中 (分别对应 十万位 → 个位 ),
DSPLY:MOV DPTR,#TABLE ;共阳 LED数码管译码 表首址
MOV R0,#30H ;待显数据缓冲区的 个位 地址
REDO,MOV A,@R0 ;通过 R0实现寄存器 间接寻址
MOVC A,@A+DPTR ;查表
MOV SBUF,A ;经串行口 发送 到 74LS164
JNB TI,$ ;查询 送完一个字节的第 8位?
CLR TI ;为下一字节发送 作准备
INC R0 ;R0指向下一个 数据缓冲单元
CJNE R0,#36H,REDO ;判断 是否发完 6个数?
RET ;发完 6个数就 返回
TABLE,DB 0C0H,0F9H,0A4H,0B0H,99H ;共阳 LED译码表
DB 92H,82H,0F8H,80H,90H
LED数码管 动态 显示举例 (图见 P.189)
P1.5
P1.4
P1.3
P1.2
P1.2
P1.0
P0.7
P0.6
P0.5
P0.4
P0.3
P0.2
P0.1
P0.0
7406 OC门 X 3
上拉电阻
× 14
+5V
AT89C51
工作原理,从 P0口送段代码,P1口送位选信号 。段码虽同时到达 6个 LED,但 一次仅一个 LED被选中 。利用,视觉暂留,,每送一个字符并选中相应位线,延时一会儿,再送 /
选下一个 …… 循环扫描 即可。
共阴数码管位选线段代码
P1.5
P1.4
P1.3
P1.2
P1.2
P1.0
P0.7
P0.6
P0.5
P0.4
P0.3
P0.2
P0.1
P0.0
7406 OC门 X 3 +5V
AT89C51
位选线段代码要求,此处为共阴数码管,P0口送段代码,P1口送位选信号。
通过查表实现动态显示。
条件,待显数据 (00H—09H)已放在,7FH—7AH单元中 (分别对应 十万位 ~ 个位 )
说明,由于用了 反相驱动器 7406,要用共阳译码表。
共阴数码管上拉电阻
× 14
7406 OC门 X 3 +5V
(7FH) (7EH) (7DH) (7CH) (7BH) (7AH)
十万 万位 千位 百位 十位 个位数据缓冲区 / 显示缓冲区
P0口 送段代码,P1
口 送位选信号。
待显数据已经放在,
7FH—7AH
单元 (分别对应 十万位 → 个位 )
使用共阳译码表 。
DIR,MOV DPTR,#DSEG ;数码管译码 表首址
MOV R0,#7AH ;待显缓冲区 个位 地址
MOV R3,#01H ;个位的 位选信号 =01H
LD1,MOV A,@R0 ;通过 R0间接寻址
MOVC A,@A+DPTR ;查表
MOV P0,A ;字段码送到 P0口
MOV P1,R3 ;字位选择送到 P1口
LCALL DELY ;调延时 1ms子程序
INC R0 ;R0 指向下一字节
MOV A,R3
JB ACC.5,LD2 ;判 是否发完 6个数?
RL A ;R1指向下一个位
MOV R3,A ;位选信号存回 R1
SJMP LD1 ;跳去再显示下一个数
LD2,RET ;发完 6个数就 返回
DSEG,DB 0C0H,0F9H,0A4H,0B0H,99H;共阳译码表
DB 92H,82H,0F8H,80H,90H
P0口 送段代码,P1
口 送位选信号。
待显数据已经放在,
7FH—7AH
单元 (分别对应 十万位 → 个位 )
使用共阳译码表 。
动态 显示举例 (循环显示,8”的实验 )
实验箱 从 P0口扩展了两个 8位的简单 I/O口,
一个送段代码 (字形状 ),地址是 0DCH;
一个送位选信号 (字位置 ),地址是 0DDH。
ORG 0000H
MOV R0,#0DCH ;指向 字形口
MOV A,#80H ;送,8”的字形代码
MOVX @R0,A ;输出字形代码
MOV R1,#0DDH ;指向 字位口
MOV A,#20H ;从最高位开始
LEDO:MOVX @R1,A ;输出字位代码
ACALL DEYS ;调延时子程序
RR A ;右移一位
SJMP LEDO ;循环显示,8”
OVER !