第7章

硬件扩展与接口技术

深入学习单片机最小系统、存储器扩展、总线结构及8255并行I/O扩展技术,掌握硬件设计与编程实现方法

01

7.1 单片机最小系统

单片机最小系统是指能够让单片机正常工作的最基本的电路组合,是构成单片机应用系统的基础。

组成部分

单片机芯片

核心处理器,如8051系列,包含CPU、存储器、I/O接口等功能部件。

时钟电路

为单片机提供工作时序基准,通常由晶振和电容组成,本课程统一采用12MHz。

复位电路

使单片机初始化进入确定的起始状态,分上电复位和手动复位两种方式。

电源电路

提供单片机工作所需的电能,通常为+5V或+3.3V直流电源。

工作原理

  • 时钟信号控制单片机内部各种操作的时序
  • 复位操作使单片机寄存器和程序计数器初始化
  • 电源为芯片提供稳定的工作电压
  • 程序从ROM中读取并执行

设计要点

  • 晶振选择:本课程统一采用12MHz晶振,兼顾定时计算与串口通信的通用教学需求
  • 复位电路:上电复位利用电容充电特性,手动复位增加按键实现人工干预
  • 电源稳定性:使用滤波电容减少电源噪声,关键器件旁放置去耦电容
02

7.2 存储器扩展

由于单片机内部存储器容量有限,在实际应用中常需要扩展外部存储器来满足程序和数据存储的需求。

存储器分类

程序存储器(ROM)

用于存储程序代码和固定数据,掉电后数据不丢失,如EPROM、EEPROM、Flash等。

数据存储器(RAM)

用于临时存储程序运行过程中的数据和变量,掉电后数据丢失,如SRAM、DRAM等。

扩展方法

1. 并行扩展: - 使用地址总线、数据总线和控制总线连接外部存储器 - 特点:速度快,但占用I/O口资源多 - 典型芯片:6264(8K×8位SRAM)、2764(8K×8位EPROM) 2. 串行扩展: - 通过SPI、I²C等串行接口扩展存储器 - 特点:占用I/O口少,但速度相对较慢 - 典型芯片:AT24C02(2K位EEPROM)、W25Q64(8M位SPI Flash)

地址译码技术

  • 线选法:直接用高位地址线作为存储器芯片的片选信号,简单但地址空间不连续
  • 全译码法:使用译码器对高位地址进行译码,产生片选信号,地址空间连续
  • 部分译码法:仅对部分高位地址线进行译码,介于线选法和全译码法之间

8051扩展特点

  • 程序存储器和数据存储器空间独立
  • 程序存储器扩展使用PSEN信号
  • 数据存储器扩展使用RD和WR信号
  • 外部数据存储器地址空间为64KB(0000H-FFFFH)
03

7.3 单片机总线

总线是单片机系统中各功能部件之间进行信息传输的公共通道,是构成单片机系统的重要组成部分。

总线分类

地址总线(AB)

用于传输单片机发出的地址信号,确定存储单元或I/O端口的位置。

数据总线(DB)

用于在单片机与存储器、I/O端口之间传输数据,双向传输。

控制总线(CB)

用于传输控制信号和时序信号,协调各部件工作。

8051单片机总线结构

  • 地址总线:16位,可寻址64KB空间(0000H-FFFFH)
  • 数据总线:8位,P0口复用为数据总线和低8位地址总线
  • 控制总线:包括ALE、PSEN、EA、RD、WR等信号

总线分时复用技术

8051单片机P0口同时作为数据总线和低8位地址总线,采用分时复用技术实现:

1. 地址锁存信号ALE(Address Latch Enable): - 当ALE为高电平时,P0口输出低8位地址 - 当ALE下降沿时,将低8位地址锁存到外部地址锁存器中 2. 时序过程: - 首先P0口输出低8位地址,ALE为高电平 - ALE下降沿将地址锁存 - 然后P0口切换为数据总线,进行数据传输
04

7.4 8255并行I/O扩展芯片

8255是一种常用的可编程并行I/O接口芯片,可用于扩展单片机的I/O端口,为外部设备提供数据输入/输出通道。

主要特点

  • 具有24个可编程I/O引脚,分为3个8位端口(A、B、C)
  • 三种工作方式:方式0(基本输入/输出)、方式1(选通输入/输出)、方式2(双向传输)
  • 通过编程设置控制字可灵活配置各端口工作方式
  • 与单片机通过数据总线连接,使用简单方便

内部结构

端口A、B、C

- 端口A:具有一个8位数据输出锁存/缓冲器和一个8位数据输入锁存器
- 端口B:具有一个8位数据输出锁存/缓冲器和一个8位数据输入缓冲器
- 端口C:可分为两个4位端口,分别与端口A和B配合使用,也可作为独立I/O口

控制寄存器

- 工作方式控制寄存器:用于设置各端口的工作方式
- C口按位置位/复位控制寄存器:用于对端口C的各位进行单独置位或复位操作

工作方式

1. 方式0(基本输入/输出方式): - 端口A、B、C均可设置为输入或输出 - 无握手信号,适用于简单的I/O设备 - 例如:开关输入、LED显示输出 2. 方式1(选通输入/输出方式): - 端口A和B可设置为方式1 - 端口C的部分引脚作为握手信号和中断请求信号 - 例如:键盘输入、打印机输出 3. 方式2(双向传输方式): - 仅端口A可设置为方式2 - 端口A既可以输入也可以输出 - 端口C的5个引脚作为握手信号 - 例如:双向数据通信设备

控制字格式

工作方式控制字

D7=1 时为工作方式控制字

D7 D6 D5 D4 D3 D2 D1 D0
1 A组 A口 C高 B组 B口 C低
标志位 方式选择 A口 I/O C口高4位 方式选择 B口 I/O C口低4位
1=工作方式 00=方式0
01=方式1
1X=方式2
1=输入
0=输出
1=输入
0=输出
0=方式0
1=方式1
1=输入
0=输出
1=输入
0=输出
A组 = A口 + C口高4位 (D7~D3) B组 = B口 + C口低4位 (D2~D0)

C口按位置位/复位控制字

D7=0 时为C口按位置位/复位控制字

D7 D6 D5 D4 D3 D2 D1 D0
0 0 0 0 位选择 置/复位
标志位 固定为 000 000 ~ 111 1位
0=位操作 无意义,固定为0 000=PC0
001=PC1
010=PC2
011=PC3
100=PC4
101=PC5
110=PC6
111=PC7
1=置位
0=复位
可单独对C口PC0~PC7任一位进行置位或复位

常用配置案例

; A组方式0、A口输出、B组方式0、B口输出
MOV A, #80H
MOV DPTR, #xxxxH
MOVX @DPTR, A
; A组方式1、A口输入、B组方式1、B口输入
MOV A, #0B3H
MOV DPTR, #xxxxH
MOVX @DPTR, A
; 置位PC5 (PC0=101=5, D0=1)
MOV A, #00001011B ; 0BH
MOV DPTR, #xxxxH
MOVX @DPTR, A
; 复位PC3 (PC0=011=3, D0=0)
MOV A, #00000110B ; 06H
MOV DPTR, #xxxxH
MOVX @DPTR, A
05

7.5 最小系统案例

案例1:基于8051的LED闪烁系统

设计一个简单的8051单片机最小系统,实现LED闪烁功能。

硬件组成

  • AT89C51单片机
  • 12MHz晶振及电容
  • 复位电路(10KΩ电阻、10μF电容、按键)
  • LED及限流电阻(330Ω)
  • +5V电源

电路连接

  • 晶振连接到XTAL1和XTAL2引脚
  • 复位电路连接到RST引脚
  • LED阳极通过电阻连接到P1.0引脚,阴极接地
  • VCC接+5V,GND接地

程序设计

; 8051单片机LED闪烁程序 ; 功能:P1.0引脚连接的LED以1秒间隔闪烁 ORG 0000H ; 程序起始地址 LJMP MAIN ; 跳转到主程序 ORG 0030H ; 主程序起始地址 MAIN: MOV P1, #0FFH ; 初始化P1口为高电平 LOOP: CLR P1.0 ; 点亮LED ACALL DELAY ; 调用延时子程序 SETB P1.0 ; 熄灭LED ACALL DELAY ; 调用延时子程序 SJMP LOOP ; 无限循环 ; 延时子程序 - 约1秒延时 DELAY: MOV R7, #20 ; 外循环次数 DEL1: MOV R6, #250 ; 中循环次数 DEL2: MOV R5, #200 ; 内循环次数 DEL3: DJNZ R5, DEL3 ; 内循环 DJNZ R6, DEL2 ; 中循环 DJNZ R7, DEL1 ; 外循环 RET ; 返回主程序 END ; 程序结束

案例2:基于8051的按键检测系统

设计一个按键检测系统,当按键按下时,LED状态翻转。

硬件组成

  • AT89C51单片机
  • 12MHz晶振及电容
  • 复位电路
  • LED及限流电阻
  • 按键及上拉电阻(10KΩ)
  • +5V电源

电路连接

  • LED连接到P1.0引脚
  • 按键一端连接到P3.2引脚,另一端接地
  • P3.2通过上拉电阻接+5V

程序设计

; 8051单片机按键检测程序 ; 功能:检测P3.2引脚的按键状态,按键按下时翻转P1.0引脚的LED状态 ORG 0000H ; 程序起始地址 LJMP MAIN ; 跳转到主程序 ORG 0030H ; 主程序起始地址 MAIN: MOV P1, #0FFH ; 初始化P1口为高电平 SETB P3.2 ; 设置P3.2为输入模式 CHECK_KEY: JB P3.2, CHECK_KEY ; 如果按键未按下,继续检测 ; 检测到按键按下,消抖处理 ACALL DELAY_20MS ; 延时20ms消除抖动 JB P3.2, CHECK_KEY ; 再次检测,确认按键确实按下 ; 按键确认按下,处理按键事件 CPL P1.0 ; 翻转LED状态 ; 等待按键释放 KEY_RELEASE: JNB P3.2, KEY_RELEASE ; 等待按键释放 SJMP CHECK_KEY ; 继续检测按键 ; 延时20ms子程序 DELAY_20MS: MOV R7, #20 DEL1: MOV R6, #100 DEL2: MOV R5, #10 DEL3: DJNZ R5, DEL3 DJNZ R6, DEL2 DJNZ R7, DEL1 RET END
06

7.6 8255项目案例

案例1:基于8255的LED点阵显示系统

设计一个基于8255扩展的8×8 LED点阵显示系统,实现简单字符显示。

硬件组成

  • AT89C51单片机
  • 8255并行I/O扩展芯片
  • 8×8 LED点阵模块
  • 74LS373地址锁存器
  • 晶振、复位电路、电源等

电路连接

  • 8255的D0-D7连接到单片机的P0口
  • 8255的CS连接到地址译码输出(如Y0)
  • 8255的A0、A1连接到地址线A0、A1
  • 8255的RD、WR分别连接到单片机的RD、WR
  • 8255的PA口连接到LED点阵的行线
  • 8255的PB口连接到LED点阵的列线

程序设计

; 8255控制8×8 LED点阵显示程序 ; 功能:在LED点阵上显示字符'A' ORG 0000H ; 程序起始地址 LJMP MAIN ; 跳转到主程序 ; 8255端口地址定义 PA8255 EQU 0FF7CH ; 8255端口A地址 PB8255 EQU 0FF7DH ; 8255端口B地址 CON8255 EQU 0FF7FH ; 8255控制寄存器地址 ORG 0030H ; 主程序起始地址 MAIN: ; 初始化8255 MOV DPTR, #CON8255 ; 指向8255控制寄存器 MOV A, #80H ; 方式控制字:方式0,A口、B口输出 MOVX @DPTR, A ; 写入控制字 ; 显示字符'A' DISPLAY: MOV R0, #0 ; 列计数器 MOV DPTR, #TABLE ; 指向字符表 DISP_LOOP: MOV A, R0 ; 获取列号 MOVC A, @A+DPTR ; 从字符表中获取对应列的数据 MOV DPTR, #PA8255 ; 指向8255端口A(行数据) MOVX @DPTR, A ; 输出行数据 MOV A, R0 ; 获取列号 CPL A ; 取反,因为列是共阳连接 MOV DPTR, #PB8255 ; 指向8255端口B(列数据) MOVX @DPTR, A ; 输出列数据 ACALL DELAY ; 延时,控制显示亮度 INC R0 ; 列号加1 CJNE R0, #8, DISP_LOOP ; 如果未显示完8列,继续循环 SJMP DISPLAY ; 无限循环显示 ; 延时子程序 DELAY: MOV R7, #10 DEL1: MOV R6, #20 DEL2: MOV R5, #25 DEL3: DJNZ R5, DEL3 DJNZ R6, DEL2 DJNZ R7, DEL1 RET ; 字符表 - 'A'的点阵数据 TABLE: DB 00H, 3CH, 42H, 42H, 42H, 7EH, 42H, 42H ; 'A'的点阵数据 END

案例2:基于8255的简易键盘接口

设计一个基于8255的4×4矩阵键盘接口,实现按键识别功能。

硬件组成

  • AT89C51单片机
  • 8255并行I/O扩展芯片
  • 4×4矩阵键盘
  • 晶振、复位电路、电源等

电路连接

  • 8255的PA口连接键盘的行线(输出)
  • 8255的PB口连接键盘的列线(输入)
  • 其他控制信号连接同前例

程序设计

; 8255控制4×4矩阵键盘程序 ; 功能:扫描矩阵键盘,识别按键并显示键值 ORG 0000H ; 程序起始地址 LJMP MAIN ; 跳转到主程序 ; 8255端口地址定义 PA8255 EQU 0FF7CH ; 8255端口A地址 PB8255 EQU 0FF7DH ; 8255端口B地址 CON8255 EQU 0FF7FH ; 8255控制寄存器地址 ORG 0030H ; 主程序起始地址 MAIN: ; 初始化8255 MOV DPTR, #CON8255 ; 指向8255控制寄存器 MOV A, #82H ; 方式控制字:方式0,A口输出,B口输入 MOVX @DPTR, A ; 写入控制字 SCAN_KEY: ACALL KEY_SCAN ; 调用键盘扫描子程序 JZ SCAN_KEY ; 如果无按键,继续扫描 ; 有按键,消抖处理 ACALL DELAY_20MS ; 延时20ms ACALL KEY_SCAN ; 再次扫描确认 JZ SCAN_KEY ; 如果按键消失,继续扫描 ; 按键确认有效,处理键值 MOV R2, A ; 保存键值 ; 等待按键释放 KEY_RELEASE: ACALL KEY_SCAN JNZ KEY_RELEASE ; 等待按键释放 ; 显示键值(此处简化处理) MOV A, R2 ; 获取键值 SJMP SCAN_KEY ; 继续扫描 ; 键盘扫描子程序 KEY_SCAN: MOV DPTR, #PA8255 ; 指向8255端口A MOV A, #00H ; 所有行输出低电平 MOVX @DPTR, A ; 输出到行线 MOV DPTR, #PB8255 ; 指向8255端口B MOVX A, @DPTR ; 读取列线状态 CPL A ; 取反,使1表示有键按下 ANL A, #0FH ; 屏蔽高4位 JZ NO_KEY ; 如果A=0,表示无按键 MOV R1, A ; 保存列扫描值 MOV R0, #0 ; 行计数器 MOV A, #FEH ; 初始行扫描值 ROW_SCAN: MOV DPTR, #PA8255 ; 指向8255端口A MOVX @DPTR, A ; 输出行扫描值 MOV DPTR, #PB8255 ; 指向8255端口B MOVX A, @DPTR ; 读取列线状态 CPL A ; 取反 ANL A, #0FH ; 屏蔽高4位 JZ NEXT_ROW ; 如果A=0,表示此行无按键 MOV B, #4 ; 每行列数 MUL AB ; R0×4 ADD A, R1 ; 加上列扫描值 RET ; 返回键值 NEXT_ROW: INC R0 ; 行号加1 MOV A, #FEH ; 重新加载初始行扫描值 RL A ; 左移一位,指向下一行 CJNE R0, #4, ROW_SCAN NO_KEY: MOV A, #0 ; 无按键,返回0 RET ; 延时20ms子程序 DELAY_20MS: MOV R7, #20 DEL1: MOV R6, #100 DEL2: MOV R5, #10 DEL3: DJNZ R5, DEL3 DJNZ R6, DEL2 DJNZ R7, DEL1 RET END

7.7 本章总结

单片机最小系统

由单片机芯片、时钟电路、复位电路和电源电路组成,是单片机工作的基础。时钟电路提供时序基准,复位电路使单片机初始化,电源提供稳定工作电压。

存储器扩展

包括程序存储器和数据存储器扩展,有并行扩展和串行扩展两种方式。地址译码技术有线选法、全译码法和部分译码法,用于确定存储器地址空间。

单片机总线

包括地址总线、数据总线和控制总线。8051单片机P0口采用分时复用技术,既作为低8位地址总线又作为数据总线,通过ALE信号实现地址锁存。

8255并行I/O扩展

可编程并行I/O接口芯片,有24个I/O引脚,分A、B、C三个端口,三种工作方式。通过控制字设置工作方式,可灵活扩展单片机I/O端口。

实践技能提升

  • 掌握单片机最小系统的设计与调试方法
  • 学会存储器扩展的电路设计与地址分配
  • 理解总线分时复用原理及实现方法
  • 掌握8255芯片的编程方法和应用设计
  • 能够设计并实现基于单片机扩展的简单应用系统

学习建议

本章内容实践性较强,建议通过实验加深理解:搭建单片机最小系统实验平台,观察系统工作状态;进行存储器扩展实验,验证地址译码技术;完成8255芯片的编程实验,掌握其工作方式;设计并实现一个综合性的扩展应用系统。

08

7.8 课后练习题

1 填空题

1. 单片机最小系统由____、____、____和____四部分组成。

2. 8051单片机的时钟电路通常由____和____组成,典型频率为____MHz。

3. 复位电路分为____复位和____复位两种方式。

4. 单片机总线分为____总线、____总线和____总线三类。

5. 8051单片机P0口采用____复用技术,同时作为____和____。

6. 地址译码技术有____法、____法和____法三种。

7. 8255芯片有____个可编程I/O引脚,分为____、____、____三个端口。

8. 8255的工作方式有____、____和____三种。

9. 8255方式控制字的最高位D7=____时,表示这是工作方式控制字。

10. 外部数据存储器扩展时使用____和____信号控制读写操作。

2 单选题

1. 单片机最小系统中,哪个部件是核心处理器?

A. 晶振   B. 复位电路   C. 单片机芯片   D. 电源

2. 8051单片机的地址总线宽度是多少位?

A. 8位   B. 16位   C. 32位   D. 12位

3. 以下哪个信号用于锁存P0口输出的低8位地址?

A. PSEN   B. ALE   C. RD   D. WR

4. 8255芯片的端口A有多少个引脚?

A. 4个   B. 6个   C. 8个   D. 12个

5. 8255的方式0属于哪种工作方式?

A. 选通输入/输出   B. 基本输入/输出   C. 双向传输   D. 中断方式

6. 线选法的特点是什么?

A. 地址空间连续   B. 电路复杂   C. 地址空间不连续   D. 需要译码器

7. 程序存储器扩展时使用哪个控制信号?

A. RD   B. WR   C. PSEN   D. ALE

8. 8255的控制寄存器地址由什么决定?

A. A0、A1   B. 仅A0   C. 仅A1   D. 数据总线

9. 以下哪种方式只能用于端口A?

A. 方式0   B. 方式1   C. 方式2   D. 方式3

10. 串行扩展存储器相比并行扩展的优点是?

A. 速度快   B. 占用I/O口少   C. 电路简单   D. 容量大

3 编程题

1. 编写程序,初始化8255芯片,设置端口A为输出方式,端口B为输入方式,端口C为输出方式,工作在方式0。

2. 使用8255的端口A控制8个LED,编写程序实现LED流水灯效果(从左到右依次点亮)。

3. 使用8255的端口B读取4个按键状态,编写程序实现按键检测功能,并将按键状态通过端口A的LED显示出来。

4. 编写程序,利用8255的端口C按位置位/复位功能,依次点亮端口C的8个LED。

5. 设计一个基于8255的简单交通信号灯控制系统:端口A的低3位控制红、黄、绿三色灯,编写程序实现红绿灯交替点亮。