单片机原理及应用 -...

393
单片机原理及应用 aa理论、实验、课程设计 贾金玲 副主编 姚娅川 电子科技大学出版社

Transcript of 单片机原理及应用 -...

Page 1: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

单片机原理及应用 ��理论、实验、课程设计

主 编 贾金玲

副主编 姚娅川

电子科技大学出版社

Page 2: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

前 言

单片机的全称为单片微型计算机(Single-chip Microcomputer),它是微电子技术与计算

机技术有机结合的成功典范,由于其在各方面应用的巨大优势,三十多年来,始终显示着

强大的生命力。单片机的出现使计算机真正从科学的神圣殿堂走入寻常百姓家,成为广大

工程技术人员技术革新和技术革命的有力武器。以 MCS-51 系列单片机为基础的各种单片

机系列以及单片机系统设计的“傻瓜”化给测控领域、智能仪器、家用电器等领域带来真

正实惠,它消除了非计算机专业技术人员自己设计一个计算机系统的技术壁垒。单片机应

用系统的结构随意性、规模随意性和空间随意性,使得非计算机专业的工程技术人员仅凭

他们已经具有的知识、经验和技能就可以成为单片机技术应用的能手。

由于单片机技术在我国大规模地、普遍地应用,各高校计算机专业、电类专业,甚至

某些非电类专业都开设了单片机原理与应用课程,并将单片机作为许多实践环节的基本工

具,如校内实习、校外实习、电装实习、课程设计、毕业设计等。为了推进普通高校电类

专业的计算机教学和计算机应用,根据相关专业培养目标,结合多年的教学和科研经验,

我们精心编写了《单片机原理及应用》一书。

本书的最大特点就是集单片机理论教学、实验教学和课程设计于一体,是普通本科院

校电类专业单片机的集成化教学蓝本。同时,本书还适当介绍了单片机发展的新技术,并

给出了一定数量的详细设计实例,因此,也是工程技术人员进行单片机开发应用的参考用

书。

本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

以 MCS-51 系列单片机为基础,兼顾单片机发展新技术,共 8 章,由贾金玲、姚娅川、万

新编写。第二部分为实验教学内容,编制了 12 个实验题目,并提出实验要求,简述了实验

原理,给出了实验电路和实验程序流程图,所列程序均已上机调试通过,这部分由陈光建

编写。第三部分为课程设计指导,由贾金玲编写。阐述了单片机课程设计的步骤、课程设

计报告的撰写格式,编写了 30 个设计题目,并给出了课程设计实例。全书由贾金玲统稿,

姚娅川、陈光建校对。

书中给出了丰富实用的附录,其中,单片机实验上机步骤是以清华大学计算机工厂生

产的 TSC51/196 实验开发系统为例介绍的,TMSD 多种语言调试程序是与该系统配套使用

的软件。若读者使用其他单片机实验系统,可将这两个附录作为参考。其实,许多实验开

发系统的实验内容、基本原理、系统软件和上机步骤都是大同小异的。

由于作者时间和水平有所限,书中难免有疏漏之处,恳请读者批评指正。

编 者

2004 年 5 月

Page 3: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

图书在版编目(CIP)数据

单片机原理及应用/贾金玲主编.—成都:电子科技

大学出版社,2004.8

ISBN 7-81094-609-9

Ⅰ.单� Ⅱ.贾� Ⅲ.单片微型计算机—高等学

校—教材 Ⅳ.TP368.1

中国版本图书馆 CIP 数据核字(2004)第 088060 号

单片机原理及应用

��理论、实验、课程设计 主 编 贾金玲 副主编 姚娅川

出 版: 电子科技大学出版社(成都市建设北路二段四号 邮编:610054)

责任编辑: 张 鹏

发 行: 电子科技大学出版社

印 刷: 电子科技大学出版社印刷厂

开 本: 787×1092 1/16 印张 24.75 字数 610 千字

版 次: 2004 年 8 月第 1 版

印 次: 2004 年 8 月第 1 次印刷

书 号: ISBN 7-81094-609-9/TP·361

印 数: 1—2000 册

定 价: 39.00 元

■ 版权所有 侵权必究 ■

◆ 邮购本书请与本社发行科联系。电话:028-83201495 邮编:610054

◆ 本书如有缺页、破损、装订错误,请寄回印刷厂调换。

Page 4: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·1·

目 录

第一部分 单片机原理及应用

第一章 概 述........................................................................................................................ 2

1.1 单片机的概念 ............................................................................................................... 2

1.1.1 计算机的组成 .................................................................................................... 2

1.1.2 微型计算机的组成 ............................................................................................ 2

1.1.3 单片微型计算机的组成 .................................................................................... 3

1.1.4 MCS-51 系列单片机的组成 ............................................................................. 3

1.2 单片机的分类 ............................................................................................................... 4

1.2.1 按字长分类 ........................................................................................................ 4

1.2.2 按用途分类 ........................................................................................................ 5

1.3 单片机的特点 ............................................................................................................... 5

1.4 单片机的应用 ............................................................................................................... 6

1.5 单片机应用系统的开发 ............................................................................................... 7

1.6 单片机的发展 ............................................................................................................... 8

1.6.1 单片机发展历程 ................................................................................................ 8

1.6.2 单片机发展趋势 ................................................................................................ 9

习题与思考题...................................................................................................................... 10

第二章 MCS-51 系列单片机组成原理 ....................................................................................11

2.1 MCS-51 系列单片机内部结构 ...................................................................................11

2.2 MCS-51 系列单片机时序 .......................................................................................... 14

2.2.1 机器周期的概念 .............................................................................................. 15

2.2.2 典型指令的执行时序 ...................................................................................... 16

2.3 MCS-51 系列单片机引脚功能 .................................................................................. 16

2.3.1 I/O 引脚和 I/O 端口 ........................................................................................ 16

2.3.2 复位引脚和复位电路 ...................................................................................... 17

2.3.3 时钟引脚和时钟电路 ...................................................................................... 19

2.3.4 控制引脚 .......................................................................................................... 20

2.3.5 主电源引脚 ...................................................................................................... 21

习题和思考题...................................................................................................................... 21

Page 5: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·2·

第三章 MCS-51 系列单片机存储器 ....................................................................................... 23

3.1 MCS-51 系列单片机系统的存储器配置 .................................................................. 23

3.2 内部存储器和特殊功能寄存器 ................................................................................. 24

3.2.1 内部程序存储器 .............................................................................................. 24

3.2.2 内部数据存储器 .............................................................................................. 24

3.2.3 特殊功能寄存器 .............................................................................................. 25

3.3 MCS-51 系列单片机外部存储器及其扩展 .............................................................. 30

3.3.1 常用半导体存储器芯片 .................................................................................. 31

3.3.2 MCS-51 系列单片机外部存储器扩展设计 ................................................... 38

习题与思考题...................................................................................................................... 43

第四章 MCS-51 系列单片机指令系统 ................................................................................... 45

4.1 MCS-51 系列单片机指令系统概述 .......................................................................... 45

4.1.1 指令系统特点 .................................................................................................. 45

4.1.2 布尔处理机 ...................................................................................................... 46

4.1.3 指令中使用的符号说明 .................................................................................. 46

4.2 MCS-51 系列单片机寻址方式 .................................................................................. 47

4.2.1 立即寻址 .......................................................................................................... 47

4.2.2 直接寻址 .......................................................................................................... 48

4.2.3 寄存器寻址 ...................................................................................................... 49

4.2.4 寄存器间接寻址 .............................................................................................. 49

4.2.5 基址+变址间接寻址 ...................................................................................... 50

4.2.6 相对寻址 .......................................................................................................... 51

4.2.7 位寻址 .............................................................................................................. 52

4.3 MCS-51 系列单片机指令系统 .................................................................................. 53

4.3.1 数据传送指令 .................................................................................................. 53

4.3.2 算术运算指令 .................................................................................................. 60

4.3.3 逻辑运算指令 .................................................................................................. 66

4.3.4 控制转移指令 .................................................................................................. 72

4.3.5 位操作指令 ...................................................................................................... 77

4.3.6 综合应用举例 .................................................................................................. 81

习题与思考题...................................................................................................................... 82

第五章 MCS-51 系列单片机汇编语言程序设计 ................................................................... 87

5.1 MCS-51 系列单片机汇编语言语句格式 .................................................................. 87

5.2 常用伪指令 ................................................................................................................. 88

5.3 MCS-51 单片机汇编语言源程序格式及上机过程 .................................................. 91

5.3.1 源程序格式 ...................................................................................................... 91

Page 6: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·3·

5.3.2 MCS-51 单片机汇编语言上机过程 ............................................................... 91

5.4 MCS-51 单片机汇编语言程序设计实例 .................................................................. 92

5.4.1 汇编语言程序设计步骤及程序质量评价标准 .............................................. 92

5.4.2 程序设计实例 .................................................................................................. 93

习题与思考题.....................................................................................................................112

第六章 MCS-51 系列单片机的扩展应用 ..............................................................................116

6.1 MCS-51 系列单片机并行接口 .................................................................................116

6.1.1 片内并行接口电路 .........................................................................................116

6.1.2 扩展外部并行接口 .........................................................................................119

6.2 MCS-51 系列单片机中断系统 ................................................................................ 143

6.2.1 MCS-51 系列单片机中断系统概述 ............................................................. 143

6.2.2 中断源与中断控制 ........................................................................................ 144

6.2.3 MCS-51 中断系统的使用方法 ..................................................................... 147

6.2.4 多个外部中断源的设计 ................................................................................ 148

6.2.5 软件模拟第三个中断优先级 ........................................................................ 151

6.2.6 中断服务程序设计 ........................................................................................ 152

6.3 8051 单片机中的定时器/计数器 ............................................................................. 154

6.3.1 定时器/计数器概述 ....................................................................................... 154

6.3.2 定时器/计数器内部结构和工作原理 ........................................................... 155

6.3.3 定时器/计数器的控制 ................................................................................... 156

6.3.4 定时器/计数器的工作方式 ........................................................................... 158

6.3.5 定时器/计数器的初始化编程 ....................................................................... 160

6.3.6 定时器/计数器的应用举例 ........................................................................... 161

6.4 MCS-51 系列单片机串行接口 ................................................................................ 165

6.4.1 串行接口的主要特性 .................................................................................... 165

6.4.2 串行接口的结构与控制 ................................................................................ 165

6.4.3 串行接口的工作方式 .................................................................................... 167

6.4.4 串行接口的波特率设计 ................................................................................ 170

6.4.5 串行接口的应用 ............................................................................................ 171

6.5 模/数转换器和数/模转换器在单片机系统中的应用 ............................................. 175

6.5.1 A/D 转换器在 MCS-51 系列单片机系统中的应用..................................... 175

6.5.2 D/A 转换器在 MCS-51 单片机系统中的应用............................................. 181

习题与思考题.................................................................................................................... 187

第七章 人机接口.................................................................................................................... 190

7.1 键盘的工作原理 ....................................................................................................... 190

7.1.1 键盘的分类 .................................................................................................... 190

7.1.2 键盘的工作原理 ............................................................................................ 190

7.2 LED(Light Emitting Diode)数码管显示器的工作原理 ..................................... 192

Page 7: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·4·

7.2.1 LED 的工作原理 ........................................................................................... 192

7.2.2 LED 数码管在微机系统中的应用 ............................................................... 194

7.3 非编码键盘与 MCS-51 系列单片机的接口技术 ................................................... 195

7.4 LED 显示器与 MCS-51 系列单片机的接口技术................................................... 199

7.5 可编程键盘/显示接口 8279..................................................................................... 203

7.5.1 8279 的主要功能 ........................................................................................... 203

7.5.2 Inte1 8279 的管脚.......................................................................................... 203

7.5.3 8279 的内部结构 ........................................................................................... 205

7.5.4 8279 编程命令 ............................................................................................... 206

7.5.5 8279 在 MCS-51 单片机系统中的连接应用 ............................................... 212

习题与思考题.................................................................................................................... 217

第八章 单片机新技术介绍 .................................................................................................... 218

8.1 几种常用的 8 位单片机 ........................................................................................... 218

8.1.1 Philips51 系列单片机 .................................................................................... 218

8.1.2 PIC16C5X 系列单片机 ................................................................................. 219

8.1.3 M68HC05 单片机 .......................................................................................... 220

8.1.4 M68HC11 单片机 .......................................................................................... 222

8.1.5 Z8 系列单片机............................................................................................... 222

8.2 以 8051 为内核的高精度数据采集单片机系统 ..................................................... 223

8.2.1 ADµC812 单片机内部结构与性能特点....................................................... 223 8.2.2. 引脚功能 ......................................................................................................... 225 8.2.3 存储器组织 .................................................................................................... 227 8.2.4 片内接口电路 ................................................................................................ 233 8.2.5 中断系统 ........................................................................................................ 235 8.2.6 模/数转换器(ADC) .................................................................................. 238 8.2.7 数/模转换器(DAC) .................................................................................. 240

8.3 可编程外围芯片 PSD 的原理及应用.................................................................... 242 8.3.1 PSD 器件概述................................................................................................ 242 8.3.2 PSD8×× 系列 PSD 器件............................................................................... 243

习题与思考题.................................................................................................................... 254

第二部分 实 验 指 导

实验一 MCS-51 单片机 P1 口输出实验 ............................................................................... 256

实验二 MCS-51 单片机 P1 口输入实验 ............................................................................... 259

实验三 简单 I/O 口扩展实验................................................................................................. 262

实验四 8255A 模拟交通灯管理实验 .................................................................................... 264

Page 8: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·5·

实验五 中断实验.................................................................................................................... 268

实验六 定时器实验................................................................................................................ 271

实验七 串并转换实验 ............................................................................................................ 275

实验八 D/A 转换实验 ............................................................................................................ 278

实验九 A/D 转换实验 ............................................................................................................ 281

实验十 数码显示实验 ............................................................................................................ 286

实验十一 8279 可编程键盘/显示接口实验 .......................................................................... 289

实验十二 继电器控制实验 .................................................................................................... 294

第三部分 课程设计指导

第一章 概 述.................................................................................................................... 297

1.1 单片机原理及应用课程设计应达到的目标 ........................................................... 297

1.2 单片机原理及应用课程设计的主要内容 ............................................................... 297

1.3 单片机原理及应用课程设计的一般步骤 ............................................................... 298

1.4 单片机原理及应用课程设计报告的要求 ............................................................... 299

第二章 单片机原理及应用课程设计的题目与要求 ............................................................ 301

2.1 单片机最小系统与存储器扩展设计 ....................................................................... 301

2.1.1 单片机最小系统设计 .................................................................................... 301

2.1.2 存储器扩展设计 ............................................................................................ 301

2.2 接口技术应用设计 ................................................................................................... 302

2.2.1 键控彩灯的设计与实现 ................................................................................ 302

2.2.2 智能函数发生器设计与开发 ........................................................................ 302

2.2.3 检测与报警系统的设计与开发 .................................................................... 302

2.2.4 多路循环数据采集与控制系统的设计与开发 ............................................ 303

2.2.5 检测系统数字滤波技术 ................................................................................ 303

2.2.6 频率及持续时间自动控制的数据采集系统 ................................................ 303

2.2.7 实时日历/时钟的设计与实现 .................................................................... 304

2.2.8 双机串行通信的设计与实现 ........................................................................ 304

2.2.9 双机并行通信的设计与实现 ........................................................................ 304

2.2.10 电子跑表的设计与功能实现 ...................................................................... 305

2.2.11 十字路口电子交警的设计与功能实现 ...................................................... 305

2.2.12 智能工业供水系统的设计与模拟 .............................................................. 305

2.2.13 基于单片机的分频器设计与实现 .............................................................. 306

2.2.14 夜班防睡控制、记录器的设计与功能实现 .............................................. 306

2.2.15 数字电压表的设计与功能实现 .................................................................. 306

2.2.16 监控程序中键盘扫描模块的设计与实现 .................................................. 307

Page 9: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·6·

2.2.17 铁道路口交通管理自动控制系统的设计与功能实现 .............................. 307

2.2.18 危重病人护理监测系统的功能实现 .......................................................... 307

2.2.19 事件触发延时处理系统的设计与功能实现 .............................................. 308

2.2.20 智能抢答器的设计与功能实现 .................................................................. 308

2.2.21 主从式微机系统的设计与开发 .................................................................. 308

2.2.22 微机与单片机并行通信的设计与实现 ...................................................... 309

2.2.23 步进电机控制系统设计与开发 .................................................................. 309

2.2.24 电子恐龙动作控制系统设计与功能实现 .................................................. 309

2.2.25 天然气燃具定时报告及泄漏报警控制系统设计与实现 .......................... 310

2.2.26 广告屏的设计与开发 .................................................................................. 310

2.2.27 音乐喷泉控制系统的设计与开发 ...............................................................311

2.2.28 智能温度检测控制仪的设计 .......................................................................311

2.2.29 多路闭环数据采集与控制系统设计与开发 .............................................. 312

2.2.30 家电照明综合控制系统设计与功能实现 .................................................. 312

第三章 单片机原理及应用课程设计实例 ............................................................................ 313

3.1 单片机最小系统与存储器扩展设计实例 ............................................................... 313

3.2 接口技术应用设计实例 ........................................................................................... 319

附录 1 实用子程序................................................................................................................. 343

附录 2 MCS-51 系列单片机汇编语言程序上机调试过程 .................................................. 362

附录 3 MCS-51 系列单片机指令表 ...................................................................................... 370

附录 4 TMSD 多种语言调试程序 ......................................................................................... 375

附录 5 TMSD 环境下的上机步骤 ......................................................................................... 379

参考文献.................................................................................................................................... 384

Page 10: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

第一部分 单片机原理及应用

Page 11: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·2·

第一章 概 述

1.1 单片机的概念

所谓单片机就是单片微型计算机(Single-chip Microcomputer),可见它是微型计算

机的一个分支。通过下面几个框图可以说明计算机、微型计算机、单片微型计算机之间的

关系,进而作为一个单片机的具体例子给出 MCS-51 系列单片机的组成框图。

1.1.1 计算机的组成

大、中、小型计算机的控制核心是中央处理单元 CPU(Centure Prossesor Unit),其

主机往往是由多块印刷板构成的,CPU 与外部设备之间可能是通过 I/O 通道或 I/O 处理机

联系的,系统的输入/输出操作由 I/O 通道或 I/O 处理机控制完成,如图 1-1 所示。

主存储器

中央处理单元

CPU

外 设

I/O 通道或

I/O 处理机

主机

系统机

图 1-1 大、中、小型计算机的组成框图

1.1.2 微型计算机的组成

Page 12: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·3·

微型计算机的控制核心是微处理器 MPU(Microprosessor Unit),实际上,人们并不

严格区分 CPU 和 MPU 的叫法,往往统称为 CPU。通常 MPU、内存和 I/O 接口是做在一块印刷

电路板上的(也有做在几块印刷电路板上的,如 STD 总线控制机),MPU 一般是通过 I/O 接

口与外部设备联系,输入/输出操作往往是在 CPU 直接控制下完成的,如图 1-2 所示。

MPU

AB

DB

CB

内 存 I/O 接口

1

I/O 接口

n

��

外设 1 外设 n ��

��

����

图 1-2 微型计算机的组成框图

1.1.3 单片微型计算机的组成

单片微型计算机的核心是微处理器 MPU,与一般微型计算机所不同的是它将微处理器、

内存、I/O 接口、中断逻辑、定时器/计数器等集成到一个集成电路芯片上,有的单片机还

集成了 A/D、D/A 转换器等电路,如图 1-3 所示。这种结构特别适用于测控领域,因此,也

称其为微控制器(Microcontroller),简写为 MCU,但国内大多数人习惯上都叫单片机,

故本书也沿用这种叫法。

图 1-3 单片机的组成框图

1.1.4 MCS-51 系列单片机的组成

作为单片机的一个典型系列,MCS-51 是 Intel 公司 1980 年推出的 8 位单片机,长期

Page 13: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·4·

以来一直是单片机的主流机型,国内应用十分普遍。除 MPU 以外,其内部集成了 4 个 8 位

双向并行接口,1 个全双工串行接口,2~3 个 16 位定时器/计数器,1 个两级 5 个中断源

的中断逻辑,128~256 字节的数据 RAM,一定容量的程序 ROM(个别机型无片内程序 ROM)。

其组成框图如图 1-4 所示。

‘ 中断控制逻辑

MPU

总线控制 振荡电路 并行接口 4 个

ROM RAM 定时器/计数器

串行接口 1 个

图 1-4 MCS-51 系列单片机的组成框图

1.2 单片机的分类

常用的单片机分类方法有两种,一是按字长分类,二是按用途分类。

1.2.1 按字长分类

根据单片机对各种基本操作处理的数据来看,单片机有 4 位单片机、8 位单片机、16

位单片机、32 位单片机和 64 位单片机等。

1.4 位单片机

4 位单片机的主要生产国是日本,如 Sharp 公司的 SM 系列、东芝公司的 TCLS 系列、

NEC 公司的μCOM75××和μPD75××系列等。此外,还有美国 TI 公司的 TMS1000 和 NS 公

司的 COP400 系列。国内也早已能够生产 COP400 系列的 4 位单片机。4 位单片机的主要特

点是价格便宜,但功能并不弱,只是 CPU 为 4 位。其片内存储器有 2KB ROM、

128B×4 的 RAM 等。NEC 公司的μPD75××的片内 ROM 可达 8KB、RAM 为 512B×4,还带有 6

位 A/D 转换。目前,4 位单片机主要用于控制诸如洗衣机、微波炉等家用电器及高档电子

玩具。

2.8 位单片机

8 位单片机是目前单片机中的主流机型。在 8 位单片机中,一般把无串行 I/O 接口和

只提供小范围的寻址空间(小于 8KB)的单片机称为低档的 8 位单片机,如 Intel 公司 MCS-48

系列和 Fairchild 公司的 F8 就属于此类;把带有串行 I/O 接口或 A/D 转换以及进行 64KB

Page 14: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·5·

以上寻址的单片机,称为高档的 8 位单片机,如 Intel 公司的 MCS-51 系列、Motorala 公

司的 MC6801、Zilog 公司的 Z8 等。近年来,在高档 8 位单片机的基础上又出现了超 8 位单

片机,如 Intel 公司的 UPI-452、83C152,Zilog 公司的 Super8,Motorola 公司的 MC68HC11

等。它们不但进一步扩大了片内 ROM 和 RAM 的容量,而且还增加了高级通信、DMA 传送和

高速 I/O 功能。另外,由于 8 位单片机的功能强、价格低廉、品种齐全,因而被广泛应用

于各个领域。特别是高档 8 位单片机早已成为目前单片机的主要机型。

3.16 位单片机

16 位单片机主要有 Thomoson 公司的 68200 系列、Intel 公司的 MCS-96 系列、NS 公司

的 HPC16040 和 NEC 公司的 783xx 等。而得到实际应用的 16 位单片机主要是 Intel 公司的

MCS-96 系列单片机。

4.32 位单片机

32 位单片机首推英国 Inmos 公司的 IMST414DPJI,它是目前并行处理位数最高的单片

机之一。

5.64 位单片机

64 位单片机的处理能力是任何 32 位单片机都无法达到的。目前,SuperH、MIPS

Technologies 和东芝等厂商还是准备将 64 位单片微处理器内核推向嵌入式系统市场。

1.2.2 按用途分类

按用途分类,可将单片机分为通用型单片机和专用型单片机两种。

1.通用型单片机

将资源全部提供给用户使用,如片内寄存器、存储器、中断系统、定时器/计数器、I/O

接口等。其适应性强、扩展容易,构建各种应用系统十分灵活,应用广泛。如 MCS-51 系列

单片机。

2.专用型单片机

针对各种特殊应用场合而专门设计的单片机。如生产过程控制、数据采集与信号处理

等,它们通常是微控制系统的集成化产品。TMS320 系列就是专门用于数字信号处理的单片

机(也称 DSP 芯片),它的指令周期短、运算速度和精度高。ADμC8××系列是内嵌 8051

内核的集成数据采集系统,其主要特性和内部结构将在第八章做较为详细的讲解介绍。

1.3 单片机的特点

Page 15: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·6·

由于单片机是在一块大规模或超大规模集成电路芯片上集成了微型计算机的主要功能

单元,本身就是具有一定规模的计算机,因此,其紧凑的结构、小巧的形体在许多应用场

合是其他类型的计算机所不能比拟的。其特点可归纳如下:

1.形小体轻功耗低

如前所述,单片机就是一个计算机芯片,在这个芯片上集成了计算机的基本功能部件,

甚至是构成技术应用系统的各功能部件。因此,其集成度相当高,而这个芯片的尺寸与普

通的集成块是一样的,那么形小体轻自然不用说了。而且,由于单片机大量用于便携式产

品和家用电器,设计时专门考虑了低电压、低功耗环境。如许多单片机可在 2.2V 甚至 1.2V

或 0.9V 电压下工作,其功耗可降低至μA 级,一颗纽扣电池供电可以使用很长时间。另外,

由于集成度高,抗干扰能力较强,其本身的可靠性也相当高。

2.控制功能强,运算速度快,性价比高

单片机在构成测控系统、电气控制装置、智能仪器等方面与其他微型计算机相比有特

别明显的优势,在设计软、硬件资源时充分考虑了这方面的功能。如指令系统中具有丰富

的程序分支转移、布尔处理和逻辑控制指令,有定时器、中断系统、I/O 接口、各种控制

寄存器等丰富的硬件资源。

单片机特有的结构形式,提高了运算速度。有的单片机还采用了 RISC 和 DSP 技术,进

一步改善了运行效率。随着各种新技术的不断发展,各厂商在提高单片机性能的同时进一

步降低价格,性能价格比成为竞争焦点之一,因此,从总体上讲单片机优于普通的微处理

器。而单片机价格可降低至 0.5 美元。

3.应用系统研制周期短,软、硬件开发灵活方便

由于单片机有丰富的内存和 I/O 接口等功能单元,可直接与外围电路或芯片连接,编

写简单程序就可以构成应用系统。而且利用简单的开发工具就可以在应用环境下进行软、

硬件调试,修改也十分方便。调试成功后即可成为实际的应用系统。因此,研制应用系统

的时间可减到最短,其开放性的灵活扩展功能使软、硬件开发变得简单,也易于掌握。另

外,为防止因突然掉电造成信息丢失或损坏,单片机基本上都设计了备用电源引脚,可以

很方便地接入备用电源,以利保护信息。

1.4 单片机的应用

由于单片机的超小型结构和优越的性价比,使其应用领域十分广泛,这里列出一些主

要的应用领域。

(1)工业控制:各种测控系统、机器人等。

(2)仪器仪表:智能仪器仪表、医疗仪器等。

(3)家电、玩具:各种游戏机、全自动家用电器、摄像/录像机、激光盘驱动器、电

Page 16: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·7·

子玩具等。

(4)计算机外设和通讯设备:各种计算机外设控制(磁盘驱动器控制、打印机控制、

键盘控制等)、调制解调器、智能线路运行控制等。

(5)数据处理:图形处理、数字信号处理(DSP)、数据采集与处理、复印机控制等。

(6)汽车控制:点火系统控制、变速器控制、防滑刹车控制、排气控制等。

(7)国防应用:鱼雷制导控制、导弹控制、智能武器控制,其他航空航天系统。

随着单片机技术的发展,新的产品不断涌现,应用领域还将继续扩大。

1.5 单片机应用系统的开发

单片机应用系统是指根据具体应用的需要,以单片机为核心,连接外部电路或设备所

构成的具有特定功能的系统。图 1-5 是一个基于单片机的函数发生器原理框图,是一个实

际的应用系统。

该函数发生器可根据需要产生并输出直流电压、锯齿波电压、三角波电压、脉冲波电

压、正弦波电压等。具体实现方法是每隔一段时间,由单片机给 D/A 转换器写入一个适当

的数字量,经 D/A 转换后就在输出端得到一个相应幅度的模拟信号。设计数字量的大小可

使输出的模拟信号呈周期性变化,并且改变时间间隔可以改变模拟信号频率,而改变数字

量大小,可以调节模拟信号幅度。另外,根据需要还可以设置多位 LED 显示器将频率、幅

度等显示出来。

锁存器 显示电路 D/A 转换器

译码电路 放大驱动器

模拟信号输出

图 1-5 基于单片机的函数发生器原理框图

应用系统的设计实际上是多种技术的综合应用,而要调试单片机应用系统必须借助开

发工具(称开发装置或开发系统),如单片机仿真器。单片机开发装置是用于帮助研制单片

机应用系统具有开发用的软、硬件资源的专用设备。

单片机应用系统的开发过程大致分为软硬件设计、调试、系统程序固化几个步骤。软

硬件设计是指根据课题要求提出能满足要求的软硬件方案,包括软硬件功能分配、硬件原

理框图、原理电路图、软件流程图,进行方案论证,编制系统源程序,制作印刷电路板。

Page 17: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·8·

调试是指将设计好的软硬件在开发装置上进行运行(需借用开发装置的 CPU 和存储

器),以确定是否能达到设计要求。当然,一般来说是一部分一部分地试运行。当设计的软

硬件经试运行不满足课题要求时要进行修改。调试过程中往往要经过多次修改,一个好的

开发装置会使调试顺利进行。

系统程序固化是指当所设计的单片机应用系统经过在开发装置上的调试已完全达到课

题要求后,所编制的系统软件就应写入(固化)到程序存储器芯片中,以使应用系统脱离

开发装置后正常工作。程序固化是在编程器上完成的,而一般单片机开发装置都具有这个

功能。

最后在调试好的印刷电路板上插上应用系统的 CPU 和固化了程序的存储器芯片,上电

后应用系统就能正常运行。

1.6 单片机的发展

1.6.1 单片机发展历程

单片机是大规模、超大规模集成电路技术发展的结果,是微型计算机发展的一个重要

分支,它应用面广、发展快。单片机发展到今天经历了如下 5 个阶段:

第一阶段(1974 年~1976 年):单片机的初级阶段。由于受当时生产工艺水平和集成

度的限制,单片机采用双片形式,且功能比较简单。如 Fairchild 公司于 1974 年推出的 8

位单片机 F8,它只包含 8 位 CPU、64B 的数据存储器(RAM)和两个并行输入/输出接口,

必须外加一片 3815(包含 1KB ROM、一个定时/计数器和两个并行 I/O 口)才能构成一个完

整的微型计算机。

第二阶段(1976 年~1979 年):低性能单片机阶段。此时的单片机才是真正的 8 位单

片微型计算机,体积小,功能全。在单块芯片上集成有 CPU、并行口、定时器、RAM 和 ROM

等器件。在这一阶段,以 1976 年 Intel 公司推出的符合世界标准的 MCS-48 系列为代表,

其特点是采用专门的结构设计。这个系列单片机在片内集成了 8 位 CPU、并行 I/O 口、8

位定时/计数器、RAM、ROM 等器件,片内无串行 I/O 口,中断处理比较简单,RAM 和 ROM

容量比较小,且寻址范围小于 4KB。这一阶段的单片机还有 Motorola 公司生产的 6801 系

列和 Zilog 公司生产的 Z8 系列。

第三阶段(1979 年~1982 年):高性能单片机阶段。此阶段的单片机品种多、功能强,

一般片内 ROM、RAM 都相对增大,寻址范围可达 68KB,并且有串行输入/输出接口,还可以

进行多级中断处理。这一阶段的单片机以 Intel 公司的 MCS-51 系列为代表,其技术特点是

完善了外部总线,并确立了单片机的控制功能。外部并行总线规范化为 16 位地址总线,用

以寻址外部 64KB 的程序存储器和数据存储器空间,8 位数据总线及相应的控制总线,形成

了完整的并行三总线结构。同时还提供了多机通信功能的串行 I/O 口,具有多级中断处理,

16 位的定时/计数器,片内 RAM 和 ROM 容量增大,有的片内还带有 A/D 转换接口。

Page 18: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·9·

另外,在确定基本控制功能方面,在指令系统中设置了大量位操作,它和片内的位地

址空间构成了单片机所有的布尔操作系统,大大增强了单片机的位操作功能;指令系统中

设置了大量的条件转移、无条件转移指令,增强了指令系统的控制功能。片内特殊功能寄

存器(SFR),建立了计算机外围功能电路的 SFR 集中管理模式,这种集中管理模式在增添

外围功能单元后给管理带来了极大的方便。这一阶段的单片机真正开创了单片机作为微控

制器的发展道路,因此它已超出了 Single-chip Microcomputer 的范围。

这一阶段的单片机还有 Motorola 公司生产的 68xx 系列单片机。

第四阶段(1982 年~1990 年):16 位单片机和 8 位高性能单片机并行开发阶段。它们

最大的特点是实时处理能力强,生产工艺先进,集成度高,内部功能强,而且允许用户采

用工业控制的专门编程语言编程,如 PL/M、C 语言、BASIC 语言等。如 Intel 公司生产的

MCS-96 系列和 ATMEL 公司生产的 8XC552 系列,特别适合用于实时控制。

这一阶段的一些显著特点是:一方面不断完善高档 8 位单片机,改善其结构,以满足

不同用户的需要;另一方面发展了 16 位单片机及专用单片机。

第五阶段(1990 年至今):超性能单片机阶段。1990 年 2 月美国推出的 i80860 超级单

片机轰动了整个计算机界,它的运算速度为 1.2 亿次/秒,可进行 32 位整数运算、64 位浮

点运算,同时片内具有一个三维图形处理器,可构成超级图形工作站。随着半导体技术的

发展,巨型计算机单片化将成为现实。

目前,单片机正朝着高性能和多品种方向发展,尤其是 8 位单片机由于它具有价格低

廉、应用软件齐全、开发应用方便等特点已使它成为当前单片机的主流,16 位单片机和专

用单片机已进入普及应用阶段。近年来,在有些领域,32 位单片机也进入实用阶段。总之,

单片机世界已出现了百花齐放的局面。

1.6.2 单片机发展趋势

近年来,单片机的发展速度很快,但在未来相当长的时期内,8 位单片机仍然是单片

机的主流。这是因为:8 位单片机具有价格低廉、应用软件齐全、开发应用方便等特点;

另一方面,8 位增强型单片机在速度及功能上向现在的 16 位单片机挑战。因此,未来的单

片机机型很可能是 8 位机和 32 位机共同发展的时代。当然,从应用方面而言,32 位单片

机在相当长的时期内数量不会很多,现有的 16 位单片机仍有相当长的生命周期。

从有关资料提供的数据来看,单片机的产量已经占微机(包括一般的微处理器)产量

的 80%以上。目前,单片机正处于上升的前沿时期,就其整体发展趋势和单片机的结构功

能方面看,单片机正朝着大容量、高性能、低价格、外围电路内装化、低功耗和增强 I/O

功能等方向发展,对这几点分别解释如下。

1.大容量

指内存容量进一步扩大。以往单片机内的 ROM 为 1KB~4KB,RAM 为 64B~128B。而为

了不同应用场合的要求,可以加大内存存储容量。目前,单片机内 ROM 可达 4KB~8KB,RAM

可达 128B~256B,有的片内 ROM 可达 12KB,RAM 可达 1MB,寻址可达 16MB。随着半导体工

Page 19: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·10·

艺技术的不断发展,片内存储容量还将进一步扩大。

2.高性能

是指 CPU 的功能增强,主要体现在其数据处理速度快、精度高和系统控制的可靠性好

等方面。如 Intel 公司的 MCS-51 系列单片机增加了一个布尔处理器,位处理功能特别强,

输入/输出的速度快,而且支持 C 语言开发。

3.低价格

是指数字逻辑集成电路组成的控制电路单片化,如家用电器、智能仪器、电子玩具等。

在这类单片机产品中,CPU 多为 4 位,ROM 的容量只有 0.5KB~1KB,它借助于软件的灵活

编程来实现单片机的多功能性,是目前单片机的又一发展方向。这类单片机成本很低,一

般不到 1 美元。此外,还在片内程序存储器的编程和擦除方面用快闪存储技术,极大地缩

短了片内程序存储器的编程和擦除时间,因此,也大大降低了成本。

4.外围电路内装化

主要是为了增加单片机的内部资源,以降低成本,提高系统的可靠性。比如将多路 8~

10 位 A/D 转换器、DMA 控制器、声音发生器、D/A 输出电路及系统故障监视器等都封装在

片内。

5.低功耗

这也是单片机发展所追求的目标之一,目前单片机普遍采用功耗小的 CHMOS 工艺制造,

并增加空闲和掉电两种方式,这样使得单片机可以采用干电池供电,使单片机适应环境的

能力不断加强。

6.增强 I/O 接口功能

为减少外部驱动芯片,进一步增强单片机并行口的驱动能力,有的单片机可直接输出

大电流和高电压,以便直接驱动显示器。为了进一步加快 I/O 的传输速度,有的单片机还

设置了高速 I/O 接口,以最快的速度触发外部设备,也可以最快的速度响应外部事件。

综上所述,随着社会的进步和科学技术的发展,单片机的发展及对单片机的需求和它

在各个领域的应用将得到进一步的扩大。

习题与思考题

1.什么是单片机?2.单片机是如何分类的?

3.简述单片机应用系统及开发系统。

4.单片机有哪些主要特点?

5.MCS-51 系列单片机是哪一年由哪个公司推出的?它是多少位的单片机?其内部包

含哪些主要部件?

Page 20: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·11·

第二章 MCS-51 系列

单片机组成原理

MCS-51 系列单片机是 1980 年 Intel 公司推出的 8 位单片机系列,由于它良好的性价

比,此后其他一些公司也相继研制并生产了 MCS-51 系列单片机 8051 及其兼容芯片。因此,

这个系列成为主流单片机。它的主要特性如下:

(1)具有两级中断优先级处理能力,可管理 5 个中断源,且都有自动转入的中断入口

地址;

(2)内含定时器/计数器,工作方式可编程选择;

(3)有 32 条 I/O 线,输入输出操作功能强,可直接带外设;

(4)布尔处理功能强,可扩展用途;

(5)内部 RAM 和寄存器有位寻址功能;

(6)外部具有独立的 64K 程序存储空间和 64K 数据存储空间;

(7)有全双工串行接口,波特率可编程设置;

(8)有多种型号,且不同型号的内部程序存储器不同,用户可根据需要选用。

2.1 MCS-51 系列单片机内部结构

Intel 公司推出的 MCS-51 系列单片机采用模块式结构,其基本型为 8051,这一系列各

种加强型单片机都是以 8051 为内核,增加一定的新功能后组成的,所以它们与 8051 完全

兼容。这个系列的单片机产品具有不同工艺(如 HMOS、CHMOS 等)和不同电气特性(如 AH、

BH 等)以及不同子系列(如 8051、8052、80C51、80C52),而同一子系列的单片机又有三

种不同形式(如 8051 子系列中有:8031、8051、8751),这三种形式的区别在于 8031 无片

内 ROM、8051 有片内掩膜 ROM、8751 有片内 EPROM。表 2-1 给出了 MCS-51 系列单片机典型

产品的主要特性。

8051 是 MCS-51 系列单片机中较早的典型产品,它包括三种形式的芯片:8031、8051、

8751。本书以它们为例介绍单片机。图 2-1 和图 2-2 分别是它们的功能框图和内部结构图。

Page 21: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·12·

表 2-1 典型的 MCS-51 系列产品特性

产品型号 程序存储器 RAM 定时器 I/O 线速度

(MHz)主要特性

8051

8031AH

8051AH

8051BH

8751AH

8751BH

ROMLESS

4DBROM

4KBROM

4KBEPROM

4KBEPROM

128B

128B

128B

128B

128B

2

2

2

2

2

32

32

32

32

32

12

12

12

12

12

保密 ROM

一级程序存储器保密位

二级程序存储器保密位

8052

8032AH

8052AH

8752BH

ROMLESS

8KBROM

8KBEPROM

256B

256B

256B

3

3

3

32

32

32

12

12

12

三个定时/计数器

三个定时/计数器

二级程序存储器保密位

80C51

80C31BH

80C51BH

80C51BHP

87C51

ROMLESS

4KBROM

4KBROM

4KBEPROM

128B

128B

128B

128B

2

2

2

2

32

32

32

32

12,16

12,16

12,16

12,16

节电方式

保密 ROM

二级程序存储器保密位

80C51FA

80C51FA

80C51FA

80C51FA

ROMLESS

8KBROM

8KBROM

256B

256B

256B

3

3

3

32

32

32

12,16

12,16

12,16

可编程计数器阵列(PCA)

8XC51FB83C51FB

87C51FB

16KBROM

16KBEPROM

256B

256B

3

3

32

32

12,16

12,16

可编程计数器阵列(PCA)

8XC51FC83C51FC

87C51FB

32KBROM

32KBEPROM

256B

256B

3

3

32

32

12,16,

20

12,16,

20

可编程计数器阵列(PCA)

\可编程时钟输出

80C52

80C54

80C58

80C32

80C52

C80C54

C80C54

C80C54

ROMLESS

8KBROM

16KBROM

16KEPROM

32KBEPROM

256B

256B

256B

256B

256B

3

3

3

3

3

32

32

32

32

32

12,16

12,16

12,16

12,16

12,16

加减计数器 T2

8×F51FC88F51FC

8×F51FC

32KBFLASH

4KBFLASH/

28KBROM

256B

256B

3

3

32

32

12,16

12,16

4KB/28KB 快速 ROMPCA

80C51GB

80C51GB

83C51GB

87C51GB

ROMLESS

8KBROM

8KBEPROM

256B

256B

256B

3

3

3

48

48

48

12,16

12,16

12,16

8 路 8 位 A/D,2PCA 监视

定时器

Page 22: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·13·

(续 表)

产品型号 程序存储器 RAM 定时器 I/O 线速度

(MHz)主要特性

80C152JX

80C152JA

80C152JB

80C152JC

80C152JD

83C152JA

83C152JC

ROMLESS

ROMLESS

ROMLESS

ROMLESS

8KBROM

8KBROM

256B

256B

256B

256B

256B

256B

2

2

2

2

2

2

40

56

40

56

40

40

12,16.5

12,16.5

12,16.5

12,16.5

12,16.5

12,16.5

SKLC/HDLC 和用户定义多

规约串行口

�图 2-1 MCS-51 功能框图

P0口驱动器

P0口储存器

P2口驱动器

P2口储存器 EPROM/ROM

程序地址

寄存器

缓冲器

PC增量器

程序计数器

DPTR

堆栈指针TMP1A

TMP2

B寄存器

定时和

OSC P1口驱动器 P3口驱动器

P1口储存器 P3口储存器

PCON SCON TMOD TCON

*RCAP L*2

*RCAP H*2

T2CON TH0 TL0 TH1

TL1 TH2 TL2

SBUF IE IP

中断、串行口和定时器逻辑

��RAMRAM地址

寄存器

ALU

PSW

控 �刂逻 �呒

指 �噶

寄存器

XTAL1 XTAL2

��������������

P1.0~P�� P3.0~P��

P0.0~P�� P2.0~P��

*仅在8������

图 2-2 MCS-51 内部结构图

Page 23: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·14·

1.微处理器

CPU 由运算器和控制器组成。运算器(即算术逻辑单元 ALU)负责执行所有的算术逻辑

运算,控制器负责对指令代码进行译码,产生各种控制信号,从而完成指令操作。

2.输入/输出接口

8051 内部共有 4 个双向 8 位并行 I/O 接口 P0~P3,1 个全双工串行接口(借用并口 P3

引脚)。通常 P0 口为数据/地址低 8 位分时复用,P1 口为通用 I/O 接口,P2 口为地址高 8

位,P3 口为双功能接口,这 4 个并行口都具有内部锁存器。串行接口内带有缓冲器。I/O

接口详见第六章。

3.片内存储器

8051 片内有 128 字节的静态随机存取存储器 SDAM 作为片内数据存储器使用,字节地

址为 00H~7FH。还有 21 个特殊功能寄存器(SFR),用于各种编程控制,字节地址为 80H~

FFH(占用其中 21 个地址)。片内程序存储器的有无要看具体芯片,8031 无片内程序存储

器,8051 有 4KB 片内程序存储器(掩膜 ROM),地址为 0000H~0FFFH。8751 也有 4KB 片内

程序存储器(EPROM),地址也是 0000H~0FFFH。片内存储器详见第三章。

4.定时器/计数器

8051 单片机片内具有两个 16 位加法计数器,分别为 T0 和 T1。用于各种定时和对外部

事件计数。定时器/计数器详见第六章。

5.中断系统

8051 单片机内的中断逻辑具有 5 个中断源,两个优先级。每个中断源都被设置了固定

的入口地址,响应中断时能自动转到对应中断源的入口地址执行程序,使编程得到简化。

中断系统详见第六章。

6.其他电路

8051 单片机内部含有振荡电路,只需外接适当频率的晶体振荡器作为振荡源,振荡信

号经内部电路整形作为单片机的主频信号。当然,也可用外部脉冲信号作为主频信号。

另外,片内还有总线控制逻辑等,这里不必阐述得十分详细。

2.2 MCS-51 系列单片机时序

时序是 CPU 执行指令过程中各种操作的时间顺序。在计算机中,所有操作都是在时钟

脉冲的控制下按节拍进行的。

Page 24: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·15·

S1P1 P2

一个机器周期

S2P1 P2

S3P1 P2

S4P1 P2

S5P1 P2

S6P1 P2

S1P1 P2

一个机器周期

S2P1 P2

S3P1 P2

S4P1 P2

S5P1 P2

S6P1 P2

OSC(XTAL2)

ALE

读操作码 读下一个操作码(丢掉)即P碈床辉觥�

再读下一个操作码

S1 S2 S3 S4 S5 S6

(a)单字节单周期指令,如I鏝鏑

读操作码 读第2谧纸

再读下一个操作码

S1 S2 S3 S4 S5 S6

(b)双字节单周期指令,如A鏒鏒�鏏

读操作数 读下一个操作码(丢掉)即P碈床辉觥�

S1 S2 S3 S4 S5 S6

(c)单字节双周期指令,如I鏝鏑��

再读下一个操作码

S1 S2 S3 S4 S5 S6

读操作数

读下一个操作码(丢掉)即P碈床辉觥�

不取指

S1 S2 S3 S4 S5 S6

(d)如M鏞鏥鏧缋嘀噶睿ǖ プ纸谒�芷

再读下一个操作码

S1 S2 S3 S4 S5 S6

(MOVX) 不取指

无A轑

地址 数据

访问外部存贮器

图 2-3 典型指令的执行时序

2.2.1 机器周期的概念

MCS-51 系列单片机中一个基本动作(如指令读操作码)至少需要两个时钟周期,这两

个时钟周期分别称为两个时相(时钟相位)P1 和 P2,可以看成动作的基本单位,因此 P1、

Page 25: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·16·

P2 合起来称为一个状态 S。而执行一条指令至少需要 6 个状态,可以看成执行指令的基本

单位,称为机器周期。所以存在如下关系:

1 个机器周期=6 个状态=24 个时钟周期

MCS-51 系列单片机的指令由 1~4 个机器周期组成。

2.2.2 典型指令的执行时序

图 2-3 给出了 MCS-51 系列单片机典型指令执行时序。图中以主频信号和 ALE 的输出作

为参考信号。除执行 MOVX 指令外,每个机器周期 ALE 两次有效,第一次发生在 S1P2 到 S2P1

期间,第二次发生在 S4P2 到 S5P1 期间。

2.3 MCS-51 系列单片机引脚功能

MCS-51 系列单片机大多数采用 40 引脚双列直插式(DIP)封装形式,采用 CHMOS 工艺

制造的 80C51/80C31 还有 44 引脚的方形封装形式。这里给出 8051 三种类型的 DIP 封装引

脚图和逻辑符号,如图 2-4 和图 2-5 所示。

图 2-4 MCS-51 引脚配置 图 2-5 MCS-51 逻辑框图

2.3.1 I/O 引脚和 I/O 端口

P0.7~P0.0:P0 口是一个漏极开路型准双向 I/O 口。在访问外部存储器时,它是数据

总线和地址总线低 8 位分时复用的接口;在 EPROM 编程时,它接收指令字节;在验证程序

Page 26: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·17·

时,输出指令字节,并要求外接上拉电阻。

P1.7~P1.0:P1 口是带内部上拉电阻的 8 位双向 I/O 口,它是通用 I/O 端口。在 EPROM

编程和程序验证时,它接收低 8 位地址。

P2.7~P2.0:P2 口是带内部上拉电阻的 8 位双向 I/O 口。在访问外部存储器时,它输

出高 8 位地址;在对 EPROM 编程和程序验证时,它接收高 8 位地址。

P3.7~P3.0:P3 口是带内部上拉电阻的 8 位双向 I/O 口,它是双功能 I/O 端口。除基

本输入/输出功能外,每个引脚还有专用功能,其专用引脚功能见表 2-2 所示。

表 2-2 P3 口引脚的专用功能

I/O 口线 专 用 功 能

P3.0 RxD(串行数据接收)

P3.1 TxD(串行数据发送)

P3.2 INT0 (外部中断 0 请求输入)

P3.3 INT1 (外部中断 1 请求输入)

P3.4 T0(定时器 0 外部计数脉冲输入)

P3.5 T1(定时器 1 外部计数脉冲输入)

P3.6 WR (外部数据存储器写信号)

P3.7 RD (外部数据存储器读信号)

2.3.2 复位引脚和复位电路

复位操作是计算机系统经常进行的操作,即使其软、硬件回到初始状态,准备工作。

在设计和使用单片机应用系统时必须了解其复位操作,如图 2-7 所示。

1.复位引脚 RST/V���这是一个双功能引脚,即复位/备用电源。

(1)复位功能 RST:单片机的复位是靠外部电路实现的。在振荡信号正常运行情况下,

只要 RST 引脚保持两个机器周期以上时间的高电平,系统就能复位。理论上按主频 2MHz~

12MHz 计算,复位高电平持续时间≥t。

s12~s2102

24~

1012

24t

66µµ=

××=

(2)备用电源功能 V��:当 Vcc 掉电时,在 Vcc 下降到操作系统允许极限之前,RST/ V��引脚接上备用电源,向内部 RAM 供电,这时系统处于一种低功耗方式。当 Vcc 恢复时,备

Page 27: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·18·

用电源仍然保持一定时间,以便完成复位操作,然后重新开始工作。

内部 RAM

Vcc

RST/V���图 2-6 备用电源接入方式(低功耗掉电方式)

内部R緼

Vcc

Vss

复位电路RST/VPD

斯密特触发器

复位电路RST

斯密特触发器

(a)HMOS 复位结构 (b)CHMOS 复位结构

图 2-7 复位结构

2.复位电路

MCS-51 系列单片机常见的外部复位电路有四种,如图 2-8 至图 2-11 所示。

���������������������������������������

图 2-8 上电复位电路 图 2-9 外部复位电路 图 2-10 上电外部复位电路

Page 28: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·19·

200K

1

22uF

+5

RESET

1N4148

74LS04

10K

1

22uF

+5

RESET

74LS04

100pF

10uF

(a)实用的上电复位电路 (b)实用的上电及外部复位电路

图 2-11 抗干扰复位电路

3.复位状态

复位状态就是单片机复位后内部寄存器及引脚的初始数据或初始电平。MCS-51 系列单

片机复位后内部各寄存器的状态如表 2-3 所列。

表 2-3 MCS-51 系列单片机复位后内部寄存器的内容

寄存器 内容 寄存器 内容

PC 0000H TMOD 00H

A 00H TCON 00H

B 00H TH0 00H

PSW 00H TL0 00H

SP 07H TH1 00H

DPTR 0000H TL1 00H

P�~P�FFH SCON 00H

IP xxx00000H SBUF 不定

IE 0xx00000H PCON 00H

另外,复位时,ALE 和 PSEN 配置为输入状态,即 ALE=1, PSEN =1。内部 RAM 不

受复位的影响。

2.3.3 时钟引脚和时钟电路

1.时钟引脚

XTAL1 和 XTAL2 是 MCS-51 系列单片机的时钟引脚。两引脚连接于单片机内部的一个高

增益反相放大器,用于与外部振荡源一起构成振荡电路。其中 XTAL1 为该放大器的输入引

Page 29: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·20·

脚,XTAL2 为该放大器的输出引脚。

2.时钟电路

MCS-51 系列单片机的主频信号有两种产生方式,即内部方式和外部方式。

内部时钟方式电路如图 2-12(a)所示。外接晶体振荡器以及电容 C�、C�构成并联谐

振电路,接在放大器的反馈回路中,内部振荡器产生自激振荡,一般晶振可在 2MHz~12MHz

之间任选。对外接电容虽然没有严格的要求,但电容的大小多少会影响振荡频率的高低、

振荡器的稳定性、起振的快速性和温度的稳定性。外接晶体时,C�、C�选 30PF 左右;外接

陶瓷谐振器时,C�、C�的典型值为 47PF。在设计印刷线路板时,晶体和电容应尽可能安装

得与单片机芯片靠近,以保证稳定可靠。

当采用外部方式时钟电路时,外部信号接至 XTAL2(内部时钟电路输入端),而 XTAL1

接地。由于 XTAL2 端的逻辑电平不是 TTL 的,故建议外接一个上拉电阻。通常对外部振荡

信号无特殊要求,但需要保证最小最高电平及低电平脉宽,一般为频率低于 12MHz 的方波。

如图 2-12(b)所示。

C2C1

1

至内部时钟电路

Vss

XTAL1 XTAL2

1外部振荡器

+5

XTAL1

XTAL2

8051

8051

(a)MCS-51 内部方式时钟电路 (b)MCS-51 外部方式时钟电路

图 2-12 MCS-51 系列单片机时钟电路

2.3.4 控制引脚

MCS-51 系列单片机的控制引脚有一部分占用 P3 口线,前面已经介绍,另一部分是单

独的引脚,介绍如下。

1.ALE/ PROG :地址锁存/编程脉冲引脚,输入/输出

(1)ALE 功能:地址锁存信号,输出。给应用系统中的地址锁存器提供锁存控制信号,

实现地址/数据分时复用。

时序图中已表明,在每一个机器周期(MOVX 指令除外)出现两个 ALE 正脉冲,当 ALE

为高电平时,地址锁存器的输出随输入变化(这时 P0 口输出的是低 8 位地址信息);当 ALE

Page 30: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·21·

由高电平变成低电平时,锁存器将地址锁定,即输出不再随输入变化(P0 口可传送数据信

息)。

另外,ALE 信号还可作为应用系统中频率要求较低的其他部件的时钟信号、计数信号

等(但要注意:若程序中执行了 MOVX 指令,ALE 会出现不均匀的情况)。

(2) PROG 功能:片内程序存储器编程脉冲,输入。对于 EPROM 型单片机,在对片

内程序存储器编程时,该引脚输入编程脉冲信号。

2. PSEN :外部程序存储器读信号,输出,低电平有效

由于 MCS-51 系列单片机外部程序存储空间和外部数据存储空间是独立的,但地址是重

叠的,因此除了在指令上加以区分外,控制信号也有所不同。前面介绍的 RD 、 WR 是用

于读/写数据存储器的,而 PSEN 是用于读程序代码的,它在应用系统中接程序存储器的读

控制端。在访问外部程序存储器时,在每个机器周期, PSEN 两次有效。

3. EA /V��:内部程序存储器选择/编程电压引脚,输入。这是一个双功能引脚

(1)EA 功能:内、外程序存储器选择信号。当访问该地址范围的存储单元时,由于

MCS-51 系列单片机的片内程序存储器地址与片外程序存储器低端地址是重叠的,所以用

EA 引脚电平来区分是访问内部程序存储器,还是访问外部程序存储器。当 EA =“1”时选

择访问单片机内部的程序存储器;当 EA =“0”时选择访问外部的程序存储器。但应注意,

8031、8032、80C31 等几个型号的单片机无片内程序存储器,使用它们时 EA 应接地。

(2)V��功能:片内程序存储器编程电压。对于 EPROM 型单片机,在对片内 EPROM 编

程时,V��引脚输入 21V 的编程电源电压。

2.3.5 主电源引脚

1.V��:+5V 工作电压。正常工作时 V��引脚接+5V 电源电压。

2.V��:接地端。正常工作时 V��引脚接地。

习题和思考题

1.比较 8031、8051、8751 的片内程序存储器。

2.8051 单片机系统中的数据总线、地址总线和控制总线是怎样产生的?

3.8031CPU 的一个机器周期包括几个状态,每一个状态包括几个时相(节拍),故一

个机器周期包含几个时钟周期。

4.ALE 的作用是什么?一个机器周期有几个 ALE 脉冲?在什么时候产生?哪种情况下

ALE 是不均匀的?为什么?

Page 31: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·22·

5.写出 P�口各条 I/O 线的第二功能,并说明它们的含义。

6.8031 复位以后各特殊功能寄存器是什么状态?8031 的启动地址是什么?

7.8051 单片机引脚 EA 的作用是什么?8031 单片机的 EA 应接什么电平?

8.MCS-51 系列单片机 8051 内部有哪些主要的功能部件?它们的功能分别是什么?

9.简述 MCS-51 单片机时钟产生的两种方式。

Page 32: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·23·

第三章 MCS-51 系列单片机存储器

存储器(Memory)是计算机的主要部件之一。单片机系统的存储器分为内存和外存,

内存是集成到单片机芯片内部的,外存是用户根据需要在片外扩展的,本章分别加以介绍。

3.1 MCS-51 系列单片机系统的存储器配置

不同型号的单片机其片内配置的存储器不同。这里以 8051 子系列(含 8031、8051、

8751 型号)为例来介绍 MCS-51 系列单片机存储器的配置,如图 3-1 所示。

0FFFH

0000H

存 EA=0

内部程序

存储器

EA =1

FFFFH

1000H

0FFFH

0000H

程序存储器的配置

8031 无片内存储器

FFH

特殊功能

寄存器

内部数据

存储器

FFFFH

0000H

数据存储器的配置

80H 7FH

00H

007FH

0080H

00FFH

0100H

图 3-1 MCS-51 系列单片机 8051 的存储器配置

Page 33: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·24·

由该图可见,8051 的存储器有 4 个不同的逻辑空间,即内部程序存储器、内部数据存

储器、外部程序存储器、外部数据存储器。它们分别由不同的指令和寻址方式访问,对外

部的两个逻辑空间还使用不同的读控制信号。

3.2 内部存储器和特殊功能寄存器

3.2.1 内部程序存储器

8051/8751 内部有 4KB ROM/EPROM 程序存储器,地址为 0000H~0FFFH。当 EA 接高电

平时,使程序从内部 ROM/EPROM 开始运行,当 PC 值超过 OFFFH 时,自动转到外部程序存储

区 1000H~FFFFH 去执行程序。一般调试程序时,将 EA 接低电平,把被调试程序放在与内

部 ROM/EPROM 地址重叠的存储区,待调试好后再固化到内部 ROM/EPROM 中。

3.2.2 内部数据存储器

8031/8051/8751 单片机内有 128 字节的数据存储区,字节地址为 00H~7FH,与外部数

据存储器低端 128 字节地址相同,但访问它们的指令不同,访问内部数据存储器用 MOV 指

令,访问外部数据存储器用 MOVX 指令。内部这 128 个字节的 SRAM 又分为三个区域,即工

作寄存器区、位寻址区和数据缓存区。如图 3-2 所示。

数 据

缓 冲 区

位 寻 址 区

( 位 地 址 为 00H ~7FH )

3 区

2 区

1 区

0 区

7FH

30H

2FH

20H

1FH

18H

17H

10H

0FH

08H

07H

00H

80 个 字 节 为 数 据 缓 冲 区 ( 含 堆 栈 )

16 个 字 节 为 位 寻 址 区

32 个 字 节 为 四 个 工 作 寄 存 器 区

图 3-2 内部数据存储器

Page 34: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·25·

(1)工作寄存器区:00H~1FH 为 4 个工作寄存器区,每区 8 个单元,分别称为 R0、

R1、R2、R3、R4、R5、R6、R7,且 4 个区的工作寄存器同名。实际上,它们都是通用的数

据寄存器,可用于寄存器地址和数据,其中 R0、R1 还可作为间接寻址寄存器使用。当程序

中需使用工作寄存器时,必须先指出它们是哪一个区的,这是由特殊功能寄存器 PSW 中的

RS1 和 RS0 两位来选择的。

(2)位寻址区:20H~2FH 这 16 个字节的每一位都可以单独进行操作,每一位有一个

地址,称为位地址,例如 20H 单元的位地址为 00H~07H。共有 128 个位地址。

(3)数据缓冲区:30H~3FH 这 80 个字节为一般的数据缓冲区,但通常将堆栈区放在

这个空间。由于复位后堆栈指针自动指向 07H(即工作寄存器区),故在程序开始需要用指

令将 SP 设置在 30H 以后。

3.2.3 特殊功能寄存器

8051 单片机内部地址 80H~FFH 空间有 21 个专用寄存器,见表 3-1 所示,也称为特殊

功能寄存器 SFR。其中有 11 个可以位寻址,如图 3-3 所示。图中有 7 个控制寄存器,各位

功能见表 3-2 所示。表中 PCON、TMOD 不可位寻址。

表 3-1 MCS-51 系列 8051 单片机专用寄存器(21 个寄存器)

特殊功能寄存器 功能名称 地 址 复位后初态

B 通用寄存器 F0H 00H

A 累加器 E0H 00H

PSW 程序状态寄存器 D0H 00H

IP 中断优先级控制寄存器 B8H ×××00000B

P3 P3 口数据寄存器 B0H FFH

IE 中断允许控制寄存器 A8H 0××00000B

P2 P2 口数据寄存器 A0H FFH

SBUF 串行口发送/接收缓冲器 99H 不定

SCON 串行口控制寄存器 98H 00H

P1 P1 口数据寄存器 90H FFH

TH1 T1 计数器高 8 位 8DH 00H

TH0 T0 计数器高 8 位 8CH 00H

Page 35: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·26·

(续 表)

特殊功能寄存器 功能名称 地 址 复位后初态

TL1 T1 计数器低 8 位 8BH 00H

TL0 T0 计数器低 8 位 8AH 00H

TMOD 定时器/计数器方式控制寄存器 89H 00H

TCON 定时器控制寄存器 88H 00H

PCON 电源控制寄存器 87H 00H

DPH 地址寄存器高 8 位 83H 00H

DPL 地址寄存器低 8 位 82H 00H

SP 堆栈指针寄存器 81H 07H

P0 P0 口数据寄存器 80H FFH

图 3-3 可位寻址的特殊功能寄存器 SFR

Page 36: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·27·

表 3-2 有特殊位定义的 SFR 的各位功能

寄存

器名D7 D6 D5 D4 D3 D2 D1 D0

SMOD GF1 GF0 PD IDL电源控制

寄存器

PCON波特率

倍乘位未定义 未定义 未定义 用户标志 用户标志

掉电

方式位

待机

方式位

GATE C/ T M1 M0 GATE C/ T M1 M0定时器方

式控制寄

存器 TMOD T1 门控位T1 计数/定

时选择

T1 工作

方式选择T0 门控位

T0 计数/定时

选择

T0 工作

方式选择

CY AC F0 RS1 RS0 OV — P程序状态

字 PSW 进位

标志

半进位

标志

用户

标志

工作寄存器

选择标志溢出标志 未定义

奇偶

标志

— — — PS PT1 PX1 PT0 PX0中断优先

级寄存器

IP 未定义 未定义 未定义串口优先级

设置

T1 优先级

设置

INT1

优先级设置

T0 优先级

设置

INT0 优先

级设置

EA — — ES ET1 EX1 ET0 EX0中断允许

寄存器 IE CPU 中断

允许未定义 未定义

串口中断

允许T1 中断允许

INT1 中断

允许

T0 中断

允许

INT0 中断

允许

SM0 SM1 SM2 REN TB8 RB8 TI RI串口控制

寄存器

SCON 串口工作方式选择位允许

接收

发送数据

第 9 位

接收数据

第 9 位

发送中断

标志

接收中断

标志

TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0定时器控

制寄存器

TCONT1 溢出

标志T1 控制位

T0 溢出

标志T0 控制位

INT1 中断

标志

INT1 触发

方式

INT0 中

断标志

INT0 触发

方式

内部寄存器使用介绍:

下面介绍程序计数器 PC 和 SFR 区中各个寄存器,其他寄存器将在有关章节中叙述。

1.程序计数器 PC

程序计数器 PC 用于存放下一条要执行指令的地址(PC 总是指向程序存储器地址),是

一 16 位专用寄存器,寻址范围 64K 字节,PC 在物理结构上是独立的,不属于特殊功能寄

存器 SFR 块。

Page 37: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·28·

2.累加器 A

累加器 A 是一个最常用的专用寄存器,系统运转时工作最频繁,大部分单操作数指令

的操作数取自累加器 A,很多双操作数指令的一个操作数取自 A;加、减、乘、除算术运算

以及逻辑操作指令的结果都存放在累加器 A 或 AB 寄存器中;输入/输出大多数指令都以累

加器 A 为核心操作。指令系统中采用 A 作累加器的助记符。

3.寄存器 B

它是一个 8 位寄存器。一般用于乘除法指令,与累加器 A 配合使用。寄存器 B 存放第

二操作数、 乘积的高位字节或除法的余数部分。在其他指令中,可作为中间结果的暂存器

使用,相当于 RAM 中的一个特殊单元。

4.程序状态字 PSW

程序状态字是一个 8 位寄存器,用来存放程序的状态信息,表征指令的执行状态,供

程序查询和辨别之用。其格式如下:

PSW :

各位说明如下:

(1)CY:(PSW.7)进/借位标志

在执行加/减法指令时,如果操作结果 D�位有进/借位,CY 置“1”,否则清“0”。在布

尔处理机中被定义为布尔(位)累加器(或称位累加器)。

(2)AC:(PSW.6)辅助进位标志

或称为半进位标志,当进行加法操作而产生由低 4 位数(十进数的 1 位数)向高 4 位

数进位时,AC 将被硬件置“1”,否则被清“0”。AC 被用于 BCD 码加法调整,详见 DA 指令。

(3)F0:(PSW.5)用户标志 0

由用户定义的一个状态标志。可以用软件来使它置“1”或清“0”,也可以由软件测试

F0 来控制程序流向。

(4)RS1、RS0:(PSW.4、PSW.3)工作寄存器区选择控制位

可由软件来改变 RS1 和 RS0 的组合以确定当前工作寄存器区,详见表 3-3 所示。

(5)OV: (PSW.2 )溢出标志

用于补码运算,以指示溢出状态。

当执行加法指令时,若以 C�表示 i 位向位 i+1 有进位,则

OV=C�⊕C��即当位 6 向位 7 有进位,而位 7 不向 CY 进位时;或位 6 不向位 7 进位,而位 7 向 CY

进位时,溢出标志 OV 被置“1”,否则被清“0”。

CY AC F0 RS1 RS0 OV — P

Page 38: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·29·

表 3-3 工作寄存器选择

工作寄存器选择位 工作寄存器所占当前 RAM 地址

工作寄存器区 PSW.4 PSW.3

(RS1) (RS0)R0~R7

0 区 0 0 00H~07H

1 区 0 1 08H~0FH

2 区 1 0 10H~17H

3 区 1 1 18H~1FH

同样,若以 C�表示减法运算时,位 i 向位 i+1 有借位,则执行减法指令 SUBB 时,

OV=C�⊕C��因此,溢出标志在硬件上靠异或门获得。溢出标志常用于对有符号补码数作加减运算。

OV=1 表示加减运算的结果已超出一个字节所能表示的范围(-128~+127)。

在 MCS-51 中,无符号数乘法指令 MUL 的执行结果也会影响溢出标志,若累加器 A 和寄

存器 B 的乘积不超过 255 时,OV=0。此积的高 8 位放在 B 中,低 8 位放在 A 中,故 OV=0

意味着只要从 A 中取得乘积即可,否则要从 BA 两个寄存器(称寄存器对)中取得乘积。

除法指令 DIV 也会影响溢出标志,当除数为 0 时,OV=1,否则 OV=0。

(6)P:(PSW.0)奇偶标志

每个指令周期都由硬件来置位或清零,以表示累加器 A 中值为“1”的位数的奇偶性。

若 P=1,则 A 中“1”的位数为奇数,否则 P=0。

该标志对串行数据通讯中的信息传输有重要意义。在串行通讯中,常用奇偶校验的方

法来检验传输的可靠性。在发送时可根据 P 值对数据的奇偶位置位或清除。

5.堆栈指针 SP

它是一个 8 位寄存器,用来存放栈顶地址。

MCS-51 堆栈设在内部 RAM 中,是一个按“先进后出”顺序,受 SP 管理的存储区域。

在程序中断,子程序调用等情况下,用于存放一些特殊信息(亦可作数据传送的中转站)。

当数据压入堆栈时,SP 就自动加“1”;当数据从堆栈中弹出时,SP 就自动减“1”。因而

SP 指针始终指向栈顶。

MCS-51 堆栈最大深度为 128 个字节,系统复位时硬件使 SP=07H。堆栈在内部 RAM 区中

的位置可根据程序要求由 SP 灵活编程来安排。

6.数据指针 DPTR

是一 16 位专用寄存器,其高字节寄存器用 DPH 表示,低字节寄存器用 DPL 表示。既可

作为 16 位寄存器(DPTR)使用,又可作为两个独立的 8 位寄存器(DPH、DPL)来使用。DPTR

主要用来保持 16 位地址,当对 64KB 外部数据存储器 RAM(或 I/O 口)空间寻址时,作间

址寄存器用,指向外部数据存储器地址。这时有两条传送指令:

Page 39: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·30·

MOVX A,@DPTR 和 MOVX @DPTR,A。在访问程序寄存器时,DPTR 可作为基址寄存器,采

用基址+变址寻址方式的指令 MOVC A,@A+DPTR,读取程序存储器内的表格常数。

7.I/O 端口 P0~P3

专用寄存器 P0、P1、P2 和 P3 分别是 I/O 端口 P0~P3 的锁存器。在上面章节已作介

绍,这里不再赘述。

8.串行数据缓冲器 SBUF

串行数据缓冲器 SBUF 用于存放欲发送或已接受的数据。它由两个独立的寄存器组成,

一个是发送缓冲器,一个是接受缓冲器(两个缓冲器共用一个地址)。当要发送的数据传送

到(写入)SBUF 时,进的是发送缓冲器;当要从 SBUF 取数据时,则取自接受缓冲器,取

走(读出)的是刚刚接受到的数据。

9.定时器/计数器

MCS-51 子系列中有两个 16 位定时器/计数器 T0 和 T1,MCS-52 子系列增加了一个 16

位定时器/计数器 T2。它们各由两个独立的 8 位寄存器组成,共分为 6 个独立的寄存器;

TH0、TL0,TH1、TL1,TH2 和 TL2。可以对这 6 个寄存器寻址,但不可把 T0、T1 和 T2 当作

一个 16 位寄存器来对待。

10.其他控制寄存器

IP、IE、TMOD、TCON、T�CON、SCON 和 PCON 寄存器分别包括有中断系统、定时器/计

数器、串行口和供电方式的控制和状态位,这些寄存器将在有关章节中一一介绍。

本书介绍 MCS-51 子系列的特殊功能寄存器。

3.3 MCS-51 系列单片机外部存储器及其扩展

如前所述,8051 单片机由 P2 口和 P0 口构成 16 位地址输出,形成地址总线,因此寻

址能力为 64KB,且外部程序存储器和外部数据存储器是两个完全独立的空间。

8051 单片机外接存储器称为存储器扩展,通常使用半导体存储器,因此本节介绍单片

机系统中常用的半导体存储器芯片及其在单片机系统中的扩展应用。

Page 40: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·31·

3.3.1 常用半导体存储器芯片

1.半导体存储器的分类

半导体存储器可分为只读存储器和读写存储器两大类,如图 3-4 所示,图中将一些新

型半导体存储器也单独列出。

半导体存储器

读写存储器 RAM

只读存储器 ROM

新型存储器

静态 RAM:SRAM,不需刷新

动态 RAM:DRAM,需要刷新 掉电后信息丢失

掩膜 ROM:MROM,厂家写入,不可更改

可编程 ROM:PROM,用户可一次写入,不可更改

紫外线可擦除可编程 ROM:EPROM,用户可擦除后重写

电可擦除可编程 ROM:EEPROM,用户可擦除后重写

掉电后不会丢失信息

快速电可擦除可编程 ROM:FLASH-ROM

非易失性 RAM:NVRAM,SRAM 与 EEPROM 的共同体

比 ROM 的读写速度快,

且掉电后信息不丢失

图 3-4 半导体存储器的分类

2.单片机系统中常用的典型半导体存储器芯片介绍

上述半导体存储器中,单片机系统较常使用的有 SRAM、EPROM 和 E�PROM,因此,这里

介绍这几种半导体存储器的典型芯片。这些器件的内部结构和工作原理已在数字电路与逻

辑设计、微机原理及接口技术等前修课程中学过,本节主要介绍它们的外部特性及其在单

片机系统中的扩展应用。

(1)EPROM 芯片:EPROM 芯片有许多系列,这里介绍一种常用的系列 27×××。

这个系列的 EPROM 存储器芯片有 2716、2732、2764、27128、27256、27512、27010、

27020、27040,它们的存储器容量分别是 2K×8、4K×8、8K×8、32K×8、64K×8、128K

×8、256K×8、512K×8。它们的引脚功能列于表 3-4。图 3-5 给出了 2764 的引脚图。

2764

D3D4D5D6D7CEA10OEA11A9A8NCPGM

VppA12

A5

A2

Vcc

A6

A0A1

A3

A7

A4

1234567891011121314 15

16171819202122232425262728

D1D2

GND

D0

图 3-5 EPROM2764 芯片引脚图

Page 41: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·32·

表 3-4 EPROM27×××系列芯片引脚排列和引脚功能

引脚号 2716 2732 2764 27128 27256 27512 27010 27020 27040

1 V��V��V��2 A���A��A��3 1 V���V��V��A���A��A��A��4 2 A���A��A��A��A��A��A��5 3 1 A��A��A�A�A�A�A�A�A�6 4 2 A�A�A�A�A�A�A�A�A�7 5 3 A�A�A�A�A�A�A�A�A�8 6 4 A�A�A�A�A�A�A�A�A�9 7 5 AAAAAAAAA10 8 6 A�A�A�A�A�A�A�A�A�11 9 7 A�A�A�A�A�A�A�A�A�12 10 8 AAAAAAAAA13 11 9 DDDDDDDDD14 12 10 D�D�D�D�D�D�D�D�D�15 13 11 D�D�D�D�D�D�D�D�D�16 14 12 GND GND GND GND GND GND GND GND GND

17 15 13 DDDDDDDDD18 16 14 D�D�D�D�D�D�D�D�D�19 17 15 D�D�D�D�D�D�D�D�D�20 18 16 D�D�D�D�D�D�D�D�D�21 19 17 D�D�D�D�D�D�D�D�D�22 20 18

CE /

PGM

CE /

PGMCE CE

CE /

PGM

CE /

PGMCE CE

CE /

PGM

23 21 19 A�A�A�A�A�A�A�A�A�24 22 20 OE OE/ V��OE OE OE OE/ V��OE OE OE

25 23 21 V��A���A���A���A���A���A���A���A���26 24 22 A�A�A�A�A�A�A�A�A�27 25 23 A A A A A A A A A 28 26 24 V��V��NC A��A��A��A��A��A��29 27 PGM PGM A���A���A���A���A���30 28 V��V��V��V��NC A���A���31 PGM PGM A� �32 V��V��V��

27×××系列芯片的地址引脚数=log�(字数),数据引脚 8 条,控制引脚共有 4 条:CE 、

PGM 、 OE 、V��。

Page 42: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·33·

引脚功能说明:

数据引脚:Q�~Q�,三态双向。8 位数据线表示每个存储单元 8 位二进制数据。

地址引脚:A��~A�,输入。13 位地址线能寻址 8K 个单元。

控制引脚:

CE ,片选信号,输入低电平有效。当CE=“0”时,EPROM2764 被选中。

OE ,读控制信号,输入低电平有效。当OE =“0”时,选中单元的内容被读出。

PGM ,编程脉冲,输入。当对 2764 写入内容时, PGM 引脚接一个约 50ms 的负脉冲

信号。

电源引脚:

V,工作电压,输入,+5V。

GND,接地端。

V��,编程电压,输入,其电压值视型号和生产厂家而定,范围在 12.5V~25V。

空脚:NC 为无定义的空脚。

2764 的操作方式见表 3-5 所示。

表 3-5 2764A 和 27128A 的操作方式

CE

(20)

OE

(22)

PGM

(27)

V��(1)

V��(28)

Q~Q��(11~1315~19)

读 V��V��V��V��5V D���禁止输出 V��V��V��V��5V 高阻

维 持 V��× × V��5V 高阻

编 程 V��V��V��* ** D��编程校验 V��V��V��* ** D���编程禁止 V��× × * ** 高阻

注:“×”表示任意状态。

(2)SRAM 芯片:这里介绍两种 SRAM 芯片,即

6116 和 62×××系列

1)HM6116:HM6116 是存储容量为 2K×8 的高

速静态 CMOS 可读写半导体存储器集成电路。其引脚

图见图 3-6 所示,工作方式列于表 3-6 中。

1 24

2 23

3 22

4 21

5 20

6 19

7 18

8 17

9 16

10 15

11 14

12 13

A��A��A��A��A��A��A��A�D�D��D��地�

V A��A��WE

OE

A��CE

D��D��D��D��D��

6116

图 3-6 6116 引脚图

Page 43: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·34·

表 3-6 6116 的工作方式

工作方式

CE OE WE D~D�未选中(待用) H X X 高阻

读 出 L L H D���写 入 L H L D��

注:L 表示低电平,H 表示高电平,X 表示任意电平

引脚说明:

数据引脚:

D�~D�,三态双向。用于传送读写数据,8 位数据线说明每个单元 8 位二进制数据。

地址引脚:

A��~A�,输入。用于选中某一存储单元,11 位地址线可寻址 2K 个存储单元。

控制引脚:

CE ,片选信号,输入,低电平有效, CE =“0”时 6116 被选中。

OE ,读控制信号,输入,低电平有效, OE =“0”时,选中单元数据被读出。

WE ,写控制信号,输入,低电平有效, WE =“0”时,向选中单元写入数据。

电源引脚:

V,工作电压,+5V。

GND,接地端。

2)62×××系列:62×××系列 SRAM 有 6264、62128、62256 等,它们的存储容量分

别为 8K×8、16K×8、32K×8。引脚见图 3-7 所示,工作方式列于表 3-7 所示。

1 28

2 27

3 26

4 25

5 24

6 23

7 22

8 21

9 20

10 19

11 18

12 17

13 16

14 15

6264

62128

62256

SRAM

6264 62256 62128

NC�A���A��A��A��A��A��A��A��A�D�D��D��

GND�

NC�A���A��A��A��A��A��A��A��A�D�D��D��

GND�

A���A���A��A��A��A��A��A��A��A�D�D��D��

GND�

62256 6264 62128

V�WE

CS��A��A��A���OE

A��CE�D��D��D��D��D��

V�WE

A���A��A��A���OE

A��CE�D��D��D��D��D��

V�WE

A���A��A��A���A��CE�D��D��D��D��D��

OE/RFSH

图 3-7 62×××系列 SRAM 引脚图

Page 44: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·35·

表 3-7 62×××系列 SRAM 工作方式

CE OE WE D~D�读 0 0 1 D���写 0 1 0 D��

维持* 1 × × 高阻

注:对于 CMOS 静态 RAM 电路, CE 为高电平时,电路处于降耗状态。此时 V��可降至 3V 左右,内部

所有数据也不会丢失。

引脚说明:62×××SRAM 的引脚功能与 HM6116 引脚的功能基本相同,只有个别引脚

有区别,现说明如下:

NC:空脚。

CS1:片选信号,输入高电平有效。此引脚与 CE 同时起作用,即当 CS1=“1”,且 CE =

“0”时,芯片被选中。

(3)E�PROM 芯片:电可擦除可编程只读存储器 E�PROM

E�PROM 是电可擦除可编程的半导体存储器,比 EPROM 在使用上要方便得多,它具有 RAM

的在线随机读写性能,掉电后信息不丢失。+5V 供电下即可进行编程,而且对编程脉冲宽

度一般没有特殊要求,不需专门的编程器和擦除器,是一种特殊的可读写存储器。

由于 E�PROM 具有在线写入功能,常用作需要改写个别操作数据的系统中。尽管 E

�PROM

允许擦/写次数在 10000 次以上,写入信息可保持 20 年,远比 EPROM 的可擦/写的性能高,

仍不宜作为需要频繁改写数据的存储器使用。E�PROM 也具有在线擦除功能,但放在 E�PROM

中的程序还是在专用编程器上写入较为方便。较新的 E�PROM 产品在写入时自动完成擦除。

在芯片引脚的设计上,2KB 的 E�PROM 2816 与相同容量的 EPROM 2716 和静态 RAM 6116 是

兼容的;8KB E�PROM 2864 与相同容量的 EPROM 2764 和静态 RAM 6264 是兼容的;大容量

的稍有区别,可查阅有关手册。这些特点给硬件线路设计和调试带来不少方便。图 3-8 所

示仅给出 E�PROM 2864 的引脚排列图,图中引脚功能如下:

A�~A��:地址输入线。

I/O�~I/O�:双向三态数据线。

CE :片选线,“0”有效。

OE :读允许线,“0”有效。

WE :写允许线,“0”有效。

V:+5V 工作电源。

GND:接地。

Page 45: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·36·

1 28

2 27

3 26

4 25

5 24

6 23

7 22

8 21

9 20

10 19

11 18

12 17

13 16

14 15

2864

E2PROM

RDY/BUSY

A12

A7

A6

A5

A4

A3

A2

A1

A0

I/O0

I/O1

I/O2

GND

VCC

WE

NC

A8

A9

A11

OE

A10

CE

I/O7

I/O6

I/O5

I/O4

I/O3

图 3-8 E�PROM2864 芯片引脚图

E�PROM 的技术特性:

在单片机测控系统中常用的 E�PROM 芯片型号有 2817(2816)、2864、28256、28512 等

芯片,主要技术指标如表 3-8 所示。

表 3-8 2817、2864、28256、28512 等芯片主要技术指标

型 号 2817(2KB) 2864(8KB) 28256(32KB) 28512(64KB)

维持电流(μA) * ≤200 ≤300 ≤300

工作电流(mA) * 40 50 60

读出时间(nS) 250 *150~250 *150~350 *75~350

注:“*”因不同型号而异。

E�PROM 的操作方式

E�PROM 的操作方式主要有读、写、维持、擦除等几种。表 3-9 给出了各种操作方式和

主要引脚控制电平的有关状态。

由表 3-9 可以看出 E�PROM 的读、维持操作与 EPROM 相同,但写操作和擦除操作不一样。

① E�PROM 的操作

E�PROM 可以在线写入,早期 E�PROM 写入时,需要加 V��高压,使用上不方便,因此目

前多数 E�PROM 芯片内已集成了 DC-DC 电压变换电路,写入时内部电路自动升压,不再需要

V��写入电压,因此就没有 V��引脚。

对于具有两种写入方式的 E�PROM 芯片,可以采用字节写入方式(一次仅写入一个字

节),也可以采用页写入方式(对于页面为 64B 的 E�PROM 芯片,一次写操作周期可以写入

1B~64B)。提供页面写入方式的 E�PROM 内部采用了 SRAM 作“页缓冲器”,当向 E�PROM 写

入信息时(与写 SRAM 过程相同),页计数器便开始计数,同时定时器也开始计时,每写入

Page 46: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·37·

一个字节,页计数器加 1,定时器复位,又从 0 开始计时。当页计数器溢出(即缓冲器已

满)或计时器溢出(表示再没有数据写入缓冲器,不必再等待)时,启动 E�PROM 芯片内的

写操作过程,换言之,即在其内部电路的控制下把“页缓冲器”的内容存入 E�PROM 单元。

表 3-9 E�PROM 操作方式

CE

(20)

OE

(22)

PGM

(27)

Q~Q��(11~1315~19)

读 0 0 1 D���写 0 1 0 D��

维 持 1 × × 高阻

输出禁止 × 1 × 高阻

整片擦除 0 12±0.5V 0 高阻

注:“×”表示任意状态。

由于 E�PROM 写操作速度很慢,可通过如下方法之一检测写操作是否已结束:

·对于提供写周期结束指示信号 READY/ BUSY 的 E�PROM 芯片来说,启动写操作

后,该引脚输出低电平,当写操作结束后,该引脚为高电平,表示写周期已完成,可进行

新的操作。因此,通过中断或其他方式检测该引脚电平的变换即可判断写操作是否结束。

·对于没有提供写周期结束指示信号 READY/ BUSY 的 E�PROM 芯片来说,可以采用软

件查询的方法来判断写操作是否已结束。采用软件查询的 E�PROM 芯片具有这样的特点:写

周期启动后将最后写入字节的 D�位取反后送到数据线 D�上,当写周期结束时,数据线 D�位恢复原来的状态。因此通过读操作,从 D�位的状态可判断写周期是否结束。

② E�PROM 的数据保护

正常情况下,E�PROM 中的数据不会丢失,但由于 E�PROM 靠电擦除和写入,因此在上电

和断电瞬间以及由于干扰引起的尖峰脉冲可能破坏 E�PROM 内的一个或数个存储单元的数

据。因此,软、硬件上必须采取一定措施,防止其中数据意外丢失。

对于采用硬件保护措施的 E�PROM 芯片,可采取:当电源电压 V小于 3.8V 时,写周期

被禁止(内置有电源电压检测电路),电源上电自动延迟一定时间,才启动写入,以及在片

选信号 CE 和写允许信号 WE 上加噪声滤波电路等方法。

有些芯片制造商提供了软件数据保护方法。允许用户在每个写周期前,向特定地址写

入 3 个特定字节后,才启动写入周期。由于上电、断电及干扰等不可能正确启动写入周期,

因此也就保护了其中的信息。

Page 47: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·38·

3.3.2 MCS-51 系列单片机外部存储器扩展设计

1.程序存储器扩展设计

单片机外部程序存储器芯片常选用 EPROM 或 E�PROM,MCS-51 系列单片机外部程序存储

空间为 64KB。现以 EPROM27×××系列存储器芯片为例给出程序存储器扩展实例。

(1)单片程序存储器扩展

30�29�

18�17�14�11�8�7�4�3�

32�33�34�35�36�37�38�39�

2�23�21�24�25�

1�27�25�24�23�22�21�

3�4�5�6�7�8�9�

10�8D 8Q

7D 7Q

6D 6Q

5D 5Q

4D 4Q

3D 3Q

2D 2Q

1D 1Q

G OE GND V��74LS373

P����P����P����P����P���P���P����P���

8031�EA�31�ALE�

PSEN�

P��P��P���P���P���

19�16�15�12�9�6�5�2�

A���A���A��A �A��

V���PGM V�� NC

28�+5V�

2764�EPROM

(8K×8)

+5V�20�10�1�11�A��A���A���A���A��A��A���A�� D��D���D���D���D��D��D���D��

22�19�18�17�16�15�13�12�11�

OE�CE�GND�20�14�

图 3-9 2764 与 8031 的连接图

① 数据线的连接:2764 的数据线直接与单片机的数据线对应相接。

Page 48: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·39·

② 地址线的连接:由于 MCS-51 系列单片机的数据线与低 8 位地址线分时复用,所以

P�口输出的信息经 74LS373 锁存后才是低 8 位地址线,与 2764 的低 8 位地址线对应相接,

高 5 位地址与单片机 P�口输出的地址线 A�~A��(P���~P�� )对应相接。

1 16

2 15

3 14

4 13

5 12

6 11

7 10

8 9

A�B�C�E��E���E��Y��

GND�V�� Y��Y��Y� Y� Y��Y Y�74LS138

输 入 输 出

使 能 选 择

E� E� E��C B A Y� Y� Y� Y� Y� Y� Y� Y

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

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

0 1 1 1

1 0 1 1

1 1 0 1

1 1 1 0

1 1 1 1

1 1 1 1

1 1 1 1�1

1 1 1�

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

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

1 1 1 1

1 1 1 1

1 1 1 1�1

1 1 1�0

1 1 1

1 0 1 1

1 1 0 1

1 1 1 0

0 × × × 1 × × × 1

× × × × × × × × ×

1 1 1

1 1 1

1 1 1

1 1 1

1 1 1

1 1 1

1 1 1

1 1 1

74LS138 引脚图及功能表 ������������������ �� ���� ���������������������������������������������������������������������������������������������������������

图 3-10 多片程序存储器扩展连接图

③ 控制线的连接:由于是单片存储器扩展,所以其 CE 可直接接地。特别要注意的是,

MCS-51 系列单片机读外部程序存储器的控制信号为专用信号 PSEN ,所以一定要将程序存

Page 49: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·40·

储器的读信号 OE 接 PSEN 引脚,而不能接 RD 。

④ 电源线等的连接:在读方式下,编程电压 V��和编程脉冲 PGM 以及空脚都与工作电

源引脚 V��一起接至“+5V”。

按图 3-9 中的接法,单片机发出 64K 中的任何一个地址都可以选中 2764 的某一个单元。

即它占用了 8 个 8K 存储空间。地址范围为:

0000H~1FFFH,2000H~3FFFH,4000H~5FFFH,6000H~7FFFH,8000H~9FFFH,A000H~

BFFFH,C000H~DFFFH,E000H~FFFFH。

(2)多片程序存储器扩展设计

图 3-10 是 8031 系统中扩展 3 片 2764 的连接图,图中对 3 片 2764 的选址采用完全译

码法。

除片选信号 CE 外,其他引脚的连接与单片存储器扩展时相同,不再赘述。这里只对 CE

的连接方法加以说明。

3 片 2764 的片选信号 CE 分别连接译码器 74LS138 的 Y�、 Y�和 Y�,图 3-10 中同时

给出了 74LS138 的引脚图及功能表,以方便读者。由连接方式计算出它们的寻址空间分别

为:0000H~1FFFH、2000H~3FFFH 和 4000H~5FFFH,并且寻址空间唯一确定。

2.数据存储器扩展设计

本小节图中地址总线和数据总线的画法与上一小节不同,以此提示读者两种画法都可

采用。

(1)单片数据存储器扩展设计

图 3-11 所示为 8051 系统中使用 1 片 HM6116 的硬件连接。

��������������������� ������������������������������������ �������������������������������������������������� ��������� ��������������������������������������������������

�������������������������������� ���� ��������

��� ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ��� �� ��� ������������ ����

���������� � � � �����

图 3-11 HM6116 与 8051 的连接

图中数据线、地址线以及电源线(V��、GND)的连接方法与扩展程序存储器时相同。

Page 50: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·41·

下面对控制信号的连接加以说明。

① 片选信号 CE 接单片机 P���,即最高位地址 A�,这在存储器选址方式中属于线选法。

而地址线 A�、A��、A��、A��未使用,因此 HM6116 的寻址空间不能唯一确定,而是占用 64K

数据存储空间的前 32K。也就是说将前 32K 空间分成了 16 个 2K 的空间,这 32K 中的任意

一个地址都对应 HM6116 的某一个单元。计算出 16 个 2K 的空间分别为:

0000H~07FFH、0800H~0FFFH、1000H~17FFH、1800H~1FFFH

2000H~27FFH、2800H~2FFFH、3000H~37FFH、3800H~3FFFH

4000H~47FFH、4800H~4FFFH、5000H~57FFH、5800H~5FFFH

6000H~67FFH、6800H~6FFFH、7000H~77FFH、7800H~7FFFH

② 读信号 OE 接单片机 RD 。在 MCS-51 系列单片机中外部程序存储器的读信号用

PSEN (已如前述),外部数据存储器和扩展的 I/O 接口的读信号用 RD 。

③ 写信号 WE 接单片机 WR 。

(2)多片数据存储器扩展设计

图 3-12 所示为 8031 系统中扩展 6264 的连线图。

A

B

C Y2

Y1

Y0

P2.7

P2.6

P2.5

ALE

74LS373

74LS138

A0---A12

D0---D7

CE

OE

6264#1

A0---A12

D0---D7

CE

OE

6264#2

A0---A12

D0---D7

CE

OE

6264#3

P0

RD

8031

P2.0-P2.4

5 5 5

8 8 88

WR

WE WE WE

图 3-12 多片数据存储器扩展连线图

多片数据存储器扩展与多片程序存储器扩展连接方式基本相同,只是读信号的连接不

同。6264 的读信号 OE 接单片机的 RD ,写信号 WE 接单片机 WR 。

3.程序/数据存储器扩展设计

有时我们希望系统中只扩展 1 片存储器,但它既能用作程序存储器,又能用作数据存

储器。这时,使用 E�PROM 存储器可很方便地达到目的。图 3-13 是 8031 系统中扩展 1 片

Page 51: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·42·

E�PROM2864A 的连接图。

图 3-13 E�PROM2864A 与 8031 的连接图

图中,数据线、地址线、片选线、写信号线以及电源引脚与单片机的连接方法均与

SRAM6264 没有什么区别,只有读信号 OE 和状态信号 RDY/ BUSY 需要作特别的说明。

OE 的连接:要保证 2864A 内的程序代码能正确读出,就要求 OE 与 PSEN 连接,而

要保证 2864A 中的数据能正确读出,则应使 OE 与 RD 连接,图中采用 PSEN 和 RD 相“与”

后接 OE ,这就实现了当 PSEN 和 RD 中任意一个为“0”时 2864A 的 OE 都为“0”,既能

读出程序代码,又能读出数据,这是程序和数据存储器合二为一的关键。

RDY/ BUSY 的连接:这是 2864A 写操作结束指示信号。当 CPU 向 2864A 某单元写入内

容时,该引脚输出低电平,表示正在执行写操作(BUSY),当写操作执行完时,它变为高电

平,表示准备好接收下一个数据(RDY)。因此,图中将 RDY/ BUSY 经反相接至 INT0 ,向

2864A 写内容时,可通过中断方式与 CPU 协调工作完成多个字节的写入。当然也可用查询

方式,那样应将 RDY/ BUSY 接单片机的某一端口线(如 P���)。

4.程序存储器和数据存储器同时扩展

图 3-14 是 8031 系统中同时扩展 1 片程序存储器和 1 片数据存储器的连接图。图中

EPROM 27256 占用程序存储空间的前 32K,SRAM 62256 占用数据存储空间的前 32K,因此,

它们的寻址空间均为 0000H~7FFFH,而 27256 使用 PSEN 信号读程序代码,62256 用 RD 读

数据,用 WR 写数据。

Page 52: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·43·

�������������� � ��� ����� ���� ����� ����� ����� ����� ������ ������������������������������������������

������������ � ���������������������������������74LS373 ����������������������� �� �� �� �� �� �� �� ������������������������������������

27256 �������������������������������������������������������������������������������������������62256

�������������������������������������������������������������������������������������������������������������������������

0000H-7FFFH 0000H-7FFFH

图 3-14 同时扩展 27256 和 62256 的连线图

习题与思考题

1.8031CPU 内部有多少个特殊功能寄存器?有多少个可以位寻址?写出可位寻址的特

殊功能寄存器的寄存器名称、位名称和位地址。

2.8031 内部有多少字节的数据存贮单元?其中有多少个可以进行位寻址?它们的字

节地址范围是什么?位地址范围是什么?

3.MCS-51 系列单片机内部的工作寄存器分为几个区?如何选择工作寄存器区?写出

每个区的地址范围,每个区有几个工作寄存器?写出它们的名称。

4.8031、8051、8751 单片机内部分别有多大容量的程序存储器?怎样用引脚信号选

择对内部程序存储器操作还是对外部程序存储器操作?

5.MCS-51 系列单片机外部可扩展的程序存贮空间和数据存贮空间分别是多大?I/O

端口占用的是哪个存贮空间的地址?

6.MCS-51 系列单片机应用系统中,读外部程序存储器、读外部数据存储器以及读外

部 I/O 端口分别用什么读信号?若使程序存储器和数据存储器用同一片存储器(如 E�PROM

芯片),如何给这片存储器提供读信号(画图表示)?

7.在 8031 系统中,欲用 EPROM2764 存储器芯片扩展 32KB 的外部程序存储器,问需要

几片?试设计连接电路。

8.如图 3-15 所示,计算图中 2764、6264(1)和 6264(2)的寻址空间。

Page 53: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·44·

图 3-15

9.试用 Intel 2764、6116 为 8031 单片机设计一个存贮系统,它具有 8KB EPROM(地

址为 0000H~1FFFH)和 16KB 程序/数据兼用的 RAM 存储器(地址为 2000H~5FFFH),要求

画出硬件连接图,并指出每个芯片的地址空间。

10.设计一个 32K 的外部数据存储器和外部程序存储器系统。

Page 54: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·45·

第四章 MCS-51 系列

单片机指令系统

指令是计算机执行操作的命令,指令系统是一台计算机所能执行的所有指令的集合。

不同的计算机有不同的指令系统。MCS-51 系列单片机的指令系统与 Intel 8086/8088 指令

系统有许多相似之处,甚至有些助记符也是相同的。因此,对于有 8086/8088 汇编语言基

础的读者,学习 MCS-51 系列单片机汇编语言应该是比较容易的。

4.1 MCS-51 系列单片机指令系统概述

MCS-51 系列单片机指令系统按功能分为 5 类指令,分别为:①数据传送(29 条);②

算术运算(24 条);③逻辑运算(24 条);④控制转移(17 条);⑤布尔处理(17 条)。

4.1.1 指令系统特点

MCS-51 指令系统用 42 种助记符表示了 33 种指令功能。有的功能需要几种助记符表示,

如数据传送用 MOV、MOVC、MOVX 三种助记符表示。每一种指令可能对应一种操作码,也可

能对应多种操作码,比如,凡涉及到 R�的指令对应机器操作码多达 8 种,如 MOV A,R�就有 8 种操作码(当 R�为 R�~R�时操作码分别为 E8H~EFH)。这样,MCS-51 指令系统就有 111

条指令,其中单字节指令 49 条,双字节指令 45 条,三字节指令 17 条。在 111 条指令中有

64 条是单周期(12 个振荡周期)指令,45 条是双周期(24 个振荡周期)指令,只有乘、

除法指令需 4 个机器周期(48 个振荡周期)。若晶振为 12MH ,则指令的执行时间分别为 1

μs、2μs、4μs。

MCS-51 指令系统在存储空间和执行时间上的效率是比较高的。是一种简明、易掌握、

功能强的指令系统。

MCS-51 指令系统中有一个处理布尔变量的指令子集。这个指令子集在设计处理大量位

变量程序时十分有效、方便,使 MCS-51 单片机更适合于实时控制,使其指令系统大增特色。

Page 55: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·46·

4.1.2 布尔处理机

为了充分地满足工业控制的需要,MCS-51 的设计者在单片机内部设置了功能很强的位

处理机,即布尔处理机。

布尔处理机硬件主要由以下几部分支持:

1.布尔运算器 ALU

2.布尔累加器 CY(PSW.7)

3.布尔 RAM 区

片内数据存储器 RAM 20H~2FH 字节的 128 位,位地址为 00H~7FH;特殊功能寄存器

直接地址能被 8 整除的 12 个 SFR(对 8031、8051、8751 而言是 11 个 SFR)的 93 位(其中

3 位未定义),位地址分布在 80H~FFH 区间。共有 221 个布尔 RAM 单元构成布尔 RAM 区。

4.布尔 I/O 口

P�~P�口的每位都可独立地进行输入/输出操作,构成布尔 I/O 口。

5.布尔指令集

由 17 条布尔指令组成,可对各种布尔变量进行处理,如置位、清零、求反、跳转、传

送和逻辑运算等。

完善的布尔处理机,提供了最优化程序设计手段,免去了繁琐的数据传送、字节屏蔽、

测试分支等操作,可以把复杂的逻辑组合直接转化为 MCS-51 软件,提高了抗干扰能力,加

快了运算速度,降低了成本,充分地满足了实时控制的需要。

4.1.3 指令中使用的符号说明

在分类介绍指令之前,把描述指令的符号意义作一简单介绍。

R�——当前选中的寄存器区的 8 个工作寄存器 R�~R�(n=0~7)。

R�——当前选中的寄存器区中可做间址寄存器的 2 个寄存器 R�、R�(i=0,1)。

Direct——8 位内部数据存储器单元的地址。可以使内部 RAM 单元的地址(0~127/255)

或专用特殊功能寄存器 SFR 的地址,如 I/O 端口、控制寄存器、状态寄存器等。

#data——包含在指令中的 8 位立即数。

#data16——包含在指令中的 16 位立即数。

addr16——16 位目的地址。用于 LCALL 和 LJMP 指令中,它的地址范围是 64KB 程序存

储器地址空间。

addr11——11 位目的地址。用于 ACALL 和 AJMP 指令中,它的地址必须放在与下一条

指令的第一个字节在同一个 2KB 程序存储器地址空间之内。

Rel——8 位带符号的偏移量(字节)。用于 SJMP 和所有的条件转移指令中。偏移字节

相对于下一条指令的第一个字节计算,在-128~+127 范围内取值。

DPTR——数据地址指针,可用作 16 位间址寄存器。

Bit——内部 RAM 或专用寄存器中的直接寻址位。

A——累加器。

Page 56: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·47·

B——专用寄存器,用于 MUL 和 DIV 指令中。

C——进位或借位标志,或布尔处理机中的累加器。

@——间址寄存器或基址寄存器的前缀,@ R�,@A+DPTR。

/——位操作数的前缀,表示对该位操作数取反,如/bit。

(×)——×中的内容。

((×))——由×寻址的单元中的内容。

←——表示数据的传送方向;

�垐 �噲 ——表示数据交换。

4.2 MCS-51 系列单片机寻址方式

寻址方式是指寻找操作数或下一条要执行指令的地址的方法。MCS-51 系列单片机共有

7 种寻址方式,分别为立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、基址+变址

间接寻址、相对寻址、位寻址。其中绝大多数寻址方式是与 Intel8086/8088 中相似的。

4.2.1 立即寻址

寻址空间:程序存储器。

立即寻址是指指令中直接给出操作数的寻址方式。指令中的操作数称为立即数,立即

数前面加“#”以区别直接寻址。8 位的立即数#data,如#30H;16 位的立即数#data,如#3000H。

要注意立即寻址与直接寻址区别。

指令形式:

例如: MOV A,#30H ;A←30H

操作码

立即数

74H

30H

PC

PC+1

操作码 OP

A

图 4-1 指令 MOV A,#30H 的过程

指令的功能是把操作码后面的立即数 30H 送入 A 中,执行过程如图 4-1 所示。

例如:MOV DPTR,#8000H ;DPTR←8000H

指令立即数为 16 位,其功能是把立即数高 8 位送入 DPH,低 8 位送入 DPL。指令执行

过程如图 4-2 所示。

Page 57: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·48·

80H

00H

PC+1

PC+2

操作码 OP

DPH DPL

90H PC

图 4-2 指令 MOV DPTR,#8000H 的执行过程

4.2.2 直接寻址

寻址空间:内部 RAM 的低 128 字节和特殊功能寄存器 SFR(直接寻址是访问 SFR 的唯

一方式)。

操作码后面的一个字节是实际操作数地址。这种直接在指令中给出操作数真实地址的

方式称为直接寻址。

指令有三种形式:

操作码

操作数地址

操作码

操作数地址

立即数

操作码

源操作数地址

目的操作数地址

例如:MOV A,30H ;A←(30H)

这是数据传送指令,30H 是内部 RAM 地址,功能是把 30H 单元内容读入 A 中。如图 4-3

所示。

E5H

30H

PC

PC+1

操作码

操作数地址

内部 RAM

× × 30H

× ×

A

图 4-3 指令 MOV A,30H 的执行过程

注意:立即数字址与直接寻址的区别,立即数字址是在指令中直接给出操作数直接寻

址是在指令中直接给出操作的地址。

例如:ANL 30H,#30H ;30H←(30H)∧30H

这是逻辑“与”操作指令,操作码后面第一个 30H 是操作数地址,第二个 30H 是参加

“与”运算的立即数,“与”的结果存入 30H 单元中,执行过程如图 4-4 所示。

Page 58: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·49·

结果

E5H

30H

PC

PC+1

操作码

操作数地址

内部 RAM

30H

30H PC+2 立即数

ALU

“与”

图 4-4 指令 ANL 30H,#30H 的执行过程

4.2.3 寄存器寻址

寻址空间:R�~R�,A、B、CY(位),DPTR,其中由 RS�、RS�两位的值选定工作寄存器

区,其中 CY 是一个特殊的寄存器,通常称之为位累加器

指令选定的寄存器内容就是实际操作数,这种寻址方式称为寄存器寻址。其特点是被

寻址的某个寄存器已隐含在操作码中,故有时称寄存器寻址为隐含寻址。

有三种指令形式。

操作码 操作码

立即数

操作码

直接地址

例如:MOV A,R�;A←(R�)其功能是把当前所指定的寄存器区中 R3 的内容送入累加器 A。值得注意的是在这条指

令寻址前,要通过 PSW 中的 RS�、RS�来设定当前工作寄存器区,或者说必须有一个正确的

工作寄存器区。

4.2.4 寄存器间接寻址

寻址空间:内部 RAM(@R�,@R�,SP)和外部数据存储器(@R�,@R�,@DPTR)。

指令选定的寄存器内容就是实际操作数地址(而不是操作数),这种寻址方式称为寄存

器间接寻址。当用 R�,R�寄存器间接寻址之前,同样需要有一个确定的工作寄存器区;并

且上述各寄存器中均是有值(操作数地址)的。

有三种指令形式。

操作码 操作码

立即数

操作码

直接地址

Page 59: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·50·

例如:MOV @R�,A

这是一条累加器传送指令,在寻址前 R�是有值的(有定义的),它指向目的操作数地

址。设:(R�)=30H,则该指令是把累加器 A 的内容写入内部 RAM 的 30H 单元中;指令执行

过程如图 4-5 所示。

30H

F6H

PC

PC+1

操作码 × ×

30H R� × ×

内部 RAM A

图 4-5 指令 MOV @R�,A 的执行过程

若指令为:MOV A,@R����;R�内容则是指向源操作数地址。

例如:MOVX A,@DPTR

这是一条外部数据存储器读指令,在指令寻址前 DPTR 数据指针是有值的,它指向外部

数据存储器即将访问的一个单元 2000H。当执行指令时,外部数据存储器 2000H 单元的内

容读入累加器 A 中,如图 4-6 所示。

2000H E0H

PC

PC+1

操作码 2000H

× × A

× ×

外部 RAM DPTR

图 4-6 指令 MOVX A,@DPTR 的执行过程

4.2.5 基址+变址间接寻址

寻址空间:程序存储器(@A+DPTR,@A+PC)。

这是 MCS-51 指令系统特有的一种寻址方式,它以 DPTR 或 PC 作基址寄存器,A 作变址

寄存器(存放 8 位无符号数),两者相加形成 16 位程序存储器地址作操作数地址。这种寻

址方式是单字节指令,用于读出程序存储器中数据表格的常数。

指令形式: 操作码

例如:MOVC A,@A+DPTR

设累加器 A 与数据指针 DPTR 在寻址前是有值(定义)的。

(A)=0FH (DPTR)=2400H

指令的执行过程如图 4-7 所示。

Page 60: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·51·

93H

PC

PC+1

操作码

��

240FH ALU

× ×

0FH 2400H

A DPTR

图 4-7 指令 MOVC A,@A+DPTR 的执行过程

这是一条查表指令,指令执行时先将(A)+(DPTR)=240FH,然后将 240FH 单元内容

××H 读入 A。

4.2.6 相对寻址

寻址空间:程序存储器。

用于程序控制,利用指令修正 PC 指针的方式实现转移。即以程序计数器 PC 的内容为

基地址,加上指令中给出的偏移量 rel,所得结果为转移目标地址。

注意:偏移量 rel 是一 8 位有符号数补码,范围-128~+127。所以转移范围应在当前

PC 指针的-128~+127 之间某一程序存储器地址中。

相对寻址一般为双字节或三字节指令。

有三种指令形式。

操作码 操作码

直接地址

操作码

立即数 rel

rel rel

例如:JNZ rel ;累加器 A 的内容不等于零则转移。

设 rel=23H,指令操作码存放在程序存储器 2000H 单元,并且在执行该指令前 A 中内

容不为零,则执行过程如图 4-8 所示。

这条转移指令为 2 字节指令,当取址后 PC 当前值为 2002H,转移目标地址:

D=(PC)+rel=2025H

PC 被修改后自动转到 2025H 单元去执行程序,从而完成程序转移。

反过来,若已知转移目标地址为 1FFCH,(PC)当前值为 2002H,则:

rel=D-(PC)=1FFCH-2002H=FFFAH,那么,根据符号位的扩展法取 8 位:rel=FAH=

(-6)�。

Page 61: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·52·

��

23H

下一条指令

2000H

2001H

操作码

��

2025H ALU

× ×

70H

2002H rel=23H PC 当前值

2002H

地址(PC)=2025H

修正后转移目标

图 4-8 指令 JNZ rel 的执行过程

4.2.7 位寻址

寻址空间:片内 RAM 的 20H~2FH 和 SFR 中 12 个能被 8 整除的字节地址。

注意:对 CY 的寻址方式既属于寄存器寻址又属于位寻址。

以访问触发器的方式对内部 RAM,特殊功能寄存器 SFR 中的位地址空间进行访问称之

为位寻址。

指令形式:

此寻址方式的具体内容将在布尔处理类指令中介绍。

在介绍了 MCS-51 寻址方式后,对其寻址方法以及相应寻址空间作一概括,见表 4-1

所示。

表 4-1 寻址方式与相应的寻址空间

寻址方式 利用的变量 使用的空间

寄存器寻址 R�~ R�,A,B,CY,DPTR 片内

直接寻址 direct片内 RAM 低 128 字节

特殊功能寄存器 SFR

寄存器间址@R�,@R�,SP

@R�,@R�,@DPTR

片内 RAM

片外 RAM 与 I/O 口

立即寻址 #data 程序存储器

基址加变址 @A+PC @A+DPTR 程序存储器

相对寻址 PC+rel 程序存储器

位寻址 bit片内 RAM 的 20H~2FH

可位寻址的 SFR

操作码

Page 62: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·53·

4.3 MCS-51 系列单片机指令系统

指令分类:MCS-51 系列单片机指令有 3 种分类方法。

1.按指令所占字节数分为:单字节指令(49 条)、双字节指令(45 条)、三字节指令

(17 条)。

2.按指令执行时间分为:单周期指令(64 条)、双周期指令(45 条)、四周期指令(两

条)。

3.按指令操作功能分为:数据传送指令(29 条)、算术运算指令(24 条)、逻辑运算

指令(24 条)、控制转移指令(17 条)、伪操作指令(17 条)。

各条指令对标志位的影响列于附录 MCS-51 系列单片机指令表中。由于篇幅所限,在每

条指令介绍时不再单独介绍其对标志位的影响。

4.3.1 数据传送指令

传送类指令共有 8 种助记符,分别是 MOV、MOVX、MOVC、XCH、XCHD、SWAP、PUSH 和

POP。

1.一般传送指令

一般传送指令是指助记符为 MOV 的指令,共有 16 条。

(1)数据传送到累加器 A 的一般传送指令

① MOV A,R�;A←(R�) 11101rrr 指令代码:

说明:指令的功能是将 R�中的内容复制到累加器 A。操作码中的 rrr 三位二进制编码

是寄存器 R�~R�的代号,即 rrr=000~111 分别代表 R�~R�。【例 1】设原来 A 的内容为 25H,R�的内容为 3FH,则执行 MOV A,R�后 A 中的内容为

3FH,R�中内容不变。

② MOV A,direct ;A←(direct)

11100101 指令代码:

direct

说明:指令的功能是将直接寻址单元中的内容复制到累加器 A 中。指令代码的第二字

节为直接地址,其寻址范围是内部数据 RAM 和特殊功能寄存器(以后不再解释)。

【例 2】设原来 A 的内容为 00H,内部 RAM 40H 单元中内容为 FFH,则执行 MOV A,40H

Page 63: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·54·

后 A 中内容变为 FFH,40H 单元中内容不变。

③ MOV A,@R�;A←((R�))

1110011i 指令代码:

说明:指令功能是将 R�间接寻址的内存单元的内容复制到累加器 A 中。操作码中的 i

是 R�、R�的代号。i=0、1 分别代表 R�、R�。【例 3】设原来 A 中的内容为 C8H,R�中内容为 65H,内部 RAM 65H 单元中内容为 55H,

则执行 MOV A,@R�后 A 的内容变为 55H,65H 单元中内容不变,R�中内容也不变。

④ MOV A,#data ;A←data

01110100 指令代码:

data

说明:指令功能是将立即数装入累加器 A。代码第二字节为 8 位立即数,它与指令操

作码一起放在程序存储器中。

【例 4】设原累加器 A 中的内容为 D7H,执行 MOV A,#09H 后,A 中为 09H。

(2)数据传送到 R�的一般传送指令

① MOV R�,A ;R�←(A)

11111rrr 指令代码:

说明:指令功能是将累加器 A 中的内容复制到工作寄存器 R�中。

【例 5】设原来 R�中的内容为 48H,A 中内容为 0,则执行指令 MOV�R�,A 后,R�中内容变为 0,A 中内容不变。

② MOV R�,direct ;R�←(direct)

10101rrr 指令代码:

direct

说明:指令功能是将直接寻址单元的内容复制到 R�中。

【例 6】设原来 R中的内容为 0EH,内部数据 RAM 20H 单元中的内容为 B6H,则执行指

令 MOV R,20H 后,R中内容变为 B6H,20H 单元内容不变。

③ MOV R�,#data ;R�← data

01111rrr 指令代码:

data

说明:指令功能是将立即数 data 装入工作寄存器 R�。【例 7】设原来 R中内容为 FEH,则执行指令 MOV R,#75H 后,R中内容变为 75H。

(3)数据传送到直接寻址单元 direct 的一般传送指令

① MOV direct,A ;direct←(A)

Page 64: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·55·

11110101 指令代码:

direct

说明:指令功能是将累加器 A 中内容复制到直接寻址单元 direct 中。

【例 8】设原来 A 中内容为 16H,内部 RAM 70H 单元中内容为 0,则执行

MOV 70H,A 后 70H 单元内容变为 16H,A 中内容不变。

② MOV direct,R�;direct←(R�) 10001rrr 指令代码:

direct

说明:指令功能是将工作寄存器 R�中的内容复制到直接寻址单元 direct 中。

【例 9】设原来内部 RAM 80H 单元中的内容为 58H,R�中内容为 F0H,则执行指令 MOV 80H,

R�后,80H 单元内容变为 F0H,R�中内容不变。

③ MOV direct1,direct2 ;direct1←(direct2)

10000101 指令代码:

direct2

direct1

说明:指令功能是将直接寻址单元 direct2 中的内容复制到直接寻址单元 direct1 中。

这表明可以把 I/O 口上的数据直接在内部 RAM 或 P�~P�之间传送,而不经过累加器 A 和工

作寄存器 R�。【例 10】设原来内部 RAM 90H 单元中内容为 09H,P�口上数据为 AAH,则执行

MOV 90H,P�后,90H 中的内容变为 AAH,P�口上数据不变。

④ MOV direct,#data ;direct←data

01110101 指令代码:

direct

data

说明:指令功能是将立即数装入直接寻址的内部 RAM 单元(或 SFR)中。

【例 11】设原来内部 RAM 4FH 单元中内容为 0,则执行指令 MOV 4FH,#9BH 后,4FH

单元中变为 9BH。

⑤ MOV direct,@R�����;direct←((R�))

1000011i 指令代码:

direct

说明:指令功能是将 R�间接寻址的内部 RAM 存储单元的内容复制到直接寻址的内部存

储单元(或 SFR)中。

【例 12】设原来内部 RAM 36H 单元中内容为 FFH,R�内容为 25H,25H 单元中内容为

01H,则执行指令 MOV 36H,@R�后,36H 单元中内容变为 01H,25H 单元及 R�内容不变。

(4)数据传送到 R�间接寻址的存储单元的一般传送指令

① MOV @R�,A ;(R�)←(A)

Page 65: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·56·

1111011i 指令代码:

说明:指令功能是将累加器 A 的内容复制到 R�间接寻址的内部 RAM 存储单元。

【例 13】设原来 R�内为 30H,30H 中内容为 26H,A 中内容为 0,则执行指令

MOV @R�,A 后,30H 中内容变为 0,A 和 R�中内容不变。

② MOV @R�,direct ;(R�)←(direct)

1010011i 指令代码:

direct

说明:指令功能是将直接寻址的内部 RAM 单元(或 SFR)中内容复制到 R�间接寻址的

内部 RAM 存储单元中。

【例 14】设原来 R�内容为 03H,指令内部 RAM 存储单元 03H 中内容为 83H,P�端口数

据为 5DH,则执行指令 MOV @R�,P�后,03H 单元内容变为 5DH,P�端口数据以及 R�内容不

变。

③ MOV @R�,#data ;(R�)←data

0111 011i 指令代码:

data

说明:指令功能是将立即数 data 装入 R�间接寻址的内部 RAM 单元。

【例 15】设原来 R�内容为 78H,存储单元地址为 78H 的内部 RAM 中内容为 00H,则执

行指令 MOV @R�,#0B7H 后,78H 单元中内容变为 B7H,R�中内容不变。

(5)16 位立即数传送到 DPTR 指令

MOV DPTR,#data16 ;DPTR← data16

1001 0000 指令代码:

dataH

dataL

说明:指令功能是将 16 位立即数装入 16 位寄存器 DPTR 中。这是唯一的一条 16 位数

据传送指令,用于设置外部存储器的地

址指针。实际上是将 data16 的高 8 位

(dataH)装入到 DPTR 的高 8 位 DPH 中,

#data16 的低 8 位(dataL)装入到 DPTR

的低 8 位 DPL 中。

这条指令的应用举例见第五章例 2

等。

上述 16 条一般传送指令都是在内

部 RAM 和特殊功能寄存器中进行数据传

送,并且,助记符都是 MOV,它们可以

用图 4-9 描述。

direct

A

R� #data

@R��图 4-9 MOV 指令的数据流向

Page 66: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·57·

2.堆栈指令

堆栈指令只有两条。

(1)入栈指令

PUSH direct ;SP←(SP)+1

(SP)←(direct)

1101 0000 指令代码:

direct

说明:指令功能是将指定的直接寻址单元的内容压入堆栈。具体操作是:先将堆栈指

针寄存器的内容加 1,使其指向一个空单元,然后将指令指定的直接寻址单元的内容复制

到这个空单元。

【例 16】设原来 SP 中内容为 43H,90H 单元内容为 34H,则执行 PUSH 90H 指令后,

SP 中内容变为 44H,而 44H 中的内容变为 34H,90H 单元中的内容不变。

(2)出栈指令

POP direct ;direct←((SP))

SP←(SP)-1

1101 0000 指令代码:

direct

说明:指令功能是将栈顶单元的内容弹出堆栈。具体操作是:先将 SP 指向的单元内容

复制到指令指定的直接寻址单元,然后 SP 内容减 1。

【例 17】设原来 SP 中内容为 60H,60H 单元内容为 F6H,累加器 A 中内容为 09H,则

执行指令 POP A 后,SP 中内容变为 5FH,A 中内容为 F6H。

3.累加器专用传送指令

累加器专用传送指令又可细分为四种,即字节交换、半字节交换、累加器与外部数据

存储器传送和累加器与外部程序存储器传送指令,共 11 条。

(1)字节交换指令

① XCH A,R�;(A)�(R�) 1100 1rrr 指令代码:

说明:指令功能是将累加器 A 的内容与工作寄存器 R�的内容相交换。

【例 18】设原来 A 中内容为 00H,R中内容为 11H,则执行指令 XCH A,R后,A 中

内容变为 11H,R中内容变为 00H。

② XCH A,direct ;(A)�(direct)

1100 0101 指令代码:

direct

Page 67: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·58·

说明:指令功能是将累加器 A 的内容与直接寻址的内部 RAM 单元(或 SFR)内容进行

交换。

③ XCH A,@R�����;(A)�((R�))

1100 011i 指令代码:

说明:指令功能是将累加器 A 的内容与 R�间接寻址的内部 RAM 单元内容进行交换。

(2)半字节交换指令

① XCHD A,@R�����;(A)������ ((R�))���� 1101 011i 指令代码:

说明:指令功能是将累加器 A 中内容的低 4 位与 R�间接寻址的内部存储单元中内容的

低 4 位相互交换,而它们的高 4 位保持不变。

【例 19】设原来 A 中内容为 7AH,R�中内容为 23H,23H 单元中内容为 B6H,则执行指

令 XCHD A,@R�后,A 中内容变为 76H,23H 中内容变为 BAH。

② SWAP A ;(A)�����(A)���� 1100 0100 指令代码:

说明:指令功能是将累加器 A 中内容进行高、低 4 位互换。

(3)累加器与外部数据存储器的传送指令:

① MOVX A,@R�;(A)←((R�))

1110 001i 指令代码:

说明:指令功能是将 R�间接寻址的外部数据存储器单元或扩展的 I/O 端口内容复制到

累加器 A 中。R�对外部数据存储器或 I/O 端口的寻址范围是 00H~FFH。需要注意的是,在

MCS-51 系列单片机系统中外部 I/O 端口与外部数据存储器统一编址,即它们占用同一个存

储空间,对外部数据存储器的寻址方式及指令都适用于外部 I/O 端口。

【例 20】设原来累加器 A 的内容为 00H,R�中内容为 20H,而 20H 是扩展的 8255A 的 A

端口地址,则执行指令 MOVX A,@R�后,A 中内容为 8255A 的 A 口数据。

② MOVX A,@DPTR ;A←((DPTR))

1110 0000 指令代码:

说明:指令功能是将 DPTR 间接寻址的外部数据存储器单元或 I/O 端口的内容复制到累

加器 A 中。DPTR 对外部数据存储器或 I/O 端口的寻址范围是 0000H~FFFFH。

③ MOVX @R�,A ;(R�)←(A)

1111 001i 指令代码:

说明:指令功能是将累加器 A 的内容复制到 R�间接寻址的外部数据存储器单元或 I/O

端口中。

④ MOVX @DPTR,A ;(DPTR)←(A)

Page 68: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·59·

1111 0000 指令代码:

说明:指令功能是将累加器 A 的内容复制到 DPTR 间接寻址的外部数据存储器单元或

I/O 端口中。

【例 21】设原来 DPTR 的内容为 1000H,1000H 单元的内容为 00H,A 的内容为 59H,则

执行指令 MOVX @DPTR,A 后,1000H 单元的内容变为 59H,而 A 和 DPTR 内容不变。

(4)累加器与外部程序存储器的传送指令

① MOVC A,@A+PC ;A←((A)+(PC))

1000 0011 指令代码:

说明:指令功能是将程序存储器中存储单元内容复制到累加器 A,该存储单元地址是

指令指针 PC 内容与累加器 A 内容之和。该指令是单字节指令,取指后 PC 内容加 1,以当

前 PC 值去执行 16 位无符号数加法操作获得基址加变址之和(PC 作为基址寄存器,A 作为

变址寄存器),即 16 位程序存储器地址。然后执行该单元的读操作,并将该单元内容送 A。

指令执行后 PC 内容不变,以保证程序顺序执行。

【例 22】设原来 A 的内容为 03H,程序中 MOVC A,@A+PC 指令所在地址为 4010H,程

序存储器 4014H 单元中内容为 FFH,则执行指令 MOVC A,@A+PC 后,A 的内容变为 FFH,

PC 的内容为 4011H。如图 4-10 所示。

+1+

11111111

4010H

4011H

10000011

4012H

4013H

4014H 11111111

PC A

4010H 03H

外部程序存储器

图 4-10 “MOVC A,@A+PC”举例示意图

② MOVC A,@A+DPTR ;A←((A)+(DPTR))

1001 0011 指令代码:

说明:指令功能是将程序存储器中存储单元内容复制到累加器 A 中,该存储单元地址

是 DPTR 内容与累加器 A 的内容之和。这条指令与上一条 MOVC 指令的操作基本相同,只是

将 PC 改为 DPTR,而 DPTR 是用户可访问的 16 位寄存器,所以程序在 MOVC A,@A+DPTR 指

令之前可由指令 MOV DPTR,#data 设置 DPTR 的值。

Page 69: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·60·

表 4-2 列出了所有 29 条数据传送指令。

表 4-2 数据传送指令一览表

助 记 符 功 能 说 明 字节数 振荡器周期

MOV A, R��寄存器内容送到累加器 1 12

MOV A, direct 直接地址中内容送到累加器 2 12

MOV A, @R��间接 RAM 内容送到累加器 1 12

MOV A, #data 立即数送到累加器 2 12

MOV R�, A 累加器内容送到寄存器 1 12

MOV R�, direct 直接地址中内容送到寄存器 2 24

MOV R�, #data 立即数送到寄存器 2 12

MOV direct, A 累加器内容送到直接地址 2 12

MOV direct, R�寄存器内容送到直接地址 2 24

MOV direct1, direct2 一个直接地址内容送到另一直接地址 3 24

MOV direct, @R�间接 RAM 内容送到直接地址 2 24

MOV direct, #data 立即数送到直接地址 3 24

MOV @R�, A 累加器送到间接 RAM 1 12

MOV @R�, direct 直接地址中内容送到间接 RAM 2 24

MOV @R�, #data 立即数送到间接 RAM 2 12

MOV DPTR, #data16 十六位常数装入 DPTR 3 24

MOVC A, @A+DPTR 以 DPTR 的内容为基地址传送 1 24

MOVC A, @A+PC 以 PC 的内容为基地址传送 1 24

MOVX A, @R�外部间接 RAM 内容(8 位地址)送累加器 1 24

MOVX A, @DPTR 外部间接 RAM 内容(16 位地址)送累加器 1 24

MOVX @R�, A 累加器内容送外部间接 RAM(8 位地址) 1 24

MOVX @DPTR, A 累加器内容送外部间接 RAM(16 位地址) 1 24

XCH A, R�累加器内容和寄存器内容交换 1 24

XCH A, direct 累加器内容和直接地址中内容交换 2 12

XCH A, @R�累加器内容和间接 RAM 内容交换 1 12

XCHD A, @R�累加器低 4 位和间接 RAM 内容低 4 位交换 1 12

SWAP A 累加器内的高 4 位和低 4 位互换 1 12

PUSH direct 把直接地址内容推入堆栈 2 24

POP direct 从堆栈弹入直接地址 2 24

4.3.2 算术运算指令

算术运算指令有加、减、乘、除、加 1、减 1 和十进制调整指令,共有 8 种助记符,

分别为 ADD、ADDC、SUBB、MUL、DIV、INC、DEC、DA。其中,ADD 为不带进位加法指令,ADDC

Page 70: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·61·

为带进位加法指令,SUBB 为带借位减法指令,除 INC 和 DEC 指令外,其他 6 种指令的第一

个操作数都必须是累加器 A。

1.加法指令

(1)不带进位加法指令

① ADD A,R�;A←(A)+(R�) 0010 1rrr 指令代码:

说明:指令功能是将累加器 A 的内容与工作寄存器 R�的内容相加,结果存到累加器 A

中。

【例 23】设原来 A 的内容为 15H,R�的内容为 36H,则执行指令 ADD A,R�后,累加

器 A 中内容变为 4BH,R�中内容不变。

② ADD A,direct ;A←(A)+(direct)

0010 0101 指令代码:

direct

说明:指令功能是将累加器 A 的内容与直接寻址的内部 RAM 单元(或 SFR)内容相加,

结果存到累加器 A 中。

③ ADD A,@R��;A←(A)+((R�))

0010 011i 指令代码:

说明:指令功能是将累加器 A 的内容与 R�间接寻址的存储单元的内容相加,结果存到

A 中。

④ ADD A,#data ;A←(A)+ data

0010 0100 指令代码:

data

说明:指令功能是将累加器 A 的内容与立即数相加,结果存到累加器 A 中。

(2)带进位加法指令

这里的进位位 C 的内容,在程序中是前面指令影响的结果。

① ADDC A,R�;A←(A)+ (R�)+(C)

0011 1rrr 指令代码:

说明:指令功能是将累加器 A 的内容与工作积存器 R�的内容相加,再加进位位 C 的内

容,结果存到累加器 A 中。

② ADDC A,direct ;A←(A)+ (direct)+(C)

0011 0101 指令代码:

direct

Page 71: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·62·

说明:指令功能是将累加器 A 的内容与直接寻址的内部 RAM 单元(或 SFR)内容相加,

再加进位位 C 的内容,结果存到累加器 A 中。

③ ADDC A,@R�;A←(A)+ ((R�))+(C)

0011 011i 指令代码:

说明:指令功能是将累加器 A 的内容与 R�间接寻址的存储单元的内容相加,结果存到

累加器 A 中。

【例 24】设原来 A 的内容为 40H,R�的内容为 7FH,7FH 单元内容为 56H,上一条指令

使进位标志置“1”,则执行指令 ADDC A,@R�后,A 的内容变为 57H,其余不变。

④ ADDC A,#data ;A←(A)+ data +(C)

0011 0100 指令代码:

data

说明:指令功能是将累加器 A 的内容与 8 位立即数相加,再加上进位位 C 的内容,结

果存到累加器 A 中。

2.带借位减法指令

(1)SUBB A,R�;A←(A)-(R�)-(C)

1001 1rrr 指令代码:

说明:指令功能是用累加器 A 的内容减去工作寄存器 R�的内容,再减去进位位 C,结

果存到累加器 A 中。

(2)SUBB A,direct ;A←(A)-(direct)-(C)

1001 0101 指令代码:

direct

说明:指令功能是用累加器 A 的内容减去直接寻址的 RAM 单元(或 SFR)的内容,再

减去进位位 C,结果存到累加器 A 中。

【例 25】设原来累加器 A 的内容为 F7H,内部 RAM 单元 65H 的内容为 30H,前一条指

令是对进位标志清零的指令,则执行 SUBB A,65H 后,A 中的内容变为 C7H,其余不变。

(3)SUBB A,@R�;A←(A)-(R�)-(C)

1001 011i 指令代码:

说明:指令功能是用累加器 A 的内容减去 R�间接寻址的存储单元的内容,再减去进位

位 C 的内容,结果存到累加器 A 中。

(4)SUBB A,#data ;A←(A)-data-(C)

1001 0100 指令代码:

data

Page 72: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·63·

说明:指令功能是用累加器 A 的内容减去 8 位立即数,再减去进位位 C 的内容,结果

存到累加器 A 中。

3.十进制加法调整指令

DA A ;若[(A)���>9]∨[(AC)=1],则 A←(A)+06H

若[(A)��>9]∨[(CY)=1],则 A←(A)+60H

指令代码:

说明:指令功能是将两个 BCD 数相加之和(和在累加器 A 中)调整成正确的 BCD 数,

操作原则是“过 9 补 6”,即若累加器低 4 位大于 9 或半进位标志 AC=1,则累加器低 4 位加

6;若累加器高 4 位大于 9 或进位标志 CY=1,则累加器高 4 位加 6。调整指令只适用于用

ADD 和 ADDC 指令对两 BCD 数相加的情况。

【例 25】设(A)=37H,(R�)=36H,则执行下列程序段的过程如下:

ADD A,R����������������������������������������DA A

这里 37H 和 36H 是 BCD 数 00110111 和 00110110,CPU 是按二进制操作的,相加后结果

为 01101101,结果存在 A 中,但已不是 BCD 数。需要调整,因(A)���>9,故将 A 中的和

加 06H,结果为 01110011,即十进制的 73。

4.加 1 指令

① INC A ;A←(A)+1

指令代码:

说明:指令功能是将累加器 A 的内容加 1 后再回存到累加器 A 中。

② INC R�;R��←(R�)+1

指令代码:

说明:指令功能是将工作寄存器 R�的内容加 1 后再回存到 R�中。

③ INC direct ;direct ←(direct)+1

指令功能:

说明:指令功能是将直接寻址的内部 RAM 单元(或 SFR)的内容加 1,再回存到该单元

(或 SFR)。

④ INC @ R�;(R�)←((R�))+1

11010100

00000100

00001rrr

00000101

direct

Page 73: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·64·

指令代码:

说明:指令功能是将 R�间接寻址的存贮单元的内容加 1,再回存到该单元。

【例 26】设原来 R�=6DH,6DH 单元的内容为 45H,则执行 INC @R�后,6DH 单元内容

变为 46H,R�中内容不变。

⑤ INC DPTR ;DPTR ←(DPTR)+1

指令代码:

说明:指令功能是将特殊功能寄存器 DPTR 中的内容加 1,再回存到 DPTR 中。

5.减 1 指令

① DEC A ;A ←(A)-1

指令代码:

说明:指令功能是将累加器 A 的内容减 1,再回存到累加器 A 中。

② DEC R��������;R�←(R�)-1

指令代码:

说明:指令功能是将工作寄存器 R�的内容减 1,再回存到 R�中。

③ DEC direct ;direct ←(direct)–1

指令代码:

说明:指令功能是将直接寻址的内部 RAM 单元(或 SFR)的内容减 1,再回存到该单元

(或 SFR)中。

【例 27】设原来 58H 单元中的内容为 4BH,则执行 DEC 58H 指令后, 58H 中的内容

变为 4AH。

④DEC @ R��������;( R�) ←((R�)) –1

指令代码:

说明:指令功能是将 R�间接寻址单元的内容减 1,再回存到该单元。

6.无符号数乘法指令

0000011i

10100011

00010100

0001

1rrr

00010101

direct

0001011i

Page 74: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·65·

MUL AB ;BA ←(A)×(B)

指令代码:

说明:指令功能是将累加器 A 中的无符号数与寄存器 B 中的无符号数相乘,所得乘积

的高 8 位存于寄存器 B 中,低 8 位存于累加器 A 中。该指令对标志位的影响:若积>FFH,则

OV 置“1”,否则 OV 清“0”,CY 总是清“0”。

【例 28】设原来 A 中的内容为 07H,B 中的内容为 F5H, 则执行 MUL AB 指令后,B

中的内容变为 06H,A 中的内容变为 B3H.。

7.无符号数除法指令

DIV AB ;A←(A)/(B)的商,B←(A)/(B)的余数

指令代码:

说明:指令功能是用累加器 A 中的无符号数除以寄存器 B 中的无符号数,所得的商存

于累加器 A 中,所得的余数存于寄存器 B 中。该指令对标志位的影响:只有当除数为 0 时,

OV 置“1”,其余情况 OV 和 CY 均清“0”。

【例 29】设原来 A 中的无符号数为 7EH,B 中的无符号数为 0AH,则执行指令 DIV AB

后,A 中的内容变为 OCH,B 中的内容变为 06H。

表 4-3 列出了所有 24 条算术运算指令。

表 4-3 算术运算类指令一览表

助 记 符 功 能 说 明 字节数 振荡器周期

ADD A, R�寄存器内容加到累加器 1 12

ADD A,direct 直接寻址字节内容加到累加器 2 12

ADD A,@ R�间接寻址 RAM 内容加到累加器 1 12

ADD A,#data 立即数加到累加器 2 12

ADDC A, R�寄存器加到累加器(带进位) 1 12

ADDC A, direct 直接寻址字节加到累加器(带进位) 2 12

ADDC A,@ R�间接寻址 RAM 加到累加器(带进位) 1 12

ADDC A,#data 立即数加到累加器(带进位) 2 12

SUBB A, R�累加器内容减去寄存器内容(带借位) 1 12

SUBB A,direct 累加器内容减去直接寻址内容(带借位) 2 12

10100100

10000100

Page 75: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·66·

(续 表)

助 记 符 功 能 说 明 字节数 振荡器周期

SUBB A,@ R�累加器内容减去间接寻址 RAM(带借位) 1 12

SUBB A,#data 累加器减去立即数(带借位) 2 12

DA A 累加器十进制调整 1 12

INC A 累加器加 1 1 12

INC R�寄存器加 1 1 12

INC direct 直接寻址字节加 1 2 12

INC @ R�间接寻址 RAM 加 1 1 12

INC DPTR 地址寄存器加 1 1 24

DEC A 累加器减 1 1 12

DEC R�寄存器减 1 1 12

DEC direct 直接寻址字节内容减 1 2 12

DEC @ R�间接寻址 RAM 减 1 1 12

MUL AB 累加器 A 和寄存器 B 相乘 1 48

DIV AB 累加器 A 除以寄存器 B 1 48

4.3.3 逻辑运算指令

逻辑运算有逻辑“与”、逻辑“或”、逻辑“异或”、逻辑“取反”、累加器清零、逻辑

移位指令,共有 9 种助记符,分别为 ANL、ORL、XRL、CPL、CLR、RL、RLC、RR、RRC。它

们对标志位的影响列于附录的指令表中。

1.逻辑“与”指令:

① ANL A,R���������;A←(A)∧(R�)指令代码:

说明:指令功能是用累加器 A 的内容和工作寄存器 R�的内容相与,结果存入 A 中。

【例 30】设原来 A 的内容是 01100011B,R的内容为 11101001B ,则执行指令 ANL A,

R后,A 的内容为 01100001B,R的内容不变。

② ANL A,direct ;A ←(A)∧( direct)

指令代码:

说明:指令功能是将累加器 A 的内容和直接寻址的内部 RAM 单元(或 SFR)的内容相

01011rrr

01010101

direct

Page 76: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·67·

与,结果存入 A 中。

③ ANL A,@ R��������;A ←(A)∧(( R�))

指令代码:

说明:指令功能是将累加器 A 中的内容和 R�间接寻址的存贮单元的内容相与,结果存

入 A 中。

④ ANL A ,#data ;A ← (A) ∧data

指令代码:

说明:指令功能是将累加器 A 的内容和立即数 data 相与,结果存入 A 中。

⑤ ANL direct , A ;direct ←(direct) ∧(A)

指令代码:

说明:指令功能是将直接寻址的内部 RAM 单元(或 SFR)的内容和累加器 A 的内容相

与,结果存入直接寻址的内部 RAM 单元或(SFR)。

⑥ ANL direct ,#data ;direct ←(direct) ∧data

指令代码:

说明:指令功能是将直接寻址的内部 RAM 单元(或 SFR)的内容和立即数 data 相与,

结果存入直接寻址的内部 RAM 单元(或 SFR)。

【例 31】设原来内部数据 RAM 单元 46H 中内容为 10001110B,则执行指令

ANL 46H,#11100101B 后,46H 单元内容变为 10000100B。

2.逻辑“或”指令

① ORL A,R������;A←(A)∨(R�)指令代码:

说明:指令功能是将累加器 A 中的内容与工作寄存器 R�中的内容相或,结果存入 A 中。

② ORL A,direct ;A←(A)∨(direct)

0101011i

01010100

data

01010010

direct

01010011

direct

data

01001rrr

Page 77: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·68·

指令代码:

说明:指令功能是将累加器 A 中的内容与直接寻址的内部 RAM 单元(或 SFR)的内容

相或,结果存入 A 中。

③ ORL A,@ R�������;A←(A)∨(( R�))

指令代码 :

说明:指令功能是将累加器 A 的内容与 R�间接寻址的存贮单元的内容相或,结果存入

A 中。

【例 32】设原来 A 中的内容为 11110000B,R�内容为 40H,40H 单元内容为 10101111B。

则执行指令 ORL A,@ R��后,A 的内容为 11111111B,其余不变。

④ ORL A,#data ;A←(A)∨data

指令代码:

说明:指令功能是将累加器 A 的内容与立即数 data 相或,结果存入 A 中。

⑤ ORL direct ,A ;direct←(direct)∨(A)

指令代码:

说明:指令功能是将直接寻址的内部 RAM 单元(或 SFR)的内容与累加器 A 的内容相

或,结果存入 A 中。

⑥ ORL direct ,# data ;direct←(direct)∨data

指令代码:

说明:指令功能是将直接寻址的内部 RAM 单元(或 SFR)的内容与立即数 data 相或,

结果存入直接寻址的内部 RAM 单元(或 SFR)。

3.逻辑“异或”指令

⑦ XRL A ,R��������;A ←(A)∨(R�)指令代码:

01000101

direct

0100011i

01000100

data

01000010

direct

01000011

direct

data

01101rrr

Page 78: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·69·

说明:指令功能是将累加器 A 的内容与工作寄存器 R�的内容相异或,结果存入累加器

A 中。

② XRL A ,direct ;A ←(A)∨(direct)

指令代码:

说明:指令功能是将累加器 A 的内容与直接寻址的内部 RAM 单元(或 SFR)的内容相

异或,结果存到 A 中。

③ XRL A ,@ R�������;A ←(A)∨((R�))

指令代码:

说明:指令功能是将累加器 A 的内容与 R�间接寻址的存贮单元的内容相异或,结果存

到 A 中。

④ XRL A ,# data ;A ←(A)∨data

指令代码:

说明:指令功能是将累加器 A 的内容与立即数 data 相异或,结果存入 A 中。

⑤ XRL direct ,A ;direct ←(direct)∨(A)

指令代码:

说明:指令功能是将直接寻址的内部 RAM 单元(或 SFR)的内容与累加器 A 的内容相

异或,结果存入直接寻址的内部 RAM 单元(或 SFR)中。

【例 33】设原来内部 RAM 单元 63H 中的内容为 01101001B,A 中的内容为 10100110B,

则执行指令 XRL 63H,A 后,63H 的内容变为 11001111B,其余不变。

⑤ XRL direct,#data ;direct ←(direct)∨data

指令代码:

说明:指令功能是将直接寻址的内部 RAM 单元(或 SFR)的内容与立即数 data 相异或,

结果存入直接寻址的内部 RAM 单元(或 SFR)中。

4.逻辑移位指令

① RL A

01100101

direct

0110011i

01100100

data

01100010

direct

01100011

direct

data

Page 79: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·70·

指令代码:

说明:指令功能是将累加器 A 的内容循环左移 1 位,结果存回累加器 A 中。

【例 34】设原来 A 中的内容为 10001110B,则执行指令 RL A 后,A 中的内容变为

00011101B。

② RLC A

指令代码:

说明:指令功能是将累加器 A 的内容带进位循环左移 1 位,结果存回 A 中。

③ RR A

指令代码:

说明:指令功能是将累加器 A 的内容带进位循环右移 1 位,结果存回 A 中。

④ RRC A

指令代码:

说明:指令功能是将累加器 A 的内容带进位循环右移 1 位,结果存回 A 中。

【例 35】设原来累加器 A 中为 10001110B,进位标志 C=1,则执行指令 RRC A 后,A

中内容变为 11000111B,进位标志 C=0。

5.累加器逻辑取反指令

CPL A ;A←( A )

指令代码:

说明:指令功能是将累加器 A 的内容进行逻辑取反,结果存回 A 中。

【例 36】设原来累加器 A 的内容为 11000011B,则执行指令 CPL A 后,A 的内容变为

00100011

00110011

00000011

00010011

11110100

Page 80: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·71·

00111100B。

6.累加器清零指令

CLR A ;A←0

指令代码:

说明:指令功能是将累加器 A 清零(即将 00H 传送到 A 中)。

表 4-4 列出了逻辑运算类指令一览表。

表 4-4 逻辑运算类指令一览表

助 记 符 功 能 说 明 字节数 振荡器周期

ANL A, R�寄存器“与”到累加器 1 12

ANL A,direct 直接寻址字节“与”到累加器 2 12

ANL A,@ R�间接寻址 RAM“与”到累加器 1 12

ANL A,#data 立即数“与”到累加器 2 12

ANL direct, A 累加器“与”到直接寻址字节 2 12

ANL direct, #data 立即数“与”到直接寻址字节 3 24

ORL A, R�寄存器“或”到累加器 1 12

ORL A, direct 直接寻址字节“或”到累加器 2 12

ORL A, @ R�间接寻址 RAM“或”到累加器 1 12

ORL A, #data 立即数“或”到累加器 2 12

ORL direct ,A 累加器“或”到直接寻址字节 2 12

ORL direct ,#data 立即数“或” 到直接寻址字节 3 24

XRL A, R�寄存器“异或” 到累加器 1 12

XRL A, direct 直接寻址字节“异或” 到累加器 2 12

XRL A, @ R�间接寻址 RAM“异或” 到累加器 1 12

XRL A, #data 立即数“异或” 到累加器 2 12

XRL direct,A 累加器“异或” 到直接寻址字节 2 12

XRL direct, #data 立即数“异或” 到直接寻址字节 3 24

RL A 累加器循环左移 1 12

RLC A 带进位的累加器循环左移 1 12

RR A 累加器循环右移 1 12

11100100

Page 81: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·72·

(续 表)

助 记 符 功 能 说 明 字节数 振荡器周期

RRC A 带进位的累加器循环右移 1 12

CLR A 累加器清零 1 12

CPL A 累加器取反 1 12

4.3.4 控制转移指令

这类指令共有 5 种,即无条件转移、条件转移、比较转移、循环转移、子程序调用与

返回(含子程序返回和中断返回)。另外,处理器控制指令只有一条,即空操作指令,也放

在这一部分来介绍。指令助记符共 13 种,分别为 LJMP、AJMP、SJMP、JMP、JZ、JNZ、CJNE、

DJNZ、LCALL、ACALL、RET、RETI、NOP。

1.无条件转移指令

① 长跳转指令

LJMP addr16 ;PC←addr� ��指令代码:

说明:指令功能是使程序无条件地跳转到 addr16(16 位地址或标号)处去执行。跳转

范围为 64KB 空间的任何单元。

② 绝对跳转指令

AJMP addr11 ;PC←(PC)+2,PC����←addr�����指令代码:

说明:指令功能是使程序无条件地跳转到 addr11 表示的地址处去执行。跳转范围为

2KB 字节内的任意单元。注意:这个跳转的范围是以 AJMP 指令的下一条指令第一个字节处

开始到目标地址来计算的。

【例 37】设某程序中,AJMP 指令所在地址为 1000H,标号 LOOP1 处的指令第一个单元

的地址为 1050H,则 AJMP LOOP1 跳转的距离为

1050H-1000H-2=4EH

③ 短跳转指令:

SJMP rel ;PC←(PC)+2,PC←(PC)+rel�

00000010

addr� ��addr���

a��a�a�00001

a�~a�

Page 82: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·73·

指令代码:

说明:指令功能是使程序无条件地跳转到 rel 表示的地址处去执行。这里 rel 为带符号

的 8 位位移量,即 SJMP 指令的跳转范围在-128~127 个字节内。

④ 间接跳转指令

JMP @A+DPTR ;PC←(A)+(DPTR)�指令代码:

说明:指令功能是使程序无条件地跳转到以累加器 A 的内容与 DPTR 的内容之和为地址

的指令处去执行。该指令可方便地实现程序散转,因此,也称散转指令(详见散转程序设

计)。

【例 38】设原来累加器 A 的内容为 10H,DPTR 的内容为 2000H,则执行指令

JMP @A+DPTR 后,程序无条件转移到 2010H 处去执行。

2.条件转移指令

① 累加器为零转移指令

JZ rel ;若(A)=0,则 PC←(PC)+2+rel

若(A)≠0,则(PC)←(PC)+2

指令代码:

说明:指令功能是当累加器 A 的内容为零时,使程序转移到 rel 表示的地址处去执行。

② 累加器非零转移指令

JNZ rel ;若(A)≠0,则 PC←(PC)+2+rel

若(A)=0,则 PC←(PC)+2

指令代码:

说明:指令功能是当累加器 A 的内容不为零时,使程序转移到 rel 表示的地址处去执

行。

3.比较转移指令

① CJNE A,direct,rel ;若(A)>(direct),则 PC←(PC)+3+rel,Cy←0

若(A)<(direct),则 PC←(PC)+3+rel,CY←1

若(A)=(direct),则 PC←(PC)+3

10000000

Rel

01110011

01100000

rel

01110000

rel

Page 83: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·74·

指令代码:

说明:指令功能是将累加器 A 的内容与直接寻址的内部 RAM 单元(或 SFR)的内容进

行比较,若不相等,则程序转移到 rel 所表示的地址处去执行,否则顺序执行。

【例 39】设原来累加器 A 的内容为 38H,内部 RAM 单元 4DH 中的内容为 5FH,程序中

标号 LOOP 所在的指令地址为 2300H,则执行指令 CJNE A,4DH,LOOP 后,程序会转到 2300H

处去执行。

② CJNE A,#data,rel ;若(A)>#data,则 PC←(PC)+3+rel,CY←0

若(A)<#data,则 PC←(PC)+3+rel,CY←1

若(A)=#data,则 PC←(PC)+3

指令代码:

说明:指令功能是将累加器 A 的内容与立即数 data 进行比较,不相等则程序转移到

rel 表示的地址处去执行,否则顺序执行程序。

③ CJNE Rn,#data,rel ;若(Rn)>data,则 PC←(PC)+3+rel,CY←0

若(Rn)<data,则 PC←(PC)+3+rel,CY←1

若(Rn)=data,则 PC←(PC)+3

指令代码:

说明:指令功能是将工作寄存器 Rn 的内容与立即数 data 进行比较,不相等,则使程

序转到 rel 所表示的地址去执行。

④ CJNE @Ri,#data,rel ;若((Ri))>data,则(C←(PC)+3+rel,CY←0

若((Ri))<data,则 PC←(PC)+3+rel,CY←1

若((Ri))=data,则 PC←(PC)+3

指令代码:

说明:指令功能是将 Ri 间接寻址的存储单元的内容与立即数 data 进行比较,不相等,

则使程序转到 rel 所表示的地址去执行。

4.循环转移指令

① DJNZ Rn,rel ;(Rn)←(Rn)-1;若(Rn)≠0,则 PC←(PC)+2+rel

10110101

Direct

Rel

10110100

data

rel

10111rrr

data

rel

1011011i

data

rel

Page 84: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·75·

若(Rn)=0,则 PC←(PC)+2

指令代码:

说明:指令功能是先将工作寄存器 Rn 中的内容减 1,然后判断其是否为零,若不为零,

则程序转到 rel 所表示的地址处去执行,否则顺序执行。

② DJNZ direct,rel ;direct←(direct)-1,

若(direct)≠0,则 PC←(PC)+3+rel

若(direct)=0,则 PC←(PC)+3

指令代码:

说明:指令功能是先将直接寻址的内部 RAM 单元(或 SFR)的内容减 1,然后判断该单

元内容是否为零,若不为零,则程序转到 rel 所表示的地址处去执行,否则顺序执行。

【例 40】设原来内部 RAM 单元 32H 中的内容为 10H,程序中有标号 LOOP2,则执行指

令 DJNZ 32H,LOOP2 后,程序会转到 LOOP2 处执行。

5.子程序调用与返回指令

① 长调用指令

LCALL addr16 ;PC←(PC)+3,SP←(SP)+1

(SP)←(PC)���,SP←(SP)+1

(SP)←(PC)� ��,PC� ��←addr16

指令代码:

说明:指令功能是将 LCALL 指令的下一条指令第一个字节的地址入栈保护,并使程序

转移到地址 addr16 处去执行。LCALL 指令可在 64KB 范围内调用子程序。

② 绝对调用指令

ACALL addr11 ;PC←(PC)+2,SP←(SP)+1

(SP)←(PC)���,SP←(SP)+1

(SP)←(PC)� ��,PC����←addr11

指令代码:

说明:指令功能是将 ACALL 指令的下一条指令第一个字节的地址入栈保护,并使程序

转移到 addr11 表示的地址处去执行。ACALL 指令可在 2KB 范围内调用子程序。

③ 子程序返回指令

11011rrr

rel

11010101

direct

rel

00010010

Addr� ��addr���

a��a�a�10001

a�~a�

Page 85: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·76·

RET ;PC� ��←((SP)),SP←(SP)-1

PC���←((SP)),SP←(SP)-1

指令代码:

说明:指令功能是将执行调用指令时保护到堆栈中的返回地址弹到指令指针 PC 中,从

而使程序返回到主程序中调用指令的下一条指令处去执行。

④ 中断返回指令

RETI ;PC� ��←((SP)),(SP)←(SP)-1

PC���←((SP)),(SP)←(SP)-1

指令代码:

说明:指令功能是将断点(中断的后继指令)地址弹出堆栈,恢复到 PC 中,并释放中

断逻辑,从而使程序返回到主程序断点处执行。这条指令与子程序返回指令的区别就在于

它要释放中断逻辑。

6.空操作指令

NOP ;PC←(PC)+1

指令代码:

说明:该指令没有指定功能,除了将指令指针加 1 外,不进行任何操作,在程序中常

用于产生一个机器周期的延时。

表 4-5 列出了所有的控制转移指令。

表 4-5 控制转移指令一览表

指令格式 功能说明 字节数 振荡器周期

LJMP addr16 长转移 3 24

AJMP addr11 绝对转移 2 24

SJMP rel 短转移(相对转移) 2 24

JMP @A+DPTR 相对 A+DPTR 的间接转移 1 24

JZ rel 累加器为零则转移 2 24

JNZ rel 累加器为非零则转移 2 24

CJNE A,direct,rel 比较直接寻址字节和 A 不相等转移 3 24

CJNE A,#data,rel 比较立即数和 A 不相等转移 3 24

CJNE Rn,#data,rel 比较立即数和寄存器不相等转移 3 24

CJNE @Ri,#data,rel 比较立即数和间接寻址单元不相等转移 3 24

DJNZ Rn,rel 寄存器减 1 不为零转移 2 24

DJNZ direct,rel 直接寻址字节减 1 不为零转移 3 24

00100010

00110010

00000000

Page 86: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·77·

(续 表)

指令格式 功能说明 字节数 振荡器周期

ACALL addr11 子程序绝对调用 2 24

LCALL addr16 子程序长调用 3 24

RET 子程序返回 1 24

RETI 中断返回 1 24

NOP 空操作 1 12

4.3.5 位操作指令

位操作指令是 MCS-51 系列单片机指令系统较有特色的一类指令,尤其在逻辑处理中的

应用十分灵活,其作用范围是内部 RAM 的位寻址区及可位寻址的 SFR。这类指令有位传送、

位逻辑操作、位条件转移三种指令。共有 11 种助记符,分别为 MOV、ANL、ORL、CLR、SETB、

CPL、JC、JNC、JB、JNB、JBC。

1.位传送指令

① MOV C,bit ;C←(bit)

指令代码:

说明:指令功能是将直接寻址的位(bit)的内容复制到位累加器(进位标志 CY)C

中。

【例 41】设原来位累加器 C 中内容为 1,位地址 33H 中的内容为 0,则执行指令 MOV C,

bit 后,C 中的内容变为 0,其余不变。

② MOV bit,C ;bit←(C)

指令代码:

说明:指令功能是将位累加器 C 的内容复制到直接寻址的位(bit)中。即与上一条指

令的传送方向相反。

2. 位逻辑操作指令

(1) 位逻辑“与”指令:

① ANL C,bit ;C←(C)∧(bit)

指令代码:

10100010

bit

10010010

bit

10000010

bit

Page 87: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·78·

说明:指令功能是用位累加器 C 的内容和直接寻址位(bit)的内容相“与”,结果存

回 C 中。

② ANL C,/bit ;C←(C)∧( bit )

指令代码:

说明:指令功能是用位累加器 C 的内容和直接寻址位(bit)取反后的内容相“与”,

结果存回 C 中。

(2) 位逻辑“或”指令

① ORL C,bit ;C←(C)∨(bit)

指令代码:

说明:指令功能是用位累加器 C 的内容和直接寻址位(bit)的内容相“或”,结果存

回 C 中。

② ORL C,/bit ;(C)←(C)∨( bit )

指令代码:

说明:指令功能是用位累加器 C 的内容和直接寻址位(bit)取反后的内容相“或”,

结果存回 C 中。

【例 42】设原来 C 中的内容为“0”,位地址 32H 中的内容为“1”,则执行 ORL C,/32H

指令后,C 中的内容为“0”,其余不变。

(3) 位清零指令:

① CLR C ;C←0

指令代码:

说明:指令功能是将位累加器 C 清零。

② CLR bit ;bit←0

指令代码:

说明:指令功能是将直接寻址位清零。

(4) 位置“1”指令:

① SETB C ;C←1

指令代码:

10110000

bit

01110010

bit

10100000

bit

11000011

11000010

bit

11010011

Page 88: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·79·

说明:指令功能是将位累加器 C 置“1”。

② SETB bit ;bit←1

指令代码:

说明:指令功能是将直接寻址位置“1”。

(5) 位取反指令:

① CPL C ;C←( C )

指令代码:

说明:指令功能是将位累加器 C 的内容取反,再送回 C 中。

② CPL bit ;bit←( bit )

指令代码:

说明:指令功能是将直接寻址位的内容取反,再送回该位中。

3.位条件转移指令

① JC rel ;若(C)=1,则 PC←(PC)+2+rel

若(C)=0,则 PC←(PC)+2

指令代码:

说明:指令功能是判断位累加器 C 的内容,若为“1”,则程序转移到 rel 所表示的地

址去执行,否则顺序执行。

② JNC rel ;若(C)=0,则 PC←(PC)+2+rel

若(C)=1,则 PC←(PC)+2

指令代码:

说明:指令功能是判断位累加器 C 的内容,若为“0”,则程序转移到 rel 所表示的地

址去执行,否则顺序执行。

③ JB bit,rel ;若(bit)=1,则 PC←(PC)+3+rel

若(bit)=0,则 PC←(PC)+3

11010010

bit

10110011

10110010

bit

01000000

rel

01010000

rel

Page 89: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·80·

指令代码:

说明:指令功能是判断直接寻址位的内容,若为“1”,则程序转移到 rel 所表示的地

址去执行,否则顺序执行。

④ JNB bit,rel ;若(bit)=0,则 PC←(PC)+3+rel

若(bit)=1,则 PC←(PC)+3

指令代码:

说明:指令功能是判断直接寻址位的内容,若为“0”,则程序转移到 rel 所表示的地

址去执行,否则顺序执行。

⑤ JBC bit,rel ;若(bit)=1,则 PC←(PC)+3+rel,且 bit ←0

若(bit)=0,则 PC←(PC)+3

指令代码:

说明:指令功能是判断直接寻址位的内容,若为“1”,则程序转移到 rel 所表示的地

址去执行,并且将该位清零,否则顺序执行。

【例 43】串行通信中,接收方收到一个有效数据,则接收中断标志 RI 自动置“1”。

当用查询方式接收数据时,应该用 JBC RI,rel 指令将 RI 清零,并转到 rel 处读取收到

的数据。RI 必须用软件清零,以便为下一次接收数据做好准备。

表 4-6 列出了位操作的所有指令。

表 4-6 位操作指令一览表

指令格式 功能说明 字节数 时钟周期数

MOV C,bit 直接寻址位的内容传送到位累加器 C 2 24

MOV bit,C 位累加器 C 的内容传送到直接寻址位 2 24

ANL C,bit 位累加器 C 的内容和直接寻址位内容相“与” 2 24

ANL C,/bit 位累加器 C 的内容和直接寻址位取反后的内容相“与” 2 24

ORL C,bit 位累加器 C 的内容和直接寻址位内容相“或” 2 24

ORL C,/bit 位累加器 C 的内容和直接寻址位取反后的内容相“或” 2 24

CLR C 位累加器 C 清零 1 12

CLR bit 直接寻址位清零 2 12

SETB C 位累加器 C 置“1” 1 12

SETB bit 直接寻址位置“1” 2 12

00100000

bit

rel

00110000

bit

rel

00010000

bit

rel

Page 90: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·81·

(续 表)

指令格式 功能说明 字节数 时钟周期数

CPL C 位累加器 C 内容取反 1 12

CPL bit 直接寻址位内容取反 2 12

JC rel 位累加器为“1”转移 2 24

JNC rel 位累加器为“0”转移 2 24

JB bit,rel 直接寻址位为“1”转移 3 24

JNB bit,rel 直接寻址位为“0”转移 3 24

JBC bit,rel 直接寻址位为“1”转移,且该位清零 3 24

4.3.6 综合应用举例

【例 44】编写一程序段实现下列运算 y=a+2ab+b。其中,数据 a 从 P1 口输入,b 从

P3 口输入,Y 的低 8 位从 P1 口输出,高 8 位从 P3 口输出。

解:程序流程图如图 4-11 所示。

程序段为:

MOV P1,#0FFH ;设置 P1、P3 口为输入端口

MOV P3,#0FFH

CLR PSW.4 ;指定工作寄存器区

CLR PSW.3

MOV A,P1 ;输入 a

MOV B,A

MUL AB ;求 a�

MOV R�,A ;保存 a低 8 位

MOV R1,B ;保存 a高 8 位

MOV A,P1 ;求 2ab

RL A

MOV B,A

MOV A,P3

MUL AB

MOV R2,A ;保存 2ab 低 8 位

MOV R3,B ;保存 2ab 高 8 位

MOV A,P3 ;求 b

MOV B,A

MUL AB

MOV R4,A ;保存 b低 8 位

MOV R5,B ;保存 b高 8 位

从 P1 口读入 a

求 a2 并保存

P1、P3 口设置

为输入端口

选择工作

寄存器区

从 P3 口读入 b

求 b2 并保存

求 a2+2ab+b2

输出结果

图 4-11 例 44 流程图

Page 91: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·82·

ADD A,R2 ;求(2ab+b)的低 8 位

MOV R6,A ;保存

MOV A,R5 ;求(2ab+b)的高 8 位

ADDC A,R3

MOV R7,A ;保存

MOV A,R0 ;求(a+(2ab+b))的低 8 位

ADD A,R6

MOV P1,A ;输出结果低 8 位

MOV A,R1 ;求(a+(2ab+b))的高 8 位

ADDC A,R7

MOV P3,A ;输出结果高 8 位

【例 45】编写程序段完成下列逻辑运算。设变量 X0,X1,X2,X3,X4,X5,X6 分别

从 P1.0,P1.1,P1.2,P1.3,P1.4,P1.5,P1.6 输入,Y 从 P1.7 输出。

6543210 XXXXXXXY +⋅+⋅⋅+=

解:程序段为:

MOV C,P1.1 ;输入 X1

ANL C,/P1.2 ;求( 21 xx ⋅ )

ANL C,/P1.3 ;求( 321 xxx ⋅⋅ )

MOV 36H,C ;保存到位地址 36H

MOV C,P1.4 ;输入 X4

ANL C,P1.5 ;求( 54 xx ⋅ )

ORL C,/P1.6 ;求( 4 5 6x x x⋅ + )

ORL C,P1.0 ;求( 0654 xxxx ++⋅ )

ORL C,36H ;求( 3210654 xxxxxxx ⋅⋅+++⋅ )

MOV P1.7,C ;输出结果

习题与思考题

1.MCS-51 系列单片机有哪几种寻址方式?

2.指出下列指令中源操作数的寻址方式?

(1)MOV C,30H

(2)MOV P���,C

(3)MOV A,@R�(4)MOV A, B

Page 92: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·83·

(5)MOV R�,A

(6)MOVX A,@DPTR

(7)MOV R�,43H

(8)MOVC A,@A+DPTR

(9)MOV R�,#60H

(10)JBC 20H,LOOP

3.指出下列指令中画线的操作数的寻址方式。

(1)MOV DPTR ,#8000H

(2)MOVC A,@A+PC

(3)MOV @R�,A

(4)MUL AB

(5)INC DPTR

(6)SJMP NEXT

(7)CPL C

(8)ANL C,30H

(9)SUBB A,R�(10)ORL 70H,A

(11)PUSH 50H

(12)CJNE A,#0FFH,ONE

4.说明下列指令的功能。

(1)SWAP A

(2)XCH A,@R�(3)CJNE R�,#0,TWO

(4)DA A

(5)DJNZ R�,ONE

(6)JMP @A+DPTR

(7)JB LOOP1

(8)JC LOOP2

(9)ACALL DELY

(10)XCHD A,@R�5.已知 8051 单片机内部 RAM 30H 和 40H 单元的内容分别为 70H 和 71H,执行下面一

段程序后,30H,40H,60H,70H,71H 单元以及 A、R�中的内容分别是什么?

MOV R0,30H

MOV A,40H

MOV 60H,A

ORL A,#0F0H

MOV 70H,A

ANL A,@R0

ADD 60H,#0AH

Page 93: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·84·

MOV A,60H

MOV 71H,A

6.编写一程序段,将内部数据单元 40H、41H 的数据传送到外部数据单元 1000H 和 1001H

中去。然后再传送到内部数据单元 60H、61H 中。

7.编写程序段实现:将累加器 A 中的 2 位压缩型 BCD 码表示的十进制数分开后存入内

部数据单元 81H、80H。

8.编写一段程序,将 R�R中的 4 位 BCD 码表示的十进制数倒序排列。

9.用手工汇编将下列程序段翻译成机器代码,并分析该程序段的功能。

CLR A

MOV R�,A

MOV R�,#4

LOOP: CLR C

MOV A,R�RLC A

MOV R�,A

MOV A,R�RLC A

MOV R�,A

MOV A,R�RLC A

MOV R�,A

DJNZ R�,LOOP

SJMP $

10.指出下列程序段完成的功能,并说明最后 SP 指针指向哪里?

MOV SP,#30H

MOV DPTR,#2000H

MOV R�,#10H

NEXT: MOVX A,@DPTR

PUSH A

DJNZ R�,NEXT

SJMP $

11.编写一程序段将 P�口的高 3 位置位,低 5 位不变。

12.编写一段程序求 R�R�中的双字节有符号数的补码,并将结果存入 R�R�13.已知 SJMP 0B4H 所在的地址为 0100H,求其转移的目的地址。

14.求指令 HEAR:AJMP HEAR 的地址偏移量。

15.编写程序段完成逻辑运算�������Y (X X ) X X X X X= + ⋅ ⋅ + ⋅ +

16.用单片机指令序列实现图 4-12 所示电路的逻辑功能。

Page 94: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·85·

&

&

&

& F

AB

C

E

D

图 4-12 习题 16 的逻辑电路

17.求下列指令执行后,(A)=? PSW 中 CY、OV、AC 分别为何值。设指令执行前(A)

=6BH

(1)当 CY=0,执行 ADD A,#81H 后;

(2)当 CY=1,执行 ADD A,#8CH 后;

(3)当 CY=0,执行 ADDC A,#72H 后;

(4)当 CY=1,执行 ADDC A,#79H 后;

(5)当 CY=1,执行 SUBB A,#79H 后;

(6)当 CY=0,执行 SUBB A,#0F9H 后;

(7)当 CY=1,执行 SUBB A,#7AH 后;

(8)当 CY=0,执行 SUBB A,#8CH 后;

18.MCS-51 单片机指令系统中 LJMP 指令,AJMP 指令和 SJMP 指令有何分别?

19.分析下列指令哪些指令超出寻址范围?若没有超出寻址范围,请写出指令的机器

代码。

指令第一字节地址 指令 目的地址

1230H AJMP 1620H

2780H AJMP 2530H

1750H AJMP 1A00H

1230H ACALL 1620H

2780H ACALL 2530H

2750H ACALL 2A00H

2330H SJMP 2340H

2866H SJMP 2800H

27FEH SJMP 2730H

20.试用 3 种方法实现将累加器 A 的内容乘以 2。

21.分析执行下面程序段后,累加器 A 和寄存器 B 的内容分别是什么?

MOV SP, #31H

MOV A,#30H

MOV B,#40H

PUSH ACC

PUSH B

Page 95: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·86·

POP ACC

POP B

SJMP $

22.分别指出 MOV 指令、MOVX 指令和 MOVC 指令访问的是 MCS-51 单片机系统的哪个存

储空间。

Page 96: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·87·

第五章 MCS-51 系列单片机

汇编语言程序设计

普通的微型计算机软件分为系统软件和应用软件,系统软件是由计算机制造商或专门

的软件公司为用户编好的,如操作系统等。应用软件是用户自己根据需要开发的。与普通

微型计算机不同的是单片机没有像操作系统那样的系统软件,所有的系统程序均需用户自

己编写。因此,熟练掌握单片机的指令系统和程序设计方法就显得更加重要。虽然许多单

片机系统提供了一些高级语言,但目前仍然是汇编语言在单片机应用系统中最为普遍。采

用汇编语言的优点在于其占用的内存空间和 CPU 资源少,程序简短,执行速度高,可直接

调用全部软、硬件资源,并能有效地利用计算机的专有特性,能准确地了解和控制程序执

行时间,适用于实时测控系统。

本章介绍 MCS-51 系列单片机汇编语言的语句格式,常用伪指令,程序的上机调试过程

以及程序设计实例。

5.1 MCS-51 系列单片机汇编语言语句格式

汇编语言的语句由四部分构成:名字项,操作码项,操作数项,注释项。

MCS-51 系列单片机汇编语句有两种,即汇编指令语句和伪指令语句。汇编指令语句是

可执行语句,而伪指令语句是指示性语句,它是写给汇编程序的,CPU 是不能执行的,它

提供了诸如规定程序地址、建立数据表格等功能。这两类指令都含有上述四项内容,下面

分别介绍。

1.名字项

名字项就是我们常说的标号,标号是该指令的符号地址,可根据需要设定。标号必须

以字母开始,以冒号结束,所用字符一般不超过 8 个(视汇编语言版本不同而异)。系统中

保留使用的字符或字符组不能用作标号。如各种 SFR 名、汇编指令助记符以及伪指令定义

符等。一旦某个标号赋给某个语句,则其他语句的操作数可以直接引用该标号,以便寻址

或控制程序转移。标号在每条语句中是任选项,即需要时才设定。

2.操作码项

这一项对于汇编指令语句而言是指令的助记符,如 MOV。对伪指令语句而言是指令的

Page 97: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·88·

定义符,如 DB。操作码是汇编语言程序每一句所必须的部分,它决定语句的操作性质。操

作码与操作数之间用空格分开。

3.操作数项

操作数可以是数字,这些数字可以是二进制数,以 B(Binary)结尾;可以是十进制

数,以 D(Decimal)结尾或不带标志;可以是十六进制数,以 H(Hexadecimal)结尾。若

数字大于 9,则数字应以“0”开头。这些操作数可以是地址,如标号或寄存器名,也可以

是立即数。操作数又可分为目的操作数和源操作数两种,二者之间用逗号分开。另外,汇

编语言语句中,有的有一个操作数,有的有两个操作数,有的有三个操作数,有的有多个

操作数,有的没有操作数,而有的操作数是隐含的。

4.注释

以分号开头,计算机在汇编时对这部分不予处理,是程序员对指令操作的解释,可有

可无。它由任何可以打印的 ASCⅡ码字符组成。一般用英文或某种简洁的方式解释本行语

句的意义。但不一定对每行都加以解释,仅在某些关键行加注释,以便提高程序的可读性。

注释不影响汇编结果,不译成任何机器代码。

程序员在编程序时,一定要严格按规定的格式书写程序。

5.2 常用伪指令

所谓伪指令是指由汇编程序提供的,在汇编时起作用,在执行时不起作用的一类指令。

其特点是没有对应的机器码。伪指令提供了像规定程序地址、建立数据表格一类的功能,

为汇编语言程序的编写提供了方便。

1.定位伪指令

格式:ORG n

n 为十进制或十六进制常数,代表地址。该伪指令规定了后面指令的存放地址。例如:

ORG 0100H

AJMP PRG1

AJMP 为双字节指令,其首字节放在 0100H 单元,第二个字节放在 0101H 单元。

2.汇编结束伪指令

格式:END

当汇编程序遇到该指令后,结束汇编过程,其后的指令将不加处理。

3.定义字节伪指令

格式:标号:DB X1,X2,⋯,Xi,⋯Xn

Page 98: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·89·

其中标号为可选项,Xi 为 8 位数据或 ASCⅡ码。

例如:

ORG 1000H

TAB: DB 01H,02H

则 (1000H)=01H

(1001H)=02H

又如:

ORG 1100H

ABC: DB ‘01’

则 (1100H)=30H (0 的 ASCⅡ码)

(1101H)=31H (1 的 ASCⅡ码)

4.定义双字节伪指令

格式:标号:DW X1,X2,⋯,Xi,⋯Xn

其中称号为可选项,Xi 为双字节数据。

例如:

ORG 2000H

HETAB: DW 2546H,0178H

则 (2000H)=25H

(2001H)=46H

(2002H)=01H

(2003H)=78H

5.定义空间伪指令

格式:标号:DS 数据或字符表达式

其中标号为可选项。

从指定单元开始,由数据或表达式确定保留若干个字节内存空间备用。

例如:

ORG 8000H

BUF: DS 08H

DB 50H,8FH

即:8000H~8007H 单元保留备用

(8008H)=50H

(8009H)=8FH

以上 DB、DW、DS 伪指令只对程序存储器起作用。

6.单字节数据赋值伪指令

格式: X EQU n

X 为用户定义的符号名,n 为常数、工作寄存器或特殊功能寄存器,为单字节数据。

Page 99: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·90·

该伪指令将 n 的值赋给符号名 X。

X 可用于指令中,作为单字节操作数,包括立即数和直接地址 direct。

7.双字节数据赋值伪指令

格式:y EQU n

y 为用户定义的符号名,n 为双字节常数。

该伪指令将 n 的值赋给符号名 y。

y 可作为指令中双单字节操作数,或转移指令中的目的地址。

用 EQU 定义的符号名必须先定义后使用。

8.数据地址赋值伪指令

格式:字符名称 DATA 数据或表达式

此命令把一个数据地址或代码地址赋予标号段规定的字符名称。

例如:

INDEXJ DATA 6369H

定义了 INDEXJ 这个字符名称的地址为 6369H,主要用于程序的模块式调试。

又如:

ORG 8000H

INDEXJ DATA 8096H

LJMP INDEXJ

END

等价于

ORG 8000H

LJMP 8096H

END

被定义的字符名称也可先使用后定义。

DATA 和 EQU 的区别在于用 DATA 定义的字符名称作为标号登记在符号表中,故可先使

用后定义;而用 EQU 定义的字符名必须先定义后使用,其原因是 EQU 不定义在符号表中。

9.位地址符号命令

格式:字符名称 BIT 位地址

该命令把位地址赋予标号段的字符名称。

例如: A1 BIT P1.0

A2 BIT P1.1

这里位地址 P1.0 、P1.1 分别赋给标号段的字符 A1、A2,在编程中可将字符 A1、A2

当作位地址用。

需要注意的是,不同的汇编程序提供的伪指令可能不同,使用时请参考相应的说明。

Page 100: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·91·

5.3 MCS-51 单片机汇编语言

源程序格式及上机过程

5.3.1 源程序格式

单片机汇编语言源程序要比 80X86 汇编语言源程序简单得多,它不需要分段。在程序

开始处用 ORG 伪指令将程序安排在某个存储区,在程序结束处用 END 伪指令结束程序即可。

子程序和中断服务程序与主程序的接口也很简单,直接以第一条可执行指令的标号作为该

子程序名或该中断服务程序名。并且子程序和中断都允许嵌套。整个源程序一般格式如下:

ORG ××××

SJMP(或 AJMP 或 LJMP) 主程序名

ORG ××××

主程序名: 主程序

M

M

子程序名: 子程序

M

M

RET

中断服务程序名:中断服务程序

M

M

RETI

END

需要说明的是:不是所有的源程序都包含子程序和中断服务程序,它们都是需要时才

编写的。

5.3.2 MCS-51 单片机汇编语言上机过程

大家知道,计算机只能处理二进制机器代码,因此必须将汇编语言程序翻译成机器代

码(目标程序),计算机才能执行,这个过程称为汇编。源程序到机器语言程序(二进制代

码序列)的翻译有两种方法。一种是“人工汇编”,即根据指令表将程序中的每一条指令人

工翻译成对应的机器代码,直接向计算机存储器中输入机器代码(这就是可执行程序),以

便 CPU 执行。另一种方法是“自动汇编”,即向计算机存储器中输入源程序,然后由专用软

Page 101: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·92·

件(汇编程序)自动地将源程序翻译成机器代码(可执行程序),以便计算机执行。在剖析

软件产品时,有些情况下需要将二进制机器代码表示的目标程序还原成汇编语言源程序,

这个过程称为反汇编。

汇编

汇编语言源程序 机器语言目标程序

反汇编

目前,在开发单片机软件时,一般都采用自动汇编方法。单片机开发系统都带有软、

硬件开发环境。虽然不同开发系统的开发过程本质上是相同的(即编辑→汇编→运行),但

在系统菜单、具体命令格式上可能有所不同。本书实验部分给出了 TSC 实验系统提供的开

发环境下,MCS-51 系列单片机汇编语言的上机过程,因此,具体的上机过程请看实验部分

和有关附录。

5.4 MCS-51 单片机汇编语言程序设计实例

5.4.1 汇编语言程序设计步骤及程序质量评价标准

1.汇编语言程序设计步骤

用汇编语言编写程序,一般可按如下步骤进行:

(1)建立数学模型

根据要解决的实际问题,反复研究分析并抽象出数学模型。

(2)确定算法

解决一个实际问题,往往有多种方法,要从诸多算法中确定一种较为简洁的方法是至

关重要的。

(3)制订程序流程图

算法是程序设计的依据,把解决问题的思路和算法的步骤画成程序流程图。

(4)确定数据结构

合理地选择和分配内存工作单元以及工作寄存器。

(5)写出源程序

根据程序流程图,精心选择合适的指令和寻址方式来编制源程序。

(6)上机调试程序

将编制好的源程序在计算机上进行编辑、汇编,成为可执行的目标代码后,便可执行

目标程序,检查修改程序中的错误,对程序运行结果进行分析,直至正确为止。

2.评价程序质量的标准

解决某一问题,实现某一功能的程序不是唯一的。程序有简有繁,占用的内存单元有

多有少,执行时间有长有短,因而编制的程序也不同,通常从以下几个方面来评价程序质

Page 102: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·93·

量。

(1)程序的执行时间;

(2)程序所占用的内存字节数目;

(3)程序的逻辑性,可读性;

(4)程序的兼容性,可扩展性;

(5)程序的可靠性。

一般来说,一个程序执行时间越短,占用的内存单元越少,其质量越高。这就是程序

设计中的“时间”和“空间”的概念,如果系统对程序执行速度要求不高,存储容量足够,

那么,“空间”和“时间”就不是主要考虑的问题。程序设计的逻辑性强,层次清楚,数据

结构合理,便于阅读也是衡量程序优劣的重要标准。同时,还要保证程序在任何实际工作

条件下都能正常运行。在较复杂的程序设计中,必须充分考虑程序的可读性和可靠性。另

外程序的可扩展性、兼容性以及容错性等都是衡量与评价程序优劣的重要标准。

5.4.2 程序设计实例

MCS-51 单片机汇编语言程序有以下一些基本类型:顺序结构程序、分支结构程序、循

环结构程序、查表程序、散转程序、子程序、中断服务程序。

这一节分别给出这些结构的程序设计实例,其中,中断服务

程序放在第六章介绍。

程序流程图中的符号说明:

端点符号 表示程序的开始或结束

处理符号 表示处理过程

判断符号 表示判断

1.顺序结构程序设计

顺序结构的程序是指既无循环又无分支(不产生跳转),

按程序中指令书写的顺序执行的程序,又称直线程序。这种

结构的程序虽然简单,但它是构成任何结构程序的基础。

【例 1】两个 1 位十进制数相加,结果存于工作寄存器

R6、R4 中。设两个加数分别在工作寄存器 R0 和 R2 中。程序

流程图见图 5-1 所示。

源程序清单:设程序起始地址为 1000H

ORG 1000H ;初始化:指定起始地址

MAIN:�CLR PSW.4 ;指定工作寄存器区(指定为第 0 区)

CLR PSW.3

MOV A,R0 ;取第一个加数

初始化

指定工作寄存器区

取第一个加数

加第二个加数

十进制调整

保存结果

图 5-1 例 1 的程序流程图

Page 103: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·94·

CLR R6

CLR C

ADD A,R2 ;加上第二个加数

DA A ;十进制调整

MOV R4,A ;保存结果低 8 位

CLR A

ADDC A,#0

MOV R6,A ;保存结果高 8 位

END

【例 2】单字节十六进制数转换为 BCD 码。

设被转换的单字节十六制进制数在累加器 A 中,转换

结果的百位数存于工作寄存器 R1 中,十位数存于 R0 的高

4 位,个位数存于 R0 的低 4 位。

说明:转换方法为先用被转换的十六进制数除以 100,

商即为 BCD 码的百位数,余数再除以 10,商即为 BCD 码的

十位数,最后的余数则为 BCD 码的个位数。

程序流程图见图 5-2 所示。

源程序清单:设程序起始地址为 0040H

ORG 0040H ;初始化:设置起始地址

START:MOV B,#100

DIV AB ;被转换数除以 100,求百位数

MOV R1,A ;存百位数

MOV A,B ;余数除以 10,求十位数和个位数

MOV B,#10

DIV AB

SWAP A

ADD A,B

MOV R0,A ;保存十位数和个位数。

END

【例 3】双字节循环左移一位。设被移位的数据在 R�R�中,移位后的结果存回 R�R�。程序流程图见图 5-3 所示。

ORG 4000H ;程序清单设置起始地址

BINRL: CLR C

MOV A,R2 ;取数据低 8 位

RLC A ;带进位循环左

MOV R2,A ;保存

MOV A,R3 ;取数据高 8 位

RLC A ;带进位循环左

初始化

16 进制数

除以 64H

存百位数

余数除以 0AH

存十位数

和个位数

图 5-2 例 2 的程序流程图

Page 104: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·95·

图 5-4 例 4 的

程序流程图

MOV R3,A ;保存

MOV A,R2 ;最高位移入最低位

ADDC A,#00H

MOV R2,A

END

开 始

清 C

R2 最高位移入 C

R2 最高位移入 R3 最低位

R3 最高位移入 C

R3 最高位移入 R2 最低位

图 5-3 例 3 的程序流程图

2.分支结构程序设计

在实际应用中,不可能所有程序都是直线运行的,相反,多数情况都需要根据不同的

条件进行不同的处理,这就会使程序跳转到不同位置去执行,这种结构的程序称为分支结

构程序。MCS-51 单片机中条件转移指令、比较转移指令、位转移指令等都可实现程序分支。

【例 4】求单字节带符号数的补码。设该单字节数在累加器 A 中,求出的补码存于寄

存器 B 中。

程序流程图见图 5-4 所示。

源程序清单:设程序起始地址为 0200H

ORG 0200H ;初始化:设置程序起始地址

BEGIN:JNB ACC.7,L1 ;符号位为“1”吗?否,则转 L1

MOV C,ACC.7 ;是,则取出符号位,并存于 C

MOV 00H,C ;保存符号位

CPL A ;A 中数取反

ADD A,#1 ;取反后加 1

MOV C,00H ;恢复符号位

MOV ACC.7,C

L1: MOV B,A ;保存结果

END

【例 5】单字节十六进制数转换为 ASCⅡ码。设被转换的数在 B 中,转换后的 ASCⅡ码

放在 R�R�中。

Page 105: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·96·

说明:每一位十六进制数对应的 ASCⅡ码有两种情况;若为 0~9,直接加上 30H 即转

换成了 ASCⅡ码,若为 A~F,除加上 30H 外,还要加上 7,才能转换成 ASCⅡ码。

程序流程图见图 5-5 所示。

源程序清单:设程序起始地址为 2000H

ORG 2000H

MAIN: MOV A,B ;取被转换数据

SWAP A ;取高 4 位

ANL A,#OFH

SUBB A,#0AH ;高 4 位〈0AH 吗?

JC L1 ;是,转 L1

ADD A,#7 ;否,加 7

L1: ADD A,#30H ;加 30H

ADD A,#0AH ;原来减掉 0AH,再加回来

MOV R7,A ;保存高 4 位对应的

MOV A,B ;转换低 4 位

ANL A,#OFH

SUBB A,#0AH

JC L2

ADD A,#7

L2: ADD A,#30H

ADD A,#0AH

MOV R6,A ;保存低 4 位对应的 ASCⅡ码

END

【例 6】顺序检索:从片内 RAM 表中查找关键字,找到后

给出关键字在表中的序号,设表的首地址为 TABLE。

程序流程图见图 5-6 所示。

程序清单:

ORG 2000H

SCAN: MOV R0,#TABLE ;设置数据表指针

MOV R1,#LENGTH ;设置数据表长度

MOV R2,#00H ;设置序号初值

LOOP1:MOV A,#KAY ;取关键字

XRL A,@R0 ;与表中数据比较

INC R0 ;指针加 1

INC R2 ;序号加 1

JZ LOOP2 ;相等,转 LOOP2

DJNZ R1,LOOP1 ;检索完了吗?

MOV R2,#00H ;未找到,则 A 中装入 0

图 5-5 例 5 的程序

流程图

Page 106: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·97·

LOOP2:MOV A,R2

END

3.循环结构程序设计

循环程序是指一段反复执行的程序。在许多问题中,需

多次执行一段完全相同的程序,只是参加运算(或处理过程)

的操作数不同。这时就可以采用循环程序结构。循环程序可

以缩短程序,减少程序所占的内存空间。一般情况下,循环

程序包括下面几部分:

(1)循环体:需要多次执行的程序的主体。

(2)循环控制:对循环次数进行计数,判断循环结束的

条件。

(3)循环初值:包括循环次数、循环体中工作单元的初

值等。

循环程序的一般结构如图 5-7 所示。

在许多情况下,循环程序中还可能包含循环程序,这种

现象称为循环嵌套。具有循环嵌套的程序称为多重循环程序。

【例 7】延时程序是一种典型的循环程序。本例中,设

MCS-51 系列单片机系统的主频率为 12MHz,要求编写一个延

时 50 ms 的程序。

解:主频 f�=12MHz,则一个时钟周期:

60 6

0

1 1 1T s 10 s

f 12 10 12−= = = ×

×,

那么一个机器周期: 60

1T 12 T 12 10 1 s

12−= × = × × = µ 。

图 5-7 循环程序结构图

下面的程序段为两重循环,其延时时间为:

t=[(125×2+1+2)×200+1]×1μs=50601μs =50.601ms

图 5-6 例 6 的程序流程图

Page 107: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·98·

MOV R7,#200 ;指令执行时间为 1 个机器周期

DEL1: MOV R6,#125 ;指令执行时间为 1 个机器周期

DEL2: DJNZ R6,#DEL2 ;指令执行时间为两个机器周期

DJNZ R7,#DEL1 ;指令执行时间为两个机器周期

这里外循环初值为 R7=200,外循环体为第 2、3、

4 句,外循环结束条件为 R7=0;内循环初值为 R6=125,

内循环体为第 3 句,内循环结束条件为 R6=0。

【例 8】在外部 RAM BOLCK 开始的单元中有一无

符号数据块,数据块长度存入 LEN 单元。求出其中最

大数存入 MAX 单元。

解: 这是一个基本搜索问题。采用两两比较法,

取两者较大的数再与下一个数进行比较,若数据块长

度 LEN=n,则应比较 n-1 次,最后较大的数就是数据

块中的最大数。

为了方便地进行比较,我们使用 CY 标志来判断两

数的大小,使用 B 寄存器作比较与交换的暂存器,使

用 DPTR 作外部 RAM 的地址指针。

流程图如图 5-8 所示。

源程序清单:

参考程序: ORG 0400H

BLOCK DATA 0100H

;定义数据块首址

MAX DATA 31H

;定义最大数暂存单元

LEN DATA 30H

;定义长度计数单元

FMAX: MOV DPTR,#BLOCK

;数据块首址送 DPTR

DEC LEN ;长度减 1

MOVX A,@DPTR ;取数装入 A

LOOP: CLR C ;0→CY

MOV B,A

INC DPTR ;修改指针

MOVX A,@DPTR ;取数

SUBB A,B

JNC NEXT

MOV A,B ;大者送 A

SJMP NEXT1 ;置内循环次数初值

NEXT: ADD A,B ;(A)>(B),则恢复 A

图 5-8 例 8 的程序流程图

Page 108: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·99·

NEXT1: DJNZ LEN,LOOP ;未完继续比较

MOV MAX,A ;存最大数

SJMP $ ;若用 RET 指令结尾则该程序可作子程序调用

END

【例 9】在外部 RAM 中 BOLCK 开始的单元中有一无符号数据块,其长度存入 LEN 单元。

试将这些无符号数按递减次序重新排列,并存入原存储区。

START

F0=0?

(R6)-1=0?

((R0))>((R1))?

F0←1

交换两数

N

N N

Y Y

DPTR←#BLOCK

P2←DPH

R7←LEN-1

F0←#0

R0←DPL

R1←DPL+1

R6←(R7)

A←((R0))

TEM←(A)

A←((R1))

(R0)+1

(R1)+1

(R7)-1=0?

Y

Y

N

END

图 5-9 例 9 的参考流程图

解:处理这个问题要利用双重循环程序,在内循环中将相邻单元的数据进行比较,若

符合从大到小的次序则不动,否则两数交换,这样两两比较下去,比较 n-1 次所有的数都

比较与交换完毕,最小数沉底,在下一个内循环中将减少一次比较与交换。此时若从未交

换过,则说明这些数据本来就是按递减次序排列的,程序可结束。否则将进行下一个循环,

如此反复比较与交换,每次内循环的最小数都沉底(下一内循环将减少一次比较与交换),

而较大的数一个个冒上来,因此排序程序又叫作“冒泡程序”。

用 P2 口作数据地址指针的高字节地址;用 R0,R1 作相邻两单元的低字节地址;用 R7,

R6 作外循环与内循环计数器;用程序状态字 PSW 的 F0 作交换标志。

参考流程图如图 5-9 所示。

参考程序: ORG 1000H

Page 109: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·100·

BLOCK DATA 2200H

LEN DATA 51H

TEM DATA 50H

MOV DPTR,#BLOCK ;置数据块地址指针

MOV P2,DPH ;P2 作地址指针高字节

MOV R7,LEN ;置外循环次数初值

DEC R7 ;比较与交换 n-1 次

LOOP0: CLR F0 ;交换标志清零

MOV R0,DPL

MOV R1,DPL ;置相邻两数地址指针低字节

INC R1

MOV A,R7

MOV R6,A ;置内循环次数初值

LOOP1: MOVX A,@R0 ;取数

MOV TEM,A ;暂存

MOVX A,@R1 ;取下一个数

CJNE A,TEM,NEXT ;两相邻数比较,不等则转移

SJMP NOCHA ;相等不交换

NEXT: JC NOCHA ;CY=1,不交换

SETB F0 ;置位交换标志

MOVX @R0,A

XCH A,TEM

MOVX @R1,A ;两数交换,大者在上,小者在下

NOCHA: INC R0

INC R1 ;修改指针

DJNZ R6,LOOP1 ;内循环未完,则继续

JNB F0,HAL ;若从未交换,则结束

DJNZ R7,LOOP0 ;未完,继续

HAL: SJMP $

END

编写循环程序应注意的问题:

从上面介绍的几个例子不难看出,循环程序的结构大体上是相同的。要特别注意以下

几个问题:

① 在进入循环之前,应合理设置循环初始变量。

② 循环体只能执行有限次,如果无限执行的话,称之为“死循环”,这是应当避免的。

③ 不能破坏或修改循环体,要特别注意的是避免从循环体外直接跳转到循环体内。

④ 多重循环的嵌套,应当是以下两种形式:图 5-10(a)、图 5-10(b)图均正确,

应避免图 5-10(c)的情况。由此可见,多重循环是从外层向内层一层层进入,从内层向

外层一层层退出。不要在外层循环中用跳转指令直接转到内层循环体内。

Page 110: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·101·

⑤ 循环体内可以直接转到循环体外或外层循环中,实现一个循环由多个条件控制结

束的结构。

⑥ 对循环体的编程要仔细推敲,合理安排,对其进行优化时,应主要放在缩短执行

时间上,其次是程序的长度。

图 5-10 多重循环的嵌套

4.查表程序设计

单片机应用系统中,许多情况下某些转换关系毫

无规律,不能用函数表示,不能建立数学模型,有时

即使存在函数关系,也是非线性或十分复杂的,这时

如果将 y=f(x)的 y 值依据 x 用某种方法得到,可将

所有 y 值构成一个数据表,在程序中,根据给定 x,

查表得到对应 y 值,则进行计算或转换就简单得多。

所谓查表就是把用某种方式获得的结果数据编制

成数据表,存放于存储器的某个区域,在程序中用

MOVC A,@A+PC 或 MOVC A,@A+DPTR 指令从数据表

中取出需要的数据,这样一种类型的程序,称为查表

程序。

【例 10】代码转换是查表程序的典型应用之一。

本例要求将一位十六进制数转换成 ASCⅡ码。设被转

换的十六进制数在 R0 中,转换以后的 ASCⅡ码存放在

R1 中。

程序流程图见图 5-11 所示。

程序清单:设程序起始地址为 0000H。

ORG 0000H ;初始化:设置起始地址

LJMP MAIN

ORG 0060H ;设置主程序起始地址

MAIN: MOV A ,R0 ;取数据

ANL A,#OFH ;屏蔽高 4 位

MOV DPTR,#TAB ;设置数据表指针

MOVC A,@A+DPTR ;查表得到对应的 ASCⅡ码

MOV R1,A ;保存结果

图 5-11 例 10 的程序流程图

Page 111: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·102·

ORG 0100H

TAB:DB ‘123456789ABCDEF’ ;数据表

END

【例 11】设单片机 8031 系统中接有 8 个共阴极七

段数码管显示器,编程实现使它们轮流显示“0~F”这

16 个数字。已知 8031 的 P1.0~P1.7 分别接 8 个 LED 的

公共端,系统中扩展的并行接口芯片 8255A 的 PA 口接

LED 的数据输入端,8255A 的端口地址为 FFF0H-FFF3H。

解:根据 LED 数码管的工作原理,每个 LED 都是由

若干个发光二极管构成的。对于共阴极 LED,其公共端

为“0”时被选中(即可以显示数字或字母等),这时所

显示的内容取决于数据输入端的数据,这个数据决定

LED 内部哪些发光二极管亮,哪些发光二极管不亮,从

而形成字符。因此称 P1.0~P1.7 输出用于选中某一位

LED 的这一 8 位二进制编码为位选码,而称 8255A 的 PA

口输出的数据为段选码。0~F 对应的段选码列于程序的

数据表中。

这里用 R3 作为位选码寄存器,R2 作为 LED 个数计

数器,R0 作为显示数据寄存器。程序流程图见图 5-12

所示。

源程序清单:设程序起始地址为 4000H

ORG 4000H

;初始化:设置起始地址

LED:MOV DPTR,#0FFF3H

;8255A 初始化

MOV A,#80H

MOVX @DPTR,A

MOV DPTR,#TAB

;设置段码表首址指针

LED1:MOV R0,#0FFH

;设置显示数据初值

MOV R3,#01111111B

;设置位码初值

LED2:INC R0 ;显示数据加 1

LED3:RL R3 ;位码循环左移 1 位

MOV P1,R3 ;输出位码

MOV A,R0 ;查表求段码

MOVC A,@A+DPTR

PUSH DPH ;保护 DPTR

图 5-12 例 11 的程序流程图

Page 112: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·103·

PHSH DPL

MOV DPTR,#0FFF0H ;输出段码

MOVX @DPTR,A

POP DPL ;恢复 DPTR

POP DPH

ACALL DEL ;延时

MOV P1,#0FFH ;读 P1 口

MOV A,P1

JNB ACC.7,LED4 ;8 位 LED 是否显示完,完了转 LED4

SJMP LED3 ;未完转 LED3

LED4: CJNE R0,#0FH,LED2 ;显示数据=“F”吗?否,转 LED2

MOV P1,#0FFH ;是“F”,则 LED 全熄灭

ACALL DEL ;延时

LJMP LED1 ;重新开始

DEL: MOV R6,#0FFH ;延时子程序

DEL1: NOP

NOP

DJNZ R6,DEL1

RET

TAB: DB 3FH,06H,5BH,4FH,66H,6DH,6DH,7DH,07H,7FH

DB 6FH,77H,7CH,39H,5EH,79H,71H ;数据表

END

【例 12】从 200 个人的档案表格中,查找一个名叫张三(关键字)的人。若找到则记

录其地址存入 R3R2 中,否则,将 R3R2 清零。表格首址为 TABL。

解 由于这是一个无序表格,所以只能一个单元一个单元逐个搜索。

编程: ORG 2000H

ZHANG EQU 30H ;定义关键字,ZHANG=30H

FZHANG: MOV B,ZHANG ;关键字送 B

MOV R7,#200 ;查找次数

MOV DPTR,#TABL ;设置数据表首地址

MOV A,#16H ;变址修改量

LOOP: PUSH ACC ;暂存 A

MOVC A,@A+PC ;查表

CJNE A,B,NOF ;未找到,转 NOF (3 字节)

MOV R3,DPH ;(2 字节)

MOV R2,DPL ;找到了,记录地址(2 字节)

POP ACC ;(2 字节)

DONE: RET ;(1 字节)

NOF: POP ACC ;恢复 A(2 字节)

Page 113: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·104·

INC A ;求下一地址 (1 字节)

INC DPTR ;表地址加 1(1 字节)

DJNZ R7,LOOP ;未完继续 (2 字节)

MOV R3,#0 ;(2 字节)

MOV R2,#0 ;未找到 R3R2 清零 (2 字节)

AJMP DONE ;(2 字节)

TABL: DB ××,××,××

M

END

在这个程序中,查表使用短查指令 MOVC A,@A+PC,DPTR 并没有参与查表,而是用

来记录关键字的地址。如使用长查表指令 MOVC A,@A+DPTR,也可以实现上述功能。请

读者自己分析之。

5.散转程序设计

散转程序是一种并行多分支程序,它根据系统的某种输入或运算结果,分别转向各个

处理程序。与分支程序不同的是,散转程序多采用指令:JMP @A+DPTR,根据输入或运算

结果,确定 A 或 DPTR 的内容,直接跳转到相应的分支程序中去。而分支程序一般是采用条

件转移指令或比较转移指令实现程序的跳转。散转程序的基本结构如图 5-13 所示。

图 5-13 散转程序的流程图

在本节中,先给出一个散转程序的具体例子,然后再介绍几种常见的散转程序的实现

方法。

【例 13】单片机实现四则运算。

解:在单片机系统中设置+、-、×、÷四个运算命令键,它们的键号分别为 0、1、

2、3。当其中一个键按下时,进行相应的运算。操作数由 P1 口和 P3 口输入,结果再由 P1

口和 P3 口输出。具体如下:P1 口输入被加数、被减数、被乘数、被除数,输出结果的低 8

位或商;P3 口输入加数、减数、乘数、除数,输出进位(借位)、结果的高 8 位以及余数。

键号放在 A 中。

程序流程图如图 5-14 所示。

Page 114: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·105·

图 5-14 例 13 的程序流程图

程序为:

ORG 0000H

LJMP FOUR

ORG 0040H

FOUR: MOV P1,#0FFH

MOV P3,#0FFH

MOV DPTR,#TBJ4

RL A

JMP @A+DPTR

TBJ4: AJMP PRG0

AJMP PRG1

AJMP PRG2

AJMP PRG3

PRG0: MOV A,P1

ADD A,P3

MOV P1,A

CLR A

ADDC A,#00H ;进位位放入 A 中

MOV P3,A

RET

PRG1: MOV A,P1

CLR C

SUBB A,P3

MOV P1,A

CLR A

RLC A ;借位位放入 A 中

MOV P3,A

Page 115: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·106·

RET

PRG2: MOV A,P1

MOV B,P3

MUL AB

MOV P1,A

MOV P3,B

RET

PRG3: MOV A,P1

MOV B,P3

DIV AB

MOV P1,A

MOV P3,B

RET

这个例子中,由于 AJMP rel 只占两个字节,因此,键号需先乘 2,与 DPTR 中的内容

形成正确的目的地址。由于 A 中的内容乘 2 后不能大于 255,所以本例中最多可扩展到 128

个分支程序。另外,由于散转过程采用了 AJMP rel 指令,故分支程序必须设置在 2K 范围

的地址空间内。对于分支较多(大于 128 个)或分支程序较长的情况,本例就不适用了。

下面的例子可以使分支程序的数量大大增加,并且分支程序可以放在 64K 程序存储器的任

意位置。

【例 14】根据(R3R2)的内容转向不同的处理程序。

解:程序为:

JMPN: MOV DPTR,#TABN

MOV A,R3

MOV B,#3

MUL AB

ADD A,DPH

MOV A,R2

MOV B,#3

MUL AB

XCH A,B

ADD A,DPH

XCH A,B

JMP @A+DPTR

TABN: LJMP PRG0

LJMP PRG1

M

LJMP PRGN

下面的例子是利用查表的方法来实现程序散转的。

【例 15】根据 R2 的内容转向不同的处理程序。

Page 116: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·107·

解:程序为

JMPN: MOV A,R2

MOV DPTR,#TBJN

MOVC A,@A+DPTR

JMP @A+DPTR

TBJN: DB PRG0

DB PRG1

M

DB PRGN

PRG0:分支程序 0

PRG1:分支程序 1

M

PRGN:分支程序 N

这类程序中,地址表和所有的分支程序必须设在 256 个字节中。

【例 16】根据 R2 的内容转向不同的处理程序。

解:程序为

JMPN:MOV DPTR,#TABN ;设置表首地址

MOV A,R2

MOV B,#2

MUL AB

ADD A,DPL

MOV OPL,A

MOV A,B

ADDC A,DPH

MOV DPH,A

CLR A

MOVC A,@A+DPTR ;取 PRGi(i=0~N)

MOV R7,A

CLR A

INC DPTR

MOVC A,@A+DPTR

MOV DPH,A

MOV DPL,R7

CLR A

JMP @A+DPTR

TABN:DW PRG0

DW PRG1

�DW PRGN

Page 117: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·108·

该散转程序最多可以实现 256 个分支。

6.子程序设计

在实际应用中,有时一段相同功能的程序可能在多处用到,这时可将这段程序编写成

子程序,用到它的地方写一条子程序调用指令,即可插入该段程序的执行。编得好的子程

序可供不同的人在许多程序中调用,即具有通用性,这样的子程序越多,我们编程越方便,

有利于缩短应用系统的研制周期。通用的子程序要求有子程序文件,它包含的主要内容有:

子程序名,子程序功能,入口参数,出口参数。

子程序与主程序的接口是:在主程序中执行程序调用指令“LCALL 子程序名”或“ACALL

子程序名”,在子程序最后执行返回指令 RET。

子程序的执行过程:

保护断点(PC 值入栈,由调用指令自动完成);

保护现场(可放在主程序中,也可放在子程序中。若放在主程序中,则应安排在调用

指令之前);

传递参数(需要传递参数时,就有这一步骤,不需传递参数时就没有这一步骤);

具体处理(这是子程序的主体,即实现子程序功能的程序段);

返回参数(需要返回参数时,就有这一步骤,不需返回参数时就没有这一步骤);

恢复现场(若保护现场是在主程序中,则恢复现场也在主程序中,且安排在调用指令

之后。若保护现场是在子程序中,则恢复现场也应在子程序中);

恢复断点(PC 值出栈,由返回指令自动完成)。

【例 17】使 P1 口所接 8 个发光二极管循环点亮,每点亮一个发光二极管,调用一次

延时子程序。设主频 fosc=12MHz,延时时间为 20ms。

主程序框图见图 5-15 所示。

图 5-15 例 17 的主程序流程图

源程序清单:

ORG 0000H ;初始化:设置起始地址

Page 118: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·109·

AJMP START

ORG 0040H ;设置主程序地址

START: MOV A,#1 ;设置点亮二极管的数据初值

START1:MOV P1,A ;点亮一个二极管

ACALL DELAY ;延时 20ms

CJNE A,#80H,START2 ;8 个二极管是否点亮完,若未完,转 START2

AJMP START ;完了,重新开始

START2:RL A ;数据循环左移 1 位

AJMP START1

DELAY:PUSH R2 ;子程序,保护现场

PUSH R3

CLR PSW.4 ;指定工作寄存器区

CLR PSW.3

MOV R2,#100 ;外循环次数

DELAY1:MOV R3, #7 ;内循环次数

DJNZ R3,$ ;内循环

DJNZ R2,DELAY1 ;外循环

POP R3 ;恢复现场

POP R2

RET ;返回

END

子程序文件:

子程序名:DELAY

子程序功能:延时 20ms

入口参数:无

出口参数:无

子程序流程图见图 5-16 所示。

【例 18】设 8031 系统中某接口接有 4 个按

键,依次接在第 0 位到第 3 位,键号分别为 0,1,

2,3,如图 5-17 所示,该端口地址为 FFFFH。编

程实现:当按下 0 号键时,完成加法运算;当按

1 号键时,完成减法运算;当按 2 号键时,完成

乘法运算;当按 3 号键时,完成除法运算。加减

乘除运算的程序为一个子程序,见例 13。

图 5-16 例 17 的程序流程图

Page 119: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·110·

图 5-17 例 18 的硬件连接图

程序流程图见图 5-18 所示:

图 5-18 例 18 的程序流程图

Page 120: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·111·

源程序清单:

ORG 0000H ;初始化,设置起始地址

AJMP START

ORG 0060H ;设置主程序地址

START:MOV DPTR,#0FFFFH ;读端口数据

MOVX A,@DPTR

ANL A,#00001111B ;屏蔽低 4 位

JNB ACC.0,LL0 ;第 0 位=0,转 LL0

JNB ACC.1,LL1 ;第 1 位=0,转 LL1

JNB ACC.2,LL2 ;第 2 位=0,转 LL2

JNB ACC.3,LL3 ;第 3 位=0,转 LL3

AJMP START ;无键按下,转 START

LL0: MOV A,#0 ;键号 0 送 A

SJMP LL4

LL1: MOV A,#1 ;键号 1 送 A

SJMP LL4

LL2: MOV A,#2 ;键号 2 送 A

SJMP LL4

LL3: MOV A,#3 ;键号 3 送 A

LL4: LCALL FOUR ;调用运算子程序

SJMP START

FOUR: ⋯⋯ ;运算子程序

END

子程序文件:子程序名:FOUR

子程序功能:加、减、乘、除运算

入口参数:键号在 A 中

出口参数:无

【例 19】单字节开方子程序:根据等差数列求和公式

1+3+5+⋯+(2n-1)=n�=∑

=

+1

0

)12(n

i

i

1+3+5+⋯+(2n-1)+(2n+1)=(n+1)�=n�+(2n+1)

对于任一正整数 N,有 n�≤N<(n+1)�,即 0≤N-n�<2n+1,因而有 0≤N-∑

=

+1

0

)12(n

i

i

<2n+1,这样,从 N 中依次减去 2i+1(i=0,1, ⋯,n-1),直到不够减为止,那么,做

减法的次数 n 即为平方根的整数部分。

子程序名:SSQR;

子程序功能:求 N 的平方根的整数部分;

Page 121: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·112·

开 始

设 i 初值为 0

N-(2i+1)

(i+1)送 i 返 回

够减? N

Y

入口参数: 被开方数 N 在 R4 中;

出口参数:平方根的整数部分在 R2 中。

程序流程图见图 5-19 所示:

程序清单:

SSQR: MOV R2,#00H ;i 初值为 0

LP: MOV A,R2 ;求 2i+1

ADD A,R2

ADD A,#01H

MOV R6,A

MOV A,R4 ;N-(2i+1)

CLR C

SUBB A,R6

MOV R4,A

JC RETURN

INC R2 ;i+1

SJMP LP

RETURN:RET

图 5-19 例 19 的程序流程图�

习题与思考题

1. 编程将单字节十六进制数转换为 ASCII 码,设欲转换的十六进制数在工作寄存器

R�中,要求将转换结果存入工作寄存器 R�、R�中。

2. 试编程实现双字节无符号数相加。具体功能为 R�R�+R�R�→R�R�。

Page 122: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·113·

3. 设系统主频为 12MH,编程实现 2ms 的延时。

4. 编程求内部 RAM 30H~37H 单元中 8 个无符号数的算术平均值,并将结果存入 40H

单元。

5. 编写将单字节压缩型 BCD 码表示 2 位十进制数的转换为二进制数的程序。

6. 编程实现 ASCII 码转换为 BCD 码。

7. 编程求双字节带符号二进制数补码。

8. 编程实现双字节无符号数乘法运算。具体功能:(R�R�)×(R�R�)→(R�R�R�R�)9. 设变量 X、Y 分别在内部 RAM 41H、42H 单元,求下列函数值,并将结果存入 43H

单元。

1 , 若 x>0 1 , 若 x>20

(1)F= 0 , 若 x=0 (2) F= 0 , 若 10≤x≤20

- 1 , 若 x<0 -1 , 若 x

<10

x+y ; 若 x 为正奇数,y 为正偶数

x∧y ; 若 x 为正偶数,y 为正奇数

x∨y ; 若 x 为负奇数,y 为负偶数

(3) F= x*y ; 若 x 为负偶数,y 为负奇数

x ; 若 x=0,y>0

y ; 若 y=0,x<0

10. 编写统计数据区长度的程序,该数据区以数据 FFH 结束。

11. 编程将内部存储器 E0H 开始的 32 个单元数据倒序排列。

12. 用查表程序求 0~9 之间整数的立方。

13. 分析下列程序功能,并画出流程图。

(1) ORG 0040H

START: MOV DPTR,#TABLE

MOV A,60H

MOVC A,@A+DPTR

MOV 62H, A

END

(2) ORG 0000H

AJMP MAIN

ORG 0060H

MOV DPTR,#TABLE

MOV A,60H

Page 123: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·114·

MAIH: RL A

MOV 60H,A

MOVC A,@A+DPTR

MOVC 63H,A

INC DPTR

MOV A,60H

MOVC A,@A+DPTR

MOVC 62H,A

END

14. 编写有 6 个按键的散转程序,键号分别为 0、1、2、3、4、5,这 6 个键的名字分

别为 A、B、C、D、E、F,要求实现的功能为:若某键被按下,则将其名字对应的 ASCⅡ码

装入累加器 A 中。

15.试说明散转程序中跳转表里使用 SJMP 指令、AJMP 指令和 LJMP 指令时,JMP @A+DPTR

中 A 的内容分别如何计算。

16.图 5-20 中,8031P1 口接 8 个发光二极管,编程实现每隔 1S 点亮 1 个发光二极管,

并使它们循环地轮流被点亮。要求将 1S 延时编成子程序。设系统主频为 12MHz。

图 5-20

17.编写一个字节装载子程序。

子程序名:LOAD

子程序功能:将单片机内部 RAM 6 个单元的内容装载到工作寄存器;

入口参数:(R�)为低字节地址指针;

出口参数:(R�R�R�R�R�R�)为装入的 6 个单元内容。

18.编写一个多字节右移子程序。

子程序名:NRRC;

Page 124: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·115·

子程序功能:几字节数右移一位;

入口参数:(R�)为操作数高字节地址指针,(R�)为字节数;

出口参数:(R�)为操作数低字节地址指针。

19.8 输入与或非门 74LS55 的结构如图 5-21 所示,其逻辑功能表达式为

Y = ABCD + EFGH

设:A~H 分别接 P1.0~P1.7,Y 接 P3.0。试用位操作指令编写一个测试该芯片功能的

程序。

�����������������

A GNDNCNCDCB

YNCEFGHVcc

图 5-21 74LS55 结构图

20.试用单片机实现以下逻辑电路的功能。

图 5-22

21.试编写一段程序,完成下列逻辑运算。

0 1 2 3 4 4 5 6 6 7Y X X X X X X X X X X= ⋅ + ⋅ ⋅ + ⋅ ⋅ + ⋅

Page 125: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·116·

第六章 MCS-51 系列

单片机的扩展应用

本章介绍的 MCS-51 单片机的扩展应用包括内部并行接口、串行接口、中断系统、定时

器的原理和应用,还包括外部扩展并行接口,以及 A/D 转换器和 D/A 转换器在单片机系统

中的应用。

6.1 MCS-51 系列单片机并行接口

6.1.1 片内并行接口电路

MCS-51 单片机有 4 个并行端口,共 32 根 I/O 线。所有 4 个端口都是双向口,每口都

包含一个锁存器,即专用寄存器 P0~P3,一个输出驱动器和输入缓冲器。为了方便起见,

我们把 4 个端口和其中的锁存器(即专用寄存器)都笼统地表示为 P0~P3。

MCS-51 在访问外部存储器时,地址由 P0、P2 口送出,数据则通过 P0 口传送,这时,

P0 口是分时多路转换的双向总线。无外部存储器的系统中,所有 4 个端口都可以作为准双

向口使用。

图 6-1 给出了访问程序存储器时,程序取址所涉及到的信号和时序。如果程序存储器

是外部的,则程序存储器读选通 PSEN ,一般是每个机器周期两次有效,如图 6-1(a)所

示,如果是访问外部数据存储器,如图 6-1(b)所示,则要跳过两个 PSEN ,因为地址和

数据总线正在用于访问数据存储器。

应该注意的是,数据存储器总线周期为程序存储器总线周期的两倍,图 6-1 给出了端

口 0 和端口 2 所发送的地址 ALE 和 PSEN 的相对时序。ALE 用于将 P0 的低位地址字节锁存

到地址锁存器中。

1.P0 口

P0 口是 8 位双向三态输入/输出接口,如图 6-2(a)所示。P0 口既可作地址/数据总

线使用,又可作通用 I/O 口用。连接外部存储器时,P0 口一方面作为 8 位数据输入/输出

口,另一方面用来输出外部存储器的低 8 位地址。作输出口时,输出漏极开路,驱动 NMOS

Page 126: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·117·

电路时应外接上拉电阻;作输入口之前,应先向锁存器写全“1”,使输出的两个场效应管

均关断,引脚处于“浮空”状态,这样才能做到高阻输入,以保证输入数据的正确。正是

由于该端口用作 I/O 口,输入时应先写全“1”,故称为准双向口。当 P0 口作地址/数据总

线使用时,就不能再把它当通用 I/O 口使用。

S1 S2 S3 S4 S5 S6 S1 S2 S3 S4 S5 S6

一个机器周期 一个机器周期

ALE

PSEN

RD

PCHOUT PCHOUT PCHOUT PCHOUT PCHOUT PCHOUTP2�����������(A)

无M轔轛轝拗

PCL OUT有效

PCL OUT有效

PCL OUT有效

PCL OUT有效

PCL OUT有效

P0 ��������������������������������������������(a)

S1 S2 S3 S4 S5 S6 S1 S2 S3 S4 S5 S6

周期1 周期2

ALE

PSEN

RD

PCHOUT PCHOUT DPHOUT 或 �騊� PCHOUT PCHOUTP2 �������(B)

有一个M鯫鯲鯴鲋

PCL OUT有效

ADDR OUT有效

PCL OUT有效

PCL OUT有效

P0

OUT 输出 IN 输入

���������� ��������������������������(b)

图 6-1 MCS-51 单片机执行外部程序存储器中指令码时的总线周期

2.P1 口

P1 口是 8 位准双向口,作通用输入/输出口使用,如图 6-2(b)所示。在输出驱动器

Page 127: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·118·

部分,P1 口有别于 P0 口,它接有内部上拉电阻。P1 口的每一位可以独立地定义为输入或

者输出,因此,P1 口既可以作为 8 位并行输入/输出口,又可作为 8 位输入/输出端。CPU

既可以对 P1 口进行字节操作,又可以进行位操作。当作输入方式时,该位的锁存器必须预

写全“1”。

(a)P0 口位结构图 (b)P1 口位结构

(c)P2 口位结构图 (d)P3 口位结构

图 6-2 I/O 一位锁存器和缓冲器结构

3.P2 口

P2 口是 8 位准双向输入/输出接口,如图 6-2(c)所示。P2 口可作通用 I/O 口使用,

与 P1 口相同。当外接程序存储器时,P2 口给出地址的高 8 位,此时不能用作通用 I/O。当

外接数据存储器时,若 RAM 小于 256B,用 R0、R1 作间址寄存器,只需 P0 口送出地址低 8

位,P2 口可以用作通用 I/O 口;若 RAM 大于 256B,必须用 16 位寄存器 DPTR 作间址寄存器,

则 P2 口只能在一定限度内作一般 I/O 口使用。

4.P3 口

P3 口也是一个 8 位的准双向输入/输出接口,如图 6-2(d)所示。它具有多种功能。

一方面,与 P1 口一样作为一般准双向输入/输出接口,具有字节操作和位操作两种工作方

式;另一方面,8 条输入/输出线可以独立地作为串行输入/输出口和其他控制信号线(详

见 MCS-51 引脚功能部分)。

5.P0~P3 端口的负载能力及接口要求

P0 口的输出级与 P1~P3 口的输出级在结构上是不同的,因此它们的负载能力和接口

Page 128: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·119·

要求也各不相同。

P0 口的每一位输出可驱动 8 个 LS TTL 输入,但把它当通用口使用时,输出级是开漏

电路,故用它驱动 NMOS 输入时需外接上拉电阻;把它当地址/数据总线时,则无需接外部

上拉电阻。

P1~P3 口的输出级接有内部上拉电阻,它们的每一位输出可驱动 4 个 LS TTL 输入。

CHMOS 端口只能提供几毫安的输出电流,故作为输出口去驱动一个普通晶体管的基极

时,应在端口与晶体管基极间串联一个电阻,以限制高电平输出时的电流。

6.I/O 口的读—修改—写特性

由图 6-2 可见,每个 I/O 端口均有两种读入方法,即读锁存器和读引脚,并有相应的

指令,那么,如何区分读端口的指令是读锁存器还是读引脚呢?

读锁存器指令是从锁存器中读取数据,进行处理,并把处理以后的数据重新写入锁存

器中,这类指令称为“读—修改—写”指令。当目的操作数是一个 I/O 端口或 I/O 端口的

某一位时,这些指令是读锁存器而不是读引脚,即为“读—修改—写”指令,下面列出的

是一些“读—修改—写”指令。

ANL (逻辑与,例如 ANL P1,A)

ORL (逻辑或,例如 ORL P2,A)

XRL (逻辑异或,例如 XRL P3,A)

JBC (若位=1,则转移并清零,例如 JBC P1.1,LABEL)

CPL (取反位,例如 CPL P3.0)

INC (递增,例如 INC P2)

DEC (递减,例如 DEC P1)

DJNZ (若不等于 0 则转移,例如 DJNZ P3,LABEL)

MOV P1.7 ,C (进位位送到端口 P1 的位 7)

CLR P1.4 (清零端口 P1 的位 4)

SETB P1.2 (置位端口 P1 的位 2)

读引脚指令一般都是以 I/O 端口为原操作数的指令,执行读引脚指令时,打开三态门,

输入口状态。例如,读 P1 口的输入状态时,读引脚指令为:MOV A,P1。

读—修改—写指令指向锁存器而不是引脚,其理由是为了避免可能误解引脚上的电平。

例如,端口位可能用于驱动晶体管的基极,在写 1 至该位时,晶体管导通,若 CPU 随后在

引脚处而不是在锁存器处读端口位,则它将读回晶体管的基极电压,将其解释为逻辑 0。

读该锁存器而不是引脚将返回正确逻辑 1。

6.1.2 扩展外部并行接口

MCS-51 单片机本身具有较强的接口能力。对于 8051/8751 组成的系统,P0~P3 口均可

作 I/O 口使用,共有 32 根 I/O 口线。但对 8031 组成的系统实际上只有 P1 口 8 根 I/O 口线

和 P3 口部分口线可以作 I/O 口线使用,这在很多应用系统中往往是不够用的,需要进行

Page 129: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·120·

I/O 接口电路的扩展设计,以构成功能很强、规模较大的应用系统。

Intel 公司的 80/85 系列接口电路都可以直接与 MCS-51 接口。常用的接口器件为:

8255:可编程通用并行接口电路;

8253/8254:可编程定时计数器;

8155/8156:可编程 RAM/IO/TIMER 扩展芯片;

8251:可编程串行接口电路;

8279:可编程键盘显示接口电路;

另外,74 系列 LSTTL 电路或 CMOS 电路也可以作为 MCS-51 的扩展 I/O 接口,如 74LS373

和 74LS377 等。本章将重点介绍一些常用的接口电路及其扩展设计和应用的方法。

MCS-51 系列单片机片外扩展的并行接口,其端口与外部数据存储器统一编址,即占用

外部数据存贮空间。根据应用系统的需要,外部可以扩展简单接口,也可以扩展可编程并

行接口芯片。

1.简单并行接口的扩展

在一些控制系统中,如果其输入输出是一些简单的开关量,若采用一些可编程的专用

接口芯片往往价格比较高,可以采用 TTL 或 CMOS 电路的锁存器,如 74LS273、74LS373、

74LS377、74LS244 等。这些芯片结构简单,配置灵活方便,比较容易扩展,使系统降低了

成本缩小了体积。因而在单片机应用系统中经常被采用。

(1)用 74LS377 扩展 8 位输出端口

74LS377 为带有允许输出端的 8D 锁存器,有 8 个 D 输入端,8 个 Q 输出端,一个时钟

输入端 CLK,一个锁存允许信号 E 。当 E =0 时,CLK 端信号的上升沿,把 8D 输入端的数据

打入 8 位锁存器。利用 74LS377 这些特性,通过 8031 的 P0 口扩展一片 74LS377 锁存器作

输出口,该锁存器被视为 8031 的一个外部 RAM 单元。使用 MOVX @DPTR,A 类指令访问之,

输出控制信号为 WR ,接口逻辑如图 6-3 所示。 ������������������������������������������������ �������������������������� ��������������� � ��������

�������������������������������������������������������������������������������������������������������������������������� ����� ����������������������

图 6-3 8031 与 74LS377 接口逻辑

图 6-3 中 74LS377 的口地址为 7FFFH(即 P2.7=0),其输出操作程序如下:

MOV DPTR,#7FFFH ;指向 377 口地址

Page 130: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·121·

MOV A,#data ;取数

MOV @DPTR,A ;送 377 锁存器

(2)74LS373 扩展一个 8 位并行输入口

74LS373 为一个带三态门的 8D 锁存器,它可以作为 8031 外部的一个扩展输入口,接

口逻辑如图 6-4 所示。

外部设备向单片机传送数据时,产生一个选通信号 XT 连接到 373 的打入端 G 上,在选

通信号的下降沿将数据锁存,同时向单片机发中断请求。此时单片机响应中断。通过 P0

口在 373 锁存器中读取数据。

74LS373 的输出由 P2.7 和 RD 相“或”控制。373 的口地址为 7FFFH(即 P2.7 为“0”)。

若 8031 将输入的数据送入内部 RAM 中首地址为 30H 的数据区,则中断初始化程序和中断服

务程序如下:

D0 3Q02

D14

Q15

D27

Q26

D3 8Q39

D413

Q412

D514

Q515

D6 17Q616

D7 18Q719

E1

G11

U2

74LS373

1

23

U3A

74LS32

D0D1D2D3D4D5D6D7

XT

EA/VP31

X119

X218

RESET9

RD17

WR16

INT012INT1

13

T014T1

15

P101

P112

P123

P134

P145

P156

P167

P178

P00 39

P0138

P0237

P03 36

P0435

P0534

P06 33

P07 32

P2021

P21 22

P2223

P2324

P24 25

P25 26

P2627

P2728

PSEN29

ALE/P30

TXD11

RXD10

U1

8031AH

图 6-4 8031 与 74LS373 接口逻辑

ORG 0

LJMP BEGIN

ORG 03H ;入口地址

LJMP PINT0

;初始化

BEGIN: SETB IT0 ;下降沿触发

MOV R0,#30H ;数据缓冲首址

SETB EX0 ;开中断

SETB EA ;CPU 开中断

;中断服务程序

PINT0: MOV DPTR,#7FFFH ;指向 373 输入口

Page 131: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·122·

MOVX A,@DPTR ;读入

MOV @R0,A ;送数据缓冲区

INC R0 ;修改 R0 指针

RETI ;返回

(3)用 74LS273 和 74LS244 扩展输入/输出口

如图 6-5 所示,74LS273 作 8 位并行输出接口,74LS244 作 8 位并行输入接口。74LS244

是一个三态输出八缓冲器及总线驱动器,其负载能力强,可直接驱动小于 130Ω的负载。

① 8 位并行输出口 74LS273,由 P2.7 和 WR 相“或”控制,地址为 7FFFH。当 P2.7=0

时,执行 MOVX @DPTR,A 类指令可产生 CLK 信号,将数据写入 74LS273。

MOV DPTR,#7FFFH ;指向 273 输出口

MOV A,#DATA ;取数

MOVX @DPTR,A ;输出数据

② 8 位并行输入口 74LS244,由 P2.6 和 WR 相“或”控制,地址为 0BFFFH。当 P2.6=0

时,执行 MOVX A,@DPTR 类指令可产生 1 G 和 2 G 信号,将数据读入单片机。

MOV DPTR,#0BFFFH ;指向 244 输入口

MOVX A,@DPTR, ;输入数据

③ 如果将图中 U4A 的第一脚接在 P2.7 上,则 8 位并行输出口 74LS273 和 8 位并行输

入口 74LS244 共用一个逻辑地址,即 7FFFH。这时,若要求将输入口 74LS244 输入的数据

送输出口 74LS273,执行下面的程序即可完成:

MOV DPTR,#7FFFH

MOVX A,@DPTR

MOVX @DPTR,A

��������������� ����������������������������������������������������������������������������������������������������������������������� ����������������������������������� ���������� ������������������������������������������������������������������� ������������������������������������������������������ ����������� ��������������������������������

图 6-5 输入接口和输出接口同时扩展逻辑图

2.可编程并行接口的扩展

(1)可编程并行接口芯片 8255A 的扩展及应用

1)主要特性

Page 132: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·123·

Intel 8255A 最初是为 Intel8080 和 8085 微机系统设计的通用可编程并行接口芯片。

由于其通用的性能也被广泛应用于其它微机系统之中。

8255A 采用双列直接式封装,单一的+5V 电源,全部输入输出与 TTL 电平兼容,3 个 8

位并行 I/O 端口,可编程工作在不同方式。因此,8255A 连接外部设备时,通常不需要附

加其他电路,使用方便灵活。

2)内部结构

8255A 的内部由三个端口寄存器(A 口、B 口、C 口)、两组控制电路、一个数据总线缓

冲器、一个读/写控制逻辑电路几部分组成。其内部结构框图如图 6-6 所示,各部分功能分

述如下。

① 三个输入/输出端口

各端口均可分别设定为输入口或输出口,但也有各自的功能特点。端口 A 为 8 位双向

输入/输出口,它含有一个 8 位数据输入锁存器和一个 8 位输出锁存/缓冲器,即输入/输出

均有锁存功能。可编程工作在方式 0、1、2;端口 B 为 8 位双向输入/输出口,它也含有一

个 8 位数据输入锁存器和一个 8 位数据输出锁存/缓冲器,即输入/输出均有锁存功能。可

编程工作在方式 0、1;端口 C 为两组 4 位双向输入/输出口,它含有一个 8 位数据输入缓

冲器和一个 8 位数据输出锁存/缓冲器,即输出锁存,输入不锁存。可编程工作在方式 0

和按位置位/复位方式。另外,当端口 A、B 工作在方式 1 和端口 A 工作在方式 2 时,C 口

作为联络信号使用,故将端口 C 分为上 C 口(C�~C�)和下 C 口(C�~C�),分别由 A、B 口

两组控制电路控制。

���������� ���������������������������������������� �!"!#�"

���� $�%&$��$�%&$�'$�(&$��$�%&$��图 6-6 8255A 内部结构框图

② 两组控制电路

A、B 两组控制电路分别实现对 A 组 I/O 端口线(A�~A��和 C�~C�)和 B 组 I/O 端口线

(B�~B�和 C�~C�)的输入/输出控制。

③ 数据总线缓冲器

数据总线缓冲器为双向三态 8 位缓冲器,它是 8255A 与微机数据总线的接口。其上传

输的信息有输入数据、输出数据、CPU 写给 8255A 的控制字及 CPU 从 8255A 读入的状态信

息。

Page 133: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·124·

④ 读/写控制电路

读/写控制逻辑负责管理 8255A 的数据传输过程。它接受片选信号CS 、地址信息 A�、A�和控制信号 RESET,RD ,WR ,将这些信号组合后实现对 A 组部件和B组部件的控制。

3)引脚功能

8255A 是一个 40 引脚、双列直插的集成芯片,其引脚见图 6-7。引脚功能如下。

8255

PA0PA1PA2PA3 PA4

PA5PA6PA7

PB0PB1PB2 PB3

PB4PB5PB6PB7

PC0PC1PC2PC3

PC4PC5PC6PC7

D0D1D2D3D4D5D6D7VCC

RESETWRRD

CSGND

A1A0

1234567891011121314151617181920 21

22232425262728293031323334353637383940

图 6-7 8255A 引脚框图

① 数据线

D�~D�:双向三态。用于传送 CPU 从 8255A 各端口读入的数据、CPU 向 8255A 各端口写

出的数据、CPU 从 8255A 读入的状态和 CPU 向 8255A 写出的控制字。

② 地址线

A�、A��:输入。用于寻址 8255A 内部各端口,A�、A��的不同状态和各端口的对应关系

如下:

A�A��对应端口

0 0 A 口

0 1 B 口

1 0 C 口

1 1 控制口

③ 控制线

·片选信号CS :输入。来自片外译码电路,用于选中 8255A 芯片,低电平有效,即

当 CS =“0”时,8255A 才处于工作状态,这时 RD 、 WR 才对 8255A 有效。

·读信号 RD :输入。连接来自单片机读信号 RD ,用于控制 8255A 读操作,低电平

有效,即当 RD =“0”时,CPU 从 8255A 读入数据或状态信息。

·写信号 WR :输入。来自单片机写信号 WR ,用于控制 8255A 写操作,低电平有效,

即当 WR =“0”时,CPU 向 8255A 写出数据或控制字。

·复位信号 RESET:输入。连接单片机的复位引脚 RST,用于使 8255A 复位,高电平有

效,即当 RST 引脚上来一上升沿,且使其高电平维持一定时间时,8255A 所有内部寄存器

被清零,同时,3 个数据端口被自动设置为输入端口。

④ I/O 端口线

8255A

Page 134: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·125·

A�~A�:双向。端口 A 数据信号线。B�~B�:双向。端口 B 数据信号线。C�~C�:双向。

端口 C 数据信号线。�⑤ 电源与地线

Vcc:工作电压,+5V。GND:接地端。

4)控制字

在使用 Intel 8255A 时,首先应根据需要对它进行初始化编程,在工作过程中若需改

变工作方式或数据传送方向等,也必须对其编程。实际上对 8255A 的编程十分简单,就是

通过 CPU 向其控制端口写入相应控制字来实现。8255A 的控制字只有两个。

① 工作方式选择控制字

作用:规定 8255A 各 I/O 端口的工作方式和数据传输方向。

格式:工作方式选择控制字的格式如图 6-8 所示。

关于 8255A 的工作方式选择控制字,作如下说明:

·8255A 有三种基本工作方式:

方式 0——基本输入/输出方式。端口 A、B、C 都可工作在此方式。

方式 1——选通输入/输出方式,端口 A、B 可以工作在此方式。端口 C 作联络信号。

方式 2——双向输入/输出方式,只有端口 A 可以工作在此种方式,端口 C 作为它的联

络信号。

·属于同一组的两个端口可以分别工作在输入或输出方式,不要求同为输入方式或同

为输出方式。

·D��为标志位,必须为 1,用来与 C 口位置/复位控制字区别。

1 D0D1D2D3D4D5D6

PC3-PC0:1-输入0-输出

端口B冢��菏

0-输出

B组方式选择0�穹绞1-方式1

PC7-PC4:1-输入0-输出

方式选择控制字的标识位

A组方式选择00-方式001-方式11X-方式2

端口A冢��菏0-输出

图 6-8 8255A 工作方式选择控制字的格式

② 端口 C 位置/复位控制字

8255A 端口 C 的各位常作为控制位来使用,故该芯片的设计者使得端口 C 各位可以按

位操作,即用置 1/置 0 控制字单独设置。

作用:将端口 C 某位置 1 或清零。

格式:将端口 C 置位/复位控制字格式如图 6-9 所示。

Page 135: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·126·

1=置10=置0

0

000

0 0 00

000 0

0

1 2 3 4 5 6 71 1 1

1 11 1 1 1

11

1B0B1B2

x x x

无关

C 端口置1�弥�帽晔斗��ξ

D7 D0D1D2D3D4D5D6

图 6-9 端口 C 置位/复位控制字格式

关于端口 C 置位/复位控制字,作如下说明:

·D��位决定了是置 1(也称置位)操作还是清零(也称复位)操作。如为 1,则使端

口 C 中的某一位为高电平(即置 1);若为 0,则使端口 C 中的某一位为低电平(即清零)。

·D�、D�、D��三位的状态决定了是对端口 C 的哪一位进行置位/复位操作。例如

D�D�D��=001,则是对 C�进行操作。

·D�、D、D�三位为无关位,它们的状态不影响对端口 C 的置位/复位操作。

·D��为标志位,必须为 0,用来与工作方式控制字区别。

5)8255A 的初始化编程

8255A 的两个控制字都通过 CPU 的输出指令写入控制端口。用标志位来识别是工作方

式选择控制字,还是端口 C 置位/复位控制字。通常放在程序中某个适当的位置。

【例 1】如图 6-10 所示,在 8031 系统中,8255A 的 A 口用于驱动 8 个发光二极管 L�~L���,B�接一开关 K。要求根据读入的开关状态使 L�~�L��按不同规律发光,8255A 的端口

地址分别为:218H、219H、21AH、21BH。 �����������������������B0

A0

A1

A2

A3

A4

A5

A6

A7D7-D0

RESET

RD

WR

A1

A0

RESET

RD

WR

A1

A0

CS

218H-21BH

8255A

8031

系统

��

图 6-10 例 1 的硬件连接图

按题目要求可知:A 口应工作在方式 0,输出;B 口应工作在方式 0,输入。而当A口、

Page 136: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·127·

B 口都工作在方式 0 时与 C 口无关,则工作方式控制字可以是:1000×01×B。其中“×”

表示可为 1,也可为 0。

由此可见,这种情况下方式控制字不唯一,具体有四种情况:82H、83H、8AH、8BH。

若我们选择方式控制字为 82H,则初始化程序段如下:

MOV DPTR,#21BH ;DPTR 指向 8255A 控制端口

MOV A,#82H ;工作方式控制字 82H 送 A

MOVX @DPTR,A ;将工作方式控制字写入 8255A 控制端口

6)工作方式

前已述及,8255A 有 3 种工作方式:方式 0、方式 1 和方式 2。下面分别介绍这 3 种工

作方式的具体含义。

① 方式 0

·方式 0 的工作特点

方式 0 称为输入/输出方式。在这种方式下,端口 A 和端口B可以通过方式选择控制字

规定为输入口或者输出口,端口 C 分为两个 4 位端口,高 4 位为一个端口,低 4 位为一个

端口。这两个 4 位端口也可由方式选择控制字规定为输入口或输出口。

概括地说,方式0的基本特点如下:

任何一个端口可作为输入口,也可作为输出口,各端口之间没有必然的联系。

各个端口的输入或输出,可以有 16 种不同的组合,所以可以适用于多种使用场合。

·方式 0 的输入/输出时序

为了了解一个端口工作在方式 0 时的含义,下面,我们来分析一下方式 0 的时序关系。

在分析时序时,应该着重注意两个方面:一是要弄清每个信号的发出者和承受者;二

是要弄明白各个信号之间的先后因果关系。

图 6-11 是方式 0 的输入时序和各参数说明。

方式 0 的输入时序比较简单。CPU 为了从 8255A 读取数据,在方式 0 下,首先要满足

两个条件:一是要求 CPU 在发出读信号前,先发出地址信号,从而使 8255A 的片选信号CS

和端口选择信号 A��、A�有效,于是,8255A 得到启动。二是要求 CPU 在发出读信号前,外

设已经将数据送到 8255A 的输入缓冲器中,即输入数据要领先于读信号。CPU 在发出地址

信号以后,至少经过 t��时间,便发出读信号 RD 。8255A 在读信号有效以后,经过 t��时间,

就可以使数据在数据总线上得到稳定。

图 6-12 是方式 0 的输出时序和各参数说明。

方式 0 的输出时序也比较简单。为了将数据有效地输出到 8255A,对各信号有如下要

求:

第一,地址信号必须在写信号前 t��时间就有效,从而使片选信号CS 和端口选择信号

A�、A�有效。并且要求地址信号一直保持到写写好撤除以后再过 t��时间才消失。

第二,写脉冲宽度至少要有 400ns。

第三,数据必须在写信号结束前 t��时间就能出现在数据总线上,且保持 t��时间。这

样,在写信号结束后最多 t��时间,CPU 输出的数据就可以出现在 8255A 的指定端口,从而

可以送到外部设备。

Page 137: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·128·

t��t��t��

t��t��t��t��

RD

输入数据 输入数据

CS A1 A0

D7-D0 数据有效

8255A参数 说 明

最小时间 最大时间

t��读脉冲的宽度 300ns

t��地址稳定领先于读信号的时间 0

t��输入数据领先于 RD 的时间 0

t���读信号过后数据继续保持时间 0

t��读信号无效后地址保持时间 0

t��从读信号有效到数据稳定的时间 250ns

t��读信号撤除后数据保持时间 10ns 150ns

t��两次读操作之间的时间间隔 850ns

图 6-11 8255A 方式 0 的输入时序t��

t��t��t��t��

t��数据有效

数据有效输出数据

CS A1 A0

D7-D0

WR

8255A参数 说 明

最小时间 最大时间

t��地址稳定领先于读信号的时间 0

t��写脉冲的宽度 400ns

t��数据有效时间 100ns

t��数据保持时间 30ns

t��写信号撤除后的地址保持时间 20ns

t�写信号结束到数据有效的时间 350ns

图 6-12 8255A 方式 0 的输出时序

Page 138: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·129·

·方式 0 的使用场合

方式 0 的使用场合有两种,一种是同步传送,另一种是查询式传送。

在同步传送时,发送方和接受方的动作由一个时序信号来管理,所以,双方互相知道

对方的动作,不需要应答信号,也就是说,CPU 不需要查询外设的状态。这种情况下,对

接口的要求很简单,只要能传送数据就行了。因此,在同步传输下使用 8255A 时,3 个数

据端口可以实现 3 路数据传输。

查询方式传输时,需要有应答信号。但是,在方式 0 的情况下,没有规定固定的应答

信号,所以,这时,若将端口 A 和端口 B 作为数据端口,可把端口 C 的 4 个数位(高 4 位

或低 4 位均可)规定为输出口,用来输出一些控制信号,而把端口 C 的另外 4 个数位规定

为输入口,用来读入外设的状态。这样就可以利用端口 C 来配合端口 A 和端口 B 的输入/

输出操作。

② 方式 1

·方式 1 的工作特点

方式 1 也叫选通的输入/输出方式。和方式 0 相比,最重要的差别是 A 端口和 B 端口用

方式 1 进行输入/输出传输时,要利用端口 C 提供的选通信号和应答信号,而这些信号与端

口 C 中的数位之间有着固定的对应关系,这种关系不是程序可以改变的,除非改变工作方

式。

概括地讲,方式 1 有如下特点:

端口 A 和端口 B 可分别作为两个数据口工作在方式 1,并且,任何一个端口可作为输

入口或者输出口。

如果 8255A 的端口 A 和端口 B 中只有一个端口工作于方式 1,那么,端口 C 中就有 3

位被规定为配合方式 1 工作的信号,此时,另一个端口可以工作在方式 0,端口 C 中的其

他数位也可以工作在方式 0,即作为输入或者输出。

如果 8255A 的端口 A 和端口 B 都工作在方式 1,那么,端口 C 中就有 6 位被规定为配

合方式 1 工作的信号,剩下的两位,仍可作为输入或输出。

·方式 1 输入情况下有关信号的规定和输入时序

当端口 A 工作在方式 1 并作为输入端口时,端口 C 的数据位 PC�作为选通信号输入端

STB�,PC�作为输入缓冲器满信号输出端 IBF��,PC�则作为中断请求信号输出端 INTR�。当端口 B 工作在方式 1 并作为输入端口时,端口 C 的数据位 PC�作为选通信号输入端

STB�,PC�作为输入缓冲器满信号输出端 IBF��,PC则作为中断请求信号输出端 INTR�。这些数位和信号之间的对应关系是在对端口设定工作方式时自动确定的,不需要程序

员干预,而且,一旦确定了某个端口工作于方式 1,程序员也就无法改变端口 C 的数位与

信号之间的对应关系,除非重新设置方式选择控制字。

当 8255A 的端口 A 和端口 B 都工作在方式 1 的输入情况时,端口 C 的 PC~PC�共 6 个

数位都被定义,只剩下 PC、PC�这 2 位还未用。此时,方式选择控制字的 D�位用来定义 PC和 PC�的数据传输方向。当 D�为 1 时,PC和 PC�这 2 位作为输入引脚来用;当 D�为 0 时,

PC和 PC�作为输出引脚来用。图 6-13 是端口 A 和端口 B 工作在方式 1 情况下作为输入端

口时,各控制信号的示意图,图中还给出了应该设置的方式选择控制字。

Page 139: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·130·

01 1 1 1/0

PC6,PC71=输入0=输出

端口A谖�淙

方式1

1 1 1

端口B谖�淙方式1

1 1 1 1 10 1/0

PC6,PC71=输入0=输出

INTEA

PC4

PC5

PC3

PC7PC6�I/O

INTRa

IBFa

STBa

PA7-PA0

RD

INTEB PC2

PC1

PC0 INTRb

IBFbSTBb

RD

D0D1D2D3D4D5D6D7

A组工作于方式1绞淙氲目刂谱

B组工作于方式1绞淙氲目刂谱

A组和B妥槎脊ぷ饔诜绞�绞淙氲目刂谱

D0D1D2D3D4D5D6D7

D0D1D2D3D4D5D6D7

图 6-13 8255A 方式 1 输入对应的控制信号

对于各控制信号,说明如下:

STB(Strobe):这是选通信号输入端,低电平有效。它是由外设送往 8255A 的,当STB有效时,8255A 接受外设送来的一个 8 位数据,从而 8255A 的输入缓冲器中得到一个新的

数据。

IBF(Input Buffer Full):这叫缓冲器满信号,高电平有效。它是 8255A 输出的状态

信号,当它有效时,表示当前已有一个新的数据在输入缓冲器中,此信号一般供 CPU 查询

用。IBF 信号是由STB 信号使其置位的,而由读信号 RD 的后沿即上升沿使其复位。

INTR(Interrupt Request):它是 8255A 送往 CPU 的中断请求信号,高电平有效。INTR

端在STB 、IBF 均为高时被置为高电平,也就是说,当选通信号结束、从而已将一个数据

送进输入缓冲器中,并且输入缓冲器满信号已为高电平时,8255A 会向 CPU 发出中断请求

信号,即将 INTR 端置为高电平。在 CPU 响应中断读取输入缓冲器中的数据时,由读信号 RD的下沿将 INTR 降为低电平。

INTE(Interrupt Enable):这叫中断允许信号,实际上,它就是控制中断允许或中断

屏蔽的信号。INTE 没有外部引出端,它是由软件通过对 C 端口的置 1 指令或置 0 指令来实

现对中断的控制的。具体地讲,对 PC�置 1,则使 A 端口处于中断允许状态;对 PC�置 0,

则使 B 端口处于中断屏蔽状态。当然,如果要使用中断功能,应该用指令置位相应的 INTE,

使端口处于中断允许状态。图 6-14 为方式 1 的输入时序。

从方式 1 的输入时序图中可以看到,当来自外设的输入数据出现之后,选通信号接着

就来到,选通信号的宽度至少要求为 500ns。经过 t� �时间后,输入缓冲器满信号 IBF 有效

(①),此信号可供 CPU 查询,这为 CPU 工作在查询方式下输入数据提供了条件。8255A 在

选通信号结束以后,经过 t� �时间,便发出中断请求信号 INTR(②),这样,为 CPU 工作在

中断方式下输入数据提供了条件。

Page 140: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·131·

��������������������������� ��������������������

8255A参数 说明

最小时间 最大时间

t�选通脉冲的宽度 500ns

t�选通脉冲有效到 IBF 有效之间的时间 300ns

t��STB=1 到中断请求 INTR 有效时间之间的时间 300ns

t��数据保持时间 180ns

t�数据有效到STB无效之间的时间 0

t���RD 有效到中断请求信号撤除之间的时间 400ns

t��RD 为 1 到 IBF 为 0 之间的时间 300ns

图 6-14 8255A 方式 1 输入时序

不管 CPU 是用查询方式还是中断方式,每当从 8255A 读入数据时,都会发出读信号 RD 。

如果工作在中断方式,那么,当读信号 RD 有效以后,经过 t� �时间,就将中断请求信

号清除(③)。 RD 信号结束之后,数据已经读到 CPU 的寄存器中,经过 t� �时间,输入缓

冲器满信号 IBF 变低(④),从而可以开始下一个数据输入过程。

·方式 1 输出情况下有关信号的规定和输出时序

当端口 A 工作在方式 1 并作为输出端口时,端口 C 的数位 PC7 作为输出缓冲器满信号

OBF A 输出端,PC6 作为外设接收数据后的响应信号 ACK A 输入端,PC3 则作为中断请求信号

INTRA 输出端。

当端口 B 工作在方式 1 并作为输出端口时,端口 C 的数位 PC1 作为输出缓冲器满信号

OBF B 输出端,PC2 作为外设接收数据后的响应信号 ACK B 输入端,PC0 则作为中断请求信号

INTRB 输出端。

和作为输入端口时的情况一样,端口A、端口B和这些信号之间的对应关系是在对8255A

设定工作在方式 1 时自动确定的,不需要程序员干预。

当端口 A 和端口 B 都工作在方式 1 输出情况时,端口 C 中共有 6 个数位被定义为控制

信号端和状态信号端使用,仅剩下 PC4、PC5 这两位未用。此时,方式选择控制字的 D3 位用

来定义 PC4、PC5 的传输方向。当 D3=1 时,PC4、PC5 作为输入引脚使用,当 D3=0 时,PC4、

PC5 作为输出引脚使用。

图 6-15 是端口 A 和端口 B 工作在方式 1 情况下作为输出端口时应该设置的方式选择字

Page 141: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·132·

和各控制信号、状态信号的示意图。

01 1 1 1/0

PC4,PC51=输入0=输出

端口A谖�涑

方式1

INTEA PC6

PC7

PC3

PC5PC4 I/O

INTRa

OBFaACKa

PA7-PA0

WR

INTEB PC2

PC1

PC0 INTRb

OBFbACKb

WR

PB7-PB0

1 1 0

端口B谖�淙方式1

D0D1D2D3D4D5D6D7 D0D1D2D3D4D5D6D7

图 6-15 8255A 方式 1 输出对应的控制信号

对于方式 1 时输出端口对应的控制信号和状态信号,我们作如下说明:

OBF (Output Buffer Full):这是输出缓冲器满信号,低电平有效。OBF 由 8255A

送给外设,当 OBF 有效时,表示 CPU 已经向指定的端口输出了数据,所以OBF 是 8255A

用来通知外设取走数据的信号。OBF 由写信号 WR 的上升沿置成有效电平即低电平,而由

ACK 的有效信号使它恢复为高电平。

ACK (Acknowledge):这叫外设响应信号,它是由外设送给 8255A 的,低电平有效。

当 ACK 有效时,表明 CPU 通过 8255A 输出的数据已送到外设。

INTR(Interrupt Request):中断请求信号,高电平有效。当输出设备从 8255A 端口

中提取数据,从而发出 ACK 信号后,8255A 便向 CPU 发新的中断请求信号,以便 CPU 再次

输出数据,所以,当 ACK 变为高电平,并且 OBF 也变为高电平时,INTR 便成为高电平即

有效电平,而当写信号WR 的下降沿来到时,INTR 变为低电平复位。

INTE(Interrupt Enable):中断允许信号。与端口 A、端口 B 工作在方式 1 输入情况

时 INTE 的含义一样,INTE 为 1 时,使端口处于中断允许状态,而 INTE 为 0 时,使端口处

于中断屏蔽状态。在使用时,INTE 也是由软件来设置的,具体地说,PC6 为 1,则使端口 A

的 INTE 为 1,PC6 为 0,则使端口 A 的 INTE 为 0。PC2 为 1,使端口 B 的 INTE 为 1,PC2 为 0,

则使端口 B 的 INTE 为 0。

图 6-16 是方式 1 的输出时序。

工作在方式 1 的输出端口一般采用中断方式与 CPU 相联系。从方式 1 的输出时序图中,

我们可以看到,CPU 响应中断后,便往 8255A 输出数据,发出写信号 WR 。写信号 WR 的

上升沿一方面清除中断请求信号 INTR(①),表明 CPU 已经响应了中断;另一方面,使OBF

Page 142: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·133·

有效(②),通知外设接收数据。

实际上,在 CPU 发出写信号后经过 t��时间,数据就出现在端口的输出缓冲器中。当外

设接收数据后,便发出一个 ACK 信号。ACK 信号一方面使 OBF 无效,表示数据已经取走,

当前输出缓冲器为空;另一方面,又使 INTR 有效(④),即向 CPU 发出中断请求表示可以

开始一个新的输出过程。���t���

t���t���

t��t���

t��②

③④

图 6-16 8255A 方式 1 输出时序

·方式 1 的使用场合

在方式 1 下,规定一个端口作为输入口或者输出口的同时,自动规定了有关的控制信

号和状态信号,尤其是规定了相应的中断请求信号。这样,在许多采用中断方式进行输入/

输出的场合,如果外部设备能为 8255A 提供选通信号或者数据接受应答信号。那么,常常

使 8255A 的端口工作于方式 1。用方式 1 工作比用方式 0 更加方便有效。

③ 方式 2

·方式 2 的工作特点

方式 2 也叫双向传输方式,这种方式只适用于端口 A。在方式 2 下,外设可以在 8 位

数据线上,既往 CPU 发送数据,又从 CPU 接收数据。此外,和工作方式 1 情况类似,端口

C 在端口 A 在工作方式 2 时自动提供相应的控制信号和状态信号。

概括起来,方式 2 有如下特点:

方式 2 只适用于端口 A。

端口 A 工作于方式 2 时,端口 C 用 5 个数位自动配合端口 A 提供控制信号和状态信号。

·方式 2 工作时的控制信号和状态信号

参数 说 明 最小时间 最大时间

t���从写信号有效到中断请求无效的时间 850ns

t���从写信号无效到输出缓冲器满的时间 650ns

t���ACK有效到 OBF 无效的时间 350ns

t��ACK脉冲的宽度 300ns

t���ACK为 1 到发新的中断请求的时间 350ns

t��写信号撤除到数据有效的时间 350ns

Page 143: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·134·

当端口 A 工作于方式 2 时,端口 C 中的 PC�~PC�共 5 个数位分别作为控制信号和状态

信号端。具体对应关系如图 6-17 所示。

1

PC2-PC0

1

1=输入0=输出

B组方式0=方式01=方式1

端口B1=输入0=输出

端口A诜绞

PC4

PC5

INTE1

INTE2

PC7

PC6

PC3

PC2-PC0

WR

RD

PA7-PA0

INTRa

OBFa

IBFa

ACKa

STBa

I/O

D0D1D2D3D4D5D6D7

图 6-17 8255A 方式 2 的控制信号

图 6-17 中给出了 8255A 的端口 A 工作于方式 2 时的各信号和方式选择控制字格式。各

控制信号和状态信号的含义如下:

INTR�(Interrupt Request):中断请求信号,高电平有效。不管是输入动作还是输出

动作,当一个动作完成要进入下一个动作时,8255A 都通过这一引腿向 CPU 发出中断请求

信号。

ASTB (Strobe):这是外设提供给 8255A 的选通信号,低电平有效。此信号将外设送

到 8255A 的数据打入输入锁存器。

IBF�(Input Butter Full):这是 8255A 送往 CPU 的状态信息,表示当前已有一个新

的数据送到输入缓冲器中,等待 CPU 取走。IBF�可以作为供 CPU 查询的信号。

AOBF (Output Buffer Full):这是输出缓冲器满信号,实际上,它是一个由 8255A

送给外设的状态信号,低电平有效,有效时,表示 CPU 已经将一个数据写入 8255A 的端口

A,通知外设将数据取走。

ACK�(Acknowledge):这是外设对 AOBF 信号的响应信号,低电平有效,它使 8255A

的端口 A 的输出缓冲器开启,送出数据。否则,输出缓冲器处于高阻状态。

INTE�(Interrupt Enable):中断允许信号。INTE�为 1 时,允许 8255A 由 INTR 往 CPU

发中断请求信号,以通知 CPU 在 8255A 的端口 A 输出一个数据;INTE�为 0 时,则屏蔽了中

Page 144: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·135·

断请求,这时即使 8255A 的数据输出缓冲器空了,也不能在 INTR 端产生中断请求,INTE�到底为 0 还是为 1,这是由软件通过对 PC的设置来决定的,PC为 1,则 INTE�为 1,PC为 0 则 INTE�为 0。

INTE�(Interrupt Enable):中断允许信号。端口 A 的输入处于中断允许状态,当 INTE�为 0 时,端口 A 的输入处于中断屏蔽状态。INTE�是软件通过对 PC�的设置来决定为 1 还是

为 0 的,将 PC�置之不理时,使 INTE�为 0。 ����������������������������������� ��������������� ���������� ����� ���

参数 说 明 最小时间 最大时间

t��选通脉冲宽度 500ns

t���选通有效到 IBF�有效的时间 300ns

t��数据有效到STB�无效的时间 0

t��数据保持时间 180ns

t��写信号无效到 OBF�有效的时间 650ns

t��ACK�有效的 OBF�无效影响 350ns

t�ACK�有效到数据输出的时间 350ns

t�数据保持时间 200ns

图 6-18 8255A 方式 2 的时序

·方式 2 的时序

方式 2 的时序相当于方式 1 的输入时序与输出时序的组合。图 6-18 中画出了一个数据

输出过程和一个数据输入过程的时序。实际上,当端口 A 工作在方式 2 时,输入过程和输

出过程的顺序以及各自的次数是任意的。

对于输出过程,作如下说明:

CPU 响应中断,并用输出指令往 8255A 的 A 端口中写入一个数据时,会发出脉冲信号

WR 。WR 信号一方面使中断请求信号 INRT 变低(①),另一方面使输出缓冲器满信号OBF�变低(②)。OBF 信号送往外设,外设得到此信号后,发出 ACK�信号(③)。ACK�使 8255A

的输出锁存器打开,从而数据便出现在 8255A 与外设之间的数据连线上(④),ACK�信号

Page 145: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·136·

也使输出缓冲器满信号OBF�变为高电平(⑤),从而可以开始下一个数据传送过程。

对于输入过程,作如下说明:

当外设往8255A送来数据时(⑥),选通信号STB�也一起到来,STB�将数据锁存到8255A

的输入锁存器中,从而使输入缓冲器满信号 IBF�成为高电平(⑦),选通信号结束时,使

中断请求信号为高(⑧)。

CPU 响应中断进行读操作时,会发出读信号 RD 。 RD 信号有效后,将数据从 8255A 读

到 CPU 中,于是,输入缓冲器满信号 IBF�又成为低电平(⑨),且中断请求信号变成低电

平。

·方式 2 的使用场合

方式 2 是一种双向工作方式,如果一个并行外部设备既可以作为输入设备,又可以作

为输出设备,并且输入输出的动作不会同时进行,那么,将这个外设和 8255A 的端口 A 相

连,并使它工作在方式 2,就会非常合适。

7)应用举例

【例 2】用 8255A 作灯光控制接口,PB 口为方式 0 输入,PC 口为方式 0 输出,当开关

状态为全 0 时,PC 口上发光二极管循环轮流点亮,当开关处于非全 0 时,则直接把开关状

态在发光二极管上显示出来。电路如图 6-19 所示:

从图 6-19 中可以看出,C 口与发光二极管相连,为输出口,B 口连到开关,为输入口,

A 口没用到,可以为输出口。单片机 8051 的 P2.5 接 8255A 的 CS ,为片选信号,P2.0、

P2.1 接 8255A 的 A0、A1,用于选择工作端口。所以 8255A 的端口地址编码如表 6-1 所示。

表 6-1 8255A 端口地址编码

P2.7 P2.6P2.5

( CS )P2.4 P2.3 P2.1

P2.1

(A1)

P2.0

(A0)

P0.7~

P0.0地址 端口

× × 0 × × × 0 0 × DC××H A 口

× × 0 × × × 0 1 × DD××H B 口

× × 0 × × × 1 0 × DE××H C 口

× × 0 × × × 1 1 × DF××H控制

在本例中,“×”是无关位,当它取全“1”时 A 口地址为 DCFFH,B 口地址为 DDFFH,

C 口地址为 DEFFH,控制口地址为 DFFFH。由于图 6-19 中要求 A 口输出,B 口输入,C 口输

出,所以要向 8255A 的控制端口写入的控制字应是 82H(10000010B)。

在编程序时,必须循环检测 B 口的状态,如果各位全为 0(表示开关全闭合),则必须

让发光二极管循环点亮。不管开关处于哪种状态,程序会多次检测 B 口。假设开关全闭合,

可以在程序检测一次 B 口后让一个发光二极管亮一次。由于程序检测较快,所以必须延迟

才能让人眼看清。假设开关非全闭合,则可把读得 B 口的数据直接送至 C 口。其流程图如

6-20 所示。

Page 146: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·137·

����P0.0

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

D0D1D2D3D4D5D6D7

PA0PA1PA2PA3PA4PA5PA6PA7 ����������������� ��� ��� ������������������������������������������������������

���������PB0PB1PB2PB3PB4PB5PB6PB7

PC0

PC1

PC2

PC3

PC4

PC5

PC6

PC7

80518255

图 6-19 8255A 应用举例

图 6-20 例 2 的程序流程图

源程序如下:

Page 147: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·138·

ORG 8000H

LJMP CATN

ORG 8030H

CANT: MOV SP,#60H ;设堆栈指针

MOV DPTR,#0DFFFH ;指向控制口地址

MOV A,82H ;写控制字

MOVX @DPTR,A

MOV B,#01H ;送亮管循环指针

CCP: MOV DPTR,#0DDFFH ;送 B 口地址

MOVX A,@DPTR ;读入 B 口状态

CT1: ANL A,#0FFH ;判全 0 或非全 0

JZ CT4 ;A 全 0 转 CT4

LJMP OUT ;A 非全 0。转 OUT

CT4: MOV A,B ;循环左移

CT5: RL A

MOV B,A

MOV R6,#0FFH ;延时

CLY: MOV R7,#0FFH

CLY1: DJNZ R7,CLY1

DJNZ R6,CLY

OUT: MOV DPTR,#0DEFFH ;送 C 口地址

MOVX @DPTR,A

LJMP CPP

(2)可编程并行接口芯片 8155A 的扩展应用

1)主要特性

8155A 为 Intel 公司的另一种可编程并行 I/O 接口芯片。它具有二个 8 位和一个 6 位

I/O 口,以及 256 个字节静态 RAM、一个 14 位计数器。它与单片机的接口简单,在单片机

系统中应用广泛。

2)内部结构

8155A 的内部结构如图 6-21 所示,它包括两个 8 位并行输入/输出端口,一个 6 位并

行输入/输出端口,256 个字节的静态 RAM,一个地址锁存器,一个 14 位的定时/计数器和

控制逻辑电路。

在控制信号中,IO/ M 为 IO 口和存储器选择信号,当 IO/ M =1 时,CPU 选择对 I/O

口和 8155A 片内的寄存器进行读/写操作;当 IO/ M =0 时,CPU 选择对存储器进行读/写操

作。256 个字节的存储器的地址范围为 00H~FFH,I/O 口和寄存器的地址如表 6-2 所示。

Page 148: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·139·

图 6-21 8155A 的结构框图

表 6-2 8155A 的 I/O 的端口地址

AD7~AD0

A7 A6 A5 A4 A3 A2 A1 A0I/O 口与寄存器

X X X X X 0 0 0 命令/状态寄存器

X X X X X 0 0 1 A 口

X X X X X 0 1 0 B 口

X X X X X 0 1 1 C 口

X X X X X 1 0 0 定时器的低 8 位

X X X X X 1 0 1 定时器的高 6 位与 2 位计数器工作方式选择位

3)引脚功能

8155

PA0PA1PA2PA3PA4PA5PA6PA7PB0PB1PB2PB3PB4PB5PB6PB7PC0PC1PC2

PC3PC4

PC5

CE

Vcc

RESET

WRRD

IO/M

Vss

TIMERin

TIMERout

1234567891011121314151617181920 21

22232425262728293031323334353637383940

AD0AD1AD2AD3AD4AD5AD6AD7

ALE

图 6-22 8155A 的引脚

8155A

Page 149: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·140·

8155A 为 40 脚引脚芯片,采用双列直插封装形式,其引脚如图 6-22 所示。

各引脚功能如下:

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

PA7~PA0:A 口输入/输出引线;

PB7~PB0:B 口输入/输出引线;

PC5~PC0:C 口输入/输出引线或控制信号线;

当 C 口作为控制信号线时,功能如下:

PC0:INTRA——A 口中断请求信号线;

PC1:BFA——A 口缓冲器满信号线;

PC2: ASTB ——A 口选通信号线;

PC3:INTRB——B 口中断请求信号线;

PC4:BFB——B 口缓冲器满信号线;

PC5: ASTB ——B 口选通信号线;

CE :片选信号线,低电平有效;

RD :读控制信号线,低电平有效;

WR :写控制信号线,低电平有效;

ALE:地址及片选信号的锁存信号线,高电平有效;

IO/ M :I/O 口与存储器选择信号线,IO/ M =1 时,选择 I/O 口,IO/ M =0 时,

择存储器;

TIMER IN:定时/计数器输入端;

TIMER���:定时/计数器输出端;

RESET:复位信号线,高电平有效。

4)控制字和状态字

8155A 内的控制逻辑电路中,设置了一个命令/状态寄存器,该寄存器分为两部分:一

个是控制命令寄存器,它只能写入,不能读出,用于选择 I/O 口的工作方式,其格式如图

6-23 所示;另一个是状态标志寄存器,它只能读出,不能写入,用于存放 A 口和 B 口的工

作状态,其格式如图 6-24 所示。

从图 6-23 中我们可以看到,8155AI/O 口的工作方式可以分为基本输入输出工作方式

和选通输入输出工作方式。这两种工作方式与 8255A 的工作方式 0 和工作方式 1 具有相同

的时序。与 8255A 不同的是,在选通工作方式时,8155 的输入/输出共用一组控制/状态信

号。选通输入时,STB 为选通输入信号,BF 为输入缓冲器满信号;选通输出时,STB 为

外设响应信号,BF 为输出缓冲器满信号。

Page 150: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·141·

图 6-23 8155A 命令寄存器格式

D7 D6 D5 D4 D3 D2 D1 D0

× TIMER INT�BF�INTR�INTE�BF�INTR�INTR:中断请求 INTE:端口中断允许

BF:缓冲器满标志 TIMER:定时中断

图 6-24 8155A 状态标志寄存器格式

5)内部定时器

8155A 片内设置了一个 14 位的减法计数器,用于对外部输入的脉冲信号进行计数或定

时。脉冲信号由 TIMER��引脚输入,定时器的输出引脚为 TIMER���。8155A 定时器的格式如

图 6-25 所示,其中 T13-T0 为计数器的长度,其范围为 2H~3FFFH,M2、M1 用于设置定时

器的输出方式,如图 6-26 所示。 D7 D6 D5 D4 D3 D2 D1 D0

计数长度的低 8 位

04H

05H

T7 T6 T5 T4 T3 T2 T1 T0

M2 M1 T13 T12 T11 T10 T9 T8

定时器方式 计数长度的高 6 位

图 6-25 8155A 定时器的格式

Page 151: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·142·

M1 M2 方 式 定 时 器 输 出 波 形

0 0 单 方 波

0 1 连续方波

1 0 单 脉 冲

1 1 连续脉冲

图 6-26 8155A 定时器输出方式

6)8031 与 8155A 的接口电路

由于 8155A 内部设有地址锁存器,因此,它与 8031 的接口电路非常简单,不需任何附

加电路。图 6-27 是 8031 与 8155A 的一种接口电路,其 RAM 和 I/O 口的地址分配如下:

数据存储器的地址:7E00H~7EFFH

I/O 口的地址:

命令/状态寄存器 7FF8H

PA 口 7FF9H

PB 口 7FFAH

PC 口 7FFBH

定时器低 8 位 7FFCH

定时器高 8 位 7FFDH

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

AD0AD1AD2AD3AD4AD5AD6AD7

ALE ALE

P2.0

P2.7

RD

WR

IO/M

CE

RD

WR

8

8

8031 8155

8

图 6-27 8031 与 8155A 接口电路

设 8155A 的 A 口、B 口为基本输入输出方式,A 口为输入,B 口为输出,定时器输出连

续方波,输入脉冲 24 分频,则 8155A 的初始化程序段为:

MOV DPTR,#7FFCH ;写计数初值低 8 位

MOV A,#18H

MOVX @DPTR,A

8155A

Page 152: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·143·

INC DPTR ;写定时器高 6 位和工作方式

MOV A,#40H ;定时器为连续方波输出

MOVX @DPTR,A

MOV DPTR,#7FF8H

MOV A,#0C2H ;置命令控制字:A 口基本输入,B 口基本输出

MOVX @DPTR,A ;启动定时器

6.2 MCS-51 系列单片机中断系统

中断技术是现代微机系统的核心技术之一,它是解决 CPU 与外部设备的速度矛盾而提

出的。随着计算机的发展,中断不断被赋予新的功能,如:实时控制,外部紧急事件的处

理等。中断系统是对管理中断的所有软、硬件逻辑的总称。

单片机的中断系统包括中断源、中断入口地址、中断优先极、中断允许、中断标志、

中断响应等。

6.2.1 MCS-51 系列单片机中断系统概述

MCS-51 系列单片机 8051、8031、8751 的中断系统中共有 5 个中断源,分别为外部中

断 0( INT0 )、外部中断 1( INT1 )、定时器 T0、定时器 T1、串行接口(接收中断和发送

中断为 1 个中断源)。它们的入口地址、中断允许控制、中断优先级的设置以及中断标志等

见表 6-3。中断系统结构如图 6-28 所示。

表 6-3 8051 单片机中断系统

中断源 入口地址 中断允许 中 断 标 志中断优先级

设 置触发方式

中断标志

清零方式

INT0 0003H IE.0(EX0) TCON.1(IE0) IP.0(PX0)TCON.0

(IT0)

电平触发时

需软件清零

T0 000BH IE.1(ET0) TCON.5(TF0) IP.1(PT0) —无需软件

清零

INT1 0013H IE.2(EX1) TCON.3(IE1) IP.2(PX1)TCON.2

(IT1)

电平触发时

需软件清零

T1 001BH IE.3(ET1) TCON.7(TF1) IP.3(PT1) —无需软件

清零

串行接口 0023H IE.4(ES)SCON.0(RI)

SCON.1(TI)IP.4(PS) — 需软件清零

Page 153: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·144·

�����������������������������������������������������������������

EA

����

矢量

地址

矢量

地址

��

��

����������EA

���������������

�����������������������������������������������

图 6-28 中断字位结构

6.2.2 中断源与中断控制

1.中断源

8051 单片机的 5 个中断源包括两个外部中断源( INT0 , INT1 引脚输入),三个内部

中断源(定时器 T0,T1 的溢出中断源和串行口的发送/接收中断源)。

(1)外部中断源

从 INT1 引脚输入的两个外部中断源和它们的触发方式控制位锁存在特殊功能寄存器

TCON 的低 4 位,其格式如图 6-29 所示。

b7 b6 b5 b4 b3 b2 b1 b0

TCON(88H) TF1 RT1 TF0 RT0 IE1 IT1 IE0 IT0

图 6-29 TCON 寄存器结构

IE1(TCON.3):外部中断 INT1 (P3.3)请求标志位。当 CPU 检测到在 INT1 引脚上出

现的外部中断信号(低电平或脉冲下降沿)时,由硬件置位 IE1,请求中断。CPU 响应中断

进入中断服务程序后,IE1 位被硬件自动清零(边沿触发方式)或用指令清零(电平触发

Page 154: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·145·

方式)。

IT1(TCON.2):外部中断 INT1 的触发方式控制位。由软件来置 1 或清零,以控制外部

中断 1 的触发类型。

IT1=0 时,外部中断 1 设置为电平触发方式,INT1(P3.3)输入低电平时,置位 IE1,

申请中断。CPU 在每个机器周期的 S5P2 期间采样 INT1 的输入电平,当采样到低电平时,

置 IE1=1。采用电平触发方式时,该引脚的中断请求信号(低电平)应保持到该中断被 CPU

响应。同时,在该中断服务程序执行完之前,外部中断源有效电平必须被撤消,否则将产

生另一次中断。

IT1=1,外部中断 1 设置为边沿触发方式,CPU 在每个机器周期的 S5P2 采样 INT1(P3.3)

的输入电平。如果相继的两次采样,前一个周期中采样到 INT1 为高电平,接着下个周期中

采样到 INT1 为低电平,则置 IE1=1,表示外部中断 1 正在向 CPU 申请中断,直到该中断被

CPU 响应时,IE1 由硬件自动清零。因为每个机器周期采样一次外部中断输入电平,因此,

采用边沿触发方式时,外部中断源输入的高电平和低电平时间必须保持 12 个振荡周期以

上,才能保证 CPU 检测到由高到低的负跳变。

IE0(TCON.1):外部中断 INT0 (P3.2)请求标志位。IE0=1,外部中断 0 向 CPU 申请中

断,当 CPU 响应该中断时,IE0 由硬件清零(边沿触发方式)或用指令清零(电平触发方

式)。

IT0(TCON.0):外部中断 0( INT0 )触发方式控制位。IT0=0,外部中断 0 设置为电

平触发方式;IT0=1,外部中断 0 设置为边沿触发方式,其功能和 IT1 类似。

(2)内部中断源

TF0(TCON.5):定时器 T0 的溢出中断申请位。TF0 实际上是 T0 中断触发器的一个输

出端。T0 被允许计数以后,从初值开始加 1 计数,当产生溢出时置 TF0=1,向 CPU 请求中

断,直到 CPU 响应该中断时才由硬件自动清零(也可由查询程序清零)。

TF1(TCON.7):定时器 T1 的溢出中断申请位。实时器 T1 被允许计数以后,从初值开

始加 1 计数,当产生溢出时置 TF1=1,向 CPU 请求中断,直到 CPU 响应该中断时才由硬件

自动清零(也可由查询程序清零)。

SCON 为串行口控制寄存器,SCON 的低两位锁存串行口接收中断和发送中断标志 RI 和

TI,其格式如图 6-30 所示。

b7 b2 b1 b0

SCON(98H)

图 6-30 SCON 寄存器结构

RI(SCON.0)和 TI(SCON.1)为串行口内部中断申请标志位。串行口的接收中断 RI

和发送中断 TI 逻辑“或”以后作为内部的一个中断源。当串行口发送完一个字符后由内部

硬件置位 TI;接收到一个字符后由内部硬件置位接受中断标志 RI。应该注意,CPU 响应串

行口的中断时,并不自动清“0”TI 和 RI 中断标志,TI 和 RI 必须由软件清“0”(中断服

务程序中必须对 TI 和 RI 进行软件清“0”操作,即中断服务程序中必须有对 TI 和 RI 进行

清零的指令)。

TI RI

Page 155: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·146·

2.中断控制

除特殊功能寄存器 TCON 和 SCON 中某些位与中断有关外,还有两个特殊功能寄存器 IE

和 IP 专门用于中断控制。

(1)中断允许寄存器 IE

8051 单片机中,特殊功能寄存器 IE 为中断允许寄存器,控制 CPU 对中断源的开或屏

蔽(禁止),以及每个中断源是否允许中断,其格式见图 6-31 所示。

b7 b6 b5 b4 b3 b2 b1 b0

IE(A8H)

图 6-31 IE 寄存器结构

EA(IE.7):CPU 中断允许位。EA=1,CPU 开放中断;EA=0,CPU 屏蔽所有的中断请求。

ES(IE.4):串行口中断允许位。ES=1,允许串行口中断:ES=0,禁止串行口中断。

ET1(IE.3):T1 溢出中断允许位。ET1=1,允许 T1 中断;ET1=0,禁止 T1 中断。

EX1(IE.2):外部中断 1( INT1 )允许位。EX1=1,允许外部中断 1 中断;EX1=0,禁

止外部中断 1 中断。

ET0(IE.1):T0 溢出中断允许位。ET0=1,允许 T0 中断;ET0=0,禁止 T0 中断。

EX0(IE.0):外部中断 0( INT0 )允许位。EX0=1,允许外部中断 0 中断;EX0=0,禁

止外部中断 0 中断。

8051 系统复位后,IE 中各位均被清零,即禁止所有中断。

(2)中断优先级寄存器 IP

8051 单片机具有两个中断优先级,每个中断源可编程设定为高优先级中断或低优先级

中断,并可实现二级中断嵌套。

高优先级中断源可中断正在执行的低优先级中断服务程序,除非正在执行低优先级中

断服务程序+设置了 CPU 关中断或禁止某些高优先级中断;同级或低优先级的中断源不能

中断正在执行的中断程序。为此,在 8051 中断系统中,内部有两个(用户不能访问的)优

先级状态触发器,它们分别指出 CPU 是否在执行高优先级或低优先级中断服务程序,从而

分别屏蔽所有的低级中断申请和同一级的其他中断源申请。

特殊功能寄存器 IP 锁存各种中断优先级的控制位,用户可用软件设置优先级,其格

式如图 6-32 所示。

b7 b6 b5 b4 b3 b2 b1 b0

IP(B8H)

图 6-32 IP 寄存器结构

PS(IP.4):串行口中断优先级控制位。PS=1,设定串行口为高优先级中断;PS=0,为

低优先级中断。

PT1(IP.3):T1 中断优先级控制位。PT1=1,设定定时器 T1 为高优先级中断;PT1=0,

为低优先级中断。

PX1(IP.2):外部中断 1 中断优先级控制位。PX1=1,设定外部中断 1 为高优先级中断;

EA —— —— ES ET1 EX1 ET0 EX0

— — — PS PT1 PX1 PT0 PX0

Page 156: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·147·

PX1=0,为低优先级中断。

PT0(IP.1):T0 中断优先级控制位。PT0=1,设定定时器 T0 为高优先级中断;PT0=0,

为低优先级中断。

PX0(IP.0):外部中断 0 中断优先级控制位。PX0=1,设定外部中断 1 为高优先级中断;

PX0=0,为低优先级中断。

8051 复位后,IP 低 5 位全部清零,将所有中断源设置为低优先级中断。

如果几个同级的中断源同时向 CPU 申请中断,哪一个申请得到服务,取决于它们在 CPU

内部登记排队的序号。CPU 通过内部硬件查询登记序号,按自然优先级确定优先响应哪个

中断请求。其内部登记序号是由硬件排队电路确定的,排列如表 6-4 所示。这种顺序排列

给实际应用提供了很大的方便。

表 6-4 同优先级中断源登记序号

中 断 源 同级内部优先级排列

外部中断 0

定时器 T0 中断

外部中断 1

定时器 T1 中断

串行口中断

最高级

最低级

6.2.3 MCS-51 中断系统的使用方法

1.中断响应存在过程

8051 的 CPU 在每个机器周期的 S5P2 期间,顺序采样每个中断源,CPU 在下一个机器周

期 S6 期间,按优先级顺序查询中断标志,如查询到某个中断标志为 1,将在再下一个机器

周期 S1 期间按优先级进行中断处理。中断系统通过硬件自动将相应的中断矢量地址装入

PC,以便进入相应的中断服务程序。

在下列任何一种情况存在时,中断申请将被封锁。

(1)CPU 正在执行一个同级或高一级的中断服务程序。

(2)当前周期(即查询周期)不是执行当前指令的最后一个周期,即要保证把当前的

一条指令执行完才会响应。

(3)当前正在执行的指令是返回(RETI)指令或对 IE、IP 寄存器进行读/写指令,执

行指令以后至少再执行一条指令才会响应中断。

CPU 响应中断,由硬件自动将响应的中断矢量地址装入程序计数器 PC,转入该中断服

务程序进行处理。对于有些中断源,CPU 在响应中断后会自动清除中断标志,如定时器溢

出标志 TF0、TF1,以及边沿触发方式下外部中断标志 IE0、IE1;而有些中断标志不会自动

清除,只能由用户用软件清除,如串行口的接收和发送中断标志 RI、TI;在电平触发方式

Page 157: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·148·

下的外部中断标志 IE0 和 IE1 则是根据引脚 INT0 , INT1 的电平变化的,CPU 无法直接干

预,需在引脚外加硬件(如 D 触发器)使其自动撤消外部中断请求或用指令对其清零。

CPU 执行中断服务程序之前,自动将程序计数器 PC 内容(断点地址)压入堆栈保护(但

不保护状态寄存器 PSW 的内容,更不保护累加器 A 和其他寄存器的内容),然后将对应的中

断矢量装入程序计数器 PC,使程序转向该中断矢量地址单元中,去执行中断服务程序。各

中断源及与之对应的矢量地址见表 6-3 所示。

中断服务程序从矢量地址开始执行,一直到返回指令“RETI”为止。“RETI”指令的操

作,一方面告诉中断系统该中断服务程序已执行完毕,另一方面把原来压入堆栈保护的断

点地址从栈顶弹出,装入程序计数器 PC,使程序返回到被中断的程序断点处,以便继续执

行该程序。

在编写中断服务程序时应注意:

(1)在中断矢量地址单元处放一条无条件转移指令,使 CPU 一旦响应中断,就能找到

中断服务程序入口。若使用长跳转指令 LJMP ××××H),使中断服务程序被灵活地安排

在 64k 字节程序存储器的任何空间。

(2)在中断服务程序中,用户应注意用软件保护现场,以免中断返回后,丢失原寄存

器、累加器中的信息。

(3)若要在执行当前中断程序时禁止更高优先级中断,可以先用软件关闭 CPU 中断

(CLR EA),或禁止某中断源中断,在中断返回前开放中断。

2.外部中断响应时间

外部中断 INT0 ,INT1 的电平在每个机器周期的 S5P2 期间,经反相锁存到 IE0 和 IE1

标志位,CPU 在下一机器周期才会查询到新置入的 IE0 和 IE1,这时如果满足响应条件,CPU

响应中断时要用两个机器周期执行一条硬件长调用指令“LCALL”,由硬件完成将中断矢量

地址装入 PC,使程序转入中断矢量入口。所以从产生外部中断到开始执行中断程序至少需

要 3 个完整的机器周期。

如果在中断申请时,CPU 正在处理最长指令(如乘法和除法指令均为 4 个周期),则额

外等待时间增加 3 个周期;若正在执行“RETI”或访问 IE、IP 指令,这时单片机规定,必

须在 RETI 或读写 IE、IP 指令后,再执行一条指令,才允许进入响应状态,则额外时间又

增加两个周期。

综合估计,在单一中断源系统里,外部中断响应时间约在 3~8 个机器周期之间。

6.2.4 多个外部中断源的设计

MCS-51 单片机为用户提供了两个外部中断输入端( INT0 , INT1 ),在实际应用系统

中,外部中断请求源往往比较多,系统中多于两个外部中断源怎么办,下面介绍两种解决

方法。

Page 158: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·149·

1. 利用定时/计数器作为外部中断输入使用的方法

MCS-51 单片机片内有两个定时/计数器,如果把它们定义成计数器工作方式,则当 T0

(P3.4)或 T1(P3.5)引脚上发生负跳变时,都将对计数器进行“+1”操作。利用这个特

性可以把 P3.4 和 P3.5 引脚作外部中断请求输入线,而溢出标志 TF0,TF1 可用作这两个中

断输入的请求标志。其效果与外部中断边沿触发效果是一样的。

以 T0 为例,将定时/计数器用作外部中断源的初始化程序如下:

MOV TMOD, #06H ;T0 计数方式,自动装载

MOV TL0, #0FFH ;置计数初值

MOV TH0, #0FFH ;

SETB ET0 ;T0 开中断

SETB EA ;CPU 开中断

SETB TR0 ;启动 T0 工作

M

当 T0(P3.4)引脚产生一负跳变时,TL0“+1”产生溢出,置“1”TF0,并向 CPU 发

中断请求,同时 TH0 内容重新装入 TL0,使 TL0 恢复计数初值 0FFH,这样 T0(P3.4)引脚

每一次负跳变都将置“1”,并向 CPU 发中断请求。这里的 T0(P3.4)引脚作外部中断输入

相当于外部中断输入线 INT0 被定义为边沿触发方式。同样,T1(P3.5)引脚作外部中断

请求输入时,也可以作类似处理。

2. 中断与查询相结合的方法

利用上述方法,系统中可增加两个定时/计数器输入作外部中断。这样系统中可扩展

成 4 个外部中断。若系统中多于 4 个外部中断源或定时/计数器另作它用时,可以利用中断

与查询相结合的方法。我们可以按它们的紧急程度进行优先级排队,把其中高优先级直接

接到 MCS-51 的一个外部中断输入端 INT0 ,其余的中断源用线或的办法连到另一个外部中

断输入端 INT1 ,同时还分别连到一个 I/O 口,其电路如图 6-33 所示。其中 DVT1~DVT4 接

反向集电极或漏极开路(OC)门电路。

中断源由硬件电路产生,中断源的识别由程序查询处理,查询的次序由中断源的优先

级别决定,这种方法可处理 9 个中断源,因为被查询的 P1 口只有 8 根输入线。图中只给出

五个,这五个中断源的优先级排队如下:

DVT0 最高级

DVT1

DVT2

DVT3

DVT4 最低级

Page 159: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·150·

图 6-33 扩展多个外部中断

设 DVT0~DVT4 五个中断源输入均为高电平有效,能被相应的中断服务程序所清除,并

且在 CPU 响应该中断之前保持有效,均采用电平触发方式,则外部中断 INT1 的中断服务程

PINT1: MOV P1,#0FFH ;设置 P1 口为输入端口

PUSH PSW ;保护现场

PUSH ACC

JB P1.0,PDVT1 ;依次查询 4 个中断源

JB P1.1,PDVT2

JB P1.2,PDVT3 ;若是干扰信号引起的中断请求

JB P1.3,PDVT4 ;可被过滤掉

PINTR: POP ACC ;恢复现场

POP PSW

RET ;中断返回

该中断服务程序的优点是,如果干扰信号引起中断请求,则进入中断服务子程序后,

CPU 依次查询一遍后又返回主程序,以增加抗干扰能力。

PDVT1: ⋯ ;DVT1 中断服务

AJMP PINTR

PDVT2: ⋯ ;DVT2 中断服务

AJMP PINTR

PDVT3: ⋯ ;DVT3 中断服务

Page 160: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·151·

AJMP PINTR

PDVT4: ⋯ ;DVT4 中断服务

AJMP PINTR

若系统中需要更多的外部中断源,则可用优先权编码器 74LS148 或可编程中断控制器

8259 来实现多中断源的扩展,这里由于篇幅原因不再一一叙述。

6.2.5 软件模拟第三个中断优先级

MCS-51 只提供两个中断优先级,可以实现两级中断服务程序嵌套。如果能利用 CPU 内

部两个不可寻址的优先级状态触发器,以及 CPU 在响应中断时遵循的两个规则,我们可以

用软件模拟的方法为系统增加一个中断优先级,从而实现三级中断服务程序的嵌套。具体

实现方法如下:

首先,在中断优先级寄存器 IP 中定义两个中断优先级:高优先级和低优先级,那么,

在低优先级的中断服务程序中编写如下程序即可实现三级中断服务程序的嵌套。

PUSH IE ;保护 IE

MOV IE,#MASK ;置屏蔽字,屏蔽当前中断

LCALL LABEL ;调用子程序 LABEL

DVT1: ⋯

中断服务 ;执行中断服务

POP IE ;恢复 IE

RET ;子程序返回,真正中断返回

LABEL: RETI ;中断返回,CPU 被欺骗误认为返回

在主程序中,一旦有任何低优先级被响应,那么在中断服务程序中需要在 IE 中重新置

入一个屏蔽字以屏蔽当前中断。然后,用长调用指令 LCALL 通过调用 LABEL 来执行 RETI

指令,其目的是模拟一次中断返回(实际上并未返回),从而清除了原来被置位了的低优先

级状态触发器,并让 CPU 仍旧执行 DVT1 中断服务程序。换言之,通过长调用 LCALL 指令,

不仅保护了断点地址 DVT1,又执行了 RETI 指令,欺骗了 CPU,使 CPU 误认为已返回了主程

序,而实际上执行 RETI 指令时,又把断点地址 DVT1 弹出送给 PC;此时,该低优先级中断

服务程序被 CPU 认定为主程序。这样 CPU 便可被另一个低优先级中断源所中断(一旦被响

应,也需置屏蔽字,并模拟中断返回),也可被高优先级中断源所中断,从而实现三级中断

服务程序的嵌套。在以上中断服务程序的末尾,需加一条 RET 指令(注意:不是 RETI)用

来终止服务程序,从而使程序返回原来的断点地址。

Page 161: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·152·

6.2.6 中断服务程序设计

【例 3】这里通过两个例子说明 MCS-51 单片机中断服务程序设计方法。分析单级外部

中断。

如图 6-34 所示。单片机读 P1.0 的状态,把这个状态送到 P1.7 的指示灯去,当 P1.0

为高电平,指示灯亮;P1.0 为低电平时,指示灯不亮。要求用中断控制这一输入/输出过

程,每请求中断一次,完成一次读操作和写操作。

&

& �����������1

���P1.7

INT0

P1.0

8031

图 6-34 例 3 硬件连接图

根据约定,外部中断 0 的入口地址在 0003H 单元,而中断服务子程序则可放在程序存

储器的任何地方。但必须在 0003H 单元放一条跳转指令,指向中断服务子程序的起始地址。

中断服务子程序最后一条指令必须是 RETI 指令,以便在结束时能返回被中断的主程序。

根据以上讨论,可编写程序如下:

ORG 0000H

AJMP MAIN ;上电自动转向主程序

ORG 0003H ;外部中断 0 入口地址

AJMP WINT ;指向中断服务子程序

ORG 0100H ;主程序

MAIN: SETB IT0 ;选择边沿触发方式

SETB EX0 ;允许外部中断 0

SETB EA ;CPU 允许中断

HERE: AJMP HERE ;主程序踏步

以下是中断服务子程序:

ORG 0200H

WINT: MOV A,#0FFH

MOV P1,A ;设输入态

MOV A,P1 ;取开关数

Page 162: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·153·

RR A ;P1.0 送 P1.7

MOV P1,A ;输出驱动灯泡发光

RET1 ;中断返回

END

本例的中断响应过程如下:

上电之后,由 0000H 单元自动跳到主程序执行,主程序完成中断初始化程序之后,立

即进入到指令:

HERE:AJMP HERE

这是一条跳转指令,每执行一次,仍然回到原处,因此是一个踏步动作,它相当于一

个很长的主程序,一直执行下去,等待中断的到来。

当外设数据准备好以后(重设开关一次),按下单脉冲发生键,向 8031 的 0INT 脚输送

一个负脉冲——请求中断的信号。

单片机在每个机器周期的 S5P2 期间对 INT0 采样(注意:此处选择为边沿触发),如

果连续采样到一个周期为高电平,下一个周期紧接着为低电平,则硬件自动将 TCON 寄存器

的中断请求标志位 IE0 置位,由 IE0 标志请求中断(保存中断请求)。

单片机对中断源的查询实际并不限于 INT0 ,在每个机器周期内,对所有中断源都进

行顺序检查,由于这个实验只考虑单级中断,因此,在单片机检查到外部中断 0 有中断请

求时,在当前指令执行完毕之后,下一个机器周期的 S1 期间开始响应。在响应期间单片机

自动完成一系列复杂的动作:

(1)将相应的优先级有效触发器置位,清除中断请求标志(此处,令 IE0=0)。

(2)执行一个硬件子程序,把程序计数器的内容(主程序被中断处的地址)压入堆栈。

(3)把请求中断的相应中断入口地址(此处为 0003H)装入 PC。

(4)由 0003H 再跳到中断服务子程序——这就是响应中断。

(5)当中断服务子程序的指令全部执行完毕,最后执行 RET1,单片机又自动将优先

级有效触发复位,把保存在堆栈的主程序返回地址重新装入 PC,使主程序继续执行下去。

(6)以上就是一个中断的全过程。

【例 4】如图 6-35 所示,从 INT1 引脚输入单脉冲,使 P1 口所接 8 个发光二极管按脉

冲节拍循环点亮。

图 6-35 例 4 硬件原理图

Page 163: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·154·

程序清单:ORG 0000H ;设置起始地址

AJMP START

ORG 0013H ;设置 INT1 入口地址

AJMP STEP

ORG 0100H ;主程序入口

START: MOV A,#0 ;8 个二极管全灭

MOV P1,A

CLR IT1 ;设置为电平触发方式

SETB PX1 ;设为高级中断

SETB C ;进位标志置位

SETB EX1 ;允许 INT1中断

SETB EA ;CPU 开中断

AJMP $ ;踏步等中断

STEP: RRC A ;中断服务程序

MOV P1,A ;点亮 1 位发光二极管

CLR IE1 ;清 INT1 中断标志

RETI ;中断返回

END ;源程序结束

6.3 8051 单片机中的定时器/计数器

MCS-51 系列单片机 8051 内部有两个 16 位加法定时器/计数器,分别称 T0 和 T1。

6.3.1 定时器/计数器概述

1.定时器/计数器的可编程概念

一般单片机内部都设有定时/计数器,因为有的测控系统是按时间间隔定时控制的,如

定时对物理过程(如温度)的采样测量等,虽然可以通过延时程序实现定时,但这会降低

CPU 的工作效率。如果能利用一个可编程的实时时钟获得延时定时,就可以提高 CPU 的工

作效率。另外,也有一些测控系统是根据外部信号的计数结果来实现控制的,必须对外部

随机事件(往往为脉冲信号)进行计数。因此,单片机内部一般都设置可编程的定时/计数

器,以简化系统设计,提高系统功能。所谓可编程就是指可通过指令来确定或改变其工作

方式,应包括以下几个方面:

(1)确定其工作方式是定时还是计数;

(2)预置定时或计数初值;

(3)当定时时间到或计数终止时,要不要发中断请求;

Page 164: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·155·

(4)如何启动定时器或计数器工作。

2.定时器/计数器的主要特性

(1)每 1 个定时器/计数器都可以分为两个独立的 8 位定时器/计数器。

(2)定时器/计数器有 4 种工作方式:其中 T0 有方式 0、1、2、3,T1 有方式 0、1、

2。

(3)定时器/计数器需写入计数初值,且规定其工作方式,每种工作方式的初值计算

有不同方法。需要用软件对 T0、T1 进行启停控制。

(4)定时器/计数器的溢出率由几个因素决定:

作定时器时,溢出率由单片机主频 Fosc、计数初值和定时器工作方式决定;作计数器

时,溢出率由外部引脚 T0、T1 的输入信号、计数初值和定时器工作方式决定。

6.3.2 定时器/计数器内部结构和工作原理

1.内部结构

从图 6-36 可以看出,两个 16 位定时/计数器 T0 和 T1,分别由 8 位计数器 TH0、TL0

和 TH1、TL1 构成,它们都是以“+1”的方式完成计数。特殊功能寄存器 TMOD 控制定时/

计数器的工作方式,TCON 控制定时/计数器的启动运行并记录 T0、T1 的溢出标志。通过对

TH0、TL0 和 TH1、TL1 的初始化编程可以预置 T0、T1 的计数初值。通过对 TMOD 和 TCON 的

初始化编程可以分别置入方式字和控制字,以指定其工作方式并控制 T0、T1 按规定的工作

方式计数。

图 6-36 定时/计数器逻辑结构

2. 工作原理

(1)定时器

当设置为定时器工作方式时,计数输入信号来自内部振荡信号,在每个机器周期内定

时器的计数器做一次“+1”运算。因此定时器亦可视为计算机机器周期的计数器。而每个

Page 165: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·156·

机器周期又等于 12 个振荡周期,故定时器的计数速率为振荡频率的 1/12(即 12 分频)。

若单片机的晶振主频为 12MHz,则计数周期为 1μs。如果定时器的计数器“+1”产生溢出,

则标志着定时时间到。

(2)计数器

图 6-37 计数器对外部计数脉冲的要求

当设置为计数器工作方式时,计数输入信号来自外部引脚 T0(P3.4)、T1(P3.5)上

的计数脉冲,外部每输入一个脉冲,计数器 TH0、TL0(或 TH1、TL1)做一次“+1”运算。

而在实际工作中,计数器由计数脉冲的下降沿触发,即 CPU 在每个机器周期的 S5P2 期间对

外部输入引脚 T0(或 T1)采样,若在一个机器周期中采样值为高电平,而在下一个机器周

期中采样值为低电平,则紧跟着的再下一个机器周期的 S3P1 期间计数值就“+1”,完成一

次计数操作。因此确认一次外部输入脉冲的有效跳变至少要花费两个机器周期,即 24 个振

荡周期,所以最高计数频率为振荡频率的 1/24。为了确保计数脉冲不被丢失,则脉冲的高

电平及低电平均应保持一个机器周期以上。对外部计数脉冲的基本要求如图 6-37 所示,Tcy

为机器周期。

不管是定时方式还是计数工作方式,定时器 T0 或 T1 在对内部时钟或外部时钟脉冲计

数时,不占用 CPU 的时间,除非产生溢出才可能中断 CPU 的当前操作。由此可见,定时/

计数器是单片机内部效率高且工作灵活的部件。

另外,定时器/计数器有 4 种工作方式,即有 4 种逻辑结构模式,其中 T0 有 4 种方式,

T1 有 3 种方式。

6.3.3 定时器/计数器的控制

定时器/计数器在系统中是作定时器使用还是作计数器使用,采用哪种工作方式,要不

要中断参与控制等都是通过程序来控制的。在开始定时或计数之前必须对特殊功能寄存器

TMOD 和 TCON 写入一个方式字和控制字,也就是说,在程序中要进行初始化编程。

1.方式控制寄存器 TMOD

定时器/计数器的方式控制寄存器,是一可编程的特殊功能寄存器,字节地址为 89H,

不可位寻址。其中低 4 位控制 T0,高 4 位控制 T1,其格式如图 6-38 所示。

Page 166: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·157·

图 6-38 方式控制寄存器 TMOD 的格式

GATE:门控位。当 GATE=1 时,计数器受外部中断信号 INTx控制(后缀:x=0,1;INT0

控制 T0 计数, INT1控制 T1 计数),且当运行控制位 TR0(或 TR1)为“1”时开始计数,

为“0”时停止计数。当 GATE=0 时,外部中断信号 INTx不参与控制,此时只要运行控制

位 TR0(或 TR1)为“1”时,计数器就开始计数,而不管外部中断信号 INTx的电平为高还

是为低。

TC/ :计数器方式/定时器方式选择位。当 TC/ =0 时为定时器方式,其计数器输入为

晶振脉冲的 12 分频,即对机器周期计数。当 TC/ =1 时为计数器方式,计数器的触发输入

来自 T0(P3.4)或 T1(P3.5)端的外部脉冲。

M1 和 M0:工作方式选择位。对应 4 种工作方式,见表 6-5 所示。

表 6-5 操作方式选择

M1 M0 工作方式 功能

0 0 方式 0 13 位计数器

0 1 方式 1 16 位计数器

1 0 方式 2 可自动重新装载的 8 位计数器

1 1 方式 3 T0 分为两个独立的 8 位计数器,T1 停止计数

当单片机复位时,TMOD 各位均为“0”。

2.定时器/计数器控制寄存器 TCON

定时器/计数器的控制寄存器也是一个 8 位特殊功能寄存器,字节地址为 88H,可以位

寻址,位寻址为 88H~8FH,用来存放控制字,其格式如图 6-39 所示。

图 6-39 定时/计数器控制寄存器

TF1(TCON.7):T1 溢出标志。当 T1 产生溢出时,由硬件置“1”,可向 CPU 发中断请

求,CPU 响应中断后被硬件自动清“0”。也可以由程序查询后清“0”。

Page 167: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·158·

TR1(TCON.6):T1 运行控制位。由软件置“1”或清“0”来启动或停止 T1 工作,因

而又称其为启/停控制位。

TF0(TCON.5):T0 溢出标志(类同 TF1)。

TR0(TCON.4):T0 运行控制位(类同 TR1)。

TCON 的低 4 位与外部中断有关,已在前面做了介绍。

复位后,TCON 的各位均被清“0”。

6.3.4 定时器/计数器的工作方式

1.方式 0:13 位定时器/计数器

当编程使方式寄存器 TMOD 中 M1M0=00 时,计数器长度为 13 位。由 TL 的低 5 位(TL

的高 3 位未用)和 TH 的 8 位构成 13 位计数器(对 T0、T1 都适用)。图 6-40 所示硬件结构

表示了定时器/计数器 T1 在方式 0 下的逻辑图。若对于定时器/计数器 T0,则只要将图中

相应的标识符后缀“1”改为“0”即可。

K

12震荡器

TL1(5位)

TH1(8位) TF1 中断

T1(P3.5)脚

1

23

C/T=0

C/T=1

控制

TR1

GATE

INT1脚

图 6-40 定时/计数器 T1(T0)方式 0 逻辑图

图 6-40 中 TC/ 是 TMOD 中的控制位,当 TC/ =0 时,选择为定时器方式。计数器输入信

号为晶振的 12 分频,即计数器对机器周期计数。当 TC/ =1 时,选择为计数器方式,计数

器输入信号为外部引脚 T1(P3.5)。TR1 在 TCON 中是定时器/计数器 T1 的启/停控制位,GATE

在 TMOD 中是定时器/计数器的门控位,是用来释放和封锁 INT1信号的,INT1是外部中断 1

的输入端。当 GATE=1 和 TR1=1 时,则计数器启动运行受外部中断信号 INT1的控制,此

时只要 INT1为高电平,计数器便开始计数,当 INT1为低电平时,停止计数。利用这一功能

可测量 INT1引脚上正脉冲的宽度。TF1 在 TCON 中是定时器/计数器 T1 的溢出标志。

当定时器/计数器 T1 按方式 0 工作时,计数输入信号作用于 TL1 的低 5 位;当 TL1 低

5 位计满产生溢出时,向 TH1 的最低位进位;当 13 计数器计满产生溢出时,使控制寄存器

TCON 溢出标志 TF1 置“1”,并使 13 位计数器全部清零。此时,如果中断是开放的,则向

CPU 发中断请求。若定时器/计数器将继续按方式 0 工作下去,则应按要求给 13 位计数器

重新赋予计数初值或定时时间常数。

Page 168: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·159·

2. 方式 1:16 位定时器/计数器

当编程使方式寄存器 TMOD 中 M1M0=01 时,计数器按 16 位工作,即 TL、TH 全部使用,

构成 16 位计数器。其控制方式与方式 0 完全相同,逻辑结构如图 6-41 所示。

K

12震荡器

TL1(5位)

TH1(8位)

TF1 中断

T1(P3.5)脚

1

23

C/T=0

C/T=1

控制

TR1

GATE

INT1脚

图 6-41 定时器/计数器 T1(T0)方式 1 逻辑图

3. 方式 2:初值自动重装入 8 位定时器/计数器

当编程使方式寄存器 TMOD 中 M1M0=10 时,定时器/计数器就变为可自动装载计数初值

的 8 位计数器。在这种方式下,TL1(或 TL0)被定义为计数器,TH1(或 TH0)被定义为赋

值寄存器,其逻辑结构如图 6-42 所示。

K

12震荡器

TL1(8位)

TH1(8位)

TF1 中断

T1(P3.5)脚

1

23

C/T=0

C/T=1

控制

TR1

GATE

INT1脚

重装载

图 6-42 定时/计数器 T1(T0)方式 2 逻辑图

当计数器 TL1 计满产生溢出时,不仅使其溢出标志 TF1 置“1”(若中断是开放的,则

向 CPU 发中断请求),同时还自动打开 TH1 和 TL1 之间的三态门,使 TH1 的内容重新装入

TL1 中,并继续计数操作。TH1 的内容可通过编程预置,重新装载后其内容不变。因而用户

可省去装入计数初值的程序,简化了定时时间的计算,可产生相当精确的定时时间。另外

方式 2 还特别适用于把定时器/计数器用作串行口波特率发生器。

4. 方式 3:两个独立的 8 位定时器/计数器

当编程使方式寄存器 TMOD 中 M1M0=11 时,内部控制逻辑 TL0 和 TH0 被设置成两个互

相独立的 8 位计数器,如图 6-43 所示。其中 TL0 使用了自己本身的一些控制位。 TC/ 、GATE、

TR0、 INT0(P3.2)引脚、TF0、T0(P3.4)引脚,TC0 除仅用 8 位寄存器外,其功能和操

作与方式 0、方式 1 完全相同。可用于计数也可用于定时。但此时 TH0 只能用于定时器方

Page 169: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·160·

式,因为它只能对机器周期计数。它借用了定时器 T1 的控制位 TR1 和 TF1。因此 TH0 控制

了定时器 T1 的中断。此时的 T1 只能用在任何不要中断控制的情况下,例如可作串行口波

特率发生器。

方式 3 只适合定时器 T0,使其增加一个 8 位定时器。若定时器 T1 选择方式 3,T1 将

停止工作,相当于 TR1=0 的情况。当定时器 T0 选择为方式 3 工作时,定时器 T1 仍可工作

在方式 0、方式 1、方式 2,用在任何不需要中断控制的场合。

K

12震荡器

TL1(8位)

TH1(8位)

TF1 中断

T1(P3.4)脚1

23

C/T=0

C/T=1

控制TR1

GATE

INT1脚

1/12 fosc

1/12 fosc

KTH1

(8位)TF1 中断1/12 fosc

控制

TR1

图 6-43 定时器/计数器 T0 方式 3 逻辑图

6.3.5 定时器/计数器的初始化编程

由于定时器/计数器是可编程的,因此在定时或计数之前要用程序进行初始化,初始化

一般有以下几个步骤:

① 确定工作方式——对方式寄存器 TMOD 赋值。

② 预置定时或计数初值,直接将初值写入 TL0、TH0 或 TL1、TH1 中。

③ 根据需要对中断允许寄存器有关位赋值,以开放或禁止定时器/计数器中断。

④ 启动定时器/计数器,使 TCON 中的 TR1 或 TR0 置“1”,计数器即按确定的工作方式

和初值开始计数或定时。

在初始化过程中,要置入定时或计数的初值,要作一点计算。由于计数器是加“1”计

数器,并在溢出时产生中断请求,因此不能直接将计数值置入计数器,而应写入计数值的

补码数。

设计数器最大计数值为 M,选择不同的工作方式,最大计数值 M 不同。

方式 0:M=2��

=8192

方式 1:M=2��

=65536

方式 2、3:M=2�=256

置入计数初值 X 可计算如下:

Page 170: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·161·

① 计数方式时:

X=M-计数值(X 即为计数值的补码)

例如:要计 100 个数,则计数初值 X=M-100

② 定时方式时:

(M-X)×T=定时值

故,X=M-定时值/T

其中 T 为计数周期,是单片机时钟的 12 分频,即单片机机器周期。当晶振为 6MHz 时,

T=2μs,当晶振为 12MHz 时,T=1μs。

【例 5】若单片机晶振为 12MHz,要求产生 500μs 定时,试计算 X 的初值。

解:由于 T=1μs,产生 500μs 定时,则需要“+1”500 次,定时器方能产生溢出。

采用方式 0:

X=2��

-(500×10��

/10��

)=7692=1E0CH

但在方式 0 中 TL1 高 3 位是不用的,都设为“0”,则 1E0CH 应写为:

D���D���D�F00CH=1 1 1 1 0 0 0 0 0 0 0 0 1 1 0 0 B

未用

实际上从上述表达式中我们可以清楚地看出 F00CH,去掉了 3 个不用的位后,就是

1E0CH,即将 F0H 装入 TH1,0CH 装入 TL1 的低 5 位。

如果采用方式 1:

X=2��

-(500×10��

/10��

)=65036=FE0CH

即:FEH 装入 TH1,0CH 装入 TL1,时间常数(初值)的计算就相对简单多了。

6.3.6 定时器/计数器的应用举例

1.作定时器用

(1)定时器方式 0 的应用

【例 6】设主频为 12MHz,利用定时器 T1 定时,使 P1.0 输出周期为 2ms 的方波。

解:用 P1.0 作方波输出信号,周期为 2ms 的方波即每 1ms 改变一次电平,故定时值应

为 1ms,可作“+1”运算 1000 次,使 T1 作定时器工作在方式 0,即 13 位定时器。

定时初值:X=M-计数次数=8192-1000=7192=1C18H

由于 TL1 的高 3 位不用,1C18H 可写成: 1110000000011000B=E018H

TH1 初值为 E0H,TL1 初值为 18H。 未用

Page 171: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·162·

编程: ORG 0000H

AJMP MAIN

ORG 001BH ;T1 中断入口

AJMP BRT1 ;转 T1 中断服务 ORG 0040H

ORG 0040H

MAIN: MOV TMOD,#0 ;T1 按方式 0 工作

MOV TH1,#0E0H ;

MOV TL1,#18H ;给计数器赋值

SETB EA ;CPU 开中断

SETB ET1 ;T1 允许中断

SETB TR1 ;启动 T1

SJMP $ ;模拟主程序

BRT1: MOV TH1,#0E0H ;

MOV TL1,#18H ;重装 T1 初值

CPL P1.0 ;输出方波

RETI ;返回

END

(2)定时器方式 1 的应用

若定时器 T1 按方式 1 工作,即 16 位计数器,则定时初值:

X=M-计数次数=65536-1000=64536=FC18H

TH1 初值为 FCH,TL1 初值为 18H。其他编程与方式 0 类同。

【例 7】根据例 1 要求产生周期为 2ms 方波,但不用中断方式,而用查询方式工作,

查询标志为 TF1。

解:利用方式 1,16 位计数器,当定时时间到,T1 计数器溢出使 TF1 置“1”,由于不

采用中断方式,TF1 置“1”后不会自动复“0”,故要求指令给 TF1 清“0”。

程序段为: MOV TMOD,#10H ;置 T1 为方式 1

SETB TR1 ;启动 T1 定时

LOOP: MOV TH1,#0FCH ;

MOV TL,#18H ;装入初值

JNB TF1,$ ;TF1=0,则继续查询

CPL P1.0 ;输出方波

CLR TF1 ;0→TF1

SJMP LOOP ;重复下一次循环

程序很简单,但 CPU 效率不高。

3.作计数器用

计数器方式 2 的应用:

【例 8】用 T0 监视一生产流水线,每生成 100 个工件,发出一包装指令,包装成一箱,

Page 172: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·163·

并记录其箱数。

解:硬件电路如图 6-44 所示。

MCS-51

包装机

����������� 光源

工件

P1.0

T0

���

图 6-44 用 T0 作计数器硬件电路

用 T0 作计数器,R�为光敏电阻,当有工件通过时,R�阻值升高,三极管输出高电平,

即每通过一个工件,便会产生一个计数脉冲。

① 方式字 TMOD; ② 计数初值 X=M-64H=9CH;

③ 用 P1.0 启动外设发包装命令; ④ 用 R�R�作箱数计数器。

ORG 1000H

AJMP START

ORG 000BH

AJMP COUNT

ORG 1200H

START: MOV P1.0,#0 ;P1.0 为低

MOV R5,#0

MOV R4,#0 ;箱数计数器清“0”

MOV TMOD,#6 ;置 T0 工作方式

MOV TH0,#9CH

MOV TL0,#9CH ;计数初值送计数器

SETB EA ;CUP 开中断

SETB ET0 ;T0 开中断

Page 173: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·164·

SETB TR0 ;启动 T0

SJMP $ ;模拟主程序

COUNT: MOV A,R4

ADD A,#1

MOV R4,A

MOV A,R5

ADDC A,#0

MOV R5,A ;箱计数器加“1”

SETB P1.0 ;启动外设包装

MOV R3,#100

DLY: NOP ;给外设足够时间

DJNZ R3,DIY ;延时

CLR P1.0 ;停止包装

RETI ;中断返回

END

3.门控位 GATE 的应用

【例 9】用 GATE 控制位,测量 INT1(P3.3)引脚上正脉冲的宽度(设晶振为 12MHz,

正脉冲宽度小于 65ms)。

程序段为: MOV TMOD,#90H ;置 T1 方式控制字

MOV TL1,#0

MOV TH1,#0 ;T1 从 0 开始计数

JB P3.3,$ ;等 INT1低电平

SETB TR1 ;T1 允许计数

JNB P3.3,$ ;等 INT1高电平

JB P3.3,$ ;等 INT1低电平

CLR TR1 ;停止计数

M

执行完 CLR TR1 后 T1 停止计数,此时 TH1、TL1 的内容即为正脉冲宽度(单位:μs)。

Page 174: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·165·

测量误差将小于 3 个机器周期。

6.4 MCS-51 系列单片机串行接口

MCS-51 系列单片机内集成了一个全双工串行接口,本节介绍其主要特性、硬件结构与

软件控制、工作方式及波特率设置。

6.4.1 串行接口的主要特性

1. 串行通信基本概念

所谓串行通信就是不同权值的二进制信息位按时间顺序一位一位地传送的通信方式。

串行通信的特点是远距离通信时硬件成本低,但传输速度也较低。我们称每秒钟传送

的二进制位数为波特率(单位为 bps——每秒位数)。若发送/接受一位信息的时间为 t,则

波特率就是 1/t。

串行通信有两种基本通信方式:异步方式和同步方式。异步方式是以单个数据为单位

进行打包传送,同步方式是以数据块为单位进行打包传送,它们的数据格式如图 6-42 所示。

(a)异步串行通信的数据格式 (b)同步串行通信的数据格式

图 6-45 串行通信的数据格式

2. MCS-51 系列单片机串行接口的主要特性

MCS-51 系列单片机有一个全双工的串行接口,可进行异步串行接收和串行发送,可编

程选择四种工作方式,波特率可由用户设置。8051 通过引脚 RXD(P3.0 串行数据接收端)

和引脚 TXD(P3.1 串行数据发送端)与外界进行通信。在功能上它可以做 UART(Universal

Asynchronous Receiver/Transmitter)用,也可用作同步移位寄存器。

6.4.2 串行接口的结构与控制

1. 数据缓冲器 SBUF

串行口中有两个物理空间上各自独立的发送缓冲器和接收缓冲器。这两个缓冲器公用

一个地址 99H,发送缓冲器只写不读,接收缓冲器只读不写。接收缓冲器是双缓冲的,以

避免在接收下一帧数据之前,CPU 未能及时响应接收器中断,没有把上一帧数据读走而产

生两帧数据重叠问题。

Page 175: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·166·

2. 串行口控制寄存器 SCON

其字节地址 98H,可位寻址,位地址 98H~9FH。格式为:

SCON (98H) SM0 SM1 SM2 REN TB8 RB8 TI RI

D0 D7

包括方式选择位,接收发送控制位及状态标志位。

SM0、SM1:串行口方式选择位,如表 6-6 所示。

表 6-6 串行口工作方式

SM0 SM1 方式 功能说明

0 0 0 位移寄存器方式(用于 I/O 扩展)

0 1 1 8 位 UART,波特率可变(T1 溢出率/n)

1 0 2 9 位 UART,波特率为 fosc/64 或 fosc/32

1 1 3 9 位 UART,波特率可变(T1 溢出率/n)

表中 n=32/2�����

(SMOD 是特殊功能寄存器 PCON 中的波特率倍增位)

SM2:允许方式 2 和方式 3 多机通信控制位。在方式 2 或方式 3 中,如 SM2=1,则接收

到的第 9 位数据(RB8)为“1”时,置位接收中断标志 RI (RI=1);如 SM2=0,则 RB8 无

论为何值,均置位 RI。在方式 1 时,如 SM2=1,则只有在接收到有效停止位时才置位 RI,

若没有接收到有效停止位,则 RI 清“0”。在方式 0 中,SM2 应为“0”。

REN:允许接收控制位。由软件置“1”时,允许接收,置“0”时,禁止接收。

TB8:在方式 2 和方式 3 中要发送的第 9 位数据。需要时由软件置位或复位。

RB8:在方式 2 和方式 3 中是接收到的第 9 位数据。在方式 1 时,如 SM2=0,SM2=0,

RB8 是接收到的停止位。在方式 0 中,不使用 RB8。

TI:发送中断标志。在方式 0 串行发送第 8 位结束时由硬件置“1”,或在其他方式中

串行发送停止位的开始时置“1”。必须由软件清“0”。

RI:接收中断标志。在方式 0 接收到第 8 位结束时由硬件置“1”,或其他方式接收到

停止位的中间时置“1”。必须由软件清“0”。

3. 特殊功能寄存器 PCON

其直接地址 87H,没有位寻址功能。与串行口有关的只有 PCON 的最高位。

PCON (87H) SMOD

SMOD:波特率选择位。当 SMOD=1 时,波特率加倍。

Page 176: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·167·

6.4.3 串行接口的工作方式

串行口具有 4 种工作方式,我们从应用角度,重点讨论各种方式的功能和外特性,对

串行口的内部逻辑和内部时序的细节做详细讨论。

1. 方式 0

方式 0 为同步移位寄存器输入/输出方式,可外接移位寄存器,以扩展 I/O 口,也可接

同步输入/输出设备。按方式 0 工作,波特率是固定的,为 Fosc/12。这时数据的传送,无

论是输入还是输出,均通过引脚 RXD(P3.0)端,移位同步脉冲由 TXD(P3.1)输出。发送

/接收一帧数据为 8 位二进制数,低位 LSB 在先,高位 MSB 在后。

(1)方式 0 发送

当一个数据写入发送缓冲器 SBUF 时,串行口即将 8 位数据以振荡频率的 1/12 的波特

率,将数据从 RXD 端串行输出,TXD 端输出移位同步信号,发送完时中断标志 TI 置“1”。

(2)方式 0 接收

当串行口定义为方式 0 并置“1”REN 后,便启动串行口以振荡频率的 1/12 的波特率

接收数据,RXD 为数据输入端,TXD 为同步移位信号输出端,当接收器接收到 8 位数据时,

置“1”中断标志 RI。

串行口接收/发送时序如图 6-46 所示。其硬件逻辑如图 6-47 所示。

图 6-46 方式 0 时序

Page 177: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·168·

图 6-47 方式 0 扩展 I/O 口硬件逻辑图

2. 方式 1

串行口定义为方式 1 时,传送一帧数据为 10 位,其中 1 位起始位,8 位数据位(先低

位后高位),1 位停止位。方式 1 的波特率可变,波特率=2����

/32×(T1 的溢出率)。

(1)方式 1 发送

方式 1 开始发送时,SEND 和 DATA 都是低电平,把起始位输出到 TXD,一位时间后,

DATA 变高电平,数据在移位脉冲的作用下由 TXD 端输出。发送一帧信息为 10 位,1 位起始

位,8 位数据位,1 位停止位。CPU 执行一条写入发送数据缓冲器 SBUF 指令(MOV SBUF,A),

数据字节写入 SBUF 后,便启动串行口发送器发送,当发送完数据后,中断标志 TI 置“1”。

(2)方式 1 接收

方式 1 接收时,数据从SEND 端输入。在 REN 置“1”后,就允许接收器接收。接收器

以波特率 16 倍的速度采样 RXD 端的电平。当采样 RXD 引脚上“1”到“0”的跳变时启动接

收器接收并复位内部的 16 分频计数器以便实现同步。计数器的 16 个计数状态把一位的时

间分成 16 份,在每份时间的 7,8 和 9 计数状态,位检测器采样 RXD 的值,接收的值是 3

次采样中取至少两次相同的值(用 3 取 2 举手表决),以排除噪声干扰。若起始位接收到的

值不是“0”,则起始位无效,复位接收电路。在检测到起始位有效时,则移入输入移位寄

存器开始接收本帧其余数据信息。当 RI=0,同时接收到停止位为“1”(或 SM2=0)时,停

止位进入 RB8,置“1”中断标志 RI。若以上两个条件任一条件不满足,所有接收信息将丢

失,因此中断标志 RI 必须在中断服务程序中由用户清“0”。通常串行口以方式 1 工作时,

SM2 置为“0”。接收/发送时序波形如图 6-48 所示。

3. 方式 2

串行口定义为方式 2 时候,串行口被定义为 9 位异步通信接口。传送一帧信息为 11

位,其中 1 位起始位,8 位数据位(先低位后高位),1 位附加的可程控为“1”或“0”的

第 9 位数据位,1 位停止位。方式 2 的波特率是固定的,波特率为 2����

/64×fosc。

(1)方式 2 发送

方式 2 发送时,数据由 TXD 端输出。发送一帧信息为 11 位,附加的第 9 位数据是 SCON

中的 TB8,可由软件置位或清零,可作多机通信中的地址,数据标志,也可作数据的奇偶

校验位。CPU 执行一条写入发送缓冲器指令(例如 MOV SBUF,A),就启动发送器发送,发

送完一帧信息,置“1”TI 中断标志。

(2)方式 2 接收

Page 178: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·169·

图 6-48 方式 1 时序

在方式 2 接收时,数据由 RXD 端输入,REN 被置“1”以后,接收器开始以波特率 16

倍的速率采样 RXD 电平,检测到 RXD 端由高到低的负跳变时,启动接收器接收,复位内部

16 分频计数器,以实现同步。计数器 16 个计数状态把一位时间分成 16 等分,在每位时间

的第 7,8,9 个状态,位检测采样 RXD 的值,若接收到的值是“0”,则起始位无效并复位

接收电路,当采样到 RXD 的端从“1”到“0”的跳变时,确认起始位有效后,则开始接收

本帧其余信息。接收完一帧信息后,在 RI=0,SM2=0 时,或接收到的第 9 位数据为“1”时,

8 位数据装入接收缓冲器,第 9 位数据装入 SCON 中的 RB8,并置“1”中断标志 RI,若不

满足上述两个条件,接收到的信息将丢失。方式 2 的接收/发送时序如图 6-49 所示。

图 6-49 方式 2、3 时序

4. 方式 3

Page 179: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·170·

串行口被定义为方式 3 时,为波特率可变的 9 位异步通信方式。除了波特率外,方式

3 与方式 2 类同,这里不再赞述。方式 3 波特率=2����

/32×(T1 溢出率),波形图如图 6-49

所示。

6.4.4 串行接口的波特率设计

根据串行口的四种工作方式可知:

(1)方式 0 为移位寄存器方式,波特率是固定的:

方式 0 波特率=Fosc/12;

(2)方式 2 为 9 位 UART,波特率有两种选择:

方式 2 波特率=(2����

/64)×Fosc。

波特率仅与 PCON 中 SMOD 的值有关,当 SMOD=0 时,波特率为 Fosc/64;当 SMON=1 时,

波特率为 Fosc/32。

(3)方式 1 和方式 3 的波特率可变,由定时器 T1 溢出速率控制。方式 1 和方式 3 波

特率=(2����

/32)×(T1 溢出率),当 SMOD=1 时,波特率= 1/16×(T1 溢出率),当 SMOD=0

时,波特率=1/32×(T1 溢出率)。

从以上分析可知,串行口工作在方式 1 和方式 3 时,其波特率的变化与 T1 的溢出率有

关。

(4)定时器 T1 作波特率发生器

定时器 T1 作波特率发生器时,主要取决于 T1 的溢出率。其溢出率和所采用工作方式

有关。

当 C/ T =1 时,T1 被选择为计数器方式。

T1 溢出率=计数速度/(2-初值)

其中 K 为定时器 T1 的位数:

T1 方式 0,K=13

T1 方式 1,K=16

T1 方式 2,K=8

其中计数速度为外部 T1(P3.5)引脚的输入时钟频率,该频率不超过 fosc/24。当 C/T=0

时,T1 被选择为定时器方式。

T1 溢出率=Fosc/[12×(2-初值)]

计数速度为 Fosc/12,既每个机器周期计数一次。

串行通信时,定时器 T1 作波特率发生器,经常采用 8 位自动装载方式(方式 2),这

样不但操作方便,也可避免重装时间常数的定时误差。并且 T0 可使用定时器方式 3,这时

T1 作波特率发生器,故当串行口工作在方式 1,方式 3 时:

波特率=2����

/32×(T1 溢出率)=2����

×Fosc/[32×12(2-初值)]

表 6-7 给出常用波特率和定时器 T1 各参数关系。

Page 180: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·171·

表 6-7 定时器 1 产生的常用波特率

定时器 1波特率

串行口方式 1~3 情况Fosc/MHz SMOD

C/ T 模式 重装载值

62.5K 12 1 0 2 FFH

19.2K 11.059 1 0 2 FDH

9.6K 11.059 0 0 2 FDH

4.8K 11.059 0 0 2 FAH

2.4K 11.059 0 0 2 F4H

1.2K 11.059 0 0 2 E8H

137.5K 11.986 0 0 2 1DH

110 6 0 0 2 72H

110 12 0 0 1 FEEBH

6.4.5 串行接口的应用

1. 方式 0 的应用

【例 10】应用串行口方式 0 输出,在串行口外接移位寄存器,构成显示器接口。如图

6-50 所示。3 片(理论上可以为 n 片,为举例方便而用 3 片)74LS164 串接成 24 位并行输

出移位寄存器,每片 74LS164 接一个共阳极 8 段 LED 显示器,构成三位数据显示,这里 P1.0

作串行输出选择信号(只有 P1.0 为高时,串行同步信号 TXD 才能输出),这种显示称为静

态显示(非动态扫描式显示),CPU 不必为显示服务而频繁执行扫描任务。���74LS164���������� ������������74LS164���������� ������������74LS164���������� ������������������������

P1.0TXD

RXD

8051

���

图 6-50 串行口作静态显示器接口

程序中 TABLE 是字形码(段码表)首地址,ADD A,#13 是地址调整指令,以查字形表,

这里#13 是指查表指令与字形码地址 TABLE 的距离,即相隔的字节数。

设显示缓冲区设在 DISBUF 开始的区域中,下面是显示子程序清单。

DISPLY: MOV SCON,#0 ;选择串行口方式 0 发送

Page 181: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·172·

MOV R7,#3 ;字节计数

MOV R0,DISBUF ;R0 指向显示缓冲区

SETB P1.0 ;选通 TXD 同步移位时钟

L1: MOV A,@R0 ;取要显示的数

ADD A,#13 ;地址调整

MOVC A,@A+PC ;查字形表

MOV SBUF,A ;开始发送

JNB TI,$ ;等待一帧发送完

CLR TI ;清发送中断标志

INC R0 ;修改显示缓冲区指针

DJNZ R7,L1 ;三个 LED 显示完了吗?

CLR P1.0 ;关 TXD

RET ;返回

TABLE: DB 11H,D7H,32H,92H,D4H ;

DB 98H,18H,D8H,10H,90H ;字形码表

2. 方式 1 的应用

【例 11】把内部 RAM 40H~5FH 单元中的 ASCⅡ码,最高位 D7 加上奇偶校验位后由甲

机发送到乙机,波特率为 1.2Kbps,晶振 Fosc=11.059MHz。

解:(1)设置甲机为串行方式 1 发送状态,SCON←40H;乙机为串行方式 1 接收状态,

SCON←50H。

(2)甲乙机用定时器 T1 工作在方式 2 波特率发生器,波特率为 1.2K,当

Fosc=11.059MHz 时,查表 6-7 重装初值为 E8H。定时器 T1 TMOD←20H。

(3)ASCⅡ码奇偶校验码位的加入,可采用以下程序实现:

MOV A,#ASCⅡ ;P=0,偶数个“1”

MOV C,P ;P=1,奇数个“1”

CPL C ;奇校验

MOV Acc.7,C ;在 D7 加上奇校验位

编程:甲机软件

MOV TMOD,#32 ;定时器 T1 为方式 2

MOV TL1,#0E8H ;

MOV TH1,#0E8H ;赋初值

SETB TR1 ;启动 T1

MOV SCON,#40H ;串行口方式 1

MOV R0,#40H ;R0 指针

MOV R1,#32 ;发送 32 个字节

NEXT: MOV A,@R0 ;取 ASCⅡ码

LCALL SOUT ;转发送子程序

Page 182: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·173·

INC R0 ;修改指针

DJNZ R1,NEXT ;未发送完则继续

�SOUT: MOV C,P ;

CPL C

MOV Acc.7,C ;插入奇校验码

MOV SBUF,A ;发送

JNB TI,$ ;等发送中断标志

CLR TI ;允许再发送

RET

乙机软件

设乙机接收到的 32 个字节存放在 60H~70H 单元中。

MOV TMOD,#32 ;

MOV TL1,#0E8H ;

MOV TH1,#0E8H

SETB TR1

MOV R0,#60H ;ASCⅡ码首址指针

MOV R1,#32 ;接收 32 个字节

NEXT: LCALL SIN ;转接收子程序

JNC ERR ;若“1”的个数为偶则出错

MOV @R0,A ;接收的字符存入缓冲区

DJNZ R1,NEXT ;未完则继续

�SIN: MOV SCON,#50H ;启动串行口接收

JNB RI,$ ;等接收中断标志

MOV A,SBUF ;接收数据送 A

MOV C,P ;C←(P)

ANL A,#7FH ;甩掉奇偶位

RET

�ERR: �3. 方式 2 或方式 3 的应用

串行口方式 2,方式 3 常用于多机通信,如果采用主从式构成多机系统,多台从机可

以减轻主机的工作负担,构成廉价的分布式多机系统。电路结构如图 6-51 所示。

主机与从机可以双向通信,从机之间只有通过主机才能通信。串行口方式 2 或方式 3

数据帧第 9 位是可编程位,可利用程控灵活改变 TB8 的状态,接收时,当接收机的 SM2=1

时,只有接收到的 RB8=1,才能置位 RI,接收数据才有效,而当接收机 SM2=0 时,无论收

到的 RB8 是“0”还是“1”都能置位 RI,接收到的数据有效。利用这种特点可实现多机通

信。

Page 183: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·174·

图 6-51 主从式结构的多机系统

设一台多机系统,有一个主机,三个从机,从机的地址编号为 00H,01H,02H。主从

机设置相同的工作方式(方式 2 或方式 3)和相同的波特率。主从机工作原理流程如图 6-52

所示。

主机首先发出要求通信的从机地址信号(00H,01H 或 02H),此时,TB8=1,即发送地

址帧时 TB8 一定为“1”。而所有从机的 SM2 也都置为“1”,且接收到的第 9 位“1”信号进

入 RB8。因此,所有从机均满足为 SM2=1,RB8=1 的条件,都可置“1”RI,激活 RI,进入

各自的中断程序。在各自中断服务程序中,接收这个地址信号并识别这个地址,认同的从

机置 SM2=0,不同的从机 SM2=1,保持不变。这样便为认同的从机接收数据帧准备好必要条

件(即 RI=0 及 SM2=0)。

此后,主机发送的为数据帧,此时,TB8=0,从机接收到的数据帧,其第 9 位进入 RB8,

即 RB8=0。对于未被主机认同的从机,由于其 SM2=1,而接收到的第 9 位使它的 RB8=0,因

此不能激活 RI,接收的数据帧自然丢失。唯有被主机选中的从机 SM2=0,而不管接收到的

第 9 位为何值,都可激活 RI,接收数据有效,这样便可完成主机、从机一对一的数据通信。

图 6-52 多机通信原理流程

以上介绍的是多机通信的原理。利用方式 1、方式 2、方式 3 来实现多机通信,如何编

写主从机的初始化程序、中断服务子程序,要视系统的具体要求而定,这里不再赘述。

Page 184: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·175·

6.5 模/数转换器和数/模转换器在

单片机系统中的应用

在智能仪器、信号检测与处理、工业自动控制等领域中,都存在着对模拟量甚至是对

非电量的控制与对模拟设备的控制问题,而 CPU 或 MPU 只能处理数字信号,因此常常需要

把模拟信号转换为数字信号或把数字信号转换为模拟信号。图 6-53 表示了计算机与外部模

拟世界的关系。

传感器

检 觳

信号调理 A D C 计算机 显示器

D A C信号调理

预处理 转 �

非电量

数字量模拟量模拟电量

控 刂

模拟世界

图 6-53 计算机与外部模拟世界的关系

该图中,ADC 是将模拟电信号转换为数字信号的转换器,称 A/D 转换器(Analog to

Digital Converter),DAC 是将数字信号转换为模拟信号的转换器,称 D/A 转换器(Digital

to Analog Converter)。这种器件的内部结构和工作原理已在前修课程中学过,本节只介

绍它们在单片机系统中的应用。

6.5.1 A/D 转换器在 MCS-51 系列单片机系统中的应用

1. 常用 A/D 转换器性能比较

A/D 转换器有很多种型号,它们的分辨率、转换时间等有所不同,转换原理可分为双

积分型和逐次逼近比较型,表 6-8 给出了常用的几种 A/D 转换器及它们的主要性能对照。

2.ADC0808/ADC0809 的内部结构与引脚功能

ADC0808/ADC0809 是具有锁存控制的 8 路 8 位高速 A/D 转换集成芯片,采用 CMOS 工艺

制造,转换类型为逐次逼近比较式,28 引脚双列直接封装,典型转换时间为 100us,其输

出与 TTL 电平全兼容,因此可直接与单片机连接,当采用单一的+5V 电源供电时,输入电

压范围为 0~5V。ADC0808/ADC0809 完全兼容,可以互相替换。图 6-54 和图 6-55 分别为

ADC0808/ADC0809 的内部结构框图和引脚图。

Page 185: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·176·

表 6-8 几种常用 A/D 集成芯片性能比较

注:表中“*”者为双积分型 A/D,其余均为逐次逼近比较型 A/D。

引脚功能说明如下:

IN7~IN0:8 路模拟量输入端;

D�~D�:8 位数字量输出端;

ADDC、ADDB、ADDA:3 位地址输入线,用于选择模拟输入通道,见表 6-9;

芯 片

型 号

分辩率

(位数)转换时间 转换误差 模拟输出范围

数字输出

电平

是否外部

时钟

工作电压

(Vcc)基准电压(Vref)

ADC0801

0802

0803

0804

8 位 100us±1/2LSB

~±1LSB0~+5V TTL 电平 可不要 单电源+5V

可不外接或 Vref

为 1/2 量程值

ADC0808

0809

0816

0817

8 位 100us±1/2LSB

±1LSB

0~+5V 0808,

0809 为 8 通道,

0816,0817 为 16

通道

TTL 电平 要 单电源±5VVref(+)≤Vcc

Vref(+)≥0

ADC1210 12 位(或 10 位)100us(12 位)

30us(10 位)

±1/2LSB

(非线性

误差)

0~+5V

0~+10V

-5~+5V

CMOS 电平

(由 Vref

决定)

要 +5V 或±15V +5V 或±15V

AD574 12 位(或 8 位) 25us

±1LSB

(非线性

误差)

0~+10V

0~+20V

-5~+5V

-10~+10V

TTL 电平 不要±15V 或±12

和 5V

无需外供

*7109 12 位 ≥30ms±2LSB

-4~+4V TTL 电平 可不要 +5V 和-5VVref 为 1/2 量程

*14433 7/2(BCD 码) ≥100ms ±1LSB-0.2~+0.2V

-2~+2VTTL 电平 可不要 +5V 和-5V Vref 为量程值

*7135 9/2(BCD 码) 100ms ±1LSB -2~+2V TTL 电平 要 +5V 和-5VVref 为 1/2 量程

Page 186: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·177·

八路

模拟

开关

地址

锁存

与译码

IN0IN1IN2IN3IN4IN5IN6IN7

A

B

C

ALE

控制与时序

SAR

树状开关

256R电阻网络

三态

输出

锁存

缓冲器

D0D1D2D3D4D5D6D7

OE

REF(+)

REF(-)

EOC

START CLK

VCC

GND

������������������������������� �����������������������������������������������������������������������������������������

图 6-54 ADC0808/0809 内部结构图 图 6-55 ADC0808/0809 引脚图

表 6-9 地址与所选通道的对应关系

ALE:地址锁存允许信号,输入,高电平有效;

START:A/D 转换启动信号,输入,高电平有效;

EOC:A/D 转换结束信号,输出,高电平有效;

OE:数据输出允许信号,输入,高电平有效;

CLK:转换时钟输入端;

Vref(+):正的基准电压输入端;

Vref(-):负的基准电压输入端;

Vcc:+5V 工作电压;

GND:接地端。

3.ADC0808/0809 在 MCS-51 单片机系统中的应用

(1)ADC0808/0809 与 MCS-51 单片机的硬件连接

ADDC ADDB ADDA 所选通道

0 0 0 IN0

0 0 1 IN1

0 1 0 IN2

0 1 1 IN3

1 0 0 IN4

1 0 1 IN5

1 1 0 IN6

1 1 1 IN7

Page 187: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·178·

A/D转换器与单片机的硬件接口一般有两种方法,一种方法是通过并行I/O接口与8031

单片机连接(例如 8155 或 8255)需占用两个并行口(其中一个口接 A/D 转换器数据线,

另一个口用来产生 A/D 转换器工作控制信号);第二种接口方法是利用 ADC0808/0809 转换

器三态输出锁存功能,可以直接与 8031 的总线相连接,如图 6-56 所示,在系统中把

ADC0808/0809 转换器当作外部 RAM 单元对待。

系统中的 ADC0808/0809 转换器的片选信号由 P2.7 线选控制,若假设地址中的无关位

均为 1,则其通道 IN0~IN7 地址分别为 7FF8H~7FFFH。当 8031 产生 WR 写信号时,则由

一个或非门产生转换器的启动 START 和地址锁存信号 ALE(高电平有效),同时将地址总线

信息由 A、B、C 输入并锁存,模拟量通过被选中的通道送到 A/D 转换器,并在 START 下降

沿时开始逐位转换。当转换结束时,转换结束信号 EOC 变高电平。经反相器可向 CPU 发中

断请求。当 8031 产生 RD 读信号时,则由一个或非门产生 OE 输出允许信号(高电平有效),

使 A/D 转换结果读入 8031 单片机。图 6-56 中设 8031 的晶振为 6MHz,ALE 为 1MHz,作为

转换器的时钟信号 CLK。

图 6-56 8031 与 ADC0808/0809 转换器接口电路

(2)ADC0808/0809 转换器程序设计方法

根据测量系统要求不同以及 CPU 的忙闲程度,可采用三种软件编程控制方式:程序查

询方式、延时方式和中断控制方式。

① 程序查询方式

对于 A/D 转换器而言,所谓程序查询方式即条件传送 I/O 方式。在接入模拟量信息后,

发出一 A/D 转换命令,查询 P3.2( INT0 )引脚电平是否为 0(A/D 转换数据是否准备就绪)

来读取 A/D 转换器的数据,不为 0 则继续查询,直到 P3.2( INT0 )引脚电平为 0,这种方

法较好地协调了 CPU 转换器在速度上的差别,通常用于检测回路较少、而 CPU 工作不十分

繁忙的情况。

【例 12】模拟量由 IN0 输入,转换成对应数字量之后存入内部 RAM 的 40H 单元中。

Page 188: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·179·

程序清单:

MOV R0,#40H ;置数据缓冲区指针

MOV DPTR,#7FF8H ;置 INO 通道地址

MOVX @DPTR,A ;IN0 接 A/D,并启动 A/D

JB P3.2,$ ; INT0 为高,则句许查询

MOVX A,@DPTR ;数据读入 A

MOV @R0,A ;存入 40H 单元

【例 13】求通道 7 模拟量 8 次采样的算术平均值,并存入内部 RAM 的 7FH 单元中。

(1)程序清单:

CLR A ;清除工作单元

MOV R2,A ;

MOV R3,A ;

MOV R7,#8 ;设采样计数器

MOV DPTR,#7FFFH ;选 IN7 通道

L1: MOVX @DPTR,A ;启动 A/D 转换

JB P3.2,$ ;等待 A/D 转换结束

MOVX A,@DPTR ;采样

ADD A,R2 ;加低 8 位

MOV R2,A ;存低 8 位

MOV A,R3 ;取高 8 位

ADDC A,#0 ;加 CY

MOV R3,A ;存高 8 位

DJNZ R7,L1 ;未完则继续

MOV R7,#3 ;R7 作移位计数器

L2: CLR C ;清除 CY

MOV A,R3

RRC A

MOV R3,A

MOV A,R2

RRC A

MOV R2,A

DJNZ R7,L2 ;R3R2 内容右移三次即除 8

MOV 7FH,A ;存算术平均数

这种取采样平均值的方法,可以消除干扰,使采样数据更稳定可靠。

查询方式中,EOC 也可接 P1 口或扩展接口的某一位。

② 延时方式

这种方式实际是无条件传送 I/O 方式,当向 A/D 转换器发出启动命令后,即进行软件

延时,延时时间取决于进行一次 A/D 转换所需的时间,此时应确保 A/D 转换器转换完毕,

从 A/D 转换器中读取数据即为采样值。若 8031 的晶振为 6MHz,ALE 为 1MHz,A/D 转换时间

Page 189: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·180·

小于 100μs,则延时程序段如下:

MOV R�,#25 ;延时常数

DJNZ R�,$ ;重复执行一次 4μs

为了确保转换完成,延时时间一定要大于 A/D 转换时间。

③ 中断采样方式

不论采用查询方式还是采用延时方式,CPU 大部分时间都消耗在查询或延时等待上,

这是在多路的采样检测、并且 CPU 工作较忙的测控系统中,不宜采用的方式,而应改用中

断方式。在中断方式中,CPU 启动 A/D 转换后,可以继续执行主程序,当 A/D 转换结束时,

发出一转换结束号 EOC,该信号经反相器接 8031 的 P3.2( INT0 )引脚,向 CPU 发出中断

请求。CPU 响应中断后,即可读入数据并进行处理。

【例 13】根据图 6-56 接口电路连接图,采用中断方式对 IN0 通道的模拟输入依次采

样 16 个点,存放在内部数据存储器 70H~7FH 单元中待用。

程序分三部分:

初始化程序:对中断 INT0 和各工作单元初始化;

主程序:启动 A/D 转换,控制通道地址/数据存储器地址修改;

中断服务程序:读取 A/D 转换器数据,送存。

程序清单如下:

;初始化程序

ORG 0

LJMP START

ORG 03H

LJMP INT0P

START : MOV R0,#70H ;RAM 首地址

MOV R7,#16 ;计数器

MOV SP,#3FH ;设堆栈区

SETB IT0 ;边沿触发

SETB EX0 ; INT0 开中断

SETB EA ;CPU 开中断

;主程序

MAIN0: MOV DPTR,#7FF8H ;A/D 通道首址

MAIN: CLR F0 ;清 F0

MOVX @DPTR,A ;启动 A/D 转换

TEST: JNB F0,DONE ;测试

DJNZ R7,MAIN ;16 个点未完,则继续

DONE: ⋯ ;继续执行

SJMP TEST

;中断处理程序

Page 190: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·181·

INT0P: PUSH ACC ;进栈

SETB F0 ;置位 F0

MOVX A,@DPTR ;读 A/D 转换数据

MOV @R0,A ;A/D 数据送存 RAM

INC R0 ;地址加“1”

POP ACC ;退栈

RETI ;返回

6.5.2 D/A 转换器在 MCS-51 单片机系统中的应用

1.常用 D/A 转换器性能比较

若按数字量输入端分类,可将 D/A 转换器分为无数据锁存器的 D/A、单数据锁存器的

D/A、双数据锁存器的 D/A 和接收串行数字量输入的 D/A。若按模拟量输出类型,可将 D/A

转换器分为电压输出型和电流输出型,几种常见 D/A 转换器芯片的主要特性列于表 6-10。

2.DAC0832 的内部结构与引脚功能

DAC0832 是 DAC0800 系列的 8 位数/模转换器,可直接与各类 CPU 或总线连接,转换控

制容易,价格相对低廉,因此,在微机系统中得到广泛应用。它是 20 引脚双列直插式封装,

COMS 工艺制造,数字输入端具有双重缓冲功能,工作方式可选择为双缓冲、单缓冲和直通

(无缓冲)。输入数字量与 TTL 电平兼容,建立时间为 1μs,是电流型输出的 D/A 转换器,

后接运算放大器可转换为电压输出。图 6-57 和图 6-58 分别为 DAC0832 的内部结构框图和

引脚图。

IN_R

D0D1D2D3D4D5D6D7

DAC_R DAC

ILE

CS

WR1

XFER

WR2

���VREFIOUT2IOUT1

Rfb

AGND

DGND

VCC

LE1 LE2 ���������������������������� ����������������������������� �����������������������

图 6-57 DAC0832 结构框图 图 6-58 DAC0832 引脚图

Page 191: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·182·

表 6-10 几种常用 D/A 集成芯片的性能比较

图 6-57 中,IN-R 为输入寄存器,DAC-R 为 DAC 寄存器,DAC 为 D/A 转换器。

引脚功能说明如下:

ILE:输入锁存允许信号,高电平有效;

CS :输入寄存器选择信号,低电平有效;

WR1:写信号 1,输入寄存器写选通信号,低电平有效;

输入锁存信号 LE1由 ILE、 CS 和 WR1 的逻辑组合产生,即 LE1 WR1 CS ILE= ⋅ ⋅ 。当

ILE 为高电平, CS 、 WR1 同时为低电平时, LE1为高电平,输入寄存器的输出随输入变

化;当 WR1变为高电平时, LE1成为低电平,输入数据被锁存在输入寄存器中。

WR2 :写信号 2,DAC 寄存器的写选通信号,低电平有效。

XFER :数据传送控制信号,低电平有效。

DAC 寄存器的锁存信号 LE2 由 WR2 、XFER 的逻辑组合产生,即 LE2 WR2 XFER= ⋅ 。

当 WR2 、XFER 同时为低电平时,LE2 为高电平,DAC 寄存器的输出随输入变化;当 WR2

变为高电平时,LE2 成为低电平,LE2 的负跳变将输入寄存器中的数据锁存在 DAC 寄存器

中,供 D/A 转换器转换。

D�~D�:8 位数字量输入端。

I����:DAC 的电流输出端 1,它是数字输入端逻辑电平为 1 的各位输出电流之和。DAC

寄存器内容随输入的代码变化,DAC 寄存器内容为全 1 时,I����最大,DAC 寄存器内容为全

0 时,I����最小。

I����:DAC 电流输出端 2,它等于常数减去 I����,即 I����+ I����=常数。此常数对应于一

固定基准电压的满量程电流。

R�:反馈电阻。反馈电阻被制作在芯片内部,由于 DAC0832 是电流型输出,若要转换

D/A 型号 位数转换时间

(ns)

非线性误

差(%)工作电压(V)

基准电压

(V)功耗(mw)

与 TTL 兼

DAC0832 8 1000 0.2~0.5 +5~+15 -10~+10 20 是

AD7524 8 500 0.1 +5~+15 -10~+10 20 是

AD7520 10 5000.05~

0.2+5~+15 -25~+25 20 是

AD561 10 2500.025~

0.05

Vcc+5~+16

V��-10~-16—

正电源:8~10

负电源:12~14是

AD7521 12 5000.0~

0.05+5~+15 -25~+25 20 是

DAC1210 12 1000 0.05 +5~+15 -10~+10 20 是

Page 192: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·183·

为电压输出,必须在输出端接一个运算放大器,因此 R�作为外接运放的反馈电阻。

V��:基准电压输入端。V��一般在-10V~+10V 范围内,由外电路提供。

V��:逻辑电源输入端,取值范围为+5V~+15V,+15V 最佳。

AGND:模拟地,芯片模拟电路接地点。

DGND:数字地,芯片数字电路接地点。

在使用时一般将模拟地与数字地相接。

为保证 DAC0832 可靠地工作,要求 WR1

和 WR2 的宽度不小于 500ns,若 V��=15V,

则可为 100ns,对于输入数字的保持时间应

不小于 90ns。这在与微机接口时都容易满

足。同时不用的数字输入端不能悬空,应根

据要求接地或接 V��。DAC0832 的三种工作方式:

双缓冲方式:即数据经过双重缓冲后再

送入 D/A 转换电路,执行两次写操作才能完

成一次 D/A 转换。这种方式可在 D/A 转换的

同时进行下一个数据的输入,以提高转换的

速率。更重要的是这种方式特别适用于要求

同时输出多个模拟量的场合。此时,要用多

片 DAC0832 组成模拟输出系统,每片对应一

个模拟量。

单缓冲方式:不需要多个模拟量同时输

出时,可采用此种方式。此时,两个寄存器

之一处于直通状态,输入数据只经过一级缓

冲送入 D/A 转换电路。这种方式只需要执行

一次写操作,即可完成 D/A 转换。

直通方式:此时两个寄存器均处于直通

状态,因此要将 CS 、WR1、WR2 、XFER

都接数字地,ILE 接高电平。数据直接送入

D/A 转换电路进行 D/A 转换。这种方式可用

于不采用微机的控制系统中。

3.DAC0832 在 MCS-51 单片机系统中的

应用

(1)DAC0832 与 MCS-51 单片机的硬件连接

现在以 DAC0832 为例来说明单片机系统设计时,对于 D/A 转换器输入端与单片机接口,

有以下几种方法供选择。所有图中 I �即 I ���,I �即 I ���。① 单缓冲型接口方法

���������������������������� ���������������������������������������� ������������������������� �������������!��"��#�������#�� ���$���%�������������������������������� ���������������������������������������� ������������������������� �������������!��"��#�������#�� ���$���%�������������������������������� ���������������������������������������� ������������������������� �������������!��"��#�������#�� ���$���%����

(a)

(b)

(c)

图 6-59 单缓冲型接口

Page 193: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·184·

这种接口电路主要应用于一路 D/A 转换器或多路 D/A 转换不同步的场合。图 6-59 示

出单缓冲型的三种接口方法。

这类接口电路主要是把 D/A 转换器中的两个寄存器中任一个接成常通状态。

图 6-59(a)的接口电路是把 DAC 寄存器接成常通状态;即 ILE 接高电平,WR2和 XFER

接地,CS与 P2.7 连接, WR1与单片机的写信号端连接。

图 6-59(b)接口电路是将输入寄存器接成常通状态;即将 ILE 接高电平,CS和 WR1

接地, WR2接单片机的 WR 端, XFER 与 P2.7 连接。

图 6-59(c)的接口电路使两个寄存器同时选通及锁存;即将 ILE 接高电平,WR1和 WR2

与单片机的 WR 连接,CS和 XFER 与 P2.7 连接。

以上三种单缓冲型的接口方法是最常用的。

② 双缓冲型接口方法

这种接口方法如图 6-60 所示,主要应用在多路 D/A 转换器同步系统中。该接口电路中,

P2.7 接CS,P2.6 接 XFER ,进行两次输出

操作完成数据的传送及转换。第一次 CS

(P2.7=0)有效时,完成将 D0~D7 数据线上

数据锁存到输入寄存器中。第二次当 XFER(P2.6=0)有效时,完成将输入寄存器中内

容锁存到 DAC 寄存器 ,并由 D/A 转换成模拟

电流,再经运算放大器变为模拟电压输出。

③ 直通型的接口方法

直通型电路如图 6-61 所示,将 CS、

WR1、 WR2 和 XFER 接地,而 ILE 端必须

保持高电平,DAC0832 的数据线 D0~D7 可接

微机系统独立的并行输出端口,如 MCS-51 的 P1 口或 8255 的 PA~PC 口,一般不能接微机

系统的数据总线,所以很少使用直通接口方法。

双缓冲型接口电路���������������������������� ���������������������������������������� ������������������������� ��������!�� ���"���

图 6-61 直通型接口电路

(2)D/A 转换器的输出方式

D/A 转换器输出分为单极性和双极性两种输出形式。其转换器的输出方式只与模拟量

输出端的连接方式有关,而与其位数无关。因此,这里仅以 8 位 D/A 为例进行讨论,其他

图 6-60 双缓冲型接口电路

���������������������������� ���������������������������������������� ������������������������� �������������!��"��#�������#�� ���$���%����%��

Page 194: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·185·

位数 D/A 转换器的输出端连接与此相同。

① 单极性输出

图 6-62 给出了 DAC0832 与 8031 单片机的接口电路。���������������������������� ���������������������������������������� ������������������������� �������������!��"��#�������#�� �������$�%����� ��������& ��������

�&����&���&��&���%�'��%�'��%�'��%�'�%�'�%�'��%�'��%�'��%�'�� %�'���%�'���%�'���%�'��%�'��%�'���%�'���%�'���%�'���%�'���%�'��%�'��%�'���%�'���%�'���%���� ���$%��&����������������(

图 6-62 DAC0832 单极性输出接口

在该图中,DAC0832 的输出端连接成单极性输出电路。其输入端连接成单缓冲型接口

电路。它主要应用于只有一路模拟输入或几路模拟量不需要同步输出的场合。这种接口方

式,将二级寄存器的控制信号并接,输入数据在控制信号作用下,直接打入 DAC 寄存器中,

并由 D/A 转换成模拟量输出。

图 6-62 中,ILE 接+5V,WR1和 WR2 同时连接到 8031 单片机的 WR 端口,CS和 XFER相连接到地址线 P2.7,DAC0832 芯片也作为 8031 的一个外部 I/O 端口,设地址无关位均为

1,则口地址为 7FFFH,CPU 对它进行一次写操作,把一个数据直接写入 DAC 寄存器,DAC0832

便输出一个新的模拟量。执行下面一段程序,DAC0832 输出一个新的模拟量,设待转换的

数据存放于 R3 中。

程序段:

MOV DPTR,#7FFFH

MOV A,R3

MOVX @DPTR,A

CPU 执行 MOVX @DPTR,A 指令时,便产生写操作,更新了 DAC 寄存器内容,输出

一个新的模拟量。在单极性输出方式下,当 Vref 接-5V(或+5V)时,输出电压范围是 0~

+5V(或 0~-5V)。若 Vref 接-10V(或+10V)时,输出电压范围为 0~+10V(或 0~-10V)。

其中数字量与模拟量的转换关系如表 6-11 所列。

(2)双极性输出

在一般情况下,把 D/A 转换器输出端接成单极性输出方式。但在随动系统中(例如电

机控制系统),由偏差产生的控制量不仅与其大小有关,而且与控制量的极性有关。这时,

要求 D/A 转换器输出为双极性,此时,只需在图 6-62 的基础上增加一个运算放大器即可,

其电路如图 6-63 所示。

Page 195: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·186·

表 6-11 单极性输出 D/A 关系

输 入 数 字 量

MSB ⋯ LSB模 拟 量 输 出(V)

1 1 1 1 1 1 1 1 ±V���(255/256)

1 0 0 0 0 0 1 0 ±V���(130/256)

1 0 0 0 0 0 0 0 ±V���(128/256)

0 1 1 1 1 1 1 1 ±V���(127/256)

0 0 0 0 0 0 0 0 ±V���(0/256)

D07

D16

D25

D34

D416

D515

D614

D713

ILE19

CS1

WR12

XFER17

WR218 DGND 10

AGND3

IO2 12

IO1 11

Rfb9

VREF 8

Vcc 20U1

DAC0832LCJ(20)

VCC

3

26

1 5

74

U2LM741

+12

-12

VREF(+5V)R1

20K

R3

10K3

26

1 5

74

U3LM741

R45.1K

+12

-12

R2

20K

VO2VO1

图 6-63 DAC0832 双极性输出电路

表 6-12 双极性输出 D/A 关系

输 入 数 字 量 模 拟 量 输 出 V��MSB ⋯ LSB +V���-V���

1 1 1 1 1 1 1 1 V���-1 LSB -| V���|+1LSB

1 1 0 0 0 0 0 0 V���/2 -| V���|/2

1 0 0 0 0 0 0 0 0 0

0 1 1 1 1 1 1 1 -1 LSB +LSB

0 0 1 1 1 1 1 1 | V���|/2-1 LSB | V���|/2+1LSB

0 0 0 0 0 0 0 0 -| V���| +| V���|在图 6-63 中,运算放大器 U3 的作用是把运算放大器 U2 的单向输出电压转变成双向输

出。其原理是将 U3 的输入端 2 通过电阻 R1 与参考电压 V���相连,因此运算放大器 U3 的输

出电压:

V��=-((R2/R3)V��+(R2/R1)V���)代入 R1、R2、R3 的值,可得:

V��=-(2V��+V���)

Page 196: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·187·

设 V���=+5V 当 V��=0V 时,V��=-5V;

当 V��=-2.5V 时,V��=0V;

当 V��=-5V 时,V��=+5V。

其 D/A 转换关系如表 6-12 所列。

(3)双路 D/A 同步控制系统设计

DAC0832 工作在双缓冲方式时,输入寄存器的锁存信号和 DAC 寄存器锁存信号分开控

制,这种方式适合于几路模拟量同步输出的控制系统,每一路模拟量输出需要一个

DAC0832,构成多个模拟量同步输出的控制系统。

图 6-64 为双极性输出双路 D/A 同步输出的 8031 系统。图中 U2 和 U3 的第一级缓冲器

的选通由 8031 的 P2.5 和 P2.6 线选控制,若设地址无关位均为 1,则其地址分别为 DFFFH

和 BFFFH,第二级缓冲共用一个选通信号(地址)由 8031 的 P2.7 线选控制,若设地址无

关位均为 1,则其地址为 7FFFH。8031 执行下列程序,即可完成双路 D/A 同步控制。���������������������������� ���������������������������������������� ������������������������� ������������!��"��#�������"�� ����$����$����������!����%�$"��#������$���

���������������������������� ���������������������������������������� ������������������������� �������������!��"��#�������"�� ����$����$����������!�����%�$"��#������$�����&�'����� ��������( ��������

�(����(���(��(���'�%��'�%��'�%��'�%�'�%�'�%��'�%��'�%��'�%�� '�%���'�%���'�%���'�%��'�%��'�%���'�%���'�%���'�%���'�%���'�%��'�%��'�%���'�%���'�%���'���� ���&'��(����������������)

���

图 6-64 双路 DAC0832 与 8031 接口电路

习题与思考题

1. MCS-51 系列单片机的 P0~P3 端口在作为输入口时为何先写全“1”?

2. MCS-51 系列单片机系统中 I/O 端口占用哪一个寻址空间?输入/输出指定的助记符

是什么?若读端口,使用哪一个读信号?

Page 197: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·188·

3.图 6-65 中:①8255A(1)的 A 口接 8 个发光二极管,工作在方式 0 输出,B 口接 8

个开关工作在方式 0 输入,若将开关状态在二极管上显示出来,试编程实现。

②8255A(2)的 A 口工作在方式 1 输出,B 口工作在方式 1 输入,C 口(除联络信号线)

工作在方式 0 输入,请写出初始化程序段。������������ 8031��������������� � ��������������������������������������������� ����������������������������8255A �� !������������������������8255A

�����"��#"��$"�����%�����%

74LS373

(1)

(2)

图 6-65 习题 3 硬件连接图

4. 8155A 有几种工作方式?如何选择其工作方式?若 A 口选通输入、允许中断,B 口

选通输出、不允许中断 ,停止计数器计数,试求出命令字。

5. 8155A 内部有 1 个多少位的计数器/定时器?它是加法计数还是减法计数?它有几

种工作方式?如何选择其工作方式?

6.8155A 内部集成了多大容量的存储器?其地址空间与定时器地址如何区别?

7.8051 单片机有几个中断源?几个中断优先级?同一级中断源的优先级顺序是怎样

的?

8.8051 单片机中,几个中断源的入口地址分别是什么?CPU 响应中断时是如何找到中

断服务程序的?

9.8051 单片机中几个中断源的中断标志分别是什么?哪些中断标志是硬件自动清

零?哪些中断标志需要用软件清零?

10.8051 单片机内集成了几个多少位的定时器/计数器?它们是加法计数还是减法计

数?它们的中断标志、启动控制位、中断允许位、优先级设置分别在什么特殊功能寄存器

中?

11.8051 单片机定时器/计数器有几种工作方式?如何选择它们的工作方式?若 T�工作在方式 0,13 位初值为 1000111001010B,则 TH0、TL0 中分别应写入的数据是什么?

12.MCS-51 系列单片机中串行接口有几种工作方式?如何选择这几种工作方式?分别

Page 198: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·189·

写出这几种工作方式的数据格式。

13.MCS-51 系列单片机中串行接口每种工作方式的波特率是如何设置的?

14.简述 MCS-51 系列单片机串行接口工作方式 0、工作方式 1 的接收和发送过程。

15.设 8031 的 P1 口接 DAC0832 数据线,DAC0832 接成单极性输出,工作方式为直通,

后接运算放大器,另接 1 片 ADC0809,地址为 FFF0H~FFF7H,其 EOC 经反向接至 8031 的 INT0

引脚。

(1)试画出系统硬件接口电路;

(2)编程实现:用 ADC0809 的 IN1(通道 1)检测 DAC0832 输出是否正确(误差不大

于±3 个步距电压)。若不正确则 F0 标志置 1,否则 F0 标志清零。

Page 199: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·190·

第七章 人 机 接 口

计算机的 CPU 不可能直接接受人的命令,人们总是通过外围设备使用计算机的,因此

外围设备与主机的接口被称为人机接口。外围设备是一个很广泛的概念,通常把除 CPU 和

内存之外的计算机系统的其他部件都看作外围设备。我们常把外围设备分为 5 大类,即输

入设备、输出设备、外存设备、通信设备、其他设备。其中输入设备中的键盘和输出设备

中的显示器是最常用的外围设备,本章主要讨论这两种设备与 MCS-51 系列单片机的接口。

7.1 键盘的工作原理

7.1.1 键盘的分类

计算机键盘有几种分类方法,这里列出常用的两种。

1.按制作工艺分,可将键盘分为硬板键盘和软板键盘

硬板键盘:带弹簧的按键焊接在印刷电路板上所做成的键盘。

软板键盘:以导电橡胶作为接触材料放在以聚脂薄膜作为基底的印刷电路上所形成的

键盘。

2.按工作原理分,可将键盘分为编码键盘和非编码键盘

编码键盘:主要用硬件实现对每个按键的定义和识别。

非编码键盘:主要用软件实现对每个按键的定义和识别。

计算机上的每一个按键实际上就是一个开关,这些开关有不同的种类,不同种类的开

关在灵敏程度、使用寿命及手感上都有差别。

7.1.2 键盘的工作原理

Page 200: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·191·

微机系统中最常用的键盘是非编码键盘,我们以非编码键盘为例来介绍键盘的工作原

理。

非编码键盘又可以分为线性键盘和矩阵键盘。

1.线性键盘

如图 7-1 所示,每个键对应 I/O 端口的一位,没有按键闭合时,各位均处于高电位;

当某键被按下时,对应位与地接通,则为低电位,而其他仍为高电位。因此,CPU 通过读

入 I/O 端口数据并判断哪一位为“0”,即可知哪一个键被按下,从而转到相应功能的处理

程序去执行。

可见,线性键盘硬件简单,但只适合按键不多的情况。若按键太多(十几个或几十个),

则占用 I/O 端口线过多,会造成系统硬件资源紧张。

图 7-1 线性键盘原理图

2.矩阵键盘

如图 7-2 所示。把若干个按键排列成矩阵形式,每一行和每一列都占用 I/O 端口的一

位。为简单起见,这里只画了 4 行 3 列,共 12 个按键。图中行线为 a�~a�,列线为 b�~b�。对于矩阵键盘,用键盘扫描程序来识别按键的方法通常有两种,即行扫描法和行反转

法。还可以通过中断扫描方式实现按键的识别,详见 7.3 节。

(1)行扫描法,硬件连接如图 7-2(a)所示

I/O

接口

���a0a1a2a3

b0b1b2

I/O

接口

���a0a1a2a3b0b1b2

(a)行扫描法原理图 (b)行反转法原理图

图 7-2 矩阵键盘原理图

在键盘扫描程序中,每次使某一行为“0”,其余行为“1”,读回列线状态,并判断。

Page 201: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·192·

若列线全为“1”,则无键按下;若列线不为全“1”,则说明为“0”的列线与为“0”的行

线相交处的键被按下。行扫描法的键盘扫描流程图见图 7-3(a)。

定义端口a谖�涑龆丝

输出行码

是全1��

定义端口b谖�淙

读取列码

行码循环左移转相应功能

计算键值

设置行码最低位为0

一行吗?是最后Y

Y

N

N

定义端口a谖�涑龆丝

是全1��

定义端口b谖�淙

读取列码

设置行码为全"�

Y

端口a谖�淙

定义端口b谖�涑

从端口b谑涑

将读回的列码

读取行码

计算键值

转相应功能

N

(a)行扫描法的键盘扫描流程图 (b)行反转法的键盘扫描的流程图

图 7-3 矩阵键盘的键盘扫描程序流程图

(2)行反转法,连接如图 7-3(b)所示

在键盘扫描程序中,首先使所有行线全输出“0”,然后读取列线状态,并判断。若列

线全为“1”,则无键按下;若列线不全为“1”,则将刚读回的列线状态从列线输出,并读

取行线状态,那么,说明为“0”的行列相交处的键被按下。最后,CPU 根据行列编码所构

成的键值转相应功能程序执行。行反转法的键盘扫描程序流程图见图 7-3(b)。

7.2 LED(Light Emitting Diode)数码管

显示器的工作原理

7.2.1 LED 的工作原理

常用的 LED 器件:七段数码管和“米”字数码管,如图 7-4 所示。它们是由若干只发

光二极管做在一起构成的。

Page 202: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·193·

a b

cde

fg

dp

ab

c

d

e

f g

dp

GND

GND

1 2 3 4 5

678910a

b

c

d

e

f

g h

ij k

l m n

dp

bk

coma j

ifcom

hdm

egh

comdpcl

123456789

LED

101112131415161718

(a)七段 LED 外形图 (b)米字数码管 (c)LED

图 7-4 常用 LED 器件

以下为典型 LED 器件原理图,如图 7-5 所示。其中,图 7-5(a)为器件七段 LED 原理

图,图 7-5(b)为“米”字 LED 原理图。若要使 LED 显示信息,那么对于共阳极 LED,其

公共端应接高电平(或+5V),而对于共阴极 LED,其公共端应接地。

(a)七段 LED 原理图 (b)“米”字 LED 原理图

图 7-5 典型 LED 器件原理图

给数码管的每个输入端(a,b,c,⋯,h)提供适当的电平,使某几段发光二极管亮,

而另外几段不亮,则可显示出数字或字母。8 个输入端组成的二进制编码(简称段码或段

选码)所对应的显示内容见表 7-1 和表 7-2 所示。

表 7-1 七段 LED 字型码(段码表)

显示

字符

共阳极

字型码

共阴极

字型码

显示

字符

共阳极

字型码

共阴极

字型码

0 3FH C0H C 39H C6H

1 06H F9H D 5EH A1H

2 5BH A4H E 79H 86H

3 4FH B0H F 71H 8EH

4 66H 99H P 73H 8CH

Page 203: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·194·

(续 表)

显示

字符

共阳极

字型码

共阴极

字型码

显示

字符

共阳极

字型码

共阴极

字型码

5 6DH 92H U 3EH C1H

6 7DH 82H F 31H CEH

7 07H F8H Y 6EH 91H

8 7FH 80H H 76H 89H

9 6FH 90H L 38H C7H

A 77H 88H “灭” 00H FFH

B 7CH 83H ⋯ ⋯ ⋯

表 7-2 “米”字 LED 字型表(段码表)

字符 共阳 共阴 字符 共阳 共阴 字符 共阳 共阴

0 003FH FFCH B 128FH ED70H P 00F3H FF0CH

1 0006H FFF9H C 0039H EFC6H Q 203FH DEC0H

2 00DH FF24H D 120FH EDF0H R 20F3H DF0CH

3 00CFH FF30H E 0079H FF86H S 2109H DEF6H

4 00E6H FF19H F 0071H FF8EH T 1201H EDFEH

5 00EDH FF12H G 00BDH FF42H U 003EH FFC1H

6 00FDH FF02H H 00F6H FF09H V 0C30H F3CFH

7 0007H FFF8H I 1209H FDF6H W 2836H D7C9H

8 00FFH FF00H J 0C01H F3FEH X 2D00H D2FEH

9 00EFH FF10H K 3600H C9FFH Y 1500H EAFFH

7.2.2 LED 数码管在微机系统中的应用

由于 CPU 可向 LED 数码管输出任意二进制段码,故不像一般数字系统那样在 LED 前要

接译码器。但在微机系统中 CPU 或接口的输出电流有限,不足以使 LED 发亮或亮度不够。

因此,输出的段码需经过驱动才能送给 LED。图 7-6 表示了 LED 在微机系统中及一般数字

系统中的连接。

常用于 LED 的驱动器如:7407/7406 同向/反向驱动器,75452 二输入与非驱动器等。

锁存器可用 74LS273、74LS373、74LS244 等集成电路。

另外系统有多位 LED,则每次只能使一位 LED 显示信息,每位 LED 上有一选通端(公

共端)。要想使哪位显示,就应给其公共端提供有效电平(共阳极为“1”,共阴极为“0”),

而给其他位的公共端提供无效电平。这样构成的二进制编码称为位码或位选码。

还需注意,在多位 LED 显示中,既要使每一位的显示信息有一个持续时间,可用循环

延时程序实现,又要保证一遍一遍地进行循环时不出现闪烁,在软、硬件设计时就要考虑

Page 204: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·195·

LED 的位数不能太多,显示的延时要适中。多位 LED 在系统中循环轮流显示,称为动态显

示系统,连接的原理框图如图 7-6(c)所示。

图 7-6 LED 在系统中的连接

7.3 非编码键盘与 MCS-51 系列单片机的接口技术

在单片机应用系统中,非编码键盘由 CPU 通过键盘处理程序完成整个工作过程。相对

CPU 而言,按键闭合是随机发生的,键盘处理程序必须能够及时捕捉到闭合的键,并求出

其键。按照这一过程的不同,非编码键盘的工作方式可分为程序扫描方式和中断扫描方式。

1.程序扫描方式

一般情况下,在单片机应用系统中,键盘处理只是 CPU 工作的一部分。为了能及时发

现有键按下,CPU 必须不断调用键盘处理程序,对键盘进行扫描,因此称为程序扫描方式。

图 7-7 是一种非编码键盘与 8031 的接口电路。通过 8155 扩展的 I/O 口作为行线和列

线,构成具有 32 键的 8×4 的行列式键盘。行线与 8155 的 PC0~PC3 相连,列线与 PA 口的

8 条线相连,键码如图 7-7 所示。

键盘处理程序的功能包括:

(1)判断键盘中有无键按下。由 PA 口输出 00H,再将 PC 口的状态读入,若 PC0~PC3

全为 1,说明无键按下,若不全为 1 则有键按下。

(2)消除抖动。当发现有键按下时,延时一段时间后再判断键盘的状态,若仍有键保

Page 205: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·196·

持按下状态,则可判定有键按下,否则认为是抖动。

图 7-7 8031 与非编码键盘的接口电路

(3)求键号。从 PA 口依次输出下列扫描信号:

PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0

第一次 1 1 1 1 1 1 1 0

第二次 1 1 1 1 1 1 0 1

第三次 1 1 1 1 1 0 1 1

第四次 1 1 1 1 0 1 1 1

第五次 1 1 1 0 1 1 1 1

第六次 1 1 0 1 1 1 1 1

第七次 1 0 1 1 1 1 1 1

第八次 0 1 1 1 1 1 1 1

每次输入扫描信号后,检查 PC 口的状态,若某一位为 0,说明闭合的键在该行,即可

确定闭合键的行和列。例如:当由 PA 口输出 11111011,从 PC 口读入的状态为 1101,说明

闭合键位于一行两列。

④ 等待闭合键的释放。为了避免一次闭合多次求其键码,等待闭合键释放后再将键号

送入累加器 A。

根据以上功能,键盘处理程序的流程图如图 7-8 所示。

键盘处理程序如下:其中 KS1 为判断有无键闭合子程序,TIM 为延时 6ms 的子程序。

KEY1: ACALL KS1 ;判断有无键闭合

JNZ LK1 ;(A)≠0,转去抖动

ACALL TIM ;延时 6ms

LK1: AJMP KEY1 ;无键闭合返回

LK1: ACALL TIM

Page 206: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·197·

ACALL TIM ;延时 6ms

ACALL KS1 ;判断有无键闭合

JNZ LK2 ;(A)≠0,有键闭合,转求键码

ACALL TIM ;延时 6ms

AJMP KEY1 ;非键闭合,返回

LK2: MOV R2,#0FEH ;R2←第一次扫描输出信号

MOV R4,#00H ;R4←列号

LK3: MOV DPTR,#7F01H ;DPTR ←A 口

MOV A,R2

MOVX @DPTR,A ;输出扫描信号

INC DPTR

INC DPTR ;指向 C 口

MOVX A,@DPTR ;读 C 口状态

JB ACC.0,L1 ;PC0=1,转移

MOV A,#00H ;A←0 行 0 列键号,准备求键号

AJMP LK

L1: JB ACC.1,L2 ;PC1=1,转移

MOV A,#08H ;A←1 行 0 列键号

AJMP LK

L2: JB ACC.2,L3 ;PC2=1,转移

MOV A,#10H ;A←2 行 0 列键号

AJMP LK

L3: JB ACC.3,NEXT ;PC3=1,转移

MOV A,#18H ;A←3 行 0 列键号

LK: ADD A,R1 ;形成键码

PUSH ACC ;暂存键码

LK4: ACALL TIM

ACALL KS1

JNZ LK4 ;等待键释放

POP ACC ;键号送回 A

NS: RET

NEXT: INC R4 ;列号加 1

MOV A,R2

JNB ACC.7,NS ;8 列扫描完毕,返回主程序

RL A ;形成下次扫描输出信号

MOV R2,A

AJMP LK3

KS1: MOV DPTR,#7F01H

MOV A,#00H

Page 207: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·198·

MOVX @DPTR,A ;输出扫描信号 00H

INC DPTR

INC DPTR

MOVX A,@DPTR ;读入 C 口状态

CPL A ;求返

ANL A,#0FH ;屏蔽高 4 位

RET

开 始

有闭合键吗?

二次调用延时子程序

延时 12ms

有闭合键吗?

延时 6ms

求闭合键的键号

闭合键释放否?

A←键号

返 回

N

N

N

Y

Y

图 7-8 键盘处理程序框图

2. 中断扫描方式

在程序扫描工作方式中,为了能及时响应键盘输入,需要不停地对键盘进行扫描,即

使没有键操作时,也不能中断。这就浪费了大量 CPU 宝贵的时间。为了提高 CPU 的效率,

在电路中增加适当的电路,当有键闭合时,产生中断请求信号。在中断服务子程序中进行

去抖动、求键码和处理重键等工作。

图 7-9 所示为中断扫描方式的接口电路图。行列式键盘与 8031 单片机的 P1 口直接相

连,其中 P1.7~P1.4 经二极管与行线连接,P1.3~P1.0 与列线连接,另一端经电阻与+

5V 电源相连。列线与一个门的输入端相连,与门输出端接 8031 的 INT0 。当 P1.7~P1.4

全为零状态时,若无键闭合, INT0 保持高电平,若有键闭合时, INT0 变为低电平,CPU

开中断时,就会响应中断,转向中断服务程序。由于键盘处理过程与程序扫描方式大致相

同,这里不再详细介绍。

Page 208: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·199·

8031

5.1k X 3

&

P1.0P1.1P1.2P1.3

P1.4

P1.5

P1.6

P1.7

INT1

0 1 2 3

4 5 6 7

8 9 10 11

12 13 14 15

+5V

图 7-9 中断扫描方式键盘接口电路

7.4 LED 显示器与 MCS-51 系列单片机的接口技术

数码管显示器有两种工作方式,即静态显示方式和动态显示方式。

在静态显示方式下,每位数码管 a~g 和 h 端与一个 8 位的 I/O 口相连。要在某一位数

码管上显示字符时,只要从对应的 I/O 口输出并锁存其显示代码即可,其特点为:数码管

中的发光二极管恒定地导通或截止,直到显示字符改变为止。图 7-10 为采用 BCD 或十六进

制——七段锁存译码驱动器 MC14495 构成的多位数码管静态显示器与 8031 的接口电路。

MC14495 的输入锁存选通信号 LE =0 时,允许数据输入到其内部锁存器中;当 LE =1 时,输

入数据被锁存。

8031 ����������������� MC14495��������������MC14495��������������MC14495���������������������������������������� ����

������������������� ������������

74LS138

���� ����图 7-10 数码管静态显示接口电路

Page 209: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·200·

被显示的数据直接由 P1 口的低 4 位输出,P1.4~P1.6 用来选择数码管,经译码后产

生输入锁存选通信号,由 P1.7 来控制多位显示器数据字符的改写和锁存。当 P1.7 为高电

平时,允许改写各位的显示字符;当 P1.7 输出低电平时, Y 0~ Y 7=1。各位显示字符不

变。下面是将显示器缓冲区 78H~7FH 中的 BCD 码送数码管显示器的程序。

DIR: MOV R0,#78H ;置首地址

MOV R2,#00H ;初始化位计数器

MOV R7,#08H ;置循环次数

SETB P1.7

LOOP:MOV A,R2

SWAP A

ADD A,@R0 ;显示数据送低 4 位

MOV P1,A ;输出显示数据和位地址

INC R0 ;指向下一个数

INC R2 ;指向下一位

DJNZ R7,LOOP

CLR P1.7

RET

动态显示方式的每位数码管都需要一个数据锁存器,因此,其硬件电路较为复杂。但

它的显示程序非常简单。

在动态显示方式中,各位数码管的 a~h 端并连在一起,与单片机系统的一个 I/O 口相

连,从该 I/O 口输出显示代码。每只数码管的共阳极或共阴极则与另一 I/O 口相连,控制

被点亮的位。动态显示的特点是:每一时刻只能有一位数码管被点亮,各位依次轮流被点

亮;对于每一位来说,每隔一段时间点亮一次。为了每位数码管能够充分被点亮,二极管

应持续发光一段时间。利用发光二极管的余辉和人眼的驻留效应,通过适当地调整每位数

码管被点亮的时间间隔,可以观察到稳定的显示输出。

PA0PA1PA2PA3PA4PA5

PB0

8155

PB1PB2PB3PB4PB5PB6PB7

���������

�8031

� ��共阴极显示器

图 7-11 6 位动态显示器的接口电路

图 7-11 是通过 8155A 扩展的 6 位动态数码管显示器的接口电路。由 PB 口输出显示代

Page 210: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·201·

码,PA 口输出位选码。并且用 PSW 中的用户标志 F0 作为是否显示小数点的标志,F0=“0”,

不显示小数点,F0=“1”,显示小数点。设显示数据的缓冲区为 79H~7EH,由前面的分析,

显示程序的流程图如图 7-12 所示。

显示子程序 DIR

显示缓冲器起始地址 79H→R0

延时 2ms

根据指针 R0 取显示数据

查表转换成显示代码

→8155B 口

R(3,5)=1?

返 回

N

Y

显示位代码 01H→R3

位代码(R3)→8155A 口

指针 R0 加 1

R3 左环移位 1 位

图 7-12 显示程序框图

程序如下(其中 DLT 为延时子程序):

DIR: MOV R0,#79H ;置显示器缓冲区首地址

MOV R3,#01H ;置位选码初值

MOV A,R3

LOOP: MOV DPTR,#7F01H ;DPTR ←PA 口地址

MOVX @DPTR,A ;输出位选码

INC DPTR ;指向 PB 口

MOV A,@R0 ;取被显示的数据

ADD A,#12H ;形成查表的偏移地址

MOVC A,@A+PC ;求出显示代码

JNB PSW.5,DIR1 ;判断是否显示小数点

SETB ACC.7 ;显示小数点

Page 211: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·202·

DIR1: MOVX @DPTR,A ;输出显示代码

ACALL DLT ;延时

INC R0 ;指向下一个显示数据

MOV A,R3

JB ACC.5,LOOP1 ;判断 6 位是否显示完毕

RL A ;形成下一个位代码

MOV R3,A

AJMP LOOP

LOOP1:RET

DB 3FH,06H,5BH,4FH,66H,6DH

DB 7DH,07H,7FH,6FH,77H,7CH

DB 39H,5EH,79H,71H

DLT: MOV R7,#04H

DLT1: MOV R6,#0FFH

DLT2: DJNZ R6,DLT2

DJNZ R7,DLT1

RET

上面我们分别介绍了键盘接口电路和数码管显示器接口电路。在单片机应用系统中,

往往同时需要扩展键盘和显示器,图 7-13 为 8031 通过 8155 扩展 32 键键盘和 6 位动态数

码管显示器接口电路。

图 7-13 键盘/显示器的接口电路

Page 212: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·203·

7.5 可编程键盘/显示接口 8279

用锁存器或用 8155 都可以作键盘显示器的接口。但它们共同的缺点是,需要编制定时

扫描显示和扫描键盘的程序,使整个系统软件变得比较复杂。而 Intel18279 是一个专用

的显示器键盘接口,它用硬件完成对显示器和键盘的扫描。在硬件上它在占用两个地址,

在软件上省去了显示和键盘扫描,大大方便了用户,使用户程序变得简洁、易读和模块化。

7.5.1 8279 的主要功能

Inte18279 可以显示 8 或 16 位 LED 显示器,可以和具有 64 个按键或传感器的阵列相

连,通过编程可以实现多种工作方式。8279 的主要功能如下:

(1)键盘与显示器能同时工作;

(2)扫描式键盘工作方式;

(3)扫描式传感器工作方式;

(4)用选通方式送入输入信号;

(5)带有 8 字符的键盘先入先出存储器(FIFO);

(6)触点回弹时两键封锁或 N 键巡回;

(7)双排 8 字或单个 16 字的数字显示器;

(8)可右入或左入的 16 字节显示器 RAM;

(9)工作方式可由 CPU 编程;

(10)可编程扫描定时、键盘送入时有中断输出。

7.5.2 Inte1 8279 的管脚

8279 采用 40 引脚封装,其管脚配置及逻辑符号如图 7-14 所示。其引脚功能分述如下:

DB0~DB7:双向缓冲数据总线,与 CPU 总线连接,用于在 CPU 和 8279 之间传送命令,

数据和状态信息。

CLK:时钟输入线,为 8279 提供内部定时时钟。

RESET:复位线,当输入高电平时,8279 复位。其复位状态为 16 个字符左入显示:编

码扫描键盘双键封锁;时钟为 31 分频。

CS :片选信号,当输入低电平时,允许对 8279 进行读写操作,否则禁止。

A0:数据缓冲器地址输入线。A0=1 时,选择命令或状态寄存器,A0=0 时,选择数据寄

存器。

RD 、 WR :读写控制线,低电平有效。

Page 213: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·204·

图 7-14 8279 逻辑符号及管脚配置

IRQ:中断请求线,高电平有效。在键盘工作方式下,当 FIFO/传感器 RAM 有数据时(有

键闭合),IRQ 变为高电平向 CPU 请求中断。当 CPU 读出 FIFO 中的数据时,IRQ 变低,若

RAM 中还有数据,IRQ 在读出后又返回高电平,直至 FIFO 中数据被读完,该线复位。在传

感器工作中,每当检测到传感器状态变化时,IRQ 就出现高电平。

Vcc、Vss:电源线(+5V)、地线(图中未给出)。

SL0~SL3:行扫描输出线,用来扫描键盘和显示器。扫描分为译码方式和编码方式(通

过编程设定)。图 7-15 分别给出了译码方式和编码方式的输出波形图。

从图 7-15 可以看出,在编码方式下,扫描线输出的是二进制编码信号。SL0~SL3 四

根线共输出 16 种不同的状态。对编码信号进行译码,可以得到 16 个译码信号,作为 16

个扫描信号线。

在译码方式下,SL0~SL3 输出 4 个译码信号,即在同一时刻,只有一个输出为低电平,

所以在这种方式下,SL0~SL3 可以直接作为扫描信号线。当需要扫描信号数不多于 4 个时,

一般采用译码方式。当需要多于 4 个扫描信号时,则采用编码方式,并通过译码器获得多

个(最多可到 16 个)扫描信号。

RL0~RL7:回送线,内部有有源提升电路,以保持高电平,有键闭合为低电平。在选

通工作方式中,也可以作为一般的数据输入端。

SHIFT:字型变换输入线,在键盘方式时,用于扩充键的功能,可以用作键盘的上下档

功能键。在传感器方式和选通方式下,该信号线无效。

Page 214: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·205·

(a)编码方式

(b)译码方式

图 7-15 编码及译码方式

CNTL/STB :控制/选通输入线。在键盘方式时,通常用来扩充键的控制功能。在选通

输入方式时,该信号的上升沿将锁存 RL0~RL7 的信号。在传感器方式,该线无用。

OUTA0~OUTA3:A 组显示输出线(显示 RAM 高 4 位)。

OUTB0~OUTB3:B 组显示输出线(显示 RAM 低 4 位)。

这是两个 16×4 显示刷新寄存器的输出端。依次显示 RAM 的内容送到端口上,并与扫

描线(SL0~SL3)同步。两个端口可分别使用,也可合起来作为一个 8 位端口。

BD :显示熄灭信号,该信号在数字切换或使用熄灭命令时,输出为低电平。

7.5.3 8279 的内部结构

8279 的内部结构如图 7-16 所示。DB0~DB7 是数据线,与 CPU 总线相连。当 CS =0 时,

选中该片。此时,若 A0=1,数据线上的信息是命令或状态。若 A0=0,数据线上的信息是显

示数据或键盘数据。即 A0=1、 WR =0 命令写到定时与控制寄存器去,对 8279 进行编程,

RD =0 读 FIFO/传感器 RAM 状态寄存器的内容;A0=0、 WR =0 数据写到显示 RAM, RD =0

读显示 RAM 或 FIFO/传感器 RAM 的内容。

扫描计数器通过 SL0~SL3 输出扫描信号,扫描信号分为译码和编码两种(由编程决

定)。显示寄存器通过 OUTA 和 OUTB 同步输出显示 RAM 的内容。这一过程 8279 通过硬件自

动完成,无需程序干预。

扫描输出和回扫线可以构成对键的一个扫描阵列。当有键按下时,该键在行列中的位

置加上 SHIFT 和 CNTL 的状态一起被送到 FIFO 存储器中,同时使 IRQ 变高。FIFO/传感器

RAM 是一个 8×8RAM,在键盘和选通方式工作时,它是 FIFO 存储器,其输入或读出遵循先

入先出的原则。此时 FIFO 状态寄存器存放 FIFO 存储器空、满、溢出等状态。当 FIFO 存储

器有数据时,IRQ 信号变为高电平。在传感器矩阵方式工作时,这个存储器是传感器 RAM,

Page 215: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·206·

它的每一位对应着一个传感器的状态。当传感器发生变化时,IRQ 信号变为高电平。

图 7-16 8279 结构框图

7.5.4 8279 编程命令

8279 的工作方式是通过 CPU 对 8279 编程来实现的。当CS =0,A0=1,WR =0,写入 8279

的数据是 8279 的编程命令。8279 共有 8 条命令。

1. 键盘显示器方式设置命令

此命令用于设置键盘与显示器的工作方式,其代码为:

D7 D6 D5 D4 D3 D2 D1 D0

0 0 0 D D K K K

其中 D7D6D5=000 是键盘显示方式设置命令的特征位,后五位是参数。

DD 用来设定显示方式:

DD

00 8 个字符显示,左端送入

01 16 个字符显示,左端送入

10 8 个字符显示,右端送入

11 16 个字符显示,右端送入

在编码扫描方式下,如果是 8 个字符显示,扫描线只有 SL0~SL2 起作用,显示 RAM

只用 8 个。如果是 16 个字符显示,则 SL0~SL3 全部起作用,显示 RAM 用 16 个。

将显示数据写入显示 RAM 有两种不同的写入方式,即左端送入和右端送入。

Page 216: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·207·

在左端送入方式中,每个显示位置均直接和显示器 RAM 中的一个字节相对应,是一种

最简单的显示形式。RAM 的地址 0 构成最左边的显示字符,而地址 15 乃是显示器最右边的

显示字符。在自动加 1 方式下,字符的进入从 0 位置开始,使显示器从左起填充。第 17

个字符又重新送入最左边的位置,并从此位置重新开始填入,见表 7-4 所示。

表 7-4 左端送入方式(自动加 1)

写入

次数

RAM 地

显示

位 0

显示

位 1

显示

位 2⋯

显示

位 12

显示位

13

显示

位 14

显示

位 15

1 0 1

2 1 1 2

3 2 1 2 3

⋯ ⋯ ⋯

⋯ ⋯ ⋯

14 13 1 2 3 13 14

15 14 1 2 3 13 14 15

16 15 1 2 3 13 14 15 16

17 0 17 2 3 13 14 15 16

18 1 17 18 3 ⋯ 13 14 15 16

右端送入乃是大多数电子计算器所使用的方法。

第一次送入的被放在最右边的显示字符上;

第二次送入时,已送入的字符左移一位,其中最左边的字符被移出界外并丢失,最右

端是第二次送入的字符;

⋯⋯

最后字符送入时,已送入的字符仍然左移一位,其中最左边的字符被移出界外并丢失,

最右端是最后送入的字符,详见表 7-5 所示。

注意复位后 DD=01,即为 16 位字符左入显示方式。

KKK 用来设定键盘方式:

000 编码(外译码)扫描键盘双键互锁

001 译码(内译码)扫描键盘双键互锁

010 编码(外译码)扫描键盘 N 键巡回

011 译码(内译码)扫描键盘 N 键巡回

100 编码(外译码)扫描传感器阵列

101 译码(内译码)扫描传感器阵列

110 选通输入,编码显示扫描

111 选通输入,译码显示扫描

Page 217: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·208·

表 7-5 右端送入方式(自动加 1)

写入

次数

RAM 地

显示

位 0

显示

位 1

显示

位 2

显示

位 3⋯

显示

位 11

显示

位 12

显示

位 13

显示

位 14

显示

位 15

1 0 1

2 1 1 2

3 2 1 2 3

⋯ ⋯

⋯ ⋯

14 13 1 2 10 11 12 13 14

15 14 1 2 3 11 12 13 14 15

16 15 1 2 3 4 12 13 14 15 16

17 0 2 3 4 5 13 14 15 16 17

18 1 3 4 5 6 ⋯ 14 15 16 17 18

(1)如果设定为扫描键盘,则 FIFO/传感器是先进先出存储器(FIFO 堆栈)。在双键

互锁方式下,如果有两个以上的键先后按下,则先按下键被认为有效;如果有两个以上的

键同时按下,则最后释放的键被认为有效,并将其信息存入 FIFO 存储器。在 N 键巡回方式

下,有多个键按下时,按照键盘扫描时发现它们的顺序,将这些键的信息依次存入 FIFO

堆栈。

(2)如果是传感器方式,传感器 RAM 的每一位对应着的每一个传感器的状态(0 或 1)。

(3)选通输入方式中,RL0~RL7 的数据只有在 CNTL/STB 线上升沿时才进入 FIFO 堆

栈。

(4)复位后 KKK=000,即为编程扫描双键互锁方式。

2.时钟编程命令

该命令是将引脚 CLK 输入的时钟信号进行分频,代码为:

D7 D6 D5 D4 D3 D2 D1 D0

0 0 1 P P P P P

D7D6D5=001 为时钟编程命令特征位。

PPPPP 的值可在 2 到 31 的范围之内。

8279 典型的内部工作时钟为 100KHz,如果输入时钟频率为 2MHz,PPPPP 取 10100,即

20 分频,则时钟编程命令为 34H;输入时钟频率为 1MHz,PPPPP 取 01010,即 10 分频,则

时钟编程命令为 2AH。典型的内部工作时钟为 100KHz 时,对 8 字符显示周期为 5.1ms,16

字符为 10.3ms。

复位后分频系数为 31。

Page 218: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·209·

3.读 FIFO/传感器 RAM 命令

代码为:

D7 D6 D5 D4 D3 D2 D1 D0

0 1 0 AI × A A A

D7D6D5=010 为该命令的特征位。

这条命令的目的是指定读 8279 的数据为 FIFO/传感器 RAM 的内容。

当 A0=0,RD =0 时,对 8279 的读有两种情况,一是读 FIFO/传感器 RAM,一是读显示

RAM。如先设置这一命令,那么读数据就是 FIFO/传感器的内容,其中 AI 为自动加 1 标志,

AAA 为 FIFO/传感器的地址。

如果 AI=1,当读了一次 FIFO/传感器的内容,下一次的读就是 AAA+1 的内容。如果 AI=0,

则读出 AAA 单元内容后,下一次的读仍是 AAA(地址固定为 AAA)的内容。

在扫描键盘时,对 FIFO RAM 的读总是按键送入的顺序读取,按先进先出的原则。

4.读显示器 RAM 命令

代码为:

D7 D6 D5 D4 D3 D2 D1 D0

0 1 1 AI A A A A

D7D6D5=011,是该命令特征位。

当设置这条命令后,读 8279 数据(A0=0)就是读显示 RAM 的内容,也就是当前显示的

段码。其中 AI 为自动加 1 标志(如果 AI=1,每读一次,RAM 地址自动加 1;AI=0,则每次

读取的是固定地址 AAAA),AAAA 为显示 RAM 地址。

5.写显示 RAM 命令

代码为:

D7 D6 D5 D4 D3 D2 D1 D0

1 0 0 AI A A A A

D7D6D5=100,是该命令特征位。

这条命令是用来设置写显示 RAM 的地址。寻址方式和自动加 1 功能均与读显示 RAM 相

同。

Page 219: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·210·

6.显示器屏蔽/熄灭命令

代码为:

D7 D6 D5 D4 D3 D2 D1 D0

1 0 1 × IWA IWB BLA BLB

D7D6D5=101,是该命令特征位。

有时在应用中需要将 OUTA 和 OUTB 分别输出,可用 IW 位来屏蔽半字节。当 IWA=1 时,

OUTA 被屏蔽,从 CPU 送数据进入显示 RAM 时就不影响该端口。同样 IWB=1 时,OUTB 被屏蔽。

必须注意,OUTB0 对应显示 RAM 的 D0 位,OUTA3 对应显示 RAM 的 D7 位。BL 位是熄灭位,

如果 BLA/BLB=1,则 OUTA/OUTB 端口输出熄灭段码。段码(00H 或 FFH 或 20H)由清除命令

决定。应注意到,为了使 8 位端口显示熄灭,两个 BL 位都应该置位。

7. 清除命令

代码为:

D7 D6 D5 D4 D3 D2 D1 D0

1 1 0 CD��CD�CD�CF CA

D7D6D5=110,为该命令特征位。

这条命令是用来清除显示 RAM 和 FIFO/传感器 RAM 状态寄存器的。

CD�CD�CD��1 0 × 显示 RAM 全 00H(×:任意值)

1 1 0 显示 RAM 全 20H(00100000B)

1 1 1 显示 RAM 全 FFH

0 × × 不清除显示 RAM(若 CA=1,则 CD�CD�仍有效)

CD2:为 1 时允许清除显示 RAM(或用 CA=1)

CD1、CD0:用于确定显示 RAM 初始状态,即 CD1CD0=0x 时,显示 RAM 清为全 00H;即

CD1CD0=10 时,显示 RAM 清为全 20H;CD1CD0=11 时,显示 RAM 清为全 FFH。

在显示器 RAM 被清除期间(160μs)不能被写入,在此期间,FIFO 状态字的最高位被

置“1”,清除完毕时,该位自动复位。

CF:若 CF=1,则清除 FIFO 状态寄存器,并将中断输出线复位,FIFO/传感器 RAM 的地

址指示器也被清零。

CA:是总清位,它的功能相当于 CD2 与 CF 的结合。

Page 220: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·211·

8.中断结束/出错方式设置命令

代码为:

D7 D6 D5 D4 D3 D2 D1 D0

1 1 1 E × × × ×

D7D6D5=111,为特征位。

对传感器阵列方式而言,此命令将 IRQ 线变低电平(即中断结束),并允许对 RAM 的进

一步写入。在传感器阵列中,传感器开关的状态被直接送到传感器 RAM 中。用这一方法,

传感器 RAM 将保持着传感器阵列中开关状态的“映像”。若在一次传感器阵列扫描的终了,

检测出任何一只传感器的数值发生变化,IRQ 线也变为高电平。如果自动加 1 标志被置为

“0”(不自动加 1),则 IRQ 由第一次读数据操作被复位为低电平。若自动加 1 标志为“1”

(自动加 1),则需要用中断结束命令来使 IRQ 线复位为低电平。即在传感器阵列方式自动

加 1 状态下,当传感器开关的状态发生变化时,IRQ 线变高,在此之后,传感器开关的状

态发生变化,都将被阻止,不能写入 RAM。只有通过写一次中断结束命令,使 IRQ 线复位

为低电平之后,新的状态才能被写入 RAM。

如果扫描键盘为 N 键巡回方式,当多个键同时按下时,8279 将按照扫描时发现它们的

顺序,将这些键的信息依次存入 FIFO 存储器。但如果设置成特殊出错方式,即置 E=1,那

么当巡回键时发现两个以上键同时按下,就建立出错标志。这一标志将阻止任何对 FIFO

的进一步写入,并设置中断。在此方式中,可用读 FIFO 状态字这条命令读取该出错标志,

设置清除命令 CF=1,就将该出错标志复位。

以上 8 种用于确定 8279 操作方式的命令,皆有 D7D6D5 等三个特征位来定义,输入 8279

命令口(A=1)后,能自动寻址相应的命令寄存器。

9.状态字

当 A0=1, RD =0,是读 FIFO 的状态,FIFO 状态寄存器的格式为:

D7 D6 D5 D4 D3 D2 D1 D0

DU S/E 0 U F N N N

NNN:FIFO 中的字符数(闭合键次数)。FIFO 无字符(无闭合键)时,此数为 000。

F:FIFO 满标志,当 FIFO 有 8 个字符时,F=1,FNNN=1000。

U:读空标志,即当 FIFO 中无字符(FNNN=0000)时,去读 FIFO,该位置 1。

O:FIFO 溢出标志,当 FIFO 已满(有 8 个字符),再送入一字符,该位置 1。

S/E:在传感器方式时,若 S/E=1,表示至少有一个开关闭合;在 N 键巡回,特殊出错

方式下,S/E=1,表示有多键同时按下,该位用 CF=1 的清除命令复位。

DU:显示无效特征位。在显示器 RAM 被清除期间,该位置 1。当显示器再度变为可用

Page 221: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·212·

时即自动复位。

10.FIFO RAM 的数据格式

(1)键盘工作时,FIFO RAM 的数据格式为:

D7 D6 D5 D4 D3 D2 D1 D0

CNTL SHIFT 扫描码 回送码

D2~D0 为 RL7~RL0 的编码值,D5~D3 为 SL3~SL0 扫描计数器的值。

(2)在传感器阵列中,由于 RAM 的每一位对应一个传感器,AAA 就是选择 RAM 的地址。

若 AI=1,则下一次读的是 AAA+1 的内容。数据格式为:

D7 D6 D5 D4 D3 D2 D1 D0

RL7 RL6 RL5 RL4 RL3 RL2 RL1 RL0

(3)在选通输入方式中,数据从回线进入 FIFO(用 CNTL/STB 线的上升沿进入)。数

据格式为:

D7 D6 D5 D4 D3 D2 D1 D0

RL7 RL6 RL5 RL4 RL3 RL2 RL1 RL0

7.5.5 8279 在 MCS-51 单片机系统中的连接应用

1. 硬件连接

8279 管脚与 Intel CPU 兼容,可以很方便地与 MCS-51 连接。图 7-17 给出了一个实

际应用的实例。

8279 的 DB0~DB7 与 8051 的 P0 口相连。8279 的 IRQ 经非门接到 8051 的 INT0 (P3.2)

管脚上,可以实现键盘查询或键盘中断。8051 的 ALE 输出作为定时时钟从 8279 的 CLK 管

脚输入。8051 的 RD 、WR 与 8279 的 RD 、WR 相连。8051 的 P2.7 作为 8279 的片选( CS )

信号。并且 P2.0 与 8279 的 A0 相连,因此 8279 的地址分别为:

数据口:7EFFH

命令或状态口:7FFFH

8279 与 6 个共阴极显示器和一个 12 键的小键盘连接。SL0~SL2 的扫描按编码方式经

74LS138 译码输出作为键盘的行扫描线,同时经驱动器 75451 接 LED 显示器的 COM 端作为

显示器位扫描驱动信号。OUTA 与 OUTB 经驱动器 74LS244 与显示器的段码线相连,直接控

制显示字形,RP200A 为 8 个 200Ω/0.5W 上拉电阻。键盘的列扫描线送到回扫端 RL0~RL3

上。

Page 222: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·213·

��������������� ����������������������������������������������������������������������������������������������������������������������������������������������� ���������������������

������

���� !"��#���!"� !$!$��%&'%&'�����&�����&��(���&�����&��(���&����&��(&�����&��(���(��(���(����(�� ����(��� �����(��� ����(��� �����(����(�������������)�������% ���������������������������%�*� ��+����� ��%���� ��

��

������������������������������#����#���#����#��#�#�#��#���,�,������ ����(%���������#���#���#��#��#���#���#�#������� ���������� ���%%�������-�.

������������ !"��#���!"� !$!$��%&'%&'���������������� !"��#���!"� !$!$��%&'%&'����������������� !"��#���!"� !$!$��%&'%&'����������������� !"��#���!"� !$!$��%&'%&'����������������� !"��#���!"� !$!$��%&'%&'��������������������������������������

���!"� !$���!"� !$���!"� !$���!"� !$���!"� !$���!"� !$���������������!"� !$���!"� !$�%%#�#�##�#�#�#�#�#

图 7-17 8279 键盘/显示器接口电路原理图

2. 编程举例

8279 与一个 12 键的小键盘相连,12 键的编码为:0、1、2、⋯、9、*、#。 这是一个

3×4 的矩阵,根据扫描信号与回扫线的连接可以计算出键符与 8279 扫描键盘送入 FIFO 键

值的关系,如表 7-6 所示。

表 7-6 键符(有序数编码)与扫描键值的关系

键符(有序数编码) 扫描码 回送码 扫描键值

1(01H) 000 000 00H

4(04H) 000 001 01H

7(07H) 000 010 02H

Page 223: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·214·

(续 表)

键符(有序数编码) 扫描码 回送码 扫描键值

*(0AH) 000 011 03H

2(02H) 001 000 08H

5(05H) 001 001 09H

8(08H) 001 010 0AH

0(00H) 001 011 0BH

3(03H) 010 000 10H

6(06H) 010 001 11H

9(09H) 010 010 12H

#(0BH) 010 011 13H

下面我们给出一个程序,这个程序的功能为:如果按下的是数字键,则在显示器上

将该数字依次显示;如果按下的“*”键,则显示器全灭;如果按下的是“#”键,则 6 个

LED 显示 123456。

;初始化程序

ORG 0H

MOV SP,#2FH ;设定栈指针

MOV DPTR,#7FFFH ;初始化 8279

MOV A,#0D1H ;清除命令

MOVX @DPTR,A ;清显示器,清 FIFO

NOP

NOP

LOOP: MOVX A,@DPTR ;读状态字

JB ACC.7,LOOP ;清除未完毕,则循环

MOV A,#34H

MOVX @DPTR,A ;20 分频(fosc=12MHz)

MOV A,#0 ;设键盘与显示方式

MOVX @DPTR,A ;(双键互锁,编码方式、8 字符、左进)

;主程序

MAIN: JB P3.2,MAIN ;查询是否有键闭合

LCALL KEY ;查询键闭合,调键盘处理子程序

LCALL DIR ;调显示子程序

SJMP MAIN ;键盘处理子程序

KEY: MOV DPTR,#7FFFH;

MOV A,#40H ;写‘读扫描键命令’

MOVX @DPTR,A

MOV DPTR,#7EFFH;

Page 224: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·215·

MOVX A,@DPTR ;读扫描键值

ANL A,#3FH

MOV DPTR,#KTAB

MOVC A,@A+DPTR ;查表转换成键有序编码

CJNE A,#0AH,KEY1

KEY1: JC PDATA ;是数字键,转 PDATA 处理

SUBB A,#0AH ;以下为命令键处理

MOV B,#03H

MUL AB

MOV DPTR,#COMTAB

JMP @A+DPTR

COMTAB: LJMP COMA1 ;转‘*’键处理

LJMP COMA2 ;转‘#’键处理

COMA1: MOV R0,#70H ;‘*’键处理

MOV R2,#06H

MOV A,#10H ;送暗码序号,6 个 LED 全暗

COMA11: MOV @R0,A

INC R0

DJNZ R2,COMA11

RET

COMA2: MOV R0,#70H ;‘#’键处理,(123456 送 70H~75H)

MOV R2,#06H

MOV A,#01H

COMA21: MOV @R0,A

INC A

INC R0

DJNZ R2,COMA21

RET

PDATA: MOV R0,#70H ;数字键处理

MOV R2,#6

PDATA1: XCH A,@R0

INC R0

DJNZR2,PDATA1

RET

DIR: MOV DPTR,#7FFFH ;显示子程序

MOV A,#90H

Page 225: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·216·

MOVX@DPTR,A ;写显示命令,自增方式

MOV P2,#07EH

MOV R1,#0FFH

MOV DPTR,#DTAB

MOV R7,#6

MOV R0,#70H

DIR1: MOV A,@R0

MOVCA,@A+DPTR

MOVX@R1,A

INC R0

DJNZ R7,DIR1

RET

;DTAB:显示字型段码表

DTAB: DB 3FH,06H,5BH,4FH ;0,1,2,3

DB 66H,6DH,7DH,07H ;4,5,6,7

DB 7FH,6FH,77H,7CH ;8,9,A,B

DB 39H,5EH,79H,71H ;C,D,E,F

DB 00H ;(暗码)

;KTAB:根据扫描键值大小(由小到大)

;形成的键有序数编码转换表

KTAB: DB 01H,04H,07H,0AH ;1,4,7,*:(‘*’=0AH)

DB 00H,00H,00H,00H ;由于键值不连续,空余单元中置 0

DB 02H,05H,08H,00H ;2,5,8,0

DB 00H,00H,00H,00H ;空余单元中置 0

DB 03H,06H,09H,0BH ;3,6,9,#:(‘#’=0BH)

END

在内存 70H~75H 开辟显示缓冲区,对应 LED1~LED6。当按下键时,程序通过第一次

查表,将从 8279 读到的键值转换成键有序数编码。由于键值不连续,所以转换表中在空余

单元中置 0。根据键有序数编码大小,区分是数字键还是功能键?如果是数字键,则转数

字键处理;如果是功能键,则转功能键处理。处理完毕,则调用显示子程序将显示缓冲区

内容输出显示。

查询有无闭合键可以通过对 8279 的 IRQ 线进行查询(如上例),也可以通过对 8279

的状态字查询来实现,程序如下:

MAIN:MOV DPTR,#7FFFH

MOVX A,@DPTR ;读 FIFO 状态

ANL A,#0FH ;

JZ MAIN ;FIFO 的低 4 位全零,无键按下,转 MAIN

⋯ ;有键按下⋯

键盘处理也可用中断方式,将上述初始化程序中增加 SETB EA,SETB EX0 两条指令;

Page 226: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·217·

主程序中去掉 LCALL KEY 指令;增加键盘中断处理子程序即可。

程序如下:

ORG 03H

LJMP KEYINT

KEYINT: PUSH PSW

PUSH ACC

PUSH DPL

PUSH DPH

SETB RS0 ;中断服务子程序用工作寄存器区 3 并

SETB RS1 ;保护工作寄存器区 0

LCALL KEY ;调键盘处理子程序 KEY

POP DPH ;恢复现场

POP DPL

POP ACC

POP PSW

RETI ;中断返回

习题与思考题

1.微机键盘分为哪两类?它们的主要区别是什么?矩阵键盘属于哪两种类型?

2.微机系统中矩阵键盘的扫描方法分为哪两种?试说明它们的工作原理。

3.单片机系统中的键盘扫描方法有哪两种?试说明它们的工作原理。

4.简述 LED 显示器的工作原理。

5.设计 8031 系统中 6 位 LED 动态显示器,画出硬件连接图,若使其显示时间的时、

分、秒,请画出软件流程图。

6.简述 8279 的主要功能。

7.如何区分 8279 的命令字、状态字和数据?

8.设 8279 的工作状态为:8 个字符显示、右边输入、内部译码扫描键盘、双键互锁,

对输入时钟信号 16 分频,试求有关命令字。

Page 227: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·218·

第八章 单片机新技术介绍

由于单片机具有极其广泛的应用市场和很好的发展前景,许多半导体公司都生产了单

片机芯片,在这些单片机的应用中,MCS-51 系列已被各界用户所认可。因此,一些公司先

后推出与 MCS-51 系列兼容的单片机或类似产品。同时,为了保护用户的开发技术,使以

MCS-51 单片机为核心所研制的系统内部智能化,对外傻瓜化,近几年还出现了一些以 8051

为内核的产品,它们具有丰富的功能和卓越的性能,如 ATMEL 公司的 ADμC8××系列产品,

WSI 公司的 DSP 集成电路等,本章将对这些产品中的典型代表作一介绍。

8.1 几种常用的 8 位单片机

8.1.1 Philips51 系列单片机

Philips 公司生产的 Philips51 系列单片机与 Intel 8051 兼容,而且片内具有 I�C

总线、A/D 转换电路等丰富的功能部件,其主要型号和内部资源见表 8-1 所示。

表 8-1 Pilips 51 系列单片机

型 号 存储器

无 ROM ROM EPROM ROM RAM定时器

I/O

口串行接口

外部

中断

特殊功能特性

- 83C751 87C751 2KB 64B 1 个 16 位 19 位 I�C 2

低功耗、24 脚

封装

- 83C752 87C752 2KB 64B 1 个 16 位 21 位 I�C 2

5 路 8 位 A/D,2

路 PWM

8031AH 8051AH - 4KB 128B 2 个 16 位 32 位 UART 2 NMOS

80C31B 80C51B 87C51 4KB 128B 2 个 16 位 32 位 UART 2 CMOS

80CL410 83CL410 - 4KB 128B 2 个 16 位 32 位 I�C 10

低电压(1.5~

6V),低功耗

Page 228: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·219·

(续 表)

型 号 存储器

无 ROM ROM EPROM ROM RAM定时器 I/O 口 串行接口

外部

中断

特殊功能特性

80C451 83C451 87C451 4KB 128B 2 个 16 位 56 位 UART 2扩展了 I/O 口,

处理器总线口

80C550 83C550 87C550 4KB 128B 2 个 16 位 32 位 UART 28 路 8 位 A/D,

定时监视器

80C851 83C851 - 4KB 128B 2 个 16 位 32 位 UART 2 256B E�PROM

8032AH 8052AH - 8KB 256B 3 个 16 位 32 位 UART 2 NMOS

80C32 80C52 87C52 8KB 256B 3 个 16 位 32 位 UART 2 CMOS

80C552 83C552 87C552 8KB 256B 3 个 16 位 48 位 UART,I�C 6

8 路 10 位 A/D,

2 路 PWM,监视

定时器

80C562 83C562 - 8KB 256B 3 个 16 位 48 位 UART,I�C 6

8 路 8 位 A/D,2

路 PWM,监视定

时器

80C652 83C652 87C652 8KB 256B 2 个 16 位 32 位 UART,I�C 2

- 83C053 - 8KB 192B 2 个 16 位 28 位 - 3

CRT 控制器

(OSD),9 路

PWM

- 83C054 87C54 16KB 256B 2 个 16 位 32 位 - 3

CRT 控制器

(OSD),9 路

PWM

- 83C654 87C654 16KB 256B 2 个 16 位 32 位 UART,I�C 2

80C528 83C528 87C528 32KB 512B 3 个 16 位 32 位 UART,I�C 2

8.1.2 PIC16C5X 系列单片机

PIC16C5X 是 Microchip 公司推出的一种 8 位单片机。它的典型产品为 PIC16C57,具有

8 位 CPU、2KB×12E�PROM 程序存储器、80B×8RAM、一个 8 位定时/计数器,21 根 I/O 线,

其指令系统采用 RISC 指令,只有 33 条基本指令,工作速度较高,指令字长为 12 位。PIC16C5X

的典型机型及其性能见表 8-2 所示,它的内部总线不对外开放。现在 Microchip 推出的

16C6X、16C7X、16C8X、17C4X 系列的 OTP(One Time Programable)芯片,在仪器仪表、

家用电器、智能玩具等领域中大量应用。

表 8-2 PIC16C5X 单片机

Page 229: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·220·

型号 EPROM RAM 定时器 I/O 线 引脚 中断

PIC16C54 512B×12 32×8 8 位×1 13 18 无

PIC16C55 512B×12 32×8 8 位×1 21 28 无

PIC16C56 1KB×12 32×8 8 位×1 13 18 无

PIC16C57 1KB×12 80×8 8 位×1 21 28 无

8.1.3 M68HC05 单片机

M68HC05 是 Motorola 公司推出的一种采用 HCMOS 技术的 8 位单片机。其典型代表为

MC68HC705C8,有 8 位 CPU、8KB EPROM、304B RAM、16 位三功能定时器、34 根 I/O 线(31

根双向 I/O 线和 3 根中断和定时器输入/输出线)、串行通信口、串行扩展口、Watchdog、5

个中断向量(9 个中断源)。它有上百种型号,它们的 ROM(EPROM)、RAM 容量、引脚和封

装各不相同,I/O 功能也千变万化,有 LCD、LED、VFT 等显示驱动、屏幕显示(OSD)、PWM、

实时时钟、锁相环、D/A、A/D、串行通信口(SCI)、串行扩展口(SPI)、DTMF(双音频)

等各种 I/O 功能,以适应各种不同应用场合的需要。表 8-3 列出了几种应用较广的 M68HC05

及其功能。

表 8-3 M68HC05 单片机特性

型 号引

脚ROM EPROM E�PROM RAM I/O

定时

串行

口A/D 其 他

68HC05B4 52 4KB - - 176B 3216 位 5

功能SCI 8×8

2PWM,

Watchdog

68HC05B6 52 6KB - 256B 176B 3216 位 5

功能SCI 8×8

2PWM,

Watchdog

68HC705B5 52 - 6KB - 176B 3216 位 5

功能SCI 8×8

2PWM,

Watchdog

68HC05C4 40 4KB - - 176B 3116 位 3

功能

SCI,

SPI-

68HC05C8 40 8KB - - 176B 3116 位 3

功能

SCI,

SPI-

68HC05C9 40 16KB - - 352B 3116 位 3

功能

SCI,

SPI- Watchdog

68HC705C8 40 - 8KB - 304B 3116 位 3

功能

SCI,

SPI- Watchdog

Page 230: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·221·

(续 表)

型 号引

脚ROM EPROM E�PROM RAM I/O

定时

串行

口A/D 其 他

68HC705C9 40 - 16KB - 352B 3116 位 3

功能

SCI,

SPI- Watchdog

68HC05C5 40 5KB - 128B 176B 3214 位 3

功能SIOP - Watchdog

68HC705C5 40 - 5KB 128B 176B 3214 位 3

功能SIOP - Watchdog

68HC05D9 40 16KB - - 352B 3116 位 3

功能SCI -

5PWM,25mA 吸

68HC705D9 40 - 16KB - 352B 3116 位 3

功能SCI -

5PWM,25mA 吸

68HC05J1 20 1KB - - 64B 14 15 位 - - Watchdog

68HC705J2 20 - 2KB - 128B 14 15 位 - - Watchdog

68HC05K0 16 0.5KB - - 32B 10 15 位 - -KEY 中断

Watchdog

68HC05K1 16 0.5KB 8KB - 32B 10 15 位 - -KEY 中断

Watchdog

68HC705K1 16 - 0.5KB+8 - 32B 10 15 位 - -KEY 中断

Watchdog

68HC05L1 56 4KB - - 128B 3416 位 5

功能- 4×8 64 段 LCD

68HC705L1 56 - 4KB - 128B 3416 位 5

功能- 4×8 64 段 LCD

68HC05P1 28 2KB - - 128B 2116 位 3

功能- -

68HC05P4 28 4KB - - 176B 2116 位 3

功能SIOP - Watchdog

68HC05P6 28 4.6KB - - 176B 2116 位 3

功能SIOP 4×8 Watchdog

68HC05P7 28 2KB - - 128B 2116 位 3

功能SIOP - Watchdog

68HC05P9 28 2KB - - 128B 2116 位 3

功能SIOP 4×8 Watchdog

68HC705P6 28 4.6KB - 176B 2116 位 3

功能SIOP 4×8 Watchdog

68HC705P9 28 2KB - 128B 2116 位 3

功能SIOP 4×8

Page 231: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·222·

8.1.4 M68HC11 单片机

M68HC11 是 Motorola 公司生产的一种超级 8 位单片机。它的典型代表是 MC68HC11A8,

具有准 16 位 CPU、8KB ROM、256B RAM、512B E�PROM、16 位 9 功能定时器、38 根 I/O 线、

2 个串行口(SCI、SPI)、8 位脉冲累加器、8 路 8 位 A/D、实时中断、Watchdog、17 个中

断向量等功能。指令系统含有 150 多条指令,包括 16 位整数和小数除法指令和其它 16 位

运算、取数、存数指令。M68HC11 可以单片方式工作,也可以扩展方式(外接程序存储器

等)工作。

M68HC11 有几十种型号,表 8-4 列出了几种常用的 M68HC11 及它们的功能。

表 8-4 M68HC11 单片机特性

型 号 无 ROM 型 引脚 ROM RAM E�PROM 定时器 串行 I/O A/D I/O 其他

68HC11A8 68HC11A1 52 8KB 256B 512B 9 功能 SCI,SPI 8×8 38

68HC11E9 68HC11E1 52 12KB 512B 512B 9 功能 SCI,SPI 8×8 38

68HC711E9 - 52 12KB(E) 512B 512B 9 功能 SCI,SPI 8×8 38

68HC811E2 - 52 - 256B 2KB 9 功能 SCI,SPI 8×8 38

68HC11D3 68HC11D0 44 4KB 192B - 9 功能 SCI,SPI 8×8 32

68HC711D3 - 44 4KB(E) 192B - 9 功能 SCI,SPI 8×8 32

68HC11F1 - 68 - 1KB 512B 9 功能 SCI,SPI 8×8 30 4 片选

68HC11L6 68HC11L1 68 16KB 512B 512B 9 功能 SCI,SPI 8×8 46

68HC711J6 - 68 16KB(E) 512B - 9 功能 SCI,SPI 8×8 54

68HC11K4 68HC11K1 84 24KB 768B 640B 9 功能 SCI,SPI 8×8 62 4PWMMMU

68HC711K4 - 84 24KB(E) 768B 640B 9 功能 SCI,SPI 8×8 62 4PWMMMU

68HC11G5 68HC11G0 84 16KB 512B - 11 功能 SCI,SPI 8×10 624PWM

2 计数器

68HC711G5 - 84 16KB(E) 512B - 11 功能 SCI,SPI 8×10 624PWM

2 计数器

8.1.5 Z8 系列单片机

Z8 是 Zilog 公司生产的中档 8 位单片机。其典型代表是 Z8601,具有 8 位 CPU、

2KB ROM、124B RAM、两个 8 位定时器、32 根 I/O 线、1 个串行通信口、6 个中断向量等

功能。指令系统有 43 条基本指令,具有立即、直接、寄存器、间接、变址、相对等寻址方

式,CPU 采用多累加器结构,方便程序设计。表 8-5 列出了 Z8 的部分型号及其功能。

Page 232: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·223·

表 8-5 Z8 单片机特性

型 号 引脚 ROM RAM I/O 定时器 串行口 其 他

Z8600/10 28 2KB/4KB 124B 32 8 位×2 -

Z8601/11 40 2KB/4KB 124B 32 8 位×2 UART

Z86C06 18 1KB 124B 14 8 位×2 SPI Watchdog

Z86C21 40 8KB 256B 32 8 位×2 UART

Z86C40 40 4KB 256B 32 8 位×2 - Watchdog

Z86C93 40 256B 32 16 位×2 UART 16 位乘/除

8.2 以 8051 为内核的高精度数据采集单片机系统

ADμC 类芯片是 ADI 公司产品,典型芯片有 ADμC812,ADμC816,ADμC824。是将 ADC、

DAC 以及单片机高度集中,其核心仍然是 MCS-51 内核,内部存储器组织,外围设备与 MCS-51

相似,指令系统与 MCS-51 的指令系统完全相同,定时器/计数器和串行接口等工作方式也

一样,所以在使用 ADμC 类芯片时,可以参考 MCS-51 单片机的有关资料。

但是,ADμC 类芯片仍有些结构与 MCS-51 单片机不同,例如,ADμC 类芯片的闪速/

电擦除(Flash/EE)程序存储器和数据存储器与 MCS-51 单片机的存储器不同,尤其是该类

芯片中所集成的模/数转换器 ADC 的工作方式比传统的 ADC 芯片的工作方式灵活得多,这使

得用户利用 ADμC 类器件开发数据采集系统非常方便。本节以 ADμC812 为例,对 ADμC

系列器件作较为详细的介绍。

8.2.1 ADμC812 单片机内部结构与性能特点

ADμC812 的功能方框图如图 8-1 所示。

1.模拟输入输出

① 8 通道、高精度、12 位 ADC,转换速度为 200KSPS(即每秒采样 200K 次),A/D 转

换可设置成 DMA 模式,将 A/D 转换结果直接送数据存储器,片上还集成了 40PPM/℃参考电

压源。

② 两通道,电压输出型,12 位 ADC。

③ 片上还集成了温度传感器。

2.存储器配置

① 片上集成 8KB Flash/EE 程序存储器,片外 64KB 寻址空间。

② 片上集成 640B Flash/EE 数据存储器,256B 数据存储器,16MB 外部数据存储器寻

Page 233: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·224·

址空间。

③ 片上集成高电压充电泵,不需要外加 Vpp 编程电源。��������������������������������������������������������� ����������������������������������� ���������������������������������������� ����������������������������������������������� ���������!� ���� ������������������"����������������������� ���� ����������������������������������������������� �������������������������������������������������������

������������������ �������� ��������������������������� ������������� ����������#���"���������������"����������$�#��������������������#�������

�%����

图 8-1 ADμC812 单片机内部结构与性能特点

3.8051 内核

① 工作时钟 12MHz,最大为 16MHz。

② 三个 16 位定时/计数器。一个监控定时器。(Watchdog Timer)

③ 9 个中断源。两个优先级。

④ 32 条 I/O 线,P3 端口有大电流驱动能力。

⑤ UART 串行通讯接口,两线 I�C 或 SPI 串行通讯接口。

4.电源

① 可以工作在 3V 或 5V 环境。

② 有正常,空闲及掉电工作模式。

③ 电源监控器。

ADμC812 的内核是与 80C51 兼容的。可编程 8 位 MCU。片内有 8KB 的闪速/电擦除

(Flash/EE)程序存储器、640 字节的闪速/电擦除数据存储器以及 256 字节的数据 SRAM。

另外,MCU 支持的功能包括看门狗定时器,电源监控器以及 ADC,DMA 功能,并为多处

理接口和 I/O 扩展提供了 32 条可编程的 I/O 线,I�C 兼容的 SPI 和标准 UART 串行端口 I/O。

ADμC812 的 MCU 内核和模/数转换器二者都有正常,空闲,掉电等工作模式,提供了

适合低功耗应用的灵活的电源管理方案。器件有在工业温度范围内 3V 和 5V 两种工作电压

Page 234: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·225·

规格,并有 52 引脚、塑料四方形扁平封装形式可供使用。

下面分别从芯片的引脚排列以及引脚说明,存储器组织以及片内外设备来详细说明该

芯片的结构。

8.2.2. 引脚功能

1.封装以及引脚排列如图 8-2 所示。

1

2

3

4

5

6

7

8

9

10

11

12

13

14 15 16 17 18 19 20 21 22 23 24 25 26

27

28

29

30

31

32

33

34

35

36

37

38

39

40414243444546474849505152

P1.0/ADC0/T2

P1.1/ADC1/T2EX

P1.2/ADC2

P1.3/ADC3

AVdd

AGND

Cref

Vref

DAC0

DAC1

P1.4/ADC4

P1.5/ADC5/SS

P1.6/ADC6

P1.7

/AD

C7

RE

SET

P3.0

/RxD

P3.1

/TxD

P3.2

/IN

T0

P3.3

/IN

T1/

MIS

O

DV

dd

DG

ND

P3.4

/T0

P3.5

/T1/

CO

NV

STP3

.6/W

RP3

.6/R

D

SCL

OC

K

P2.7/A15/A23

P2.6/A14/A22

P2.5/A13/A21

P1.3/ADC3

DGND

DVdd

XTAL2(OUTPUT)

XTAL1(INPUT)

P2.3/A11/A19

P2.2/A10/A18

P2.1/A9/A17

P2.0/A8/A16

SDATA/MOSI

P0.7

/AD

7

P0.6

/AD

6

P0.5

/AD

5

P0.4

/AD

4

DV

dd

DG

ND

P0.3

/AD

3

P0.2

/AD

2

P0.1

/AD

1

P0.0

/AD

0

AL

E

PSE

N

EA�������������

ADuC812

TOP VIEW

(NOT TO SCALE)

图 8-2 ADμC812 封装引脚排列

2.引脚说明

ADμC812 的引脚说明如表 8-6 所示。

表 8-6 ADμC812 的引脚说明

符 号 类型 功 能

DV��P 数字正电源电压,额定值为+3V 或+5V

AV��P 模拟正电源电压,额定值为+3V 或+5V

C���I 片内基准的去耦引脚,在此引脚和 AGND 之间连接 0.1μF 的电容

V���I/O

基准输入/输出。次引脚通过串联电阻连接至内部基准,是模/数转换器

的基准源。额定内部基准电压 2.5V,且出现在此引脚(当 ADC 和 DAC

外围设备被使能时)。此引脚可以由外部引脚驱动

Page 235: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·226·

(续 表)

符 号 类型 功 能

AGND G 模拟地

P1.0~P1.7 I/O

端口 1 仅为 8 位输入端口。与其他端口不同,端口 1 缺省为模拟输入端

口,为了把这些端口的任一个引脚配置为数字输入,应把 0 写至该引脚

端口锁存器。端口 1 引脚是多功能的且共享模/数转换输入、定时器/计

数器 2、SPI 接口的从属选择输入等功能

ADC0~ADC7 I 模拟输入。8 个单端模拟输入。通过 ADCCON2 SFR 进行通道选择

T2 I定时器 2 数字输入。输入至定时器/计数器 2。当被使能时,对应于 T2

输入的 1 至 0 的跳变,计数器 2 为增量计数量

T2EX I数字输入。计数器 2Capture/Reload(捕获/重载)触发并用做计数器 2

Up/Down(上/下)控制输入

SS I SPI 接口的从属输入

SDATA I/O 用户可选,I�C 兼容输入/输出引脚或 SPI 数据输入/输出引脚

SCLOCK I/O I�C 兼容串行时钟引脚和 SPI 串行接口时钟

MOSI I/O 用于 SPI 接口的 SPI 主输出/从输入数据 I/O 引脚

MISO I/O 用于 SPI 接口的 SPI 主输入/从输出数据 I/O 引脚

DAC0 O DAC0 电压输出

DAC1 O DAC1 电压输出

RESET I数字输入。当振荡器运行时,此引脚上长达 24 个主时钟周期的高电平

使器件复位

P3.0~P3.7 I/O

端口 3 是具有内部上拉电阻的双向端口,写 1 的端口 3 引脚被内部上拉

电阻拉至高电平,在此状态下可被用做输入,由于内部上拉电阻,被外

部拉至低电平的端口 3 引脚将提供电流,端口 3 引脚也包括各种次要功

能,后面将会说明

RXD I/O 串行(UART)端口的接收数据输入(异步)和数据输入/输出(同步)

TXD O 串行(UART)端口的发送数据输入(异步)和数据输入/输出(同步)

INT0 I中断 0 输入,可编程为边沿或电平触发,它可以被编程为两个优先级之

一。此引脚也可用做定时器 0 门(GATE)控制输入

INT1 I中断 1 输入,可编程为边沿或电平触发,它可以被编程为两个优先级之

一。此引脚也可用做定时器 1 门(GATE)控制输入

T0 I 定时器/计数器 0 输入

T1 I 定时器/计数器 1 输入

CONVST I当外部转换启动被使能时 ADC 块低电平有效转换启动逻辑输入。此输入

端低电平至高电平跳变将把跟踪/保持置入其保持方式并启动转换

WR O写控制信号,逻辑输出。把来自端口 0 的数据锁存入外部数据存储器或

I/O 口

Page 236: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·227·

(续 表)

符 号 类型 功 能

RD O 读控制信号,逻辑输出。允许外部数据存储器或 I/O 口数据送至端口 0

XTAL2 O 倒相振荡器放大器的输出

XTAL1 I 倒相振荡器放大器输入

DGND G 数字地。数字电路的地基准点

P2.0~P2.7

(A8~A15)

(A16~A23)

I/O

端口 2 是具有内部上拉电阻的双向端口。写 1 的端口 2 被内部上拉电阻

拉至高电平,在此状态下它们可被用做输入。由于内部上拉电阻,被外

部拉至低电平的端口 2 引脚将提供电流。端口 2 在从外部程序存储器取

指期间发出高地址字节,在访问 24 位外部数据存储器空间发出中、高

地址字节

PSEN O

程序存储器使能,逻辑输出。此输出端是控制信号,在外部取指操作期

间内允许外部程序存储器送至总线。除了在外部数据存储器访问期间,

PSEN 每 6 个时钟周期被激活一次。在内部程序执行期间内此引脚保持

高电平。当上电或者复位通过电阻拉至低电平时, PSEN 也可用作使能

下载模式

ALE O

地址锁存允许,逻辑输出。在正常工作期间,此输出用于把地址的低字

节(对于 24 位地址空间访问还有中字节)锁存入外部存储器。除了在

外部数据存储器访问期间内,ALE 每 6 个振荡周期被激活(有效)一次

EA I

外部访问使能,逻辑输入。当保持高电平时,此输入使器件能从地址为

0000H 至 1FFFH 的内部程序存储器取回代码。当保持低电平时,此输入

使器件能从外部程序存储器取回所有指令

P0.7~P0.0

(A0~A7)I/O

端口 0 是 8 位漏极开路双向 I/O 端口。写 1 的端口 0 引脚悬空,在此状

态下可用做高阻抗输入。在访问外部程序和数据存储器期间内,端口 0

也是多路复用的低 8 位地址和数据总线

8.2.3 存储器组织

ADμC812 与所有与 80C51 兼容的器件一样,对于程序和数据存储器具有两个线性的地

址空间。其内核具有片内可重新编程、非易失性闪速/电擦除程序和数据存储器。闪速存储

器是最新类型的非易失性存储器技术,它基于单个晶体管单元结构,既具有 E�PROM 灵活在

线可重新编程的特点,又包含了 EPROM 空间有效性/高密度的特点。与 E�PROM 一样,虽然

闪速存储器必须先被擦除,但它可在系统内在字节级被编程,擦除操作在扇区块内执行。

因此闪速存储器常常被称为闪速/电擦除存储器。ADμC812 包含了两个闪速/电擦除存储

器,即程序存储器和数据存储器。

Page 237: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·228·

1.程序存储器

程序存储器配置如图 8-3(b)所示,内部 8KB 的闪速/电擦除程序存储器空间,使代

码的执行变得容易,而且无需任何外部分立 ROM 器件。编程时,可以用常规第三种方法提

供的存储编程器,或者使用开发商提供的串行下载模式再现编程,也可以并行编程。

作为厂家引导代码的一部分,ADμC812 使用经过标准 UART 串行接口实现串行代码下

载。将外部引脚 PSEN 通过外部电阻拉至低电平,则上电时将自动进入串行下载模式。一

旦处于此模式,用户可以把代码下载到程序存储器阵列,同时器件仍位于其目标应用硬件

中。

并行编程模式与常规的第三种方法闪速或 E�PROM 器件编程器完全兼容。如图 8-3(a)

所示,在此方式下,端口 P0,P1,P2 用做外部数据和地址总线接口,ALE 用作写使能选通,

端口 P3 编程模式配置端口,在并行编程期间内它为各种编程和擦除操作配置时序。闪速编

程所需的高压(12V)电源用片内充电泵产生,为高压编程供电。表 8-7 表示用端口 P3 的

位来配置的正常并行编程模式。�������������� �� ������������������������������������������������������������������� 外部扩展

存储器��������� �������������������������������������ADuC812

(a) 并行编程模式 (b) 程序存储器配置

图 8-3 程序存储器

表 8-7 闪速存储器并行编程模式

端口引脚(P3.7~3.0)

7 6 5 4 3 2 1 0编程模式

1 1 1 1 0 0 0 1

1 1 1 1 0 0 1 0

1 1 1 1 0 0 1 1

1 1 1 1 0 1 0 1

1 1 1 1 0 1 1 1

任何其他代码

擦除闪速程序

擦除闪速用户

读制造商和芯片 ID

编程字节

读字节

保留

Page 238: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·229·

2.数据存储器

数据存储器配置如图 8-4 所示,由五个部分组成,即低 128B 内部 RAM、高 128B 内部

RAM、特殊功能寄存器 SFR、640B FLASH/EE 数据存储器和 16MB 外扩数据存储器。

低 128B 内部 RAM、高 128B 内部 RAM 与 52 系列一致。

外扩

数据

FFFFFFH

000000H

(PAGE 159)

(PAGE 0)

由S蒄蒖裳爸

数据存储器

9FH

00H

FFH

00H

80H7FH

高1��

低1��

SFR特殊功能寄存器数据存储器

数据存储器

640B FLASH/EE

16MB

存储器

图 8-4 数据存储器配置

(1)特殊功能寄存器 SFR

特殊功能寄存器配置如表 8-8 所示,可位寻址的特殊功能寄存器各位功能定义如图 8-5

所示。

用于 A/D 的特殊功能寄存器有:

ADCCON1、ADCCON2、ADCOFSH、ADCOFSL、ADCGAINH、ADCGAINL、DMAP、DMAH、DMAL、

ADCDATAH、ADCDATAL

用于 D/A 的特殊功能寄存器有:DACCON、DAC1H、DAC1L、DAC0H、DAC0L。

表 8-8 特殊功能寄存器的配置

SPICON�

F 8 H 0 0 H

DAC0L

F 9 H 0 0 H

DAC0H

F A H 0 0 H

DAC1L

F B H 0 0 H

DAC1H

F C H 0 0 H

DACCON

F D H 0 4 HRESERVED NOT USED

B�

F 0 H 0 0 H

ADCOFSL�

F 1 H 0 0 H

ADCOFSH�

F 2 H 2 0 H

ADCGAINL�

F 3 H 0 0 H

ADCGAINH�

F 4 H 0 0 H

ADCCON3

F 5 H 0 0 HRESERVED

SPIDAT

F 7 H 0 0 H

I2CCON�

E 8 H 0 0 HRESERVED RESERVED RESERVED RESERVED RESERVED RESERVED

ADCCON1

E F H 2 0 H

ACC�

E 0 H 0 0 HRESERVED RESERVED RESERVED RESERVED RESERVED RESERVED RESERVED

ADCCON2�

D 8 H 0 0 H

ADCDATAL

D 9 H 0 0 H

ADCDATAH

D A H 0 0 HRESERVED RESERVED RESERVED RESERVED

PSMCON

D F H D C H

Page 239: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·230·

(续 表)

PSW�

D 0 H 0 0 HRESERVED

DMAL

D 2 H 0 0 H

DMAH

D 3 H 0 0 H

DMAP

D 4 H 0 0 HRESERVED RESERVED RESERVED

T2CON�

C 8 H 0 0 HRESERVED

RCAP2L

C A H 0 0 H

RCAP2H

C B H 0 0 H

TL2

C C H 0 0 H

TH2

C D H 0 0 HRESERVED RESERVED

WDCON�

C 0 H 0 0 HNOT USED NOT USED NOT USED

ETIM3

C 4 H C 9 HRESERVED

EDARL

C 6 H 0 0 HRESERVED

IP�

B 8 H 0 0 H

ECON

B 9 H 0 0 H

ETIM1

B A H 5 2 H

ETIM2

B B H 0 4 H

EDATA1

B C H 0 0 H

EDATA2

B D H 0 0 H

EDATA3

B E H 0 0 H

EDATA4

B F H 0 0 H

P3�

B 0 H F F HNOT USED NOT USED NOT USED NOT USED NOT USED NOT USED NOT USED

IE�

A 8 H 0 0 H

IE2

A 9 H 0 0 HNOT USED NOT USED NOT USED NOT USED NOT USED NOT USED

P2��

A 0 H��

F F HNOT USED NOT USED NOT USED NOT USED NOT USED NOT USED NOT USED

SCON�

9 8 H 0 0 H

SBUF

9 9 H 0 0 H

I2CDAT

9 A H 0 0 H

I2CDAD

9 B H 0 0 HNOT USED NOT USED NOT USED NOT USED

P1���

9 0 H F F HNOT USED NOT USED NOT USED NOT USED NOT USED NOT USED NOT USED

TCON�

8 8 H 0 0 H

TMOD

8 9 H 0 0 H

TL0

8 A H 0 0 H

TL1

8 B H 0 0 H

TH0

8 C H 0 0 H

TH1

8 D H 0 0 HNOT USED NOT USED

P0�

8 0 H F F H

SP

8 1 H 0 7 H

DPL

8 2 H 0 0 H

DPH

8 3 H 0 0 H

DPP

8 4 H 0 0 HRESERVED RESERVED

PCON

8 7 H 0 0 H

用于寻址 640B 的特殊功能寄存器有:ECON、EADRL、EDATA1、EDATA2、EDATA3、EDATA4、

ETIM1、ETIM2、ETIM3。

用于寻址外扩 16MB RAM 的特殊功能寄存器有:DPTR(DPH,DPL),DPP。

用于 SPI 通讯的特殊功能寄存器有:SPICON、SPIDAT。

用于 I�C 通讯的特殊功能寄存器有:I2CON、I2CADD、I2CDAT。

用于 Watchdog 的特殊功能寄存器有:WDCON。

用于电源监视的特殊功能寄存器有:PSMCON。

其他还有:IE、IE2、IP、TMOD、TCON、SCON、SBUF、PCON 等等。

(2)640 字节的闪速/电擦除数据存储器

它可以被用户用做通用非易失性暂存存储器区域,如同传统的 E�PROM。它被配置为

160 页(00H 至 9FH)、4 字节的页,通过映射在 SFR 空间的存储器组与此存储器空间相接口。

4 个数据寄存器组(EDATA1~4)用于保存刚访问的 4 字节页数据。EADRL 用于保存被访问

页的 8 位地址。最后,ECON 是 8 位控制寄存器,它可以写入 5 个闪速/电擦除存储器访问

命令之一,以便使能各种读、写擦除和校验模式。ECON 控制寄存器命令模式如表 8-9 所示。

Page 240: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·231·

图 8-5 可位寻址的 SFR 配置

表 8-9 ECON—闪速/电擦除存储器控制寄存器命令模式

命令字节 命 令 模 式

01H 读命令。使 4 个被读字节从包含在 EADRL 内的存储器页地址进入 EDATA1~4

02H写命令。使 4 个字节(EDATA1~4)写至包含在 EADRL 内的存储器页地址。此命令

假设指定的“写”页已预先被擦除

03H 保留命令。不使用

04H

校验命令。允许用户校验 EDATA1~4 中的数据是否包含在 EADRL 所指定的页地址。

如果校验有效,那么后续的 ECON SFR 读操作将读出“0”。读出非零值表示无效校

05H 擦除命令。擦除 EADRL 所指定的 4 字节页

06H 全部擦除命令。擦除全部用户存储器 160 页(640 字节)阵列

07H~FFH 保留命令。留作今后使用

一般对闪速/点擦除阵列的访问,首先要在 EADRL SFR 中设置被访问的页地址,然后是

要编程到阵列的数据置到 EDATA1-4(对于读访问将不写 EDATA SFR),最后写 ECON 命令字,

它将启动表 8-8 所示的五种模式之一。

应当注意,只要命令字写入 ECON SFR,给定的工作方式即开始起作用。此时,在

Page 241: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·232·

ADμC812 内核控制器的操作将空闲,直至完成所要求的编程/读或擦除方式。实际上,这

意味着闪速/电擦除操作完成(250μs 或 20ms 之后)之前,下一条指令将不被执行。这表

示虽然在整个这种准空闲(Pseudoidle)周期内,像计数器/定时器这样的功能部件如所设

置的那样计数和定时,但是直到闪速/电擦除操作完成之前,内核将不响应中断请求。

一般说来,闪速/电擦除存储器阵列只有在它预先被擦除后才能编程。具体地说,一个

字节只有在它保持数值 FFH 时才能被编程。由于闪速/电擦除存储器的结构,这种擦除必须

发生在“页”一级,因此当擦除命令开始时,最少擦除 4 个字节(1 页)。

图 8-6 FLASH/EE 数据存储器操作过程

图 8-6 是一个特殊的编程过程的例子。在此例子中,把 F3H 写入用户闪速/电擦除存储

器空间中的页地址为 03H 的第二个字节。然而,页 03H 已包含了 4 个字节的有效数据。当

用户只要求修改这些数据之一时,必须首先读出整个页,以便在擦除此页时不丢失已存在

的数据。然后,把新数据写入 EDATA2 SFR。其后是擦除(ERASE)周期,它确保在新的页

数据 EDATA1~4 写回到存储器之前擦除此页。如果在没有擦除周期(ECON 设置为 05H)的

情况下开始编程周期(ECON 设置为 02H),那么只有初值为“1”的位被修改。因此,为了

Page 242: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·233·

实现对存储器阵列的有效写访问,必须预先擦除闪速/电擦除存储器字节地址。

用 80C51 汇编语言代码表示如下:

MOV EADRL,#03H ;设置页指针

MOV ECON,#01H ;读页命令

MOV EDATA2,#0F3H ;写新字节

MOV ECON,#05H ;擦除页命令

MOV ECON,#02H ;编程页命令

虽然芯片出厂时,厂家已将整个 E�PROM 空间擦除,在使用 ADμC812 的 E�PROM 时,初

始化程序中,包含一段全部擦除子程序,将是一种良好的编程习惯,全部擦除命令的 80C51

汇编语言代码为:MOV ECON,#06H。注意,全部擦除(ERASE-ALL)命令(640 字节)的

持续时间与擦除(ERASE)页命令(4 字节)的持续时间是相同的,即 20ms。

(3)外扩 16MB 数据存储器

当外扩数据存储器容量在 64KB 以内时,扩展方法与 MCS-51 完全一致,不再赘述。

当外扩数据存储器容量在 64KB 以上,16MB 以下时,扩展方法如图 8-7 所示。P2 端口

分时提供 A8~A15 和 A16~A23。数据指针由三部分组成,即 DPP、DPH 和 DPL。DPP 输出 A16~

A23,DPH 输出 A8~A15,DPL 输出 A0~A7。指令 INC DPTR 将进位自动送 DPP(即 DPTR 寄

存器加 1 溢出时,DPP 内容加 1)。

图 8-7 16MB 外扩展数据存储器原理图

8.2.4 片内接口电路

ADμC812 的片内外围设备包括:UART 串行 I/O、2 线串行(与 I�C 兼容)和 SPI 串行

I/O、看门狗定时器、电源监视器等。下面分别介绍。

1.并行 I/O 端口 P0~P3

ADμC812 使用 4 个通用数据端口与外部器件交换数据。除了使用通用 I/O 外,某些端

Page 243: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·234·

口能实现外部存储器操作,其他端口则与器件上外围设备其他功能多路复用。通常,当外

围设备共享端口引脚被使用时,该引脚不能再用做通用 I/O 引脚。

端口 P0、P2、P3 是双向端口,而端口 P1 只能作输入端口。所有端口均包含输出锁存

器和输入缓冲器,I/O 端口也包含输出驱动器。对端口 P0~P3 引脚的读和写访问,通过它

们对应的特殊功能寄存器来实现。

通过相应的特殊功能寄存器 SFR 位,可把端口 P0、P2 和 P3 的端口引脚独立的配置为

数字输入或数字输出。但是,端口 P1 引脚只能被配置为数字输入或模拟输入,此器件不支

持端口 P1 的数字输出能力。

2.串行 I/O 端口

① UART 接口:串行端口是全双工的,意味着它可以同时发送和接收。它有两个接收

缓冲器,表示在从接收寄存器读出先前接收到的字节之前可以开始接收第二个字节。但是,

如果在第二个字节接收完成时,第一个字节未被读出,那么字节之一会丢失。至串行网络

的物理接口经过引脚 RxD(P3.0)和 TxD(P3.1),可以设置为 4 种工作模式之一。

② 串行外设接口(SPI):串行外设接口(Serial Peripheral Interface,简称 SPI)

是工业标准的同步串行接口,它允许 8 位数据同时、同步地发送和接收。系统可配置为主

(Master)或从(Slave)操作。

③ I�C 兼容的串行接口:ADμC812 支持 2 线串行接口模式,它与 I

�C 兼容。此接口

可配置为软件主(Software Master)或硬件从(Hardware Slave)模式,且可与 SPI 串

行接口多路复用。

3.定时器/计数器

ADμC812 具有 3 个 16 位的定时器/计数器,即定时器 0、定时器 1 和定时器 2。定时

器/计数器硬件已包含在片内,以减轻用软件实现定时器/计数器功能时处理器内核固有的

负担。每一个定时器/计数器包含两个 8 位寄存器 THx 和 TLx(x=0,1,2)。所有 3 个定时

器/计数器均可配置定时器或计数器。

在“定时器”功能中,每个机器周期 TLx 寄存器增量。因此,可以把它看作对机器周

期计数。因为一个机器周期包含 12 个振荡周期,所以最大的计数器速率是振荡频率的 1/12。

在“计数器”功能中,TLx 寄存器根据其对应的外部输入引脚 T0、T1 或在该引脚上

的 1 至 0 的跳变增量完成计数功能。

4.片内监视器

ADμC812 集成了两个片内监视器,以便使灾难性的编程或其他外部系统故障期间内代

码或数据的破坏为最小。此外,两个监视器功能完全可以通过 SFR 空间来设置。

① 看门狗定时器(WATCHDOG TIMER)

看门狗定时器的作用是,当 ADμC812 可能由于编程错误、电气噪声或 RFI 而进入出错

状态达到适当的时间时产生器件的复位。看门狗的功能可通过清除看门狗控制(WDCON)SFR

中的 WDE(看门狗使能)位而永远被禁止。当看门狗被使能时,如果在预定的时间间隔内

用户程序没有刷新看门狗,那么看门狗电路将产生系统复位。看门狗复位时间间隔可通过

Page 244: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·235·

SFR 预定标(Prescale)位在 16~2048ms 范围内进行调整。

WDCON: WATCHDOG 时间控制寄存器,可位寻址。各位功能定义如下:�D7 D6 D5 D4 D3 D2 D1 D0

PRE2 PRE1 PRE0 / WDR1 WDR2 WDS WDE�PRE2、PRE1、PRE0: WATCHDOG 时间间隔选择位,即 000~111 分别选择 16、32、64、

128、256、512、1024、2048 ms。

WDR1,WDR2:看门狗刷新控制位,用于不断地刷新看门狗定时器。

WDS:看门狗状态标志

WDE:软件置位时,看门狗允许

② 电源监视器 PSM

当加至 ADμC812 的模拟(AV��)或数字(DV��)电源降至 5 个电压转变点(它们在 2.6V~

4.6V 范围内由用户选择)之一时,电源监视器产生中断。在电源回到转变点以上至少 256ms

之前中断位不会被清除。

这种监视器功能确保用户保存工作寄存器,以避免由于低电源情况而可能造成的数据

破坏,并且确保在可靠建立“安全”电源电平之前不会恢复代码的执行。电源监视器也能

防止寄生的闪变信号触发中断电路。

PSMCON:电源监视控制寄存器,不能位寻址。各位功能定义如下:

PSMCON.7:未用;

PSMCON.6:PSM 状态标志位,(1=正常,0=欠压)

PSMCON.5:PSM 中断标志位 PSMI;

PSMCON.4、PSMCON.3、PSMCON.2:监测电压选择位,000~100 对应 4.63V、4.37V、3.08V、

2.93V、2.63V。

PSMCON.1:检测电源(AV��/DV��)选择位,(1=AV��,0=DV��)PSMCON.0:PSM 电源控制位,(1=ON,0=OFF)

8.2.5 中断系统

ADμC812 提供具有两个优先级的 9 个中断源。

在图 8-8 中,给定级别中断优先级的查询以递减的顺序表示。图 8-8 给出了中断系统

的概述,并说明了请求和控制标志。相应中断的中断矢量地址包括在表 8-10 中。

与中断有关的寄存器有 IE、IE2 和 IP。其中,IE 和 IP 是位可寻址的,而 IE2 仅是字

节可寻址的。开放 ADμC812 的任何中断,必须遵循下列 3 个步骤:

① 将中断服务子程序放在该中断相应的矢量地址,如表 8-10 所列。

② 将 IE 中 EA(使能全部已开放的中断)设置为“1”。

③ 将 IE 或 IE2 中相应的各开放中断位设置为“1”。

Page 245: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·236·

�������������������� ������������������������������������������������ ���������������������������������������������������������������������������������������������� ������������� ���������

� �������������������� ��������������������������������EA

����������������������

�������� ���������������� ������������������������������ ������������������������������������������������������������������� ����������������������� ���!�����

�图 8-8 中断系统结构图

表 8-10 中断矢量地址

中断标志位* 中断名称 中断矢量地址 优先级查询(优先)顺序

PSM1 电源监视器 0043H 1

IE0 外部 INT0 0003H 2

ADCI ADC 转换结果 0033H 3

TF0 定时器 0 溢出 000BH 4

IE1 外部 INT1 0013H 5

TF1 定时器 1 溢出 001BH 6

T2CI/ISPI 串行中断 003BH 7

RI/TI UART 中断 0023H 8

TF2/EXF2 定时器 2 中断 002BH 9

注:“*”表示当相应中断源有有效请求时,该标志位置位;响应中断时该标志由硬件自动复位(或由

指令清除)。

Page 246: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·237·

1.中断使能寄存器 IE

IE 寄存器使能中断系统和 7 个中断源。IE 地址为 A8H,位可寻址,如表 8-11 所示。

表 8-11 中断使能(IE)SFR 位的说明

IE 位地址 位助记符 说 明

D7 IE.7 EA在内核识别任何中断源之前,全局中断使能位(EA)必须置为“1”,EA

置为“0”将禁止所有的中断

D6 IE.6 EADC 为使能 ADC 中断,ADC 中断使能位(EADC),应置为“1”

D5 IE.5 ET2 为使能定时器 2 中断,定时器 2 溢出中断使能位(ET2),应置为“1”

D4 IE.4 ES 为使能 UART 串行端口中断,UART 串行端口中断使能位(ES),应置为“1”

D3 IE.3 ET1 为使能定时器 1 中断,定时器 1 溢出中断使能位(ET1),应置为“1”

D2 IE.2 EX1 为使能外部 INT1中断, INT1中断使能位(EX1),应置为“1”

D1 IE.1 ET0 为使能定时器 0 中断,定时器 0 溢出中断使能位(ET2),应置为“1”

D0 IE.0 EX0 为使能外部 INT0 中断, INT0 中断使能位(EX0),应置为“1”

2.中断使能寄存器 IE2

IE2 寄存器使能另外两个中断源。SFR 地址为 A9H,不能位寻址,如表 8-12 所示。

3.中断优先级寄存器 IP

IP 寄存器为各种中断源设置两种主优先级之一。IP 寄存器的地址为 0B8H,可位寻址,

把相应的位置为“1”,可把中断置为高优先级;设置为“0”则把中断置为低优先级。如表

8-13 所示。

表 8-12 中断使能 2(IE2)SFR 位说明

IE 位地址 位助记符 说 明

D7 IE2.7 NU 未用

D6 IE2.6 NU 未用

D5 IE2.5 NU 未用

D4 IE2.4 NU 未用

D3 IE2.3 NU 未用

D2 IE2.2 NU 未用

D1 IE2.1 EPSM 使能 PSM 中断,电源监视器中断使能位,应置为“1”

D0 IE2.0 ESI 使能 SPI 或 I�C 中断,SPI/I�C 中断使能位(ESI),应置为“1”

Page 247: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·238·

表 8-13 中断使能 2(IE2)SFR 位说明

IP 位地址 位助记符 说 明

D7 IP.7 PSI 设置 SPI/I�C 中断优先级

D6 IP.6 PADC 设置 ADC 中断优先级

D5 IP.5 PT2 设置定时器 2 中断优先级

D4 IP.4 PS 设置 UART 串行口中断优先级

D3 IP.3 PT1 设置定时器 1 中断优先级

D2 IP.2 PX1 设置外部 INT1中断优先级

D1 IP.1 PT0 设置定时器 0 断优先级

D0 IP.0 PX0 设置外部 INT0 中断优先级

8.2.6 模/数转换器(ADC)

ADμC812 集成了一个 ADC 数据采集子系统,其中包含了 8 通道模拟开关、采样保持器、

单电源 12 位逐次逼近 A/D 转换器、温度传感器、+2.5V 片内基准\误差校准及控制逻辑。

A/D 转换器为常规逐次逼近转换器,转换速度 5μs,可保证差分非线性误差为±1LSB

和积分非线性误差为±1/2LSB。转换器接收的模拟输入范围为 0~+V���。片内提供高精度、

低漂移并经厂家校准的 2.5V 基准电压。使用内部基准时,模拟信号输入范围为

0~+2.5V;使用外部基准时,基准电压可经外部 V���引脚输入,外部基准可在 2.3V~AV��范围内,模拟信号输入范围为 0~V���。

ADμC812 装有厂家编程的校准系数,在上电时自动下载到 ADC,以确保最佳的 ADC 性

能。ADC 核包括内部失调和增益校准寄存器,所提供的软件校准子程序可允许用户在需要

时重写厂家编程的校准系数,以便使用户目标系统中端点误差的影响为最小。

来自片内温度传感器的电压输出正比于绝对温度,它可通过前端 ADC 多路转换器(实

际上是第 9 个 ADC 通道输入)传送,这方便了温度传感器的使用。

ADμC812 的 ADC 由三种工作模式:第一,用软件或通过把转换信号加之外部引脚 23

( CONVST )来启动单次或连续转换模式;第二,用定时器 2 来产生用于 ADC 转换的重复

触发信号;第三,配置 ADC 工作 DMA 模式。在 DMA 模式下,ADC 块连续转换并把采样值捕

获到 RAM 空间而不需来自 MCU 核的任何干预。这种捕获功能可以扩展到 16MB 外部数据存储

空间,实现快速ADC转换。ADμC812为用户提供了3个SFR寄存器ADCCON1/ADCCON2/ADCCON3

来配置 ADC 模块。

1.ADCCON1

ADCCON1 用于控制转换和采样时间,各位功能定义如下:

Page 248: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·239·

D7 D6 D5 D4 D3 D2 D1 D0

MD1 MD0 CK1 CK0 AQ1 AQ0 T2C EXC

EXC:当置位时,由外部引脚CONVST 的低电平来启动 ADC 转换。

T2C:当置位时,将由定时器 T2 的溢出位来启动 ADC 转换。

AQ1、AQ0:选择采样/保持电路采样输入信号的时间,可选的采样时间数为 1/2/4/8

个 ADC 时钟。当模拟输入源内阻大于 8KΩ时,建议将采集时钟增加到 2~4 个采样时钟。

CK1、CK0:选择输入 ADC 时钟的主时钟分频系数,可选的分频比为 1/2/4/8,一次转

换需要 16 个 ADC 时钟加上所选数目的采集时钟。

MD1、MD0:工作模式控制。

00:ADC 掉电;

01:ADC 正常工作;

10:若不执行转换周期则 ADC 掉电;

11:若不执行转换周期则 ADC 待机;

2.ADCCON2

ADCCON2 用于控制通道选择和转换模式,各位功能定义如下:

D7 D6 D5 D4 D3 D2 D1 D0

ADCI DMA CCONV SCONV CS3 CS2 CS1 CS0

CS3、CS2、CS1、CS0:通道选择位,0000~0111 选择通道 0~通道 7,1000 选择温度

传感器,1111 为停止 DMA 工作。

SCONV:单次转换控制位,置为“1”时,开始单次转换周期,转换结束时自动清 0。

CCONV:连续转换控制位,置为“1”时,ADC 进入连续转换模式。

DMA:DMA 模式允许控制位,置为“1”时,启动 ADC 的 DMA 模式工作。

ADCI:ADC 中断标志位,A/D 转换结束时由硬件置位,MCU 响应中断后由硬件自动清 0。

3.ADCCON3

ADCCON3 用于 ADC 状态指示,各位功能定义如下:

D7 D6 D5 D4 D3 D2 D1 D0

BUSY RSVD RSVD RSVD CTYP CAL1 CAL0 CALST

BUSY:ADC 忙状态,为“1”时,表示 ADC 正处于转换周期或校准周期中。

其余位:保留。

Page 249: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·240·

4.ADC 结果数据格式

ADC 结果数据格式如图 8-9 所示。其中低 8 位数据存储在 ADCDATAL 中,高 4 位数据存

储在 ADCDATAH 的低半字节中。ADCDATAH 中的高半字节将被写入通道编码数据,用于识别

ADC 结果属于哪一个通道。

5.编程举例

将 ADC0 通道数据采集送内部 RAM 70H~71H 单元中。

子程序如下:

ADCSUB: MOV ADCCON1,#01101100B ;ADC 上电

MOV ADCCON2,#00000000B ;选 ADC0 通道

SETB SCONV ;启动 A/D

ADCST: MOV ADCCON3 ;查询状态

JB ACC.7,ADCST

MOV R0,#70H

MOV A,ADCDATAH ;读高 4 位

MOV @R0,A

INC R0

MOV A,ADCDATAL ;读低 8 位

MOV @R0,A

RET

ADCDATAH SFR

ADCDATAL SFR

CH-ID

TOP 4 BITS

HIGH 4 BITS OF THE

ADC RESULT WORD

LOW 8 BITS OF THE

ADC RESULT WORD

图 8-9 ADC 结果数据格式

8.2.7 数/模转换器(DAC)

ADμC812 组合了两片片内 12 位的 DAC,其工作通过单个特殊功能寄存器 DACCON 和 4

个特殊功能数据寄存器 DAC0L/DAC1L DAC0H/DAC1H 来控制。DAC0L/DAC1L 用来存储

DAC0/DAC1 的低 8 位数据,DAC0H/DAC1H 用来存储 DAC0/DAC1 的高 4 位数据,一旦在这些寄

存器中写入相应的数据,就可以启动 DAC。

在正常工作模式下,当写 DAC 低字节(DAC�L)SFR 时,每一个 DAC 被更新。使用 DACCON

Page 250: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·241·

SFR 中的 SYNC 位可同时更新两个 DAC。

在 8 位 DAC 工作模式下,只需将 8 位数据写入 DAC�L,内部自动的将数据送入 12 位 DAC

高端。

DACCON 用于 DAC 控制,地址为 0FDH,复位初值 04H,不能位寻址。

各位功能定义如下:

D7 D6 D5 D4 D3 D2 D1 D0

MODE RNG1 RNG0 CLR1 CLR0 SYNC PD1 PD0

PD0:DAC0 通道电源控制位,为“0”时,关闭 DAC0 通道电源;为“1”时,通道电源

上电。

PD1:DAC1 通道电源控制位,为“0”时,关闭 DAC1 通道电源;为“1”时,通道电源

上电。

CLR0:DAC0 通道输出清除位,为“0”时,通道输出为 0V;为“1”时,正常输出。

CLR1:DAC1 通道输出清除位,为“0”时,通道输出为 0V;为“1”时,正常输出。

RNG0:DAC0 通道输出范围选择,为“0”时,通道输出为 0~V���;为“1”时,输出为

0~V��。RNG1:DAC1 通道输出范围选择,为“0”时,通道输出为 0~V���;为“1”时,输出为

0~V��。MODE:DAC 工作模式,为“0”时,设置 DAC 两通道为 12 位模式;为“1”时,设置为

8 位模式。

SYNC:DAC 同步输出控制位,为“1”时,写 DAC 低字节(DAC�L)SFR 时,每一个 DAC

被立即更新;为“0”时,将 DAC�L/H 写入,再将其置“1”,两个通道可同步输出。

编程举例:将内存 70H~73H 中数据送 DAC 输出。

子程序如下:

DACSUB: MOV DACCON,#00011111B ;两路非同步输出、0~V����MOV R0,#70H ;设指针

MOV A,@R0 ;取 DAC0 高位数据

MOV DAC0H,A ;送 DAC0H

INC R0

MOV A,@R0 ;取 DAC0 低位数据

MOV DAC0L,A ;送 DAC0L

INC R0

MOV A,@R0 ;取 DAC1 高位数据

MOV DAC1H,A ;送 DAC1H

INC R0

MOV A,@R0 ;取 DAC1 低位数据

MOV DAC1L,A ;送 DAC1L

RET

Page 251: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·242·

�8.3 可编程外围芯片 PSD 的原理及应用

8.3.1 PSD 器件概述

单片机广泛应用于各类家电、通信设备、工业控制系统、数据采集系统、自动测试系

统、智能仪器仪表以及汽车电子等领域。但在单片机实际应用系统中,如果程序代码过长

或随机数据存贮量过大,就需要增加外部程序存储器和外部数据存储器,而且,通常应用

系统需要的外设接口较多,单片机本身的接口远不够用,这就需要扩展可编程 I/O 接口(如

8255A、8155A 等),这样才能组成多输入、多输出的测控系统。

另外,随着设计技术,特别是大规模集成技术的发展,以及日益增加的设备复杂化控

制的需要,从用户角度来讲,要求尽量简化电路系统的设计,增大程序存贮容量,缩短设

计周期,降低工艺成本。为了适应市场的需求,WSI 公司推出了基于自己独特专利技术的

单片机外围器件 PSD 系列。它集闪速存储器、E�PROM、RAM、I/O□等多功能于一体,与微

控制器(Motorola 系列、Intel 系列、Philips 系列等单机片)组合在一起,既避免了各

种分离器件混合中的匹配问题,又增大了存贮容量,扩展了接口数量,在丰富系统功能的

同时,使系统简洁、可靠性高,缩短了产品开发周期。图 8-10 比较了使用 PSD 器件和没使

用 PSD 器件的系统设计方案。

图 8-10 未使用与使用 PSD 器件的系统设计系统方案的比较

Page 252: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·243·

8.3.2 PSD8×× 系列 PSD 器件

PSD 器件系列的发展从 PSD2××、PSD3××,直到今天的 PSD8××F,PSD9××系列。

本节对 PSD8××F 系列在系统可编程控制器外围芯片作一简要介绍。

PSD8××F 系列器件具有 JTAG 接口,可实现在系统编程,并允许在系统内编程整个器

件,而不需要引导 E�PROM 或外部编程器。表 8-14 列出了这个系列产品的组成和性能。

表 8-14 PSD8××F 系列产品性能

特性 I/OPLD

输入

PLD

输出

输入宏单

输出宏单

串行 ISP

JTAG 接口Flash/Kbit

次闪速存

储器/

Kbit

SRAM/Kbit

PSD813F1 27 73 19 24 16 有 1024 256 16

PSD813F2 27 73 19 24 16 有 1024 256 16

PSD813F3 27 73 19 24 16 有 1024 16

PSD813F4 27 73 19 24 16 有 1024 256

PSD813F5 27 73 19 24 16 有 1024

PSD833F2 27 73 19 24 16 有 2048 256 64

PSD834F2 27 73 19 24 16 有 2048 256 64

PSD835F2 27 81 24 24 16 有 4096 256 64

PSD853F2 27 73 19 24 16 有 1024 256 256

PSD854F2 52 73 19 24 16 有 2048 256 256

1. 主要特征与应用

(1)适用于大部分微控制器的在系统可编程外围器件。

内部具有 8 位数据总线,一方面使用多路复用或非多路复用总线与 8 位微控制器的接

口;另一方面可用两个 PSD8××F 器件并联和 16 位微控制器接口。

(2)内部有容量为 1M(或 2M)bit 的主闪速存储器。

闪速存储器被分为 8 个大小相同的块,可由用户规定的地址访问,访问时间包括地址

锁存和 PLD 译码时间。闪速存储器具有低功耗选择。

(3)PSD813F1 内部具有 256Kbit 的 E�PROM (PSD813F2 内部具有 256Kbit 的次闪速

存储器)。

它们能在对主闪速存储器编程的同时由 MCU 执行。E�PROM/次闪速存储器被分为 4 个大

小相等的存储器块,可由用户规定的地址进行分配。

(4)内部具有 64 字节的一次性在系统可编程存储器。

该存储器可用于配置、校准等。

(5)闪速存储器或 E�PROM/次闪速存储器能实现同时编程。

当执行来自一个存储器内码的同时能对另一个存储器编程。

(6)内部具有 16Kbit 的 SRAM。

Page 253: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·244·

掉电时,通过切换到备用电源可保持 SRAM 中的数据。

(7)具有 16 个输出宏单元和 24 个输入宏单元的闪速 PLD。

PLD 可有效地用于实现多种逻辑功能,包括用于内部和外部控制的状态集合地址译码

器;PLD 还可提供三种专用的外部芯片选择输出,从而允许多达 19 个外部芯片选择。

(8)嵌入式输入和输出宏单元可有效实现用户定义的系统逻辑功能。

这些逻辑功能要求微控制器软件和硬件之间能够交互使用。

(9)零功耗 CMOS 技术。

此技术把器件待机状态电流的典型值减少到 10μA。

(10)27 个可独立配置的 I/O 端口引脚。

端口可用做 MCU I/O、PLD I/O 和锁存 MCU 地址输出或特殊功能的 I/O 端口,16 个 I/O

端口引脚可配置为漏极开路输出。

(11)内置 JTAG 从属串口允许在工厂或现场对空白器件编程或器件的重新编程。

(12)寿命更长。

每一片 PSD 器件可擦除、写入 100000 次,具有 10 年的数据保存期。

(13)强大的页寄存器功能使微控制器地址空间扩展 256 倍。

(14)具有强大的保密功能。

对保密位的设置可禁止对 PSD8××F 的配置,禁止对 PLD 逻辑、闪速存储器和 E�PROM

内容的复制。

(15)可编程的电源管理单元支持两种单独的低功耗工作方式。

它们允许用低至 10μA(在 V��=5V 时)的电流工作。器件可自动检测微控制器工作的

停止并使 PSD 置入低功耗方式。

(16)WSI 基于 PC 的 PSDsoft

软件系统或 Express700 软件支持的 PSD8××F 系统开

发软件,与 Windows 98,Windows 2000,Windows NT 等系列兼容。

PSD8××F 系列兼容了上几代产品的特点,又创造性地开发了在系统编程的特性,可

与大部分厂家的单片机相兼容。表 8-15 列出了支持 PSD8××F 系列的世界主要厂家和单片

机型号。

表 8-15 支持 PSD8××F 的单片机一览表

厂 家 单 片 机

Intel 8031,80196,80186,80C251,80386EX

Mortorola 68HC11,68HC16,68HC12,683XX

Philips 8031,8051XA

Zilog Z80,Z8

由于 PSD 系列器件的组合特性,使它广泛地被用于各种场所。在计算机应用(笔记本

型 PC 和便携式 PC)上,可用做硬盘控制、调制解调器、图像系统和激光打印机控制;在

通信工具方面,可用在手机、调制解调器、数字 PBX、数字语音、FAX 和数字信号处理系统

上;在工业上,可用在各种测量仪器、监控仪器、数字记录仪器等方面;在医学上,可用

在助听器、监视设备和诊断工具中。

Page 254: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·245·

2. 系统结构

PSD8××F 系列的组成结构包括存储器、页寄存器、PLD、I/O 端口、与微控制器总线

的接口、可编程 JTAG 接口、在系统编程、电源管理单元等 8 个主要的功能块。其中许多功

能块可在用户定义的情况下,实现多种功能。图 8-11 为 PSD8××F 系列的功能框图。

PSD813F×系列包含一个 1Mbit 的主闪速存储器,可以被分为 8 个大小相等区段。PSD8

××F 系列主闪速存储器容量各不相同,例如,PSD813F1 具有 256Kbit 的次存储器,且被

分为 4 个大小相等的块;PSD813F2,PSD813F4,PSD8××F2 系列具有 256Kbit 的次闪速存

储器,且被分为 4 个大小相等的块;PSD813F3 没有次存储器。除 PSD813F4,PSD813F5 外,

其他 PSD8××F 系列皆具有 SRAM 存储器,SRAM 存储器一方面可以用做高速暂存存储器和

微控制器 SRAM 的扩展,另一方面可用做掉电状态下的备用存储区。当把备用电池连接到

Vstby 引脚(PC2)上时,一旦系统掉电,SRAM 的数据仍可保持。并且当 VCC 降至 Vstby

电压以下时能够自动从 VCC 电源切换到备用电源。由于实现了分块结构,每一个存储器块

可以被定位在用户定义的不同地址空间。所有对存储器的访问时间包括地址锁存和对 DPLD

译码的时间。

PSD8××F 系列具有的页寄存器功能可以扩展微控制器地址范围,采用 8 位页寄存器

就可将地址范围扩展 256 倍。分布的地址一方面可用于访问外部存储器和外围设备或内部

存储器和 I/O 地址空间的一部分,另一方面也可用于把闪速寄存器块的地址映像改变为用

于在线重新编程的不同存储器空间。

PSD8××F 系列器件包含两个 PLD 块,如表 8-16 所示,分别为译码 PLD(DPLD)和复

合 PLD(CPLD)。闪速译码 PLD 用于译码产生 PSD8××F 内部存储器和寄存器的片选;复合

PLD 用于实现用户定义的逻辑功能。译码 PLD 具有组合输出;复合 PLD 具有 16 个输出宏单

元和 3 个组合输出。此外,PSD8××F 具有 24 个输入宏单元,它们也可被配置为 PLD 输入。

PLD 从 PLD 输入总线接收其输入并根据输出目标、乘积项以及宏单元加以区分。

表 8-16 PSD8××F 系列 PLD 块

名称 缩写 输入 输出 乘积项

译码 PLD DPLD 73 17 42

复合 PLD DPLD 73 19 140

通过使用零功耗设计技术,能够将 PLD 设计成消耗功率最少的状态。功率以及速度的

设置由 PMMR0 寄存器内的加速位控制,此寄存器由程序进行设置。

PSD8××F 具有 27 个 I/O 引脚,被分配到 4 个端口之间。每一个 I/O 引脚可以被单独

配置以提供多种功能。端口 A,B,C 和 D 可以被配置为标准的 MCU I/O、PLD I/O 或使用多

路复用地址/数据总线的微控制器的锁存地址输出。在端口 C 上,JTAG 引脚可以被使能用

于在系统编程(ISP)。对于某些类型的 16 位微控制器,端口 A 和 B 也可配置为适用于非多

路复用地址/数据总线的数据端口。

Page 255: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·246·

������������������ ���������������� �������������� !"#$%�&�'$%()$%()$%��*++,�-./01�&�'2�*+,�-3456789�):�',�-;',�-<45678=>)?@ABCD� !E68F�#@GHIJE68

���KL;�� ���*�M��*�MN�N���� �OP

��*�MQRSTDUV���!��'�WOP�MX��MX��MX���MX�Y��YZ���2

/[\]̂_���̂_��_̂���̂_���

��

���STD̀�ab̂_cX�d

��YZ��N�YZ�N��YZ��N��YZ��N

e�-,f��gh ij BCOP

图 8-11 PSD813F 方框图

PSD8××F 能方便地与大多数通用的 8 位和 16 位微控制器接口,这些微控制器带有多

路复用或非多路复用的地址/数据总线。器件能够被配置为与微控制信号相对应,这些控制

信号可用做 PLD 的输入,在使用 16 位数据总线与 16 位微控制器接口的场合,需要使用两

片 PSD 芯片。

PSD8××F 具有强大的在系统编程功能。在系统编程是指在正常工作环境下,不需插

入芯片,直接在系统上进行编程、擦除和写入功能,完全克服了大部分存储器需独立编写

的缺点,这种功能主要是通过端口 C 上的 JTAG 接口实现的,表 8-17 显示 JTAG 信号引脚的

分配。JTAG 并行接口允许对 PSD8××F 器件内的闪速存储器、E�PROM、PLD 以及其他配置

进行完整的编程,包括对空白器件的完整编程。此外,JTAG 信号(TMS,TCK,TSTAT ,TERR ,

TDI,TDO)可以实现与端口 C 的其他功能多路复用,具体操作由寄存器控制。

Page 256: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·247·

表 8-17 端口 C 的 JTAG 信号

端口 C 引脚 JTAG 信号

PC0 TMS

PC1 TCK

PC3 TSTAT

PC4 TERR

PC5 TDI

PC6 TDO

对 PSD8××F 器件的编程或擦除,一方面只需使用端口 G 的 JTAG 信号,而无需使用任

何微控制器来完成;另一方面,对主闪速存储器,可通过微控制器执行来自 E�PROM 或次闪

速存储器的编程算法,实现在系统编程。同样,通过执行来自主闪速存储器的算法,E�PROM

或次闪速存储器也可以使用同样的方法被编程,从而实现了在系统并行编程。此外,PSD8

××F 的其他配置、存储器、PLD 逻辑也可通过器件编程器进行编程。表 8-18 列出了对 PSD8

××F 不同功能块可采用的编程方式。

表 8-18 PSD8××F 不同功能块编程方法

功 能 块 JTAG 编程 器件编程器 在系统并行编程

主闪速存储器 是 是 是

E�PROM/引导闪速存储器 是 是 是

PLD 阵列(DPLD 和 GPLD) 是 是 否

PSD 配置 是 是 否

PSD8××F 的电源管理单元(PMU)使用户能够根据系统需求控制所选择的功能块的功

耗。PMU 包括自动掉电单元,它以掉电方式和睡眠方式中的一种使微控制器停止工作,并

关闭器件。此外,PSD8××F 还包括一些其他的省电特性,如 PMU 的加速位可以使 E�PROM、

SRAM、PLD 工作在较慢的速率以节省功率。

3. PSD8××F 的引脚功能描述

表 8-19 说明了 PLCC 封装形式的 PSD8××F 引脚名称和功能,大部分的引脚皆具有多

个名称和多种功能,具体情况在应用时由配置定义。

Page 257: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·248·

表 8-19 PSD8××F 引脚说明

引脚名 引脚 类型 功 能 说 明

ADIO0~7 30~37 I/O

地址/数据端口,通过以下规则和微控制器的地址或地址

/数据总线接口:

1.多路复用的低位地址/数据字节的输入引脚。ALE 或

AS 锁存地址 A0~A7。仅当读有效且内部 PSD 功能块之一

被选择时,PSD 才驱动数据输出

2.用做非多路复用总线或 80C251 方式的地址 A0~A7 输

3.用做 80C51XA 方式 A4/D0~A11/D7 的输入

4.地址(或锁存地址)输入到 PSD

5.特定的 16 位方式 A2~A8

ADIO8~14 39~45 I/O

地址/数据端口,用做和微控制器的总线接口:

1.8 位数据总线方式的地址 A8~A14。或在 16 位数据总

线方式中作为多路复用的高位地址/数据字节写入。ALE

或 AS 锁存地址 A8~A14。仅当读有效且内部 PSD 功能块

之一被选择时,PSD 才驱动数据输出

2.用作非多路复用总线方式的地址 A8~A14 输入

3.用作 80C251 方式 AD8~AD14 的输入

4.用作 80C51XA 方式 A12~A18 或 A12/A18 或 A12/D8~

A18/D14 的输入

5.地址(或锁存地址)输入到 PSD

6.特定的 16 位方式 A9~A15

ADIO15 46 I/O

地址/数据端口,用做和微控制器的总线接口:

1.8 位数据总线方式的地址 A15 输入,或在 16 位数据总

线方式中作为多路复用的高位地址/数据字节写入。ALE

或 AS 锁存地址 A15。仅当读有效且内部 PSD 功能块之一

被选择时,PSD 才驱动数据输出

2.做非多路复用总线方式的地址 A15 输入

3.用做 80C251 方式 AD15 的输入

4.用做 80C51XA 方式 AD15 的输入

5.地址(或锁存地址)输入到 PSD

6.特定的 16 位方式 A0

7.特定的 16 位 68HC12T 68HC912 方式 LSTRB

RESET 48 1低电平有效输入。复位 I/O 端口、PLD 宏单元(Micro

<=>Cell)以及某些配置寄存器,上电时必须有效

Page 258: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·249·

(续 表)

引脚名 引脚 类型 功 能 说 明

CNTL0( WR ,

R/ W ,WRH ,

WEH )

47 I

具有多种配置的写输入引脚。根据所选择的 MCU 接口的

不同,此引脚可以被用为:

1. WR ——低电平有效的写输入

2.R/ W ——读/写引脚,低电平为写总线周期

3.WRH ——仅用于 16 位数据总线方式,低电平有效输

4. WEH ——低电平有效的写输入(用于 68LC302 的 16

位数据总线配置)

5.输入到 PLD

CNTL1( RD ,E,

DS , LDS ,

PSEN , OE )

50 I

具有多种配置的读或数据选通输入引脚。根据所选择的

MCU 接口的不同,此引脚可以被用为:

1. RD ——低电平有效的读输入

2.E——E 时钟输入。在写总线周期内,E 为高电平且 R/ W

为低电平;在读总线周期内,E 为高电平用 R/W 为高电平

3. DS ——数据选通,低电平有效

4. LDS ——低数据字节选通,16 位数据总线方式,低

电平有效

5. PSEN ——程序选择使能,在总线周期内读取代码,

低电平有效

6. OE ——68LC302 方式的选通

7.输入到 PLD

CNTL2( PSEN ,

BHE , UDS ,

SIZ0,A0)

51 I

具有多种配置的读或其他控制引脚。根据所选择的 MCU

接口的不同,此引脚可以被用为:

1. PSEN ——程序选择使能,在总线周期内读取代码,

低电平有效

2. BHE ——高字节使能,16 位数据总线

3. UDS ——高数据字节选通,16 位数据总线方式,低

电平有效

4.SIZ0——字节使能输入

5.输入到 PLD

6.A0——地址输入(用于 68HC12 和 68HC912 配置)

Page 259: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·250·

(续 表)

引脚名 引脚 类型 功 能 说 明

PA0

PA1

PA2

PA3

29

28

27

25

I/O

端口 A,PA0~PA3。此端口功能可配置且具有多种功能:

1.MCU I/O——标准输出或输入端口

2.CPLD 宏单元(Micro<=>Cell,McellAB0~3)输出

3.输入到 PLD

4.锁存地址输出

5.在 80C51XA 方式中作为地址 A0~A3 的输入

6.在非多路复用总线配置中作为数据总线端口(D0~D3)

7.M37702M2 方式 D0/A16~D3/A19

8.特定 16 位 80C51XA 方式的 A4(锁定),A3,A2,A1

9.特定 16 位方式 D8~D11

10.外设 I/O 方式

PA4

PA5

PA6

PA7

24

23

22

21

I/O CMOS

或漏极开

端口 A,PA4~PA7。此端口功能可配置且具有多种功能:

1.MCU I/O——标准输出或输入端口

2.CPLD 宏单元(Micro<=>Cell,McellAB0~3)输出

3.输入到 PLD

4.锁存地址输出

5.在非多路复用总线配置中作为数据总线端口(D4~D7)

6.M37702M2 方式 D4/A20~D7/A23

7.特定 16 位方式 D12~D15

8.外设 I/O 方式

PB0

PB1

PB2

PB3

7

6

5

4

I/O

端口 B,PB0~PB3。此端口功能可配置且具有多种功能:

1.MCU I/O——标准输出或输入端口

2.CPLD 宏单元(Micro<=>Cell,McellAB0~3)输出

3.CPLD 宏单元(Micro<=>Cell,McellBC0~3)输出

4.输入到 PLD

5.锁存地址输出

6.在 16 位数据总线非多路复用总线配置中作为数据总线端

口(D8~D11)

7.特定 16 位方式 D12~D15

Page 260: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·251·

(续 表)

引脚名 引脚 类型 功 能 说 明

PB4

PB5

PB6

PB7

3

2

52

51

I/O CMOS

或漏极开

端口 B,PB4~PB7。此端口功能可配置且具有多种功能

1.MCU I/O——标准输出或输入端口

2.CPLD 宏单元(Micro<=>Cell,McellAB0~3)输出

3.CPLD 宏单元(Micro<=>Cell,McellBC0~3)输出

4.输入到 PLD

5.锁存地址输出

6.在 16 位数据总线非多路复用总线配置中作为数据总线端

口(D12~D15)

特定 16 位方式 D4~D7

PC0(TMS) 20

I/O CMOS

或漏极开

端口 C,PC0。此端口功能可配置且具有多种功能:

1.MCU I/O——标准输出或输入端口

2.CPLD 宏单元(Micro<=>Cell,McellABC0)输出

3.输入到 PLD

4.用于 JTAG 接口的 TMS 输入

PC1(TCK) 19

I/O CMOS

或漏极开

端口 C,PC1。此端口功能可配置且具有多种功能:

1.MCU I/O——标准输出或输入端口

2.CPLD 宏单元(Micro<=>Cell,McellABC1)输出

3.输入到 PLD

4.用于 JTAG 接口的 TCK 输入

PC2(Vstby) 18

I/O CMOS

或漏极开

端口 C,PC2。此端口功能可配置且具有多种功能:

4.MCU I/O——标准输出或输入端口

5.CPLD 宏单元(Micro<=>Cell,McellABC2)输出

6.输入到 PLD

4.SRAM 备用电压输入。用于电池备用 RAM 的 Vstby

PC3( TSTAT ,

Rdy/Bsy)17

I/O CMOS

或漏极开

端口 C,PC3。此端口功能可配置且具有多种功能:

7.MCU I/O——标准输出或输入端口

8.CPLD 宏单元(Micro<=>Cell,McellABC3)输出

9.输入到 PLD

4.用于 JTAG 接口的 TSTAT 输出

5.用于在并行编程的 Rdy/Bsy

PC4( TERR ,

V�����) 14

I/O CMOS

或漏极开

端口 C,PC4。此端口功能可配置且具有多种功能:

1.MCU I/O——标准输出或输入端口

2.CPLD 宏单元(Micro<=>Cell,McellABC4)输出

3.输入到 PLD

4.用于 JTAG 接口的 TERR 输出

5.用于电池备用指示器输出的 Vbaton

Page 261: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·252·

(续 表)

引脚名 引脚 类型 功 能 说 明

PC5 (TDI) 13

I/O CMOS

或漏极开

端口 C,PC5。此端口功能可配置且具有多种功能:

1.MCU I/O——标准输出或输入端口

2.CPLD 宏单元(Micro<=>Cell,McellABC5)输出

3.输入到 PLD

4.用于 JTAG 接口的 TDI 输出

PC6(TD0) 12

I/O CMOS

或漏极开

端口 C,PC6。此端口功能可配置且具有多种功能:

1.MCU I/O——标准输出或输入端口

2.CPLD 宏单元(Micro<=>Cell,McellABC6)输出

3.输入到 PLD

4.用于 JTAG 接口的 TD0 输出

PC7( BHE ) 11

I/O CMOS

或漏极开

端口 C,PC7。此端口功能可配置且具有多种功能:

1.MCU I/O——标准输出或输入端口

2.CPLD 宏单元(Micro<=>Cell,McellABC7)输出

3.输入到 PLD

4.PC7 引脚( WRH ),适用于高字节的低电平有效写选通

输入。用于 WRH 引脚的 16 位 MCU

5. DBE ——适用于 68HC912 的配置

6. WEH ——适用于高字节的低电平有效写选通输入

(68LC302)配置

PD0( ALE ,AS) 10 I/O

端口 D,PD0。此端口功能可配置且具有多种功能:

1. ALE 输入——在下降沿锁存 ADIO0~15 引脚上的地址

2.S 输入——在下降沿锁存 ADIO0~15 引脚上的地址

3.AS 输入——在上升沿锁存 ADIO0~15 引脚上的地址

4.MCU I/O 端口

5.输入到 PLD

6.SRAM 备用电压输入。用于电池备用 RAM 的 Vstby

PD1(CLKIN) 9 I/O

端口 D,PD1。此端口功能可配置且具有多种功能:

1.MCU I/O——标准输出或输入端口

2.CPLD 宏单元输出

3.PLD 输入

4.CLKIN 时钟输入——加至 GPLD 宏单元(Micro<=>

Cell)、APD 掉电计数器和 GPLD AND 阵列的时钟输入

Page 262: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·253·

(续 表)

引脚名 引脚 类型 功 能 说 明

PD2(CSI) 8 I/O

端口 D,PD2。此端口功能可配置且具有多种功能:

1.MCU I/O——标准输出或输入端口

2.CPLD 宏单元输出

3.PLD 输入

4.CSI 输入——当为低电平时,CSI 使能 EPROM 和

SRAM;当为高电平时,EPROM 和 SRAM 禁止以节省功率

Vcc15

38电源引脚

GND

1

16

26接地引脚

4. PSD8××F 与 80C31 的连接

PSD8××F 可直接与具有 8 位多路复用地址/数据总线的 80C31 连接。控制器控制信号

( PSEN ,RD )以及 WR 可用于访问内部存储器单元和 I/OA 端口,ALE 输入(端口 D PD0)

用于锁存地址。具体配置见表 8-20 所述,连接图如图 8-12 所示。

表 8-20 80C31 与 PSD8××F 连接配置

80C31 控制信号选择 WR , PSEN , RD

总线方式 多路复用总线

总线宽度 8

ALE/AS 高有效

5. PSD8××F 的软件设计

单片机系统中使用 PSD 器件时在完成硬件设计和物理连接后要进行软件设计,这需要

专门软件 PSDSOFT EXPRESS ,在该环境下完成系统配置与编程通常有以下几个步骤:

第一步:激活 PSDSOFT EXPRESS 软件,建立一个新文件夹;

第二步:选择微控制器 MSU 和 PSD 型号;

第三步:设计参数;

第四步:进行引脚定义;

第五步:设计流程;

第六步:融合 PSD 与 MCU 固件,生成写入 PSD 的格式(.obj);

第七步:对 PSD 编程。

Page 263: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·254·

限于篇幅,这里不详细阐述,感兴趣的读者可查阅相关参考书或 PSD 手册。

���������������� �������������������������������������������������������������������� ����������� ����������������������������������������������������������������������������������� �����������������������

����

������������������������������������������������������������ �����������������������������������������������������������������������������������������������

��������� ������������������������������������������������������������������������������ �������������������������

��

��� ��

AD0 AD0AD1 AD1AD2 AD2AD3 AD3AD4 AD4AD5 AD5AD6 AD6AD7 AD7

A8A9A10A11A12A13A14A15

ERRD

PSEN

ALE

RESET

AD7-AD0

图 8-12 PSD8××F 与 80C31 的连接

习题与思考题

1.列举出两种与 MCS-51 单片机兼容的 8 位单片机系列,并说明其配置。

2.ADμC812 的主要功能是什么?内部集成了哪些部件?

3.什么是 PSD 器件?PSD 器件有那几个系列的产品?

4.PSD8××F 系列可用于哪些单片机系统?

5.单片机应用系统中使用 PSD 器件有什么好处?

Page 264: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

第二部分 实 验 指 导

Page 265: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·256·

实验一 MCS-51 单片机

P1 口输出实验

【实验内容】

P1 口做输出口,P1.0 ~P1.7 分别接 8 个发光二极管,试编写程序使 8 个发光二级管

循环点亮。

【实验目的】

学习和掌握 P1 口的使用方法。

【实验说明】

1.P1 口是准双向口,P1 口的每一位都能独立的定义为输入线或输出线。由 P1 口的结

构可知:当 P1 口作为输入口时,必须先对它置高电平,使 P1 口内部 MOS 管截止,由于它

内部的上拉电阻是 30KΩ 左右,故不会对外部输入产生任何影响,如果不先对它置高电平,

并且原来是低电平,则 MOS 管导通,此时读入的数据就是不正确的。所以当它作为输出的

口线时与一般的双向口使用方法相同;当它作为输入的口线,必须先向锁存器相应位写入

‘1’,该位才能作为输入。

注意:8031 中所有 P1 口锁存器在复位时均置为‘1’,如果后来的口锁存器写入过‘0’,

在需要时应写入一个‘1’,使它再成为输入。

2.延时的实现问题

通常有两种实现延时的方法:硬件延时和软件延时。由于硬件延时内容将在实验六定

时器实验中涉及,所以这里只简单介绍一下软件延时。软件延时的方法通常就是编写延时

子程序(即用指令循环来实现),CPU 通过执行它来达到延时的目的。对于延时程序

MOV R7,#255

DEL0:MOV R6,#X

DEL1:DJNZ R6,DEL1

DJNZ R7,DEL0

查指令表可知:上面的 MOV、DJNZ 指令均需要执行两个机器周期,所以每执行一条指

Page 266: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·257·

令需要 2T,现假设本实验系统的晶振频率为 6.144MHZ,则一个机器周期 T=12÷(6.144×

10�)秒,要定时 0.1 秒,则可写出下列等式:

2T+(2T +2T×X+2T)×255 =0.1

代入 T 的值,求出未知数 X=98。

【实验原理图】

L1 L2 L3 L4 L5 L6 L7 L8

+5V

P1.7

8031

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

【实验连线】

P1.0~P1.7 分别接 8 个发光二级管 L1~L8。

注意:本书的实验电路连线针对的是清华同方的 MCS-51/196 单片机实验开发系统。

当然对于不同的单片机仿真器,实验原理基本相同,可能只是在有的具体实验电路上有些

差别,只要真正理解了实验原理,再查一下仿真器的实验指导书,连线应该没问题。不管

在哪一种仿真器上,实验原理图中的粗线通常都是需要连接的部分。

【流程图】 程序入口

置初值

输出到 P1 口

延时 0.1 秒

循环右移一位以点亮下一个发光二极管

Page 267: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·258·

【参考程序】

ORG 4000H

BEGIN: MOV A,#10000000B ;高电平对应的发光二极管亮

LOOP: MOV P1,A ;从 P1 口输出到发光二极管

MOV R5,#10 ;延时 1 秒

DEL0: MOV R6,#255

DEL1: MOV R7,#98

DEL2: DJNZ R7,DEL2

DJNZ R6,DEL1

DJNZ R5,DEL0

RR A ;循环右移一位点亮下一个发光二极管

LJMP LOOP ;循环

END

Page 268: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·259·

�实验二 MCS-51 单片机

P1 口输入实验

【实验内容】

P1 口作为输入、输出口。P1.0、P1.1 接 K1、K2;P1.2 接发光二极管 L1;P1.3 接 L2。

K1 作为左转弯开关,K2 作为右转弯开关。L1 作为左转弯灯,L2 作为右转弯灯。要求编写

程序实现如下功能:合上开关 K1 时 L1 以一定频率闪烁,合上开关 K2 时 L2 以一定频率闪

烁,K1、K2 同时向上或向下,发光二级管灭。

【实验目的】

进一步学习 P1 口既作为输入,又作为输出的使用方法。

【实验说明】

本实验的参考程序使用了散转程序设计的方法,它根据系统的某种运算结果,分别转

向各个处理程序。该方法利用 JMP @A+DPTR 指令,根据运算结果,确定 A 和 DPTR 的内容,

从而实现转移。用该方法设计的程序结构简单,转移表短,但转移表大小加上各个程序长

度必须小于 256 字节。

【实验原理图】

8031

P1.0

P1.1

P1.2

P1.3

K1

K2

+5V

2K

L1

L2+5V

Page 269: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·260·

【实验连线】

P1.0、P1.1 接 K1、K2;P1.2 接发光二极管 L1;P1.3 接 L2。

【流程图】

【参考程序】

ORG 4000H

BEGIN:SETB P1.0

SETB P1.1 ;P1 口线置‘1’,为输入作准备

MOV A,P1

ANL A,#03H ;读入开关状态

MOV DPTR,# TABLE

RL A ;累加器×2

JMP @A+DPTR

TABLE:AJMP GO0

Page 270: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·261·

AJMP GO1

AJMP GO2

AJMP GO3

GO0: MOV P1,#00 ;K1、K2 同时打开时,L1、L2 同时熄灭

LJMP BEGIN

GO1: MOV P1,#00000100B ;K1 合上,K2 打开时,L1 亮,表示左转弯

LOOP: LCALL DELAY ;延时 1 秒

MOV P1,#00 ;L1 熄灭

LCALL DELAY ;延时 1 秒

LJMP BEGIN

GO2: MOV P1,#00001000B ;K2 合上,K1 打开时,L2 亮,表示右转弯

LJMP LOOP

GO3: LJMP GO0 ;K1、K2 同时合上时,L1、L2 同时熄灭

DELAY:MOV R5,#2 ;延时子程序延时 0.2 秒

DEL0: MOV R6,#255

DEL1: MOV R7,#98

DEL2: DJNZ R7,DEL2

DJNZ R6,DEL1

DJNZ R5,DEL0

RET

END

Page 271: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·262·

实验三 简单 I/O 口扩展实验

【实验内容】

利用 74LS244 扩展输入口,读取开关状态,并将此状态通过 74LS273 输出到发光二极

管显示。

【实验目的】

1.学习在单片机系统中扩展简单 I/O 口的方法;

2.掌握数据输入、输出程序的编制方法。

【实验说明】

MCS-51 外部扩展空间很大,但数据总线口和控制信号线的负载能力是有限的。若需要

扩展的芯片较多,则 MCS-51 总线口负载过重,74LS244 是一个扩展输入口芯片,同时它也

是一个单向驱动器,以减轻总线口负担。74LS273 是同向输出口,控制 8 个发光二极管的

亮灭。在本实验的参考程序中增加了一段延时时间约为 0.01 秒的延时程序,以减少总线口

读写的频繁程度,而且这样并不影响显示的稳定。

【实验原理图】

��������������������� ��� ��� ��� ��� ��� ��� ��� ������������������ ��� ��������������������������������������������������������� �����

�� �� �� �� �� � � ������������������������������������������������������������������������������������ �������������� � � �� �� �� �� ���� ��� � � � ���������� � ��� ��� ��� ��� ��� ��� ��� ��� �����

�������

Page 272: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·263·

【实验连线】

74LS244 的 I1~I8(即 1A1、1A2、1A3、1A4、2A1、2A2、2A3、2A4)接开关的 K1~K8,

CS4 端接地址孔 18~1F(即端口地址为 1B18H);74LS273 的 011~018(即 Q0~Q7)接发光

二极管 L1~L8,CS2 端接地址孔 08~0F(即端口地址为 1B08H)。

注意:这里的 CS4 是 74LS244 的片选信号,18~1F 是它的片选地址孔,在不同的仿真

器上,它的片选地址可能不同,在连线时应该查一下仿真器的实验指导书:片选信号应该

接到哪一个地址孔上,更重要的是它的片选地址在编程时要使用。同理,其他的芯片也是

一样。

【流程图】

【参考程序】

ORG 4000H

START: MOV DPTR,#1B18H ;1B18H 是 74LS244 的片选地址

MOVX A,@ DPTR ;通过 74LS244 读入开关的状态

MOV DPTR,#1B08H ;1B08H 是 74LS373 的片选地址

MOVX @ DPTR,A ;通过 74LS373 输出开关的状态

ACALL DELAY ;延时 0.01 秒

SJMP START

DELAY: MOV R7,#10H

DEL1: MOV R6,#0FFH

DEL2: DJNZ R6,DEL2

DJNZ R7,DEL1

RET

END

入 口

置 端 口 地 址

从 74LS244 读入开关状态

从 74LS273 输出开关状态

延时 0.01

Page 273: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·264·

实验四 8255A 模拟交通灯管理实验

【实验内容】

利用 8255A 可编程并行接口芯片,控制发光二极管燃灭,模拟交通灯管理。

【实验目的】

1.了解 8255A 芯片的结构及编程方法。

2.掌握单片机系统中扩展外围芯片的方法。

3.学习模拟交通灯控制的实现方法。

【实验说明】

1.因为本实验是交通灯控制实验,所以要先了解交通路灯的燃灭规律:设有一十字路

口为东西南北走向,南北方向为主干道,初始态为 4 个路口的红灯全亮。之后,东、西路

口的绿灯亮,南、北路口的红灯亮,东、西路口方向通车,延迟一段时间后,东、西路口

的绿灯熄灭,黄灯开始闪烁。闪烁若干次后,东、西路口的红灯亮,同时南、北路口的绿

灯亮,南、北路口方向开始通车。延迟一段时间后,南、北路口的绿灯熄灭,黄灯开始闪

烁。闪烁若干次后,再切换到东、西路口方向。之后,重复上述过程。

2.8255A 有 3 个 8 位的并行 I/O 端口,分别是 PA 口、PB 口、PC 口,它们都可通过软

件编程来改变它们的工作方式,并且 8255A 可以与 MCS-51 单片机直接接口。8255A 的 PA

口、PB 口、PC 口都可以工作于方式 0(即基本输入/输出方式),在这种工作方式下,每一

个端口都可由程序设定为输入或者输出,这种工作方式适用于无条件传送数据的设备。本

实验将 3 个端口都设定为方式 0,并处于输出状态。不知到怎样设置 8255A 的工作方式的

可查寻相关的书籍,比如《微机原理及接口技术》。

3.从实验原理图中可以看到,各 LED 发光二极管共阳极,但各发光二极管阴极接有非

门,因而使它们点亮应使相应位置为高电平。

Page 274: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·265·

【实验原理图】

8255A

L1 L2 L3 L4 L5 L6P

C0

PC

1

PC

2

PC

3

PC

4

PC

5

CS1

00--07

+5V

【实验连线】

8255A 的 PC0~PC5 连接 L1~L6(假设 L1、L2、L3 分别为南北路口的红灯、黄灯、绿

灯;L4、L5、L6 分别为东西路口的红灯、黄灯、绿灯),CS1 端接 00~07 端。

【流程图】

开 始

8255A 初始化

4 个路口红灯亮,延时 5 秒

东西路口绿灯亮,南北路口红灯亮,延时 10 秒

东西路口黄灯闪烁,南北路口红灯亮,延时 4 秒

东西路口红灯亮,南北路口绿灯亮,延时 20 秒

东西路口红灯亮,南北路口黄灯闪烁,延时 4 秒

Page 275: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·266·

【参考程序】

PC0 EQU 1B02H ;8255A 端口 C 的地址

PCTRL EQU 1B03H ;8255A 控制口的地址

ORG 4000H

START:MOV DPTR,#PCTRL ;设置 8255A 的控制字,使 C 口工作于方式 0 输出

MOV A,#80H

MOVX @DPTR,A

MOV DPTR,#PC0 ;使 4 个路口的红灯亮,黄、绿灯全灭

MOV A,#00001001B

MOVX @DPTR,A

LCALL DELAY5S ;延时 5 秒

LOOP: MOV A,#00100001B ;东西路口绿灯亮,南北路口红灯亮

MOVX @DPTR,A

LCALL DELAY10S ;延时 10 秒

MOV R1,#10 ;置黄灯闪烁次数 10

LOOP1:MOV A,#00010001B ;东西路口黄灯亮,南北路口红灯亮

MOVX @DPTR,A

LCALL DELAY02S ;延时 0.2 秒

MOV A,#00000001B ;东西路口黄灯灭,南北路口红灯亮

MOVX @DPTR,A

LCALL DELAY02S

DJNZ R1,LOOP1

MOV A,#00001100B ;东西路口红灯亮,南北路口绿灯亮

MOVX @DPTR,A

LCALL DELAY20S ;延时 20 秒

MOV R1,#10 ;置黄灯闪烁次数 10

LOOP2:MOV A,#00001010B ;东西路口红灯亮,南北路口黄灯亮

MOVX @DPTR,A

LCALL DELAY02S ;延时 0.2 秒

MOV A,#00001000B ;东西路口红灯亮,南北路口黄灯灭

MOVX @DPTR,A

LCALL DELAY02S

DJNZ R1,LOOP2

LJMP LOOP ;跳转到 LOOP,循环

DELAY20S: MOV R5,#200 ;延时子程序延时 20 秒

LJMP DEL0

DELAY10S: MOV R5,#100 ;延时子程序延时 10 秒

Page 276: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·267·

LJMP DEL0

DELAY5S: MOV R5,#50 ;延时子程序延时 5 秒

LJMP DEL0

DELAY02S: MOV R5,#2 ;延时子程序延时 0.2 秒

DEL0: MOV R6,#255

DEL1: MOV R7,#98

DEL2: DJNZ R7,DEL2

DJNZ R6,DEL1

DJNZ R5,DEL0

RET

END

Page 277: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·268·

实验五 中 断 实 验

【实验内容】

通过 P1.0 读取开关 K1 的状态,并且把这个状态通过 P1.7 送到发光二极管 L1 显示。

要求用中断控制这一输入/输出过程,每请求中断一次,完成一次输入/输出过程。

【实验目的】

熟悉中断的相关知识,掌握中断服务处理程序的编程方法;

【实验说明】

1.中断方式的选择

外部中断可用边沿触发,也可选择电平触发。如果选择边沿触发,在程序中应设一条

SETB IT0 指令。在硬件上,应在 INT0 脚接一负脉冲产生电路,发出中断请求信号。为了

保证中断的唯一性,应该加上去抖电路,每次只产生单脉冲。边沿触发方式的最大优点在

于不会丢失中断请求。只要中断请求负跳变的宽度大于 1 个机器周期,单片机就能采样到

中断请求信号。单片机将采样到的信号锁存到中断请求标志寄存器中,硬件自动置 IE0 为

1。即使单片机暂时不响应,这个标志也不丢失,只有在外部中断响应之后,硬件才将 IE0

清除。

2.逐渐开放中断

有了中断请求不一定能够产生中断,还必须利用程序将各个“允许/禁止中断”开关设

置成开放状态。8031 的中断控制分为两级,一级是针对不同中断源的,比如开放中断 0 只

要用指令 SETB EX0 即可;另一级是管总的,必须用指令 SETB EA,这些也应该放在中断

程序初始化中进行。

3.中断服务程序的位置

根据约定,外部中断 0 的入口地址是 0003H,而中断服务程序则可放在程序存储器的

任何位置,但必须在 0003H 单元放一条跳转指令,指向中断服务程序的入口地址。中断服

务程序最后一条指令必须是 RETI 指令,以便在中断服务程序执行完后返回到被中断的主程

Page 278: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·269·

序。

【实验原理图】

8031

P1.0

P1.7

K1

+5V

2K

L1 +5V

INT0’

【实验连线】

P1.0 接发光二极管 L1,P1.7 接开关 K1, INT0 接单拍负脉冲输出端“ ”。

【流程图】

主程序: 中断服务程序:

入 口

外部中断 0 初始化编程:开放

IT0、EX0、EA

等中断

入 口

P1.0 口置‘1’

读入开关 K1 的状态

将 K1 的状态输出到发光二极管

RETI

Page 279: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·270·

【参考程序】

ORG 0003H ;外部中断 0 入口地址

AJMP WINT0

ORG 4000H

MAIN: SETB IT0 ;选择边沿触发方式

SETB EX0 ;开放外部中断 0

SETB EA ;开放中断

WAIT: AJMP WAIT ;等中断

WINT0: MOV P1,#0FFH ;P1 口置‘1’

MOV A,P1 ;读取开关 K1 的状态

RR A ;P1.0 送 P1.7

MOV P1,A ;输出驱动发光二极管

RETI ;中断返回

END

Page 280: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·271·

实验六 定时器实验

【实验内容】

用 8031 内部定时器 1,按方式 1 工作(即作为 16 位定时器使用),每 0.1 秒钟 T1 溢

出中断一次。P1 口的 P1.0~P1.7 分别接八个发光二极管。要求编写程序模拟一时序控制

装置。开机后第一秒钟 L1、L2 亮,第二秒钟 L3、L4 亮,第三秒钟 L5、L6 亮,第四秒钟

L7、L8 亮,第五秒钟 L1、L2、L3、L4 亮,第六秒钟 L5、L6、L7、L8 亮,第七秒钟 8 个二

极管全亮,第八秒钟全灭,以后又从头开始,L1、L2 亮,然后 L3、L4 亮,⋯⋯一直循环

下去。

【实验目的】

学习 8031 内部定时器/计数器的使用和编程方法,掌握中断处理程序的编程方法。

【实验说明】

1.定时常数的确定

定时器/计数器的输入脉冲周期与机器周期一样,为振荡器频率的 1/12。本实验中时

钟频率为 6.144MHZ,现要采用中断方法来实现 1 秒延时,要在定时器 1 中设置一个时间常

数,使其每隔 0.1s 产生一次中断,CPU 响应中断后将 R0 中计数值减一,令(R0)=0AH,

即可实现 1s 延时。时间常数可按下法确定:

机器周期=12÷晶振频率=12÷(6.144×10�)=1.9531×10��

s

设初值为 X,则(2��

-X)×1.9531×10��

=0.1

2��

-X=51200 即求得 X=14336

将它转化为十六进制:X=3800H,故初始值为 TH1=38H,TL1=00H

2.初始化程序

包括定时器初始化和中断系统初始化,主要是对 IP、IE、TCON、TMOD 的相应位进行正

确的设置,并将时间常数送入定时器中。由于只有定时器中断,IP 便不必设置。

Page 281: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·272·

注意一点,定时器 1 初始化时建议用下述指令:

ANL TMOD,#0FH

ORL TMOD,#10H

而不用如下指令:MOV TMOD,#10H

如果用该指令则定时器 0 被屏蔽,可能会影响串行口波特率,从而使程序不能执行。

3.设计中断服务程序和主程序

中断服务程序除了要完成计数减一工作外,还要将时间常数重新送入定时器中,为下

一次中断做准备。主程序则用来控制发光二极管按要求顺序亮灭。

【实验原理图】

L1 L2 L3 L4 L5 L6 L7 L8

+5V

P1.7

8031

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

【实验连线】

P1.0 ~P1.7 分别接 8 个发光二极管 L1 ~L8。

【流程图】

中断服务程序:

中断服务程序入口

关闭计数控制位 TR0

计数值 R0 减一

重新装入定时初值 TH0,TL0

开放计数控制位 TR0

RETI

Page 282: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·273·

主程序:

【参考程序】

ORG 000BH ;定时器 0 中断服务程序入口地址

LJMP T0INT

ORG 4000H

START: MOV A,#00000011B ;第一秒时 L1、L2 亮

MOV R1,#0 ;置第一个显示码相对于表 TAB 的偏移量

MOV R0,#0AH ;置计数次数

ANL TMOD,#0F0H ;定时器 0 置方式 1

ORL TMOD,#01H

MOV TL0,#00H ;装入定时初值

MOV TH0,#38H

SETB ET0 ;开放定时器 0 溢出中断

Page 283: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·274·

SETB EA ;开放总中断

SETB TR0 ;启动定时器 0

LOOP1: CJNE R0,#00,XIANS

MOV R0,#0AH ;每完成 10 次定时,重置初值 10

INC R1 ;偏移量加 1

CJNE R1,#8,LOOP2

MOV R1,#0 ;每完成一轮显示,则重装偏移量

LOOP2: MOV A,R1

MOV DPTR,#TAB ;将 TAB 的表首地址装入 DPTR

MOVC A,@A+DPTR ;从 TAB 表中取显示码

XIANS: MOV P1,A ;累加器中的显示码送发光二极管显示

LJMP LOOP1

TAB: DB 03H,0CH,30H,0C0H,0FH,0F0H,0FFH,00H

T0INT: CLR TR0

DEC R0

MOV TL0,#00H ;用软件重新装载 TH0,TL0

MOV TH0,#38H

SETB TR0 ;开始计数

RETI ;中断返回

END

Page 284: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·275·

实验七 串并转换实验

【实验内容】

利用 8031 串行口和串行输入并行输出移位寄存器 74LS164,扩展一个 8 位的通道,用

于驱动 8 个发光二极管,并且使发光二极管被循环点亮。

【实验目的】

1.掌握 8031 串行口方式 0 工作方式及编程方法。

2.掌握利用串行口扩展 I/O 通道的方法。

【实验说明】

串行口工作在方式 0 时,称之为同步移位寄存器输入/输出方式,常用于扩展 I/O 口。

串行数据通过 RXD 端输入/输出,而 TXD 端输出移位同步时钟信号,作为外接部件的同步信

号,其波特率固定为振荡频率的 1/12。这种方式不适用于两个 8031 之间的数据通信,但

可通过外接移位寄存器实现单片机的接口扩展。采用 74LS164 可用于扩展并行输出口,即

实现串并行转换。在这种方式下,收发数据为 8 位,由软件置位串行控制寄存器(SCON)

的 REN 位后才能启动,串行接收,在 CPU 将数据写入 SBUF 寄存器后,立即启动发送。待 8

位数据输完后,硬件将 SCON 寄存器的 TI 位置 1,必须由软件清零。

【实验原理图】

Page 285: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·276·

【实验连线】

将 8031 的 TXD 端接 74LS164 的 SCLK 端,RXD 端接 74LS164 的 SIN 端,74LS164 的

QH~QA(即 3、4、5、6、10、11、12、13 引脚)分别接发光二极管 L1~L8。

【流程图】

【参考程序】

ORG 4000H

START:MOV SCON,#00H ;初始化串行口控制寄存器,工作于方式 0

LOOP0:MOV R0,#00 ;表中数据单元的偏移量初始化为 0

MOV DPTR,#TAB ;将 TAB 表首地址送 DPTR

LOOP1:MOV A,R0

MOVC A,@A+DPTR ;取表中第一个数据

Page 286: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·277·

MOV SBUF,A ;数据送 SBUF,启动发送

WAIT: JNB TI,WAIT ;判断发送中断标志

CLR TI

LCALL DELAY ;延时 1 秒

INC R0 ;修改数据单元的偏移量

CJNE R0,#8,LOOP1 ;偏移量不等于 8 则转 LOOP,否则

重新置偏移量初值、表首地址

LJMP LOOP0

DELAY:MOV R2,#10 ;延时 1 秒的子程序

DEL0: MOV R3,#255

DEL1: MOV R4,#98

DEL2: DJNZ R4,DEL2

DJNZ R3,DEL1

DJNZ R2,DEL0

RET

TAB: DB 01H,02H,04H,08H,10H,20H,40H,80H

;待发送数据表

END

Page 287: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·278·

实验八 D/A 转换实验

【实验内容】

利用 DAC0832,输出一个从 0V 逐渐升到+5V,再从+5V 逐渐降至 0V 的锯齿波电压。

【实验目的】

1.了解 D/A 转换的基本原理以及它与单片机的接口方法。

2.掌握 DAC0832 的性能及编程方法。

3.学习单片机系统中扩展 D/A 转换的基本方法。

【实验说明】

D/A 转换是把数字量转换成模拟量的变换,从 D/A 输出的是模拟电压信号。产生锯齿

波和三角波,只需由 A 存放的数字量的增减来控制,要产生正弦波,较简单的方法是造一

张正弦数字量表,取值范围是一个周期,采样点越多,精度越高些;本实验中,输入寄存

器占偶地址端口,DAC 寄存器占较高的奇地址端口。两个寄存器均对数据独立进行锁存。

因此,要把一个数据通过 0832 输出,需经过两次锁存。典型程序段如下:

MOV DPTR,PORT

MOV A,#DATA

MOVX DPTR,A

INC DPTR

MOVX @DPTR,A

其中第二次 I/O 写是一个虚拟写过程,其目的只是产生一个 WR 信号,启动 D/A。

Page 288: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·279·

【实验原理图】

10K

10K10K

5K

10K�������������������������� ��������������������������������������������������� ����

DAC0832

+12V

+5V

WR’

AOUT

CS6

A0

+5V

+ -

- +

6

4

56

5

89

10

89

D7 D6 D5 D4 D3 D2 D1 D0

74LS00

【实验连线】

0832 片选端 CS6 接 28~2F,AOUT 接示波器探头。

【流程图】

Page 289: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·280·

【参考程序】

ORG 4000H

MAIN: MOV P2,#1BH

LOOP0:MOV R0,#29H ;DAC 寄存器端口地址送 R0

MOV A,#00 ;初值 0 送 A

LOOP1:DEC R0 ;DAC 输入寄存器端口地址

MOVX @R0,A ;送出数据

INC R0 ;加 1,为 DAC 寄存器端口地址

MOVX @R0,A ;启动转换

INC A ;数据加 1

CJNE A,#0FFH,LOOP1 ;数据不等于 0FFH,则转 LOOP1

MOV R2,A

LOOP2:DEC R0

MOV A,R2

MOVX @R0,A

INC R0

MOVX @R0,A

DJNZ R2,LOOP2 ;数据不等于 0H,则转 LOOP2

LJMP LOOP0

END

Page 290: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·281·

实验九 A/D 转换实验

【实验内容】

利用实验台上的 ADC0809 做 A/D 转换实验,实验台上的电位器提供模拟量输入,编

制程序,将模拟量转换为数字量,用发光二极管显示。

【实验目的】

1.掌握 A/D 转换与单片机的接口方法。

2.掌握 ADC0809 转换性能及编程方法。

3.通过实验了解单片机如何进行数据采集。

【实验说明】

A/D 转换器大致分为三类:一是双积分 A/D 转换器,优点是精度高,抗干扰性好,价

格便宜,但速度慢;二是逐次逼近法 A/D 转换器,精度,速度,价格适中;三是并行 A/D

转换器,速度快,价格也昂贵。

本实验用的 ADC0809 属第二类,是 8 位 A/D 转换器。ADC0809 在 START 上跳沿时,所

有内部寄存器清零,在下降沿时,开始进行 A/D 转换,此期间 START 应保持低电平。需要

注意的是,在 START 下降沿后 10us 左右,转换结束信号 EOC 变为低电平,EOC 为低电平时,

表示正在转换,再变为高电平时,表示转换结束。所以用软件查询的方法采集数据。由于

START 端为 A/D 转换启动信号,ALE 端为通道选择地址的锁存信号。实验电路中将其相连,

以便同时锁存通道地址并开始 A/D 采样转换,故启动 A/D 转换只需如下两条指令:

MOV DPTR,#1B20H

MOVX @DPTR,A

A 中内容是什么不重要的,这只是一次虚拟写,目的就是启动 A/D 转换。

由于 A/D 转换结束后会自动产生 EOC 信号,所以用中断方式采集数据,将其与

8031 INTO 相接,作为中断请求信号。中断处理程序则可完成取数工作,并且可使用如下

Page 291: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·282·

指令读取 A/D 转换结果:

MOV DPTR,#1B20H

MOVX A,@DPTR

本实验提供的参考程序分别采用了软件查询和中断方式采集数据。值得注意的是:如

果连续对同一个模拟电压采集多次,通过发光二极管显示出来的数据可能不同。这是很正

常的,因为转换存在误差。

【实验原理图】

【实验连线】

1.0809 片选端 CS5 接 20~27,EOC 接 INT0 ;P1.0~P1.7 接发光二极管 L1~L8。

2.2.2K 电位器中间头接 IN0,另外两个头一端接+5V,另一端接地。

Page 292: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·283·

【流程图】

1.中断方式

主程序: 中断程序:

2.查询方式

入 口

读 A/D 转换结果

送发光二极管显示,延时 2 秒

启动 0809 对 IN0 通道转换

RET1

入 口

外部中断初始化

启动 0809 对 IN0 通道转换

等中断

延时 10 μs

Page 293: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·284·

【参考程序】

1.中断方式

PORT EQU 1B20H ;ADC0809 的端口地址

ORG 0003H ;INT0 中断向量入口地址

LJMP PAUSE

ORG 4000H

START:MOV DPTR,#PORT ;启动 A/D 转换

MOV A,#00

MOVX @DPTR,A

MOV R1,#8H

DEL0: DJNZ R1,DEL0 ;延时 10μs

SETB IT0 ;外部中断初始化

SETB EX0

SETB EA

LOOP:SJMP LOOP ;等中断

PAUSE:CLR EA

MOV DPTR,#PORT

MOVX A,@DPTR ;取转换结果

MOV P1,A ;输出显示

MOV R5,#20 ;延时 2 秒

DEL1: MOV R6,#255

DEL2: MOV R7,#98

DEL3: DJNZ R7,DEL3

DJNZ R6,DEL2

DJNZ R5,DEL1

MOV DPTR,#PORT ;重新启动 A/D 转换

MOV A,#00

MOVX @DPTR,A

MOV R1,#8H

DEL4: DJNZ R1,DEL4 ;延时 10μs

SETB EA

RETI

END

Page 294: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·285·

2.查询方式

PORT EQU 1B20H

ORG 4000H

MAIN: MOV DPTR,#PORT

LOOP: MOVX @DPTR,A ;启动 A/D 转换

MOV R6,#8H

DEL0: DJNZ R6,DEL0 ;延时 10μs

WAIT: JNB P3.2,WAIT ;等待转换结束

MOVX A,@DPTR ;采集数据

MOV P1,A ;输出显示

MOV R5,#100 ;延时 10 秒

DEL1: MOV R6,#255

DEL2: MOV R7,#98

DEL3: DJNZ R7,DEL3

DJNZ R6,DEL2

DJNZ R5,DEL1

LJMP LOOP ;循环采集

END

Page 295: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·286·

实验十 数码显示实验

【实验内容】

试编写程序在实验台上的六个 LED 数码管上从左往右分别显示 1、2、3、4、5、6。

【实验目的】

1.了解七段数码管显示数字的原理。

2.掌握用一个段锁存器,一个位锁存器同时显示多位数字的技术。

【实验说明】

LED 数码管显示器有两种工作方式,即静态显示方式和动态显示方式。

在静态显示方式下,每位数码管的 a~h 端与一个 8 位的 I/O 口相连。要在某一位数码

管上显示字符时,只要从对应的 I/O 口输出并锁存其显示代码即可。其特点是:数码管中

的发光二极管恒定的导通或截止,直到显示字符改变为止。

在动态显示方式下,各位数码管的 a~h 端并连在一起,与单片机系统的一个 I/O 口相

连,从该 I/O 口中输出显示代码。每位数码管的共阳极或共阴极则与另一个 I/O 口相连,

控制被点亮的位。动态显示的特点是:每一时刻只能有一位数码管被点亮,各位依次被轮

流点亮;对于每一位来说,每隔一段时间点亮一次。为了每位数码管能够充分被点亮,二

极管应持续发光一段时间。利用发光二极管的余辉和人眼的驻留效应,通过适当的调整每

位数码管被点亮的时间间隔,可以观察到稳定的显示输出。

由于要用 6 个 LED 显示数据,用静态显示所需 I/O 口太多,故本实验适合于动态显示,

即一位一位地轮流点亮显示器各个位(扫描)。本实验中用一个位锁存器 74LS273 作位数据

口,用另一个 74LS273 作段数据口,具体连接见电路图。

Page 296: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·287·

【实验原理图】

h a �������������������������������������

4.7K

4.7K

CS200--0F

WR’

U26

74LS04

+5V

U27

74LS04

10--17CS3

WR’���������������������������������������� ������������������������� ���������U4 74LS273 ��������������������� ������������������������� ���������U5 74LS273

+5V

【实验连线】

首先将数码显示部分与 8279 之间连接的短路片全部拨掉,然后第一片 74LS273(U4):

CS2 接 08~0F;011~018 接 LED 的 a~h;第二片 74LS273(U5):CS3 接 10~17;021~026

接 LED 的 LD0~LD5。

【流程图】

Page 297: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·288·

【参考程序】

PORT1 EQU 1B08H

PORT2 EQU 1B10H

ORG 4000H

MAIN: MOV R0,#00H

MOV R1,#00100000B

LOOP: MOV A,R0

MOV DPTR,#TABLE

MOVC A,@A+DPTR ;取段码

MOV DPTR,#PORT1 ;1B08H 是第一片 74LS273 的端口地址

MOVX @DPTR,A

MOV DPTR,#PORT2 ;1B10H 是第二片 74LS273 的端口地址

MOV A,R1

MOVX @DPTR,A ;向 LED 位锁存器输出位码

MOV R3,#0FFH

DJNZ R3,$ ;延时

INC R0

RR A

MOV R1,A

CJNE R0,#06H,LOOP ;循环显示

LJMP MAIN

TABLE: DB 06H,5BH,4FH,66H,6DH,7DH

EXIT: NOP

END

Page 298: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·289·

实验十一 8279 可编程键盘/

显示接口实验

【实验内容】

编写程序要求在键盘上每按一个数字键,将此键代码显示在 LED 上。

【实验目的】

1.了解键盘电路工作原理及编程方法。

2.掌握 8279 键盘、显示电路的编程方法。

【实验说明】

利用实验台上的提供的 8279,键盘电路和 LED 显示电路,组成一个键盘分析电路,完

成实验。

本实验用到了 8279 的键盘输入部分。键盘部分提供的扫描方式最多可和 64 个按键或

传感器阵列相连,能自动消除开关抖动以及对多键同时按下采取保护作用。对于 8279 主要

是掌握对它的初始化编程。

本实验给出的参考程序采用了中断方式来处理键盘输入值,因此主程序的任务就是初

始化 8279 和外部中断 0 的初始化编程,中断程序则进行键值处理并显示。

Page 299: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·290·

【实验原理图】

791011121314��456 1

23

+5V

74L

S13

8

D0---D

7

8279

���CS7 30-37

KS0KS1KS2

4IRQ

12

13

14

15

16

17

18

19

20

40

10

11

21

3

9

D0

D1

D2

D3

D4

D5

D6

D7

RL7

RL6

RL5

RL4

8

7

6

5

2RL3

1RL2

39RL1

38RL0

SL0SL1SL2SL3

32333435

KA7

KA6

KA5

KA4

KA3

KA2

KA1

KA0

36

GND

VCC

RD

WR

A0

CLK

RESET

SHIFT

+5V

RD�

WR�

A0

ALE

RESET

22

+5V

INT0 S 7 F

Y 6 E

X 5 D

W 4 C

R 3 B

P 2 A

M 1 9

G 0 8

【实验连线】

先插好 8279 与数码显示和键盘之间连接线段路片,然后将 8279 的片选端 CS7 接 30~

37,IRQ 接 INT0。

【流程图】

主程序:

入 口

8279 初始化

外部中断初始化编程

等中断

Page 300: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·291·

中断服务程序流程图:

N N

YY

中断入口

PSW、ACC 入栈

从 8279 数据口读入数据

求列值

求行值

列值送 ACC 并加 8 列值送 ACC 列值送 ACC 并加 16

查表并转换为段选码

输出到 LED 显示

PSW、ACC 出栈

RETI

行值为 0? 行值为 1?

【参考程序】

PORT EQU 1B30H

ORG 0003H

LIMP KEYINT

ORG 4000H

MAIN: MOV DPTR,#PORT+1

MOV A,#0D1H

MOVX @DPTR,A ;清显示

MOV A,#2AH

MOVX @DPTR,A ;置时钟编程命令字

Page 301: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·292·

MOV A,#00H

MOVX @DPTR,A ;设置键盘/显示器方式命令字

MOV A,#40H

MOVX @DPTR,A ;设置读 FIFO RAM 命令字

MOV A,#80H

MOVX @DPTR,A ;设置写显示缓冲器 RAM 命令字

SETB IT0 ;初始化外部中断 0

SETB EX0

SETB EA

WAIT: LJMP WAIT ;等中断

KEYINT:PUSH PSW

PUSH ACC

MOV DPTR,#PORT

MOVX A,@DPTR ;从 8279 数据口读入键值,存于 R1

MOV R1,A

ANL A,#07H

MOV R2,A ;取回列值存于 R2

MOV A,R1

ANL A,#38H

RR A

RR A

RR A

MOV R3,A ;取回行值存于 R3

CJNE R3,#00H,LINE1;行值不为 0 则转 LINE1

MOV A,R2

ADD A,#08H ;列值送累加器并加 8

LOP: LCALL TABLE ;调子程序转换为段码显示

MOVX @DPTR,A

LJMP EXIT ;退出

LINE1: CJNE R3,#01H,LINE2;行值不为 1 则转 LINE2

MOV A,R2

LJMP LOP

LINE2: MOV A,R2 ;行值为 2,列值送累加器并加 16

ADD A,#10H

LJMP LOP

EXIT: POP ACC ;中断返回

POP PSW

RETI

TABLE:INC A

Page 302: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·293·

MOVC A,@A+PC ;查表

RET

DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H

DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H

DB 31H,37H,73H,72H,3EH,76H,6EH

END

Page 303: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·294·

实验十二 继电器控制实验

【实验内容】

利用 P1 口输出高低电平,控制继电器的开合,以实现对外部装置的控制。

【实验目的】

掌握用继电器控制的基本方法和编程。

【实验说明】

现代自动化控制设备中,都存在一个电子电路与电气电路的互相连接问题,一方面要

使电子电路的控制信号能够控制电气电路的执行元件(电动机、电磁铁、电灯等),一方面

又要为电子电路的电气电路提供良好的电隔离,以保护电子电路和人身的安全。电子继电

器便能完成这一桥梁作用。

本实验所用继电器,型号为 JDC-3F,控制电压为直流+5V,控制端为 JDQ 插孔,当 JDQ

为高电平时,继电器不动作,为低电平时继电器动作(常闭触点断开,常开触点闭合)。

【实验原理图】

3.3k

5.6k

+5V J4

+5V

P1.0 JDQ

8031

Page 304: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·295·

【实验连线】

8031 的 P1.0 接 JDQ 端;继电器的输出 J4 接一白炽灯泡。

【程序图】

【参考程序】

ORG 4000H

START:SETB P1.0 ;置 1

LCALL DELAY ;延时两秒

CPL P1.0 ;清 0

LCALL DELAY ;延时两秒

LJMP START

DELAY:MOV R0,#20 ;延时两秒的子程序

DEL0: MOV R1,#255

DEL1: MOV R2,#98

DEL2: DJNZ R2,DEL2

DJNZ R1,DEL1

DJNZ R0,DEL0

RET

END

Page 305: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

第三部分 课程设计指导

Page 306: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·297·

第一章 概 述

1.1 单片机原理及应用课程设计应达到的目标

单片机原理及应用课程设计是学生综合运用所学知识,全面掌握单片微型计算机及其

接口的工作原理、编程和使用方法的重要实践环节。通过独立或协作提出并论证设计方案,

进行软、硬件调试,最后获得正确的运行结果,可以加深和巩固对理论教学和实验教学内

容的掌握,进一步建立计算机应用系统整体概念,初步掌握单片机软、硬件开发方法,为

以后进行实际的单片机软、硬件应用开发奠定良好的基础。

1.2 单片机原理及应用课程设计的主要内容

根据单片机原理及应用课程的要求,主要进行两个方面的设计,即单片机最小系统和

存储器扩展设计、接口技术应用设计。

其中,单片机最小系统主要要求学生熟悉单片机的内部结构和引脚功能、引脚的使用、

复位电路、时钟电路、4 个并行接口和一个串行接口的实际应用,从而可构成最小应用系

统,并编程进行简单使用。

存储器扩展设计要求学生掌握常用半导体芯片与单片机的接口,如 EPROM 存储器用作

外部程序存储器时与单片机的连接关系,SRAM 存储器用作外部数据存储器时与单片机的连

接关系,E�PROM 存储器用作外部程序/数据存储器时与单片机的连接关系。能合理分配和

使用单片机的内部和外部存储器,编程实现正常的读写功能。

接口技术应用设计主要要求学生能综合运用单片机、存储器、常用接口芯片构成单

片机应用系统,有针对性地进行软、硬件设计与开发。

Page 307: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·298·

1.3 单片机原理及应用课程设计的一般步骤

单片机原理及应用课程设计是一种实践性的教学环节,是本门课程所学理论的验证,

是软、硬件的综合运用。其难度和工作量介于实验和毕业设计之间。

本门课程设计的一般步骤如下:

1.选题

选择并了解课程设计题目,最好有一定的选择范围,以便学生根据自己的基础,兴趣

等选择最适合自己的题目。如上所述,题目主要分为两大类,即单片机最小系统与存储器

扩展设计,接口技术应用设计。

题目要求包括:该设计应完成的具体功能,所使用的主要设备和器件(或器材),是否

要求调试以及对设计报告的要求等。所用设备和器材,可以部分指定或完全指定,也可以

自选。

2.设计软、硬件方案

根据提供的条件与环境,以及题目要求提出软、硬件的初步方案。

硬件方案包括,选定器材后,画出工作原理框图,进而画出详细电路图,并辅以必要

的说明和其他文字叙述。软件方案主要是软件流程图及其说明,当然,流程不能太粗,较

详细的流程图会给编程带来方便。

3.编写程序

根据运行环境,硬件资源和软件流程图编写程序。可以用汇编语言,也可以用高级语

言或交叉汇编语言来编程。

4.软件调试

单独的软件调试主要指通过汇编、编译等排除语法错误或是明显的逻辑错误,因为许

多逻辑错误是在软、硬件连调时才能发现的。况且本门课程的设计不会是单独的软件设计,

所编程序总是建立在硬件原理和硬件资源基础上的。

5.硬件连接

按照原理电路图在实验设备上连接线路。若没有实验设备或在实验设备上不能实现的

部分,要在面包板上连线,有条件的还可制做印刷电路板在仿真器上调试,连接硬件时要

特别注意电源的正确连接,否则容易损坏机器或烧毁器件。

6.软、硬件连调

软件调试生成了可执行文件,硬件连接好以后就为软、硬件统调(也称连调)做好了

Page 308: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·299·

准备,这时可运行程序观察执行情况。若实现了预期的功能,则调试结束。但一般不容易

一次成功,这时要从几个方面来查找问题。

首先,检查硬件连接是否正确,是否接触良好。若有问题应及时排除。若硬件连接

没有问题或问题不好查找,应考虑采用单步调试或设置断点调试。一般地单片机实验设

备或单片机仿真器都提供了单步调试和设置断点调试功能。

所谓单步调试就是每执行一条指令就自动停止执行,并显示累加器和其他有关寄存器

的内容以及断点地址。这样,便可确定该条指令执行结果是否正确,若不正确则可初步确

定该条指令或与执行该指令有关的硬件有故障。若执行结果正确,则继续执行下一条指令。

所谓断点调试,是指在程序适当位置设置断点,使程序运行到此处自动停止执行,同

时显示有关寄存器的内容。断点的选择有一定技巧,若选择不好也许会造成死循环或死机

等问题。例如不要在等中断处设置断点,若某段程序的指令之间联系十分密切,则应在其

后设置断点。即可将程序分成若干逻辑段,一段一段地进行调试。也可将单步和断点两种

方法结合起来使用。还可以把硬件划分成若干功能单元,一个单元一个单元地调试(可专

门编写测试程序调试硬件单元)。如此既可以发现硬件故障,也可以找出软件的逻辑错误。

直到运行整个程序得到设计所要求的结果,统调才算完成。接下来就是认真总结,撰写设

计报告。

1.4 单片机原理及应用课程设计报告的要求

课程设计报告类似实验报告,不像实验报告那么简单,它也类似于科研课题的技术报

告,但又不像课题技术报告那样全面深入。单片机原理以及应用课程设计报告的内容包括:

设计题目、设计要求,所用设备与器材、硬件方案、软件方案、方案论证、调试过程、运

行结果及收获体会。下面对上述主要内容进行具体说明。

1.所用设备与器材

(1)使用仪器设备的名称、型号、规格。如 DT-830 数字万用表。

(2)选用器件的名称、型号。如可编程并行接口芯片 8255A。

(3)连接导线。如 0.55mm 单芯线若干条(这项也可不写在报告上)。

2.硬件方案

(1)设计思想。可用文字叙述。

(2)原理框图。可将硬件设计按功能划分若干部分或单元,每一部分用一个方框表示,

将各部分之间的逻辑关系用带方向的线连接起来(表示信息流向等)。

(3)简述工作原理

结合原理框图,用文字和图形(如波形图等)将工作原理阐述清楚。

(4)原理电路图

原理电路图与原理框图是两个不同的概念,框图描述的是各功能单元之间的逻辑关系,

Page 309: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·300·

而电路图描述的是各元器件之间的实际连接关系。因此,画电路图要注意详尽。应画出各

元器件之间的所有引脚,至少应画出本设计中所使用到的元器件的引脚(包括电源和接地)

应画出各元器件之间的所有连接关系(包括电源线,地线的连接,以及电源滤波电容等);

标出所有元器件编号和型号。这里的编号指的是在图中对元器件的编号,如电容编号 C�、C�、⋯、C�;电阻编号 R�、R�、⋯、R�;集成芯片编号 U�、U�、⋯、U�;开关编号 K�、K�、⋯、

K�;指示灯编号 L�、L�、⋯、L�等。标出所有引脚序号和名称;标出元件的标称值,如电容

的容量,电阻的阻值等。画电路图应注意规范,最好用电路 CAT 软件(如 PROTEL)绘制。

另外,若使用课程没有学过的器件,还需对它们的功能进行单独说明。

3.软件方案

软件方案包括程序流程图和程序清单。

(1)程序流程图

软件的设计思路用流程图描述可以一目了然。流程图的绘制要力求规范,如处理为矩

形框,判断为棱形框等。学过程序设计的人都应该知道程序流程图的规范格式。

流程图不易太粗,要能清楚地描述软件思路,并且以文字说明来阐述软件工作原理。

(2)程序清单

课程设计报告应给出完整的程序清单,并加以注释,个别较重要的程序还要特别加以

说明,例如体现关键功能的程序段,使用了某些技巧的程序段,有独到之处或有所创新的

程序段等。

4.方案论证

方案论证部分有两种写法。一种是针对一种方案来谈,阐述为什么要采用这种方案,

它有什么优势。另一种是提出两种以上方案,通过比较它们的优缺点,确定一种方案。

方案论证部分在设计报告中的位置也不是固定的,根据需要可以放在阐述方案之后,

可以先提出方案,较粗略的论证方案,再详细阐述所确定方案的工作原理等,也可以放在

阐述方案工作原理之中,边论证边阐述该方案的工作原理。

5.调试过程

调试过程包括使用什么仪器设备以及在怎样的环境下进行软件调试的,用什么方法调

试(如单步,断点等)。调试过程中遇到了什么问题,是如何解决的。

6.运行过程

用文字或图表等形式表达出运行结果,并加以分析说明,如是否与设计要求的结果一

致,若不一致,说明原因等。需要说明的是,课程设计报告最好是在计算机上撰写和打印,

所有图表及程序清单也都应在计算机系统上绘制并打印。

Page 310: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·301·

第二章 单片机原理及应用课程

设计的题目与要求

单片机原理及应用课程设计应有硬件设备,若没有专用设备可借用该课程的实验设备,

后者是绝大多数院校能做到的。但目前各大专院校所用的实验设备不统一,其中最具有代

表性的是清华大学计算机工厂生产的 TSC 型实验系统。因此,这里所列题目中器材选用一

项都有两种要求,一种是针对使用 TSC 实验系统所提出的要求,另一种是使用其他设备或

没有实验设备所提出的要求,教学时可根据具体情况选用或参考。

2.1 单片机最小系统与存储器扩展设计

2.1.1 单片机最小系统设计(此题应在单片机仿真器上实现)

1.设计内容:以 MCS-51 系列单片机 8031 为核心,设计一单片机最小系统。

2.主要设备与器材:PC 机一台,MCS-51 单片机仿真器一台,其他器材任选。

3.设计要求

(1)在 P3 口某位输入开关状态,在 P1 口按开关状态用 LED 数码管显示不同数据;

(2)在 P2 口、P0 口循环输出一地址信息,在地址总线上检测地址是否正确;

(3)在 P0 口循环输出一数据信息,在数据总线上检测该数据是否正确;

提示:地址和数据的检测可用逻辑分析仪或发光二极管实现。

2.1.2 存储器扩展设计

1.设计内容:扩展 32KB EPROM 程序存储器,寻址空间为 0000H~7FFFH;32KB SRAM

数据存储器,寻址空间为 0000H~7FFFH;2KB E�PROM 程序/数据存储器,寻址空间为 8000H~

87FFH。

2.主要设备与器材:PC 机一台,TSC 实验箱一个,(或 MCS-51 单片机仿真器一台),

存储器芯片自选,其他器材任选。

3.设计要求

Page 311: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·302·

(1)按上述要求设计硬件连接线路。

(2)编程实现各片存储器的读/写操作。

(3)完成将 E�PROM 的内容传送到 SRAM 空间的操作。

2.2 接口技术应用设计

2.2.1 键控彩灯的设计与实现

1.设计内容:设计并实现随按键字符而按某种规律显示的彩灯。

2.主要设备与器材:PC 机一台,TSC 实验箱一个(或 MCS-51 单片机仿真器一台,彩

色发光二极管 8 只以上),其他器材任选。

3.设计要求

在 PC 机或实验箱小键盘上按键,使不同颜色的发光二极管按一定规律发光。提示:可

使单片机 P1 口或扩展并行接口作为输出接口,驱动二极管发光。

2.2.2 智能函数发生器设计与开发

1.设计内容:以单片机为核心设计并开发能输出多种波形且频率可变的函数发生器。

2.主要设备与器材:PC 机一台,TSC 实验箱一个(或 MCS-51 单片机仿真器一台,数

/模转换器芯片 DAC0832 一片,运算放大器 LF3516 一只),其他器材任选。

3.设计要求

(1)能输出正弦波,三角波,锯齿波,脉冲波。

(2)能进行波形切换。

(3)能对输出波形的频率进行控制和调节。

2.2.3 检测与报警系统的设计与开发

1.设计内容:设计并开发能检测模拟信号,并能产生报警信号的系统。

2.主要设备与器材:PC 机一台,TSC 实验箱一个(或 MCS-51 单片机仿真器一台,模

/数转换器芯片 ADC0809 一个,发光二极管 1 只),其他器材任选。

3.设计要求

(1)能对输入的 0~5V 模拟电压信号进行检测。

(2)能判断所检测的信号是否超界。

(3)若信号超界则进行报警(可用发光二极管闪烁表示)。

说明:其界限值是自行设定的(如 2.5V),其所对应的数字量为((2.5/5)×

Page 312: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·303·

255=127.5=80H),事先将其存放在某寄存器或存储单元。

2.2.4 多路循环数据采集与控制系统的设计与开发

1.设计内容:设计并开发能对 8 路 0-5V 模拟电压信号进行采集,并当超限时输出适

当模拟控制信号的系统。

2.主要设备与器材:PC 机一台,TSC 实验箱一个(或 MCS-51 单片机仿真器一台。模

/数转换器芯片 ADC0809 一片,数/模转换器件 DAC0832 一片,运算放大器 LF3516 一只),

其他器材任选。

3.设计要求

(1)能循环采集 8 路模拟电压信号,每路连续采集 8 次,取平均值。

(2)能判断是否超出上、下限。

(3)当超出上限时(大于上限),输出一个 OV 的模拟控制信号,当超出下限时(小于

下限),输出一个 5V 的模拟控制信号。

说明:这里的上限和下限是自行设定的(如下限为 1V,上限为 4V)。

2.2.5 检测系统数字滤波技术

1.设计内容:设计一个 3 路循环数据采集系统,并分别采用三种不同的数字滤波技术

排除干扰。

2.主要设备与器材:PC 机一台,TSC 实验箱一个(或 MCS-51 单片机仿真器一台,模

/数转换器芯片 ADC0809 一片,数/模转换器件 DAC0832 一片,运算放大器 LF3516 一只),

其他器材任选。

3.设计要求

(1)能对 3 路模拟信号进行循环采集或指定某一路进行采集,每路采样点数自定。

(2)编程实现:对第一路用程序判断法排除随机干扰;对第二路用中位值法排除脉冲

干扰;对第三路用递推平均滤波法排除周期干扰。

(3)将每次滤波后的最终测量值通过 DAC0832 转换成模拟电压输出,并由 LED 指示输

出的通道号。

提示:以上提到的数字滤波方法请查看参考资料(如:雷霖编著的《微机自动检测与

系统设计》,电子工业出版社,2003 年 4 月)。

2.2.6 频率及持续时间自动控制的数据采集系统

1.设计内容:设计一个每秒采样次数和采样持续时间能用软件自动控制的数据采集系

统。

2.主要设备与器材:PC 机一台,TSC 实验箱一个(或 MCS-51 单片机仿真器一台,模

Page 313: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·304·

/数转换器 ADC0809 一片,开关 1 个),时钟源频率自定,其它器材任选。

3.设计要求

(1)外来时钟信号送单片机内部,由单片机内部定时器 T1、T2 控制何时启动采样以

及采样持续时间。

(2)A/D 转换器采集的数据由单片机 P1 口读入并送去存储。

(3)通过改变各定时器的计数初值控制采样频率和采样持续时间。

2.2.7 实时日历/时钟的设计与实现

1.设计内容:设计并实现以实时交替显示日期和时间的实时日历/时钟。

2.主要设备与器材:PC 机一台,TSC 实验箱一个(或 MCS-51 单片机仿真器一台,LED

数码管 6~8 只),锁存器/驱动器等自选,其他器材任选。

3.设计要求

(1)按一定规律交替显示日期和时间。(如每分钟显示一次日期,持续 10 秒,其余显

示时间。

(2)显示格式:年 月 日 时 分 秒

(3)每秒钟更换 40 次显示数据。

2.2.8 双机串行通信的设计与实现

1.设计内容:设计通过串行口实现两台单片机之间串行通信的硬件和软件。

2.主要设备与器材:PC 机两台,TSC 实验箱两个(或 MCS-51 单片机仿真器两台)。其

他器材任选。

3.设计要求

(1)能实现在甲机键盘上输入的字符,在乙机屏幕上显示,反之亦然。

(2)波特率自定,发送格式自定。

(3)若接收的数据无误,则发送方屏幕上显示“OK”。否则发回发送方并在屏幕上显

示所发出的字符。

2.2.9 双机并行通信的设计与实现

1.设计内容:利用并行接口实现两台 PC 机之间的通信

2.主要设备与器材:PC 机两台,TSC 实验箱两个(或 MCS-51 单片机仿真器两台,并

行接口芯片 8255A 两片),其他器材任选。

3.设计要求

(1)用 8255A 实现甲机并行发送在键盘上输入的字符,乙机接收并显示在双方的屏幕

上。

Page 314: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·305·

(2)8255A 工作在方式 1。

2.2.10 电子跑表的设计与功能实现

1. 设计内容:设计与实现用单片机控制的电子跑表的功能。

2. 主要设备与器材:PC 机一台,TSC 实验箱一个(或 MCS-51 单片机仿真器一台,LED

数码管 6 只,8 位锁存器/驱动器两片),其他器材任选。

3. 设计要求:

(1)显示格式:分秒 1/10 秒。

(2)定义实验箱上的小键盘上的某几个键控制计时开始、停止和清零。

(3)用单片机内部定时器实现计时,误差小于 1/10 秒。

2.2.11 十字路口电子交警的设计与功能实现

1. 设计内容:设计用单片机控制的十字路口交通灯及撞红灯报警,并编程实现这些功

能。

2. 主要设备与器材:PC 机一台,TSC 实验箱一个(或 MCS-51 单片机仿真器一台,并

行接口芯片 8255A 一片,发光二极管红、绿、黄三色各 4 个,E�PROM 存储器 2817A 一片,

ADC0809 一片),扬声器或音乐芯片一只,其他器材任选。

3. 设计要求

(1)用 8255A 驱动三种颜色的 12 只发光二极管,用软件使它们模拟十字路口交通灯

的功能。

(2)当某一方向的红灯亮时,若有车辆通过,则用单片机控制的扬声器发声报警。撞

红灯的信号可用传感器采集并转换成数字量,这里以采集到一个 3~5V 的模拟电压表示。

2.2.12 智能工业供水系统的设计与模拟

1. 设计内容:某工业供水系统中有水网供水和大(30KW)、小(22KW)两个水泵从地

下抽水三种方式。为保证供水和节约用水,需设计一个控制系统,根据水网水压在三种方

式之间自动切换。

2. 主要设备与器材:PC 机一台,TSC 实验箱一个(或 MCS-51 单片机仿真器一台,LED

数码管一只,A/D 转换器 ADC0809 一片,D/A 转换器 DAC0832 一片),其他器材任选。

3. 设计要求

(1)随时检测水网水压(这里用某一路 0~5V 模拟信号代替)当该信号低于 3V 时,

打开小水泵抽水,当该信号低于 2V 时,打开大水泵抽水。

(2)当某一水泵电机过热时(由另一路 0~5V 模拟信号表示发热程度,如该信号大于

4V 时,表示过热),自动切换到另一泵上,并且显示过热水泵泵号,若两泵电机均过热,

Page 315: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·306·

则报警,两泵编号交替显示,并切换到水网供水。

(3)输出的控制信号可用 8255A 的输出或 DAC0832 的输出来表示。

2.2.13 基于单片机的分频器设计与实现

1. 设计内容:设计一个能用单片机控制的脉冲信号分频器,并编程实现其功能。

2. 主要设备与器材:PC 机一台,TSC 实验箱一个(或 MCS-51 单片机仿真器一台,LED

数码管一只),其他器材任选。

3.设计要求:

(1)能对 2M 以下的脉冲信号进行分频。

(2)分频系数由 PC 机或 TSC 实验箱或仿真器上的键盘输入(2~1000)。

(3)由 LED 显示分频系数。

2.2.14 夜班防睡控制、记录器的设计与功能实现

1. 设计内容:用单片机实现对值夜班人员的防睡控制和记录睡着时间与次数的功能。

2. 主要设备与器材:PC 机一台,TSC 实验箱一个(或 MCS-51 单片机仿真器一台,并

行接口 8255A 一片,扬声器一只,LED 数码管 4 只,发光二极管两只(红、黄各一只)),

其他器材任选。

3. 设计要求

(1)每 10 分钟用较柔和的声音提醒一次值班者,值班者按某一按键后复位,计时重

新开始。

(2)若计到 11 分钟时无人按复位键,则以较急促的声音报警,黄灯闪烁,并每隔 10

分钟计数器加 1。

(3)当到 60 分钟时红灯闪烁,并以尖锐的声音持续报警。以 LED 显示分和秒。显示

格式: 分 秒。

2.2.15 数字电压表的设计与功能实现

1. 设计内容:设计并编程实现用单片机控制的简易数字电压表。

2. 主要设备与器材:PC 机一台,TSC 实验箱一个(或 MCS-51 单片机仿真器一台,LED

数码管三只,A/D 转换器 ADC0809 一片),其他器材任选。

3. 设计要求:检测 8 路 0~5V 模拟电压,并在 LED 上显示,显示格式为 1 位整数,两

位小数。

Page 316: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·307·

2.2.16 监控程序中键盘扫描模块的设计与实现

1. 设计内容:设计一个单片机应用系统的键盘扫描程序,并能实现按键定义、去抖、

连击处理等功能。

2.主要设备与器材:PC 机一台,TSC 实验箱一个(或 MCS-51 单片机仿真器一台,按

键若干只,LED 数码管若干只),其他器材任选。

3. 设计要求

设计一个 20~24 各按键的键盘扫描程序,要求实现:

(1)定义 0~9、A~F 16 个数字键,4~8 个功能键(具体功能自定)。

(2)由消抖和连击处理功能,上、下档键和按键互锁功能自选。

(3)当按某键时,除实现所定义的功能外,还要在 LED 上显示出来。

2.2.17 铁道路口交通管理自动控制系统的设计与功能实现

1. 设计内容:设计一个铁道与公路交叉路口的自动交通管理系统。

2. 主要设备与器材:PC机一台,TSC实验箱一个(或MCS-51单片机仿真器一台,ADC0809

一片,DAC0832 一片,红色和绿色发光二极管各一只,扬声器一只),其他器材任选。

3.设计要求

(1)当检测到铁轨振动(火车将到)时,自动发出警报信号,并控制关闭栅栏,同时

公路方向红灯亮。

(2)关闭栅栏后,当检测到铁路上有物体时,自动发出紧急刹车信号,并以急促的声

音报警,同时红灯闪烁。

(3)当铁轨振动信号由大到小达到一定程度(火车已过)时,自动解除报警,同时打

开栅栏门,公路方向绿灯亮。

提示:铁轨振动信号可由振动传感器检测,这里用模拟电压代替,输出的报警信号可

用扬声器发声代替,指示灯可由发光二极管代替,关栅栏门信号由输出开头信号表示。输

出的紧急刹车信号由 DAC0832 的输出模拟信号代替。

2.2.18 危重病人护理监测系统的功能实现

1. 设计内容:设计一个基于单片机的危重病人护理监测系统,并实现相应基本功能。

2. 主要设备与器材:PC机一台,TSC实验箱一个(或MCS-51单片机仿真器一台,ADC0809

一片,DAC0832 一片,8255A 一片,发光二极管两只,LED 数码管 6 只,扬声器一只),其

他器材任选。

3. 设计要求

(1)监测病人心脏跳动和呼吸,危险时报警,红灯闪烁,并显示房间号和病床号。

Page 317: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·308·

(2)监测病人大小便,大小便后报警,以便及时处理,并显示房间号和病床号。

(3)病人有紧急需要时按键响铃,呼叫护理人员,并显示房间号和病床号。

提示:心跳,呼吸,大小便都由相应传感器检测。经转换后变为数字信号送入单片机,

这里这些检测信号均由模拟电压表示。

2.2.19 事件触发延时处理系统的设计与功能实现

1.设计内容:设计由某外部事件触发后延时一段时间再根据事件性质进行处理的系统,

并实现相应功能。

2.主要设备与器材:PC 机一台,TSC 实验箱一个(或 MCS-51 单片机仿真器一台,可

编程并行接口 8255A 一片。发光二极管 8 只,开关 8 只,LED 数码管一只),其他器材任选。

3.设计要求

(1)单片机两个外部中断请求输入对应两个外部事件,当某一事件触发(申请中断)

时,按设定值延迟一段时间,然后读取对应开关状态,根据开关状态控制发光二极管发亮

或闪烁等。

(2)各通道的延迟时间由键盘输入。

(3)外部事件触发时,用 LED 显示其通道序号。开关闭合时,对应通道二极管发亮,

开关断开时,对应通道二极管闪烁。

2.2.20 智能抢答器的设计与功能实现

1.设计内容:设计基于单片机的抢答器,并编程实现其功能。

2.主要设备与器材:PC 机一台,TSC 实验箱一个(或 MCS-51 单片机仿真器一台,并

行接口 8255A 一片,发光二极管 16 只,(红、绿各 8 只),LED 数码管若干只,按钮或按键

10 个),其他器材任选。

3.设计要求

(1)1~8 号选手中先按下按钮者(由 P1 口所接开关或按钮状态表示),LED 数码管

显示其选手号码(后按下无效),且计时开始,1 分钟停止计时。

(2)由裁判掌握,若回答正确,该选手对应绿灯亮,否则红灯亮。

(3)回答正确时,计分牌加 10 分,不正确减 10 分(满分 100 分)。

2.2.21 主从式微机系统的设计与开发

1.设计内容:以 PC 机为主机,单片机为从机,通过串行接口构成主从系统,设计其

串行通信的基本功能,并编程实现。

2.主要设备与器材:PC 机一台,TSC 实验箱一个(或 MCS-51 单片机仿真器一台,串

行接口 8251A 一片,MC1488,MC1489 各一片),其他器材任选。

Page 318: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·309·

3.设计要求

(1)主机能接收从机发来的数据,并显示于屏幕。

(2)从机能接收主机发来的命令(实际上也是以数据形式出现)。

(3)上电后两机握手成功,在主机屏幕上显示“OK”。

2.2.22 微机与单片机并行通信的设计与实现

1.设计内容:设计利用并行接口 8255A 实现 PC 机和单片机之间并行通信的硬件,并

编程完成双方的简单通信。

2.主要设备与器材:PC 机一台,TSC 实验箱一个(或 MCS-51 单片机仿真器一台,并

行接口 8255A 两片),其他器材任选。

3.设计要求

(1)双方上电握手成功后在主机上显示“READY”。

(2)PC 机能接收单片机的数据,并显示于屏幕上。

(3)单片机能接收 PC 机的数据,并回答接收成功信号,在 PC 机屏幕上显示“OK”。

2.2.23 步进电机控制系统设计与开发

1.设计内容:设计用微机对四相步进电机的运行方式、方向及速度的自动控制系统,

编写汇编程序实现要求的动作。

2.主要设备与器材:PC 机一台,四相步进电机一个,TSC 实验箱个(或 MCS-51 单片

机仿真器一台,并行接口 8255A 一片,DAC0832 一片,发光二极管红、绿、黄各一只),其

它器材任选。

3.设计要求

(1)设计控制系统硬件电路。

(2)编写驱动程序,实现步进电机来回走 100 步,然后红色发光二极管闪烁 10 次,

从任意点开始先慢走 50 步,绿色发光二极管闪烁 5 次,停留 50 秒,黄色发光二极管闪烁

5 次,最后快速退回原处。

2.2.24 电子恐龙动作控制系统设计与功能实现

1.设计内容:设计控制电子恐龙基本动作对触摸、障碍物反应的控制系统,并编程实

现相应功能。

2.主要设备与器材:PC 机一台,TSC 实验箱一个(或 MCS-51 单片机仿真器一台,模/

数转换器 ADC0809 一片,数/模转换器 DAC0832 一片,并行接口 8255A 一片,发光二极管两

只),蜂鸣器或扬声器一只,其他器材任选。

3.设计要求

Page 319: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·310·

(1)能四条腿协调动作行走。

(2)遇到障碍物,停止前行,并鸣叫三声,20 秒后退回。

(3)当有人触摸其尾巴时,鸣叫三声,眼发红光,且摆尾六次。

提示:恐龙的眼睛用红色发光二极管充当。行走等动作控制信号使用 8255A 输出。对

障碍物和触摸的认别由传感器检测信号给出,这里用 ADC0809 的输入信号表示(可自己设

定表示是否遇到障碍物或触摸的模拟电压幅值),摆尾控制信号由 DAC0832 输出代替。

2.2.25 天然气燃具定时报告及泄漏报警控制系统设计与实现

1.设计内容:设计对天然气泄漏检测报警和按设定时间进行报告的控制系统,并编程

实现相应功能。

2.主要设备与器材:PC 机一台,TSC 实验箱一个(或 MCS-51 单片机仿真器一台,模/

数转换器 ADC0809 一片,并行接口 8255A 一片,蜂鸣器一个),其他器材任选。

3.设计要求

(1)检测天然气是否有泄漏,若有(到一定浓度,探测器的灵敏度能够分辨的浓度),

则蜂鸣器报警。可设定两个界限值。

(2)设定燃气开关开启时间(如蒸饭设定 1 小时),到时间后自动报告主人(用蜂鸣

器),并自动关闭。

(3)应至少能控制两个燃具。

提示:检测燃烧现象要用温度传感器,光传感器同时检测,当它们同时满足条件才是

燃烧。用相应传感器检测这些信息,这里用 ADC0809 的输入模拟电压代替。控制开关的开

和关可用 8255A 和单片机外部中断实现。

2.2.26 广告屏的设计与开发

1.设计内容:用发光二极管阵列组成大屏幕,用并行接口输出信号,控制其显示字符,

汉字及图形。

2.主要设备与器材:PC 机一台,TSC 实验箱一个,另加发光二极管若干只,并行接口

8255A 若干片(或 MCS-51 单片机仿真器一台,并行接口 8255A 若干片,发光二极管若干只。)

其他器材任选。

3.设计要求

(1)发光二极管阵列小于 6×8。

(2)编写驱动程序实现:动态显示一两个简单汉字和一个较简单的图形。

(3)汉字和图形可移动,可闪烁,可交替显示。

2.2.27 音乐喷泉控制系统的设计与开发

Page 320: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·311·

1.设计内容:设计随音乐节拍变化的喷泉控制系统,并编程实现其相应功能。

2.主要设备与器材:PC 机一台,TSC 实验箱一个(或 MCS-51 单片机仿真器一台,并

行接口 8255A 若干片,数/模转换器 DAC0832 若干片,发光二极管若干只),扬声器一只,

其他器材任选。

3.设计要求

(1)用扬声器弹奏音乐。

(2)按音乐节拍快慢等变化控制喷泉的各喷头水柱高低变化、有无变化,以构成各种

造型。

提示:对水柱的控制用 DAC0832 的输出信号,而 DAC0832 的输入数字另用 8255A 各端

口提供。单片机内部定时器用于各种定时(包括定时申请中断)。

2.2.28 智能温度检测控制仪的设计

1.设计内容:设计一个以单片机为核心的温度检测控制仪。

2.主要设备与器材:PC 机一台,TSC 实验箱一个(或 MCS-51 单片机仿真器一台,模/

数转换器 ADC0809 一片,数/模转换器 DAC0832 一片,LED 数码管 6 只,按键 12 个),其他

器材任选。

3.设计要求

某加热炉的炉内温度(以 ADC0809 某通道输入的 0~5V 电压表示)变化曲线应如图 2-1

所示。

图 2-1 加热炉的炉内温度变化曲线

(1)分段检测温度曲线,若出现偏差则自动输出控制信号予以调节。

(2)定义功能键:t,用于设置 t�~t�;T,用于设置 T�~T�;S,为启动运行键;X,

为停止运行键;0~9,为数字键。

(3)当启动运行后显示 S,5 秒钟后显示当前温度值。按 t 键显示输入的时间参数,

依次显示 t�,t�,t,t,t�,t�,t�;按 T 键显示输入的温度参数,依次显示 T�,T�;按 X

键后停止运行。

(4)温度由 0~5V 电压代表,输出控制信号由 DAC0832 产生,并送 ADC0809 另一通道

Page 321: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·312·

(表示调节控制)。

2.2.29 多路闭环数据采集与控制系统设计与开发

1.设计内容:用 ADC0809 对 8 路模拟信号进行采集,其中 4 路的输入为外来模拟电压,

另外 4 路为 DAC0832 输出经运放得到的模拟电压,同时将 DAC0832 的输出接外部电路,作

为对前 4 路被采集对象的控制信号。

2.主要设备与器材:PC 机一台,TSC 实验箱一个,另加 3 片 DAC0832。(或 MCS-51 单

片机仿真器一台,模/数转换器 ADC0809 一片,数/模转换器 DAC0832 一片),其他器材任选。

3.设计要求

(1)能对 8 个通道循环采集。

(2)能对前 4 个通道循环采集。

(3)能指定通道采集。

(4)定义三个按键或设置三个开关控制系统工作在三种方式之一。

2.2.30 家电照明综合控制系统设计与功能实现

1.设计内容:用单片机统一控制所有家电及照明,并编程实现综合的自动控制功能。

2.主要设备与器材:PC 机一台,TSC 实验箱一个(或 MCS-51 单片机仿真器一台,并

行接口 8255A 一片,数/模转换器 DAC0832 若干片,模/数转换器 ADC0809 若干片),其他器

材任选。

3.设计要求

(1)能对电视、冰箱、微波炉、空调等自动开关、换挡;

(2)照明灯、排气分组分区控制;

(3)定时关闭电器、电灯等。

提示:此题目所实现的功能目前只是一种设想,要真正完成这些功能要用到许多其他

专业技术,且要考虑许多方面的问题。这里仅是一种简单的控制系统的模拟,因此,仅按

给定条件输出控制信号就行了。如:室内温度达到 27℃时输出空调制冷控制信号,且设定

所需温度,当室内温度达 10℃时,输出空调制热信号,且设定所需温度(用键盘输入数字

表示)。

温度等信号的检测用传感器实现,但这里用模拟电压代替,经 A/D 转换成数字信号,

由单片机读入。

Page 322: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·313·

第三章 单片机原理及

应用课程设计实例

3.1 单片机最小系统与存储器扩展设计实例

1.设计内容:以 8031 为 CPU 设计一个单片机应用系统,在其外部扩展 16KB SRAM,8KB

EPROM,2KB E�PROM

2.主要设备与器材:PC 机一台,MCS-51 单片机仿真器一台,静态 RAM62128 一片,EPROM

2764 一片,E�PROM 2817A 一片,8D 锁存器 74LS373 一片。

3.设计要求

(1)各存储芯片的地址空间分配:

静态 RAM62128 程序存储空间 0000H~3FFFH

EPROM 2764 数据存储空间 0000H~1FFFH

E�PROM 2817A 程序/数据存储空间 4000H~47FFH

(2)编程实现所有存储单元的读操作和除 EPROM 以外的写操作。

(3)编程实现将 EPROM 前 256 个存储单元的内容传送到静态 RAM 前 256 个对应的单元。

4.设计方案

(1)硬件原理框图

按本题要求,该单片机系统原理框图如图 3-1 所示。��������8031

74LS373 EPROM EEPROM SRAM LED

译码器

����������������图 3-1 单片机系统原理框图

(2)原理电路图

Page 323: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·314·

不同的半导体存储芯片,在引脚上有所差别,具体连接时要注意这些引脚的使用,本

题原理电路见图 3-2 所示。

������������������������������������������������ ������������������������������������������������������������ ���������������������������������������������������������������������������������������������������������� ���������������������������������������������

���������������� �� �� �� �� �� �� �� �������������������� �� �� �� �� �� �� �� ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ������������������������������������������������������������������������������������������������������������������������������� ��� �����������������������������������

������������������������������������������������������������������������������������������������������������������ ���� ���������!��

"#$%&'(��������"#%'($&��')')��"#$%&'(��������"#%'($&��')')��!�� ������ !�����

图 3-2 原理电路图

(3)软件设计

按题目要求,编写对存贮单元的读/写程序如下。

程序流程图(见图 3-3 至 3-6 所示):

图 3-3 EPROM 读操作 图 3-4 SRAM 读/写操作

Page 324: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·315·

图 3-5 E�PROM 读/写操作 图 3-6 数据传送(EPROM-SRAM)操作

程序清单:

读 EPROM 程序清单:

ORG 0000H ;设置起始地址

LJMP EPROMMAIN

ORG 0060H ;设置主程序入口地址

EPROMMAIN: MOV SP,#30H ;设置堆栈指针

CLR C

PUSH PSW

MOV DPTR,#0A000H ;设置 EPROM 存储区指针

MOV A,#0

CLR PSW.3 ;指定工作寄存器区

CLR PSW.4

MOV R4,#20H ;设置读存储单元的次数

EPROM1: MOV R5,#0FFH

EPROM2: MOVC A,@A+DPTR ;读存储单元

LCALL LEDDISPLAY ;调用显示子程序

INC A ;指向下一单元

DJNZ R5,EPROM2

POP PSW

MOV A,#0FFH

ADDC A,DPL

Page 325: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·316·

MOV A,0

ADDC A, DPH

DJNZ R4,EPROM1 ;所有单元读完了吗?未读完继续

END ;读完,程序结束

读/写 SRAM 程序清单:

ORG 0000H ;设置起始地址

LJMP SRAMMAIN

ORG 0100H ;设置主程序入口地址

SRAMMAIN: MOV SP,#40H ;设置堆栈指针

CLR C

PUSH PSW

MOV DPTR,#0000H ;设置 SRAM 存储区指针

MOV A,#0

SETB PSW.3 ;指定工作寄存器区

CLR PSW.4

MOV R4,#40H ;设置读/写存储单元的次数

SRAM1: MOV R5,#0FFH

MOVX @DPTR,A ;写存储单元

SRAM2: MOVX A,@A+DPTR ;读存储单元

LCALL LEDDISPLAY ;调用显示子程序

INC A ;指向下一单元

DJNZ R5,EPROM2

POP PSW

MOV A,#0FFH

ADDC A,DPL

MOV A,0

ADDC A, DPH

DJNZ R4,EPROM1 ;所有单元读/写完了吗?未读完继续

END ;读/写完,程序结束

读/写 E�PROM 程序清单:

ORG 0000H ;设置起始地址

LJMP E�PROMMAIN

ORG 0300H ;设置主程序入口地址

E�PROMMAIN: MOV SP,#30H ;设置堆栈指针

CLR C

PUSH PSW

Page 326: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·317·

MOV DPTR,#4000H ;设置 E�PROM 存储区指针

MOV A,#0

CLR PSW.3 ;指定工作寄存器区

SETB PSW.4

MOV R4,#8 ;设置读存储单元的次数

E�PROM1: MOV R5,#0FFH

PUSH A ;为读 P1 口作准备

MOV A,#0FFH

MOV P1,A

POP A

MOVX @DPTR,A ;写存储单元

E�PROM2: PUSH A ;该单元写完了吗?

MOV A,P1

ANL A,#00000001B

JNZ E�PROM2 ;未写完,继续查询

POP A

E�PROM3: MOVX A,@A+DPTR ;写完,读存储单元

LCALL LEDDISPLAY ;调用显示子程序

INC A ;指向下一单元,同时数据加 1

DJNZ R5,EPROM3

POP PSW

MOV A,#0FFH

ADDC A,DPL

MOV A,0

ADDC A, DPH

DJNZ R4,EPROM1 ;所有单元读/写完了吗?未读完继续

END ;读/写完,程序结束

EPROM 向 SRAM 进行数据传送程序清单:

ORG 0000H ;设置起始地址

LJMP MAIN

ORG 0600H ;设置主程序入口地址

MAIN: MOV SP,#60H ;设置堆栈指针

CLR C

PUSH PSW

MOV DPTR,#0A000H ;设置 EPROM 存储区指针

MOV R0,#0 ;设置 SRAM 存储区指针

MOV A,#0

CLR PSW.3 ;指定工作寄存器区

Page 327: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·318·

CLR PSW.4

MOV R7,#0FFH ;设置传送的数据长度

MAIN 1: MOVC A,@A+DPTR ;读源存储单元

MOVX @R0,A ;写目的存储单元

MOVX A,@R0 ;读目的存储单元

LCALL LEDDISPLAY ;调用显示子程序

INC A ;指向下一单元

INC R0

DJNZ R7, MAIN 1 ;所有单元传送完了吗?未完继续

END ;传送完,程序结束

LED 显示子程序:子程序名:LEDDISPLAY

子程序功能:用两位 LED 数码管显示存储单元内容

入口参数:待显示的十六进制数累加器 A 中

出口参数:无

LEDDISPLAY: PUSH PSW ;保护现场

PUSH A

PUSH B

SETB PSW.3 ;指定工作寄存器区

SETB PSW.4

MOV R3,#10H ;设置显示次数计数值

MOV B,A ;保存待显示的十六进制数

LED: MOV A,B ;取待显示的十六进制数

ANL A,#0F0H ;显示高位数

SWAP A

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV R0,A

MOV DPTR,#6000H

MOV A,R0

MOVX @DPTR,A

MOV R1,#7FH ;延时

DJNZ R1,$

MOV A,B ;取待显示的十六进制数

ANL A,#0FH ;显示低位数

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV R2,A

MOV DPTR,#7000H

Page 328: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·319·

MOV A,R2

MOVX @DPTR,A

MOV R1,#7FH ;延时

DJNZ R1,$

DJNZ R3 ;显示 10H 次

TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H

;段码表

DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H

POP B ;恢复现场

POP A

POP PSW

RET ;返回

3.2 接口技术应用设计实例

【例 1】数据采集与控制

1.设计内容:对 8 路 0~5V 的模拟电压进行循环采集,超出界限时指示灯闪烁,且能

输出控制信号进行调节。

2.主要设备与器材:PC 机一台,TSC 实验箱一个。

3.设计要求

(1)对 8 路模拟输入实行循环采集,每路连续采集 16 次,取平均值。

(2)分别设定每一路的上限值,若采集的平均值超过该界限值,则对应通道的指示灯

闪烁 10 次以后一直亮,以示警告。

(3)对于第 0 路,则设定一个下限和一个上限,当采集的平均值小于下限时,输出一

个较大的模拟信号作为向大的方向的调节控制信号;当采集的平均值大于上限时,输出一

个较小的模拟信号作为向小的方向调节的控制信号,且两种超限指示灯均闪烁 10 次后亮。

(4)CPU 以中断方式读取采集数据。

4.设计方案

TSC 实验箱上本来就有 A/D 转换电路,它以 ADC0809 为核心,输出数字量直接与总线

的数据线连接,可通过短接线将输入与电位器可调端相接,作为 0~5V 模拟量输入。利用

D/A 转换器 DAC0832(TSC 上具有一个 D/A 转换电路)经运算放大器转换后的电压输出作为

输出的控制信号,也可以作为 ADC0809 的输入。

由于 8031 内部没有程序存储器,所以为了避免在系统中扩展它,在本设计中采用了

8751 单片机,从而使用它内部的程序存储器。例 3 也是同样的道理。

(1)硬件原理框图如图 3-7 所示

Page 329: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·320·

8751

驱动器 显示器

锁存器 模/J��黄 数/�W�黄

运算放大器电位器译码电路

P1口

P0口

ALE

P2口控制信号

输出

INTO

图 3-7 硬件原理框图

(2)原理电路图如图 3-8 所示

�������������������������������� ������������

��������������������������������������������������������������� �������������������������� ��������������������������������� �� �� ����� ������� �������������������� ������������������ ���������������������������������������������������������������������������������������������������������������� ��������������������������� ����������������������������������������������������������������������������� !���� !�������������������������������������������������������������������������������������������������������������������������������!���������������

图 3-8 原理电路图

说明:ADC0809 的 8 路模拟输入分别由 W�,W�,W和 DAC0832 产生。由于实验箱上只有

三个电位器和一个 DAC0832,所以按图 3-8 中的接法,IN 由 W�提供,IN�和 IN�由 W�提供,

IN和 IN由 W提供,IN�,IN�,IN�由 DAC0832 提供。同时,DAC0832 的输出又作为调节 IN 的控制信号。

ADC0809 的转换结束信号 EOC 接 8751 的外部中断请求输入 INT0 。因此,当转换结束

时,自动向 CPU 申请中断,CPU 响应中断,将转换数据读到累加器,然后存入存储单元。

启动 ADC0809 转换时,首先要向对应通道(由 C,B,A 端编码决定)发出写操作信号。

这包括三个意思:发出 C、B、A 编码和 CS 信号,它们共同决定选中的通道;使 ALE 信号为

Page 330: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·321·

高电平,锁存 C、B、A 编码(通道地址低 3 位);使 START 信号为高电平,启动转换。这与

写操作的内容是无关的。按图 3-8 中的接法,只要对这个地址发出写动作就可以了。

时钟信号是由实验箱上的 8MHz 振荡源经 74LS393 进行分频得到的 500KHz 脉冲。

DAC0832 的输入是由软件产生的。也就是说,ADC0809 对 DAC0832 进行采集的信号大小

是人为设置的。

(3)软件流程图如图 3-9、图 3-10 所示。

图 3-9 软件流程图 图 3-10 主程序框图

(4)程序清单

主程序:

ORG 4000H ;主程序起始地址

LJMP MYMAIN

ORG 0003H ; INT0 入口地址

LJMP MYINT0

ORG 000BH ;定时器 T0 入口地址

Page 331: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·322·

LJMP MYT0

ORG 4030H

MYMAIN: MOV SP,#65H ;设置中断指针

CLR PSW.3 ;指定工作寄存器区

CLR PSW.4

SETB PX0 ; INT0 设置成高级中断

SETB IT0 ; INT0 设置成边沿触发

SETB IE0 ;允许 INT0 中断

MOV R0,#58H ;设置各通道界限值

MOV A,#10H

MOV @R0,A

INC R0

MOV R1,#8

MOV A,#F0H

L1: MOV @R0,A

INC R0

CLR C

SUBB A,#8

DJNZ R1,L1

MOV DPTR,#228H ;写 D/A 转换

MOV A,#80H

MOVX @DPTR,A

INC DPTR

MOVX @DPTR,A

L2: MOV R2,#0 ;通道号设置为 0

L3: MOV R3,#4 ;采集次数设置为 4

SETB EA ;开中断

L4: MOVX DPTR,#220H ;启动 A/D 转换

MOVX @DPTR,A

MOV R7,#0FFH ;延时等中断

HERE: DJNZ R7,HERE

MOV DPTR,TAB ;中断后处理,设置散转表指针

MOV A,R2

RL A

JMP @A+DPTR ;实现散转

TAB: AJMP PRG0 ;跳转到 0 通道处理程序

AJMP PRG1 ;跳转到 1 通道处理程序

AJMP PRG2 ;跳转到 2 通道处理程序

AJMP PRG3 ;跳转到 3 通道处理程序

Page 332: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·323·

AJMP PRG4 ;跳转到 4 通道处理程序

AJMP PRG5 ;跳转到 5 通道处理程序

AJMP PRG6 ;跳转到 6 通道处理程序

AJMP PRG7 ;跳转到 7 通道处理程序

PRG0: CJNE R3,0,PRG01 ;计数值不为 0(4 次未采集完)转 PRG01

MOV A,B ;4 次未采集完了,取采集数据

MOV 33H,A ;保存第 4 次采集数据到 33H

MOV R0,#30H ;设置求平均值子程序入口参数

LCALL MYSUB1 ;求 4 次的平均值

MOV 50H,R1 ;保存平均值

LCALL PYJ ;判是否越界

INC R2 ;通道号加 1

LJMP L3 ;采集下一通道

PRG01: MOV A,B ;取采集数据

CJNE R3,3,PRG02 ;是第一个数吗?不是转 PRG02

MOV 30H,A ;是第一个数,则保存到 30H

AJMP PRG04 ;转 PRG04

PRG02: CJNE R3,2,PRG03 ;是第二个数吗?不是转 PRG03

MOV 31H,A ;是第二个数,则保存到 31H

AJMP PRG04 ;转 PRG04

PRG03: CJNE R3,1,PRG04 ;是第三个数吗?不是转 PRG04

MOV 32H,A ;是第三个数,则保存到 32H

PRG04: DEC R3 ;采集次数加 1

LJMP L4 ;转到启动下一次转换处

PRG1: CJNE R3,0,PRG11

MOV A,B

MOV 37H,A

MOV R0,#34H ;设置求平均值子程序入口参数

LCALL MYSUB1

MOV 51H,R1

LCALL PYJ

INC R2

LJMP L3

PRG11: MOV A,B

CJNE R3,3,PRG12

MOV 34H,A

AJMP PRG14

PRG12: CJNE R3,2,PRG13

Page 333: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·324·

MOV 35H,A

AJMP PRG14

PRG13: CJNE R3,1,PRG14

MOV 36H,A

PRG14: DEC R3

LJMP L4

PRG2: CJNE R3,0,PRG21

MOV A,B

MOV 3BH,A

MOV R0,#38H ;设置求平均值子程序入口参数

LCALL MYSUB1

MOV 52H,R1

LCALL PYJ

INC R2

LJMP L3

PRG21: MOV A,B

CJNE R3,3,PRG22

MOV 38H,A

AJMP PRG24

PRG22: CJNE R3,2,PRG23

MOV 39H,A

AJMP PRG24

PRG23: CJNE R3,1,PRG24

MOV 3AH,A

PRG24: DEC R3

LJMP L4

PRG3: CJNE R3,0,PRG31

MOV A,B

MOV 3FH,A

MOV R0,#3CH ;设置求平均值子程序入口参数

LCALL MYSUB1

MOV 53H,R1

LCALL PYJ

INC R2

LJMP L3

PRG31: MOV A,B

CJNE R3,3,PRG32

Page 334: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·325·

MOV 3CH,A

AJMP PRG34

PRG32: CJNE R3,2,PRG33

MOV 3DH,A

AJMP PRG34

PRG33: CJNE R3,1,PRG34

MOV 3EH,A

PRG34: DEC R3

LJMP L4

PRG4: CJNE R3,0,PRG41

MOV A,B

MOV 43H,A

MOV R0,#40H ;设置求平均值子程序入口参数

LCALL MYSUB1

MOV 54H,R1

LCALL PYJ

INC R2

LJMP L3

PRG41: MOV A,B

CJNE R3,3,PRG42

MOV 40H,A

AJMP PRG44

PRG42: CJNE R3,2,PRG43

MOV 41H,A

AJMP PRG44

PRG43: CJNE R3,1,PRG44

MOV 42H,A

PRG44: DEC R3

LJMP L4

PRG5: CJNE R3,0,PRG51

MOV A,B

MOV 47H,A

MOV R0,#44H ;设置求平均值子程序入口参数

LCALL MYSUB1

MOV 55H,R1

LCALL PYJ

INC R2

Page 335: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·326·

LJMP L3

PRG51: MOV A,B

CJNE R3,3,PRG52

MOV 44H,A

AJMP PRG54

PRG52: CJNE R3,2,PRG53

MOV 45H,A

AJMP PRG54

PRG53: CJNE R3,1,PRG54

MOV 46H,A

PRG54: DEC R3

LJMP L4

PRG6: CJNE R3,0,PRG61

MOV A,B

MOV 4BH,A

MOV R0,#48H ;设置求平均值子程序入口参数

LCALL MYSUB1

MOV 56H,R1

LCALL PYJ

INC R2

LJMP L3

PRG61: MOV A,B

CJNE R3,3,PRG02

MOV 48H,A

AJMP PRG64

PRG62: CJNE R3,2,PRG63

MOV 49H,A

AJMP PRG64

PRG63: CJNE R3,1,PRG64

MOV 4AH,A

PRG64: DEC R3

LJMP L4

PRG7: CJNE R3,0,PRG71

MOV A,B

MOV 4FH,A

MOV R0,#4CH ;设置求平均值子程序入口参数

LCALL MYSUB1

Page 336: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·327·

MOV 57H,R1

LCALL PYJ

INC R2

LJMP L3

PRG71: MOV A,B

CJNE R3,3,PRG72

MOV 4CH,A

AJMP PRG74

PRG72: CJNE R3,2,PRG73

MOV 4DH,A

AJMP PRG74

PRG73: CJNE R3,1,PRG74

MOV 4EH,A

PRG74: DEC R3

LJMP L4

END

中断服务程序:

ORG 4200H

MYINT0: PUSH A ;保护现场

PUSH DPH

PUSH DPL

SETB PSW.3 ;指定工作寄存器区

CLR PSW.4

MOV DPH,#22H ;读转换数据

MOV A,R2

MOV DPL,A

MOVX A,@DPTR

MOV B,A ;保存转换数据

POP DPL ;恢复现场

POP DPH

POP A

RETI ;中断返回

求平均值子程序:采集 4 次求平均。

子程序名:MYSUB1

子程序功能:求连续 4 个单元的数据平均值

入口参数:4 个单元的首地址在 R0 中

Page 337: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·328·

出口参数:求出的平均值放在寄存器 R1 中。

ORG 4300H

MYSUB1: PUSH R0 ;保护现场

PUSH R1

PUSH A

PUSH B

MOV R1,#3 ;设置计数值

CLR C

MOV B,#0

MOV A,@R0 ;取第一个采集数据

SUB0: INC R0 ;指向下一个采集数据地址

ADDC A,@R0 ;求和

JBC C,SUB2 ;有进位高 8 位加 1

SUB1: DJNZ R1,SUB0 ;4 个数都加完了吗?未加完继续

MOV R1,A ;加完了保存低 8 位

SJMP SUB3

SUB2:ADD B,1

SUB3: CLR C ;除以 4

MOV A,B

RRC A

MOV B,A

MOV A,R1

RRC A

MOV R1,A

MOV A,B

RRC A

MOV A,R1

RRC A

MOV R1,A ;平均值保存在 R1 中

POP B ;恢复现场

POP A

POP R1

POP R0

RET ;返回

判越界及报警处理子程序:

子程序名:PYJ

子程序功能:判断各通道所采集的数据是否越界,越界进行报警处理,否则直接返回。

入口参数:通道号在 R2 中,各通道平均值在 50H~57H 单元,各通道界限值杂在 58H~

60H 单元。

Page 338: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·329·

出口参数:无

ORG 5000H

PYJ: MOV A,R2 ;散转处理

RL A

MOV DPTR,#PYJTAB

JMP @A+DPTR

PYJTAB: AJMP PYJ0 ;转道 0 通道判越界程序段

AJMP PYJ1 ;转道 1 通道判越界程序段

AJMP PYJ2 ;转道 2 通道判越界程序段

AJMP PYJ3 ;转道 3 通道判越界程序段

AJMP PYJ4 ;转道 4 通道判越界程序段

AJMP PYJ5 ;转道 5 通道判越界程序段

AJMP PYJ6 ;转道 6 通道判越界程序段

AJMP PYJ7 ;转道 7 通道判越界程序段

PYJ0: CLR C

MOV A,R1 ;取平均值

SUBB A,58H ;判断是否小于下限

JC PYJ01 ;越界(小于下限)转到报警处理程序段

MOV A,R1 ;取平均值

SUBB A,59H ;判断是否大于上限

JC PYJ04 ;不大于上限转到 PYJ04

MOV DPTR,#228H ;否则,报警处理

MOV A,#20H

MOVX @DPTR,A ;输出较小的模拟量作为调节信号

INC DPTR

MOVX @DPTR,A

JMP PYJ02 ;对应指示灯闪烁 10 次

PYJ01: MOV DPTR,#228H ;输出较大的模拟量作为调节信号

MOV A,#0F0H

MOVX @DPTR,A

INC DPTR

MOVX @DPTR,A

PYJ02: MOV R5,#10 ;对应指示灯闪烁 10 次

PYJ03: MOV P1,#0FFH

MOV R4,#0FFH

DJNZ R4,$

MOV P1,#0FEH

MOV R4,#0FFH

DJNZ R4,$

Page 339: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·330·

DJNZ R5,PYJ03

PYJ04: RET ;返回

PYJ1: MOV A,R1 ;取平均值

SUBB A,5AH ;判断是否大于上限

JC PYJ12 ;不大于上限,返回

MOV R5,#10 ;对应指示灯闪烁 10 次

PYJ11: MOV P1,#0FFH

MOV R4,#0FFH

DJNZ R4,$

MOV P1,#0FDH

MOV R4,#0FFH

DJNZ R4,$

DJNZ R5,PYJ11

PYJ12: RET ;返回

PYJ2: MOV A,R1

SUBB A,5BH

JC PYJ22

MOV R5,#10

PYJ21: MOV P1,#0FFH

MOV R4,#0FFH

DJNZ R4,$

MOV P1,#0FBH

MOV R4,#0FFH

DJNZ R4,$

DJNZ R5,PYJ21

PYJ22: RET

PYJ3: MOV A,R1

SUBB A,5CH

JC PYJ32

MOV R5,#10

PYJ31: MOV P1,#0FFH

MOV R4,#0FFH

DJNZ R4,$

MOV P1,#0F7H

MOV R4,#0FFH

DJNZ R4,$

DJNZ R5,PYJ31

PYJ32: RET

PYJ4: MOV A,R1

Page 340: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·331·

SUBB A,5DH

JC PYJ42

MOV R5,#10

PYJ41: MOV P1,#0FFH

MOV R4,#0FFH

DJNZ R4,$

MOV P1,#0EFH

MOV R4,#0FFH

DJNZ R4,$

DJNZ R5,PYJ41

PYJ42: RET

PYJ5: MOV A,R1

SUBB A,5EH

JC PYJ52

MOV R5,#10

PYJ51: MOV P1,#0FFH

MOV R4,#0FFH

DJNZ R4,$

MOV P1,#0DFH

MOV R4,#0FFH

DJNZ R4,$

DJNZ R5,PYJ51

PYJ52: RET

PYJ6: MOV A,R1

SUBB A,5FH

JC PYJ62

MOV R5,#10

PYJ61: MOV P1,#0FFH

MOV R4,#0FFH

DJNZ R4,$

MOV P1,#0BFH

MOV R4,#0FFH

DJNZ R4,$

DJNZ R5,PYJ61

PYJ62: RET

PYJ7: MOV A,R1

SUBB A,60H

JC PYJ72

MOV R5,#10

Page 341: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·332·

PYJ71: MOV P1,#0FFH

MOV R4,#0FFH

DJNZ R4,$

MOV P1,#07FH

MOV R4,#0FFH

DJNZ R4,$

DJNZ R5,PYJ71

PYJ72: RET

主程序中,等待中断采用延时程序段: MOV R7,#0FFH

HERE:DJNZ R7,HERE

假设系统主频率为 6MHz~12 MHz ,那么,一个机器周期为 0.5 s ~1 s ,由于

HERE:DJNZR7,HERE 这条指令占用两个机器周期,则这两句延时程序的延时时间至少

有 256 s ~512 s ,而 ADC0809 的转换时间约为 100 sµ ,因此能确保每次等待到转换结束

后中断信号的到来。

说明:

(1)各芯片端口地址分配

ADC0809: 220H~227H

DAC0832: 228H~229H

(2)各通道数据存储区分配:使用单片机内部数据存储单元。

IN0: 30 H~33H

IN1: 34 H~37H

IN2: 38 H~3BH

IN3: 3CH~3FH

IN4: 40H~43H

IN5: 44 H~47H

IN6: 48 H~4BH

IN7: 4C H~4FH

(3)各通道采集数据平均值存储单元分配:使用单片机内部数据存储单元。

IN0~IN7 分别对应 50H~57H

(4)各通道界限值存储单元分配:使用单片机内部数据存储单元。

IN0: 下限值 X0min 占用 58H

IN0: 上限值 X0max 占用 59H

IN1~IN7 上限值分别保存在 5A~60H 单元

堆栈区设在 65H~7FH(单片机内部数据存储单元)。

设各通道界限值分别设置为:

IN 0:X0min=10H

X0max=F0H

IN1 max=E8H

Page 342: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·333·

IN2 max=E0H

IN3 max=D8H

IN4 max=D0H

IN5 max=C8H

IN6 max=C0H

IN7 max=B8H

5.方案论证

本方案使用 TSC 实验箱,这是因为它所提供的资源完全能满足题目要求,并且连接可

靠,调试方便。

(1)对 ADC0809 提供模拟输入的方法是有效利用 TSC 的硬件资源,而没有外加电路。

因为这既不影响对 ADC0809 的掌握,又熟悉了 DAC0832 的使用,同时还简化了设计。

(2)ADC0809 以中断请求的方式向 CPU 提供转换结束信号,CPU 在中断服务程序中读

入转换数据。这种方案使系统软件设计灵活,而且,使用的是单片机本身的资源,提高了

CPU 的工作效率。

(3)DAC0832 有三种工作方式,这里接成双缓冲方式。双缓冲方式在软硬件设计上是

最复杂的一种。因此,采用这种方式有助于更好地掌握 DAC0832 的应用。

(4)用 8751 的 P1 口直接驱动发光二极管作为各模拟输入通道的指示灯,也可以用简

单接口,如锁存器/驱动器 74LS373 等,但那样要另加电路,而且也不灵活。

总之,本设计方案最简单易行。

6.调试过程(略)

7.运行结果(略)

8.收获体会(略)

【例 2】智能函数发生器设计与开发

1.设计内容:以单片机 8031 为核心,利用 D/A 转换器,编程产生锯齿波、脉冲波、

正弦波、三角波、直流信号五种输出波形。

2.主要设备与器材:PC 机一台,TSC 实验箱一个。

3.设计要求

(1)能输出上述五种波形。

(2)系统控制:开关 K0 闭合或 K0— K4 都不闭合时输出直流电压;K1 闭合时输出脉

冲电压;K2 闭合时输出锯齿电压;K3 闭合时输出三角电压;K4 闭合时输出正弦电压;K5

闭合时信号幅度改为 2.3V(不包括正弦波);K6 闭合时信号幅度改为 3.5V(不包括正弦波);

K7 闭合时信号幅度改为 4.7V(不包括正弦波)。

(3)所有波形的频率均为 1KHz,且正弦波的幅度为固定的 5V。

(4) INT1 接一正脉冲产生电路并用按钮控制,按下该按钮开始运行程序,再按一次

则停止运行程序。

Page 343: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·334·

4.设计方案

(1)硬件原理框图(如图 3-11)

DAC0832

8751

开 ��

ALE 锁存器

脉冲产生电路

P0口

P1口

模拟输出

-12V

+12V

INT1

图 3-11 硬件原理框图

说明:本设计方案选用 TSC 实验箱,利用实验箱上的资源可以很方便地实现设计要求。

D/A 转换器使用实验箱上的 DAC0832,其后接运算放大器,将输出的电流信号转换为电

压信号。为简化设计,本例要求输出的是固定频率的信号,因此可不用 LED 显示。使用 8031

内部定时器实现定时。

(2)原理电路图(如图 3-12)

����������� ���� ����� �� ������������ �������������������������������������

����� � ����������������������� �� ��� �����

��� ������������ ������������������ �������������� !�� !���������������� �� ��������������������������������� �������������������������� � � �� � � �� � �� � �� � �� � �� � ����! �������������� �� �� � �� ��� ��� ��� ����"!� #$% �� #$%�� ���������������� ���� �� ��� ����� ���

图 3-12 原理电路图

工作原理说明:

CPU 检测 P1 口开关状态,根据开关状态的不同产生不同的波形。产生直流电压的具体

实现方法是先后给 DAC0832 的两级写入同一个数字量(如 0FFH)。获得其他输出波形的具

体方法是:按不同波形的规律每隔一定时间先后给 DAC0832 第一级和第二级锁存器写入一

个不同的数字量,即可在输出端经运算放大器转换得到所需波形的模拟电压信号。用 8751

Page 344: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·335·

内部定时器来控制信号频率,即给定时器写入不同初值,就改变了写入 DAC0832 两个数据

之间的时间间隔,这样就改变了频率。

各器件端口地址的产生由实验箱上的译码电路得到:DAC0832 的端口地址为 228H~

22FH,使用其中任何两个连续的地址就可以了。

(3)软件流程图(如图 3-13、3-14 所示)

图 3-13 软件流程图

图 3-14 软件流程图

上述工作原理实际上也表明了软件的整体思路,现将主程序及各模块的流程图绘制如

下。

说明:

DAC0832 接成双缓冲方式。

为了简化编程,规定除了直流电压和脉冲电压外,其它波形的每个周期由 20 个点的数

据构成,即每个周期有 20 个点的时间间隔,由于 2.3V 对应的数字量为 120,3.5V 对应的

Page 345: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·336·

数字量为 178,4.7V 对应的数字量为 240,所以它们的数据表如下:

2.3V 对应的数据表:

锯齿波0、6、12、18、24、30、36、42、48、54、60、66、

72、78、84、90、96、102、108、114、120

三角波0、12、24、36、48、60、72、84、96、108、120、

108、96、84、72、60、48、36、24、12、0

3.5V 对应的数据表:

锯齿波0、9、18、27、36、45、54、63、72、81、90、99、

108、117、126、135、144、153、162、171、180

三角波0、18、36、54、72、90、108、126、144、162、180、

162、144、126、108、90、72、54、36、18、0

4.7V 对应的数据表:

锯齿波0、12、24、36、48、60、72、84、96、108、120、132、

144、156、168、180、192、204、216、228、240

三角波0、24、48、72、96、120、144、168、192、216、240、

216、192、168、144、120、96、72、48、24、0

正弦波 5V 对应的数据表:

128、88、53、24、6、0、6、24、53、88、128、168、203、232、250、

255、250、232、203、168、128

(4)程序清单

主程序:

ORG 4000H ;设置起始地址

LJMP BEGIN

ORG 0013H ;设置外部中断 1 入口地址

LJMP INT1

ORG 4100H ;设置主程序入口地址

BEGIN:MOV SP,#30H ;设置堆栈指针

CLR PSW.3 ;指定工作寄存器区

CLR PSW.4

MOV TMOD,#00001001B ;设置定时器工作方式

Page 346: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·337·

CLR TR0 ;不启动定时器

SETB PX1 ; INT1 设置为高级中断

CLR IT1 ; INT1 设置为边沿触发

CLR PSW.5 ;置用户标志 F0=“0”

MOV P1,#0FFH ;设置 P1 为输入口

MOV P3,#0FFH ;设置 P3 为输入口

BEGIN0: MOV A,P3 ;查询 INT1 是否为 0

ANL A,#08H

CJNE A,#0,BEGIN0 ;不为 0(中断到来)转 BEGIN0

SETB EX1 ;为 0,则允许 INT1 中断并开始执行程序

BEGIN1: MOV A,P1 ;读 P1 口开关状态

MOV B,A ;保存开关状态

ANL A,#01H ;K0 闭合了吗?

CJNE A,#0,BEGIN2 ;否,转 BEGIN2

LJMP PROG0 ;是,转 PROG0

BEGIN2: MOV A, B ;取开关状态

ANL A,#02H ;K1 闭合了吗?

CJNE A,#0,BEGIN3 ;否,转 BEGIN3

LJMP PROG1 ;是,转 PROG1

BEGIN3: MOV A, B ;取开关状态

ANL A,#04H ;K2 闭合了吗?

CJNE A,#0,BEGIN4 ;否,转 BEGIN4

LJMP PROG2 ;是,转 PROG2

BEGIN4: MOV A, B ;取开关状态

ANL A,#08H ;K3 闭合了吗?

CJNE A,#0,BEGIN5 ;否,转 BEGIN5

LJMP PROG3 ;是,转 PROG3

BEGIN5: MOV A, B ;取开关状态

ANL A,# 10H ;K4 闭合了吗?

CJNE A,#0,BEGIN6 ;否,转 BEGIN6

LJMP PROG4 ;是,转 PROG4

LJMP BEGIN1 ;开关 K0~K4 均未闭合,转

BEGIN1

ORG 4200H

PROG0: MOV DPTR,#228H

;产生直流电压的程序段。指针指向 D/A 转换器第一极地址

MOV A,P1 ;读开关状态

MOV R2,A ;保存开关状态

Page 347: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·338·

ANL A,#80H ;K7 闭合了吗?

CJNE A,#0,PROG01 ;否,转 PROG01

MOV A,#240 ;是,则输出 4.7V 直流电压

PROG00: MOVX @DPTR,A ;开始进行数/模转换

INC DPTR

MOVX @DPTR,A

LJMP BEGIN1 ;跳回到 BEGIN1

PROG01: MOV A,R2 ;取开关状态

ANL A,#40H ;K6 闭合了吗?

CJNE A,#0,PROG02 ;否,转 PROG02

MOV A,#180 ;是,则输出 3.5V 直流电压

LJMP PROG00

PROG02: MOV A,#120 ;输出 2.3V 电压

LJMP PROG00

PROG1: MOV A,#0 ;产生脉冲电压的程序段,设置数据初值

MOV TH0,#0FEH ;给定时器 T 0 写初值

MOV TL0,#0CH

SETB TR0 ;启动定时器

MOV DPTR,#228H ;数/模转换

MOVX @DPTR,A

INC DPTR

MOV @DPTR,A

PROG11: MOV C,TF0 ;定时到了吗?

JNC PROG11 ;否,继续查询 T0 中断标志

MOV A,P1 ;是,读开关状态

MOV R2,A ;保存开关状态

ANL A,#80H ;K7 闭合了吗?

CJNE A,#0,PROG14 ;否,转 PROG14

MOV A,#240 ;是,则输出 4.7V 脉冲电压

PROG12: MOV DPTR,#228H ;数/模转换

MOVX @DPTR,A

INC DPTR

MOVX @DPTR,A

MOV TH0,#0FEH ;给定时器 T0 写初值

MOV TL0,#0CH

SETB TR0 ;启动定时器

PROG13: MOV C,TF0

JNC PROG13

LJMP BEGIN1

Page 348: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·339·

PROG14: MOV A,R2

ANL A,#40H ;K6 闭合了吗?

CJNE A,#0,PROG15 ;否,转 PROG15

MOV A,#180 ;是,则输出 3.5V 脉冲电压

LJMP PROG12

PROG15: MOV A,#120 ;输出 2.3V 脉冲电压

LJMP PROG12

PROG2: MOV A,P1 ;产生脉冲电压的程序段,检测开关状态

MOV R3,A ;保存开关状态

ANL A,#80H ;K7 闭合了吗?

CJNE A,#0,PROG23

MOV DPTR,#TAB1

PROG20: MOV R1,#20H

MOV R0,#0

PROG21: MOV A,R0

MOV TH0,#0FFH ;给定时器 T 0 写初值

MOV TL0,#0CEH

SETB TR0 ;启动定时器

MOV A,@A+DPTR

PUSH DPH

PUSH DPL

MOV DPTR,#228H ;数/模转换

MOVX @DPTR,A

INC DPTR

MOVX @DPTR,A

PROG22: MOV C,TF0

JNC PROG22

INC R0

POP DPL

POP DPH

DJNZ R1,PROG21

LJMP BEGIN1

PROG23: MOV A,R3

ANL A,#40H ;K6 闭合了吗?

CJNE PROG24

MOV DPTR,#TAB2

LJMP PROG20

PROG24: MOV DPTR,#TAB3

LJMP PROG20

Page 349: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·340·

PROG3: MOV A,P1

MOV R3,A ;保存开关状态

ANL A,#80H ;K7 闭合了吗?

CJNE A,#0,PROG33

MOV DPTR,#TAB4

PROG30: MOV R1,#20H

MOV R0,#0

PROG31: MOV A,R0

MOV TH0,#0FFH ;给定时器 T 0 写初值

MOV TL0,#0CEH

SETB TR0 ;启动定时器

MOV A,@A+DPTR

PUSH DPH

PUSH DPL

MOV DPTR,#228H ;数/模转换

MOVX @DPTR,A

INC DPTR

MOVX @DPTR,A

PROG32: MOV C,TF0

JNC PROG32

INC R0

POP DPL

POP DPH

DJNZ R1,PROG31

LJMP BEGIN1

PROG33: MOV A,R3

ANL A,#40H ;K6 闭合了吗?

CJNE PROG34

MOV DPTR,#TAB5

LJMP PROG30

PROG34: MOV DPTR,#TAB6

LJMP PROG30

PROG4: MOV A,P1

MOV R3,A ;保存开关状态

ANL A,#80H

CJNE A,#0,PROG43

MOV DPTR,#TAB7

PROG40: MOV R1,#20H

MOV R0,#0

Page 350: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·341·

PROG41: MOV A,R0

MOV TH0,#0FFH ;给定时器 T 0 写初值

MOV TL0,#0CEH

SETB TR0 ;启动定时器

MOV A,@A+DPTR

PUSH DPH

PUSH DPL

MOV DPTR,#228H ;数/模转换

MOVX @DPTR,A

INC DPTR

MOVX @DPTR,A

PROG42: MOV C,TF0

JNC PROG42

INC R0

POP DPL

POP DPH

DJNZ R1,PROG41

LJMP BEGIN1

TAB1: DB 0、6、12、18、24、30、36、42、48、54、60、66、72、78、84、90

DB 96、102、108、114、120

TAB2: DB 0、12、24、36、48、60、72、84、96、108、120、108、96、84、72

DB 60、48、36、24、12、0

TAB3: DB 0、9、18、27、36、45、54、63、72、81、90、99、108、117、126

DB 135、144、153、162、171、180

TAB4: DB 0、18、36、54、72、90、108、126、144、162、180、162、144、126

DB 108、90、72、54、36、18、0

TAB5: DB 0、12、24、36、48、60、72、84、96、108、120、132、144、156

DB 168、180、192、204、216、228、240

TAB6: DB 0、24、48、72、96、120、144、168、192、216、240、216、192、168

DB 144、120、96、72、48、24、0

TAB7: DB 128、88、53、24、6、0、6、24、53、88、128、168、203、232、250

DB 255、250、232、203、168、128

BEGIN6:NOP

END

中断服务程序 INT1:

ORG 4800H

INT1: PUSH A

MOV C,PSW.5

Page 351: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·342·

JBC INT11

SETB PSW.5

POP A

POP B

POP B

SJMP BEGIN6

INT11: POP A

POP B

POP B

LJMP BEGIN1

RETI

频率控制的软件实现:设系统主频率 f�=12MHz。

脉冲波定时:要求脉冲波频率 f=1KHz,则周期 T=1ms,定时时间间隔 t=0.5ms。选用

定时器 T�,工作在方式 1(16 位定时器/计数器方式),

由 ×−= )2( 16 xt 机器周期0

16 12)2(

fx ×−= (其中, x 为计数初值)

得, CHFEft

x 065036101212

105.065536

1265536 6

3

0 ==×××−=×−=−

锯齿波、三角波、正弦波定时:f=1KHz,则周期 T=1ms,定时时间间隔 t=(1/20)

ms=0.05ms。选用定时器 T�,工作在方式 1(16 位定时器/计数器方式),

同理得 FFCEHft

x ==×××−=×−=−

65486101212

1005.065536

1265536 6

3

0

5.方案论证

本设计在硬件上充分利用了 PC 机和 TSC 实验箱的资源,使系统简单、可靠。但在软件

实现上,为简化起见,没有要求在屏幕上显示波形和连续改变频率和幅度等,若在课程设

计时条件和时间允许的话,可增加这些功能。

6.调试过程(略)

7.运行结果(略)

8.收获体会(略)

Page 352: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·343·

附录 1 实用子程序

子程序一 十六进制数到 ASCII 码的转换

【实现方法】

凡小于 10 的十六进制数的数码(即 0、1、2、3、4、5、6、7、8、9)转换为它的 ASCII

码就加 30H,凡大于等于 10 的十六进制数的数码(即 A、B、C、D、E、F)转换为它的 ASCII

码就加 37H。

入口参数:R0(高四位的值为 0,低四位的值为十六进制数的数码 0~F 中的一个);

出口参数:R1(相应的 ASCII 码)。

【参考程序】

HASC: MOV A,R0

ADD A,#0F6H ;判断十六进制数属于 0~9 还是 A~F?

JNC ADD30H

ADD A,#07H

ADD30H: ADD A,#30H

MOV R1,A

RET

子程序二 ASCII 码到十六进制数的转换

【实现方法】

Page 353: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·344·

若是 0、1、2、3、4、5、6、7、8、9 的 ASCII 码,则减去 30H,若是 A、B、C、D、E、

F 的 ASCII 码,则减去 37H,便得到与它相对应的十六进制数 0~9 或 A~F。

入口参数:R0(0~9 或 A~F 的 ASCII 码);

出口参数:R0(高四位为 0,低四位的值为 0~9 或 A~F);

【参考程序】

ASCH: MOV A,R0

CLR C

SUBB A,#30H

MOV R0,A

SUBB A,#10

JC OUT

MOV A,R0

SUBB A,#07H

MOV R0,A

OUT: RET

子程序三 单字节十六进制数到 BCD 码的转换

【实现方法】

将单字节十六进制数(即在 0~255 之间)除以 100 的百位 BCD 码,余数除以 10 得十

位 BCD 码,再得到余数为个位 BCD 码。

入口参数:R0(8 位无符号二进制整数);

出口参数:R7(百位)、R6(十位、个位)存放三位 BCD 码;

【参考程序】

B�BCD: MOV A,R0

MOV B,#100

DIV AB ;求百位 BCD 码

MOV R7,A

MOV A,B

MOV B,#10

Page 354: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·345·

DIV AB ;求十位 BCD 码

SWAP A

ADD A,B

MOV R6,A

RET

子程序四 单字节 BCD 码到十六进制数的转换

【实现方法】

将高位 BCD 码乘以 10 加上低位 BCD 码。

入口参数:R0(BCD 码);

出口参数:R1(8 位无符号二进制整数);

【参考程序】

BCD�B: MOV A,R0

ANL A,#11110000B ;取高位 BCD 码

SWAP A

MOV B,#10

MUL AB

MOV R2,A

MOV A,R0

ANL A,#00001111B ;取低位 BCD 码

ADD A,R2

MOV R1,A

RET

子程序五 单字节 BCD 码到 ASCII 码的转换

【实现方法】

任何一位 BCD 码加上 30H 即可转换为它的 ASCII 码

Page 355: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·346·

入口参数:R0(BCD 码);

出口参数:R1(BCD 码的高四位的 ASCII 码)、R2(BCD 码的低四位的 ASCII 码)

【参考程序】

CDASC: MOV A,R0

MOV R3,A

ANL A,#11110000B

SWAP A

ADD A,#30H ;转换高位 BCD 码

MOV R1,A

MOV A,R3

ANL A,#00001111B ;转换低位 BCD 码

ADD A,#30H

MOV R2,A

子程序六 ASCII 码到 BCD 码的转换

【实现方法】

将 ASCII 码减去 30H,结果为 0~9 的,则为所求的 BCD 码,结果小于 0 或大于 9 的结

果单元送 0FFH。(即当 30H≤ASCII 码≤39H,才能得到与它对应的 BCD 码)

入口参数:R0(ASCII 码);

出口参数:R1(低四位为所求 BCD 码);

【参考程序】

ASCBCD: MOV A,R0

CLR C

SUBB A,#30H

MOV R1,A

JC NOBCD ;ASCII 码小于 30H,则无 BCD 码

SUBB A,#10

JC OUT ;30H≤ASCII 码≤39H,则有 BCD 码

NOBCD: MOV R1,#0FFH

Page 356: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·347·

OUT : RET

子程序七 单字节二进制定点数到浮点数的转换

【实现方法】

把定点数作为浮点数的尾数,定点数的位数作为阶码值,然后进行格式化。

入口参数:R0(定点数);

出口参数:R1(尾数);R2(阶码)。

【参考程序】

START: MOV R2,#08H

MOV A,R0

JNB 0E7H,ZS ;判断累加器 A 中的数是正数还是负数?

FS : JNB 0E6H,OUT ;判负数的次高位是否为 0?

CLR C

RLC A ;左规

DEC R2

AJMP FS

ZS: JB 0E6H,OUT ;判正数的次高位是否为 1?

CLR C

RLC A ;左规

DEC R2

AJMP ZS

OUT: MOV R1,A ;保存结果

RET

子程序八 双字节二进制数循环左移一位

【实现方法】

本子程序实现的功能就是将一个双字节二进制数循环左移一位。

Page 357: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·348·

入口参数:R7(高字节)、R6(低字节)

出口参数:R7(高字节)、R6(低字节)

【参考程序】

DBRL: CLR C

MOV A,R6

RLC A ;R6 最高位移入 C

MOV R6,A

MOV A,R7

RLC A ;C 移入 R7 最低位,R7 最高位移入 C

MOV R7,A

MOV A,R6

ADDC A,#00H ;将 C 移入 R6 的最低位

MOV R6,A

RET

子程序九 双字节 BCD 码循环左移一位

【实现方法】

本程序实现的功能就是将双字节 BCD 码循环左移一位(注:这里的“一位”是指一位

BCD 码即 4 个二进制位)。

入口参数:R7(高字节)、R6(低字节)

出口参数:R7(高字节)、R6(低字节)

【参考程序】

BCDRL: MOV A,R6

SWAP A

MOV R0,A

ANL A,#11110000B

MOV R6,A ;低字节低位移入低字节高位

MOV A,R0

ANL A,#00001111B

Page 358: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·349·

MOV R0,A ;低字节高位保存在 R0 中

MOV A,R7

SWAP A

ANL A,#11110000B

ORL A,R0

XCH A,R7;低字节高位移入高字节低位,高字节低位移入高字节高位

SWAP A

ANL A,#00001111B

ORL A,R6

MOV R6,A ;高字节高位移入低字节低位

RET

子程序十 单字节二进制定点数求补

【实现方法】

对 R0 中的二进制定点数变反加 1 便得到其补码。

入口参数:R0

出口参数:R0

【参考程序】

BINPL: MOV A,R0

CPL A ;取反

INC A ;加 1

MOV R0,A

RET

子程序十一 单字节 BCD 码求补

【实现方法】

使用的原理是单字节 BCD 码与其补码的和为 100。

Page 359: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·350·

入口参数:R0

出口参数:R0

【参考程序】

BCDPL: CLR C

MOV A,#9AH

SUBB A,R0

DA A ;校正

MOV R0,A

RET

子程序十二 多字节无符号数加法

【实现方法】

从低位字节开始加。

入口参数:R0(被加数低位字节地址指针);R1(加数低位字节地址指针);

R2(字节数);

出口参数:R0(和值低位字节地址指针);R2(和值字节数);

【参考程序】

MDBAD: MOV A,R0 ;复制保存地址指针

MOV R3,A

MOV A,R2

MOV R7,A ;控制循环次数

CLR C ;清 C

LOOP: MOV A,@R0

ADDC A,@R1 ;相加

MOV @R0,A

INC R0 ;修改地址指针

INC R1

DJNZ R7,LOOP

JNC LAR ;做完加法,判断是否有进位

Page 360: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·351·

INC R2

MOV @R0,#01H

LAR: MOV A,R3 ;恢复地址指针

MOV R0,A

RET

子程序十三 多字节无符号数减法

【实现方法】

从低字节位开始减,最后如果 C=0,则表示结果为正;否则结果为负。

入口参数:R0(被减数低位字节地址指针);R1(减数低位字节地址指针);

R2(字节数);

出口参数:R0(差值低位字节地址指针);R2(差值字节数)

【参考程序】

MSUB: CLR 07H ;正负标志清零

MOV A,R0 ;复制保存地址指针

MOV R3,A

MOV A,R2

MOV R7,A

CLR C

LOOP: MOV A,@R0

SUBB A,@R1

MOV @R0,A ;做减法,存差值

INC R0 ;修改地址指针

INC R1

DJNZ R7,LOOP

JNC LOOP0 ;做完减法,判断正负

SETB 07H ;正负标志置位

LOOP0: MOV A,R3 ;恢复地址指针

MOV R0,A

RET

Page 361: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·352·

子程序十四 双字节无符号数乘法

【实现方法】

双字节无符号数乘法,通常可以分解成 4 次单字节相乘,才可利用乘法指令。

入口参数:R2(被乘数的高字节)R3(被乘数的低字节)

R6(乘数的高字节) R7(乘数的低字节)

出口参数:R4、R5、R6、R7

(R2 R3)

× (R6 R7)

(R3*R7)��(R3*R7)��(R2*R7)���(R2*R7)��(R3*R6)���(R3*R6)��

+(R2*R6)�(R2*R6)��R4 R5 R6 R7

【参考程序】

DMUL: MOV A,R3

MOV B,R7

MUL AB ;R3×R7

XCH A,R7

MOV R5,B

MOV B,R2

MUL AB ;R2×R7

ADD A,R5

MOV R4,A

CLR A

ADDC AB

MOV R5,A

MOV A,R6

MOV B,R3

MUL AB ;R3×R6

ADD A,R4

XCH A,R6

Page 362: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·353·

XCH A,B

ADDC A,R5

MOV R5,A

MOV F0,C

MOV A,R2

MUL AB ;R2×R6

ADD A,R5

MOV R5,A

CLR A

MOV ACC.0,C

MOV C,F0

ADDC A,B

MOV R4,A

RET

子程序十五 单字节有符号数乘法

【实现方法】

先把补码形式的乘数和被乘数转变成原码,作无符号数乘法,然后再把积转换成补码。

入口参数:R2(被乘数);R3(乘数)。

出口参数:R3(积高位);R2(积低位)。

【参考程序】

DBSMUL: MOV A,R2 ;求被乘数的符号

ANL A,#80H

MOV R4,A

JZ NEG1

NEG0: MOV A,R2 ;对负数被乘数求补

CPL A

INC A

MOV R2,A

NEG1: MOV A,R3 ;求乘数的符号

ANL A,#80H

MOV R5,A

Page 363: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·354·

JZ SMUL

MOV A,R3 ;对负数乘数求补

CPL A

INC A

MOV R3,A

SMUL: MOV A,R4 ;求积的符号

XRL A,R5

MOV R4,A

MOV A,R2 ;求积的绝对值

MOV B,R3

MUL AB

MOV R2,A

MOV R3,B

MOV A,R4

JZ OUT

NEG01: MOV A,R2 ;积求补

CPL A

ADD A,#01H

MOV R2,A

MOV A,R3

CPL A

ADDC A,#00H

MOV R3,A

OUT: RET

子程序十六 单字节有符号数除法

【实现方法】

把补码形式的除数和被除数变成原码, 作无符号数除法,然后再把商转换成补码

入口参数:R2(被除数);R3(除数)

出口参数:R2(商);R3(余数)

【参考程序】

DBSDIV: MOV A,R2

Page 364: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·355·

ANL A,#80H ;求被除数的符号

MOV R4,A

JZ NEG1

NEG0: MOV A,R2 ;对负数被除数求补

CPL A

INC A

MOV R2,A

NEG1: MOV A,R3 ;求除数的符号

ANL A,#80H

MOV R5,A

JZ SDIV

MOV A,R3 ;对负数除数求补

CPL A

INC A

MOV R3,A

SDIV: MOV A,R4 ;求商的符号

XRL A,R5

MOV R5,A

MOV A,R2 ;求商的绝对值

MOV B,R3

DIV AB

MOV R2,A

MOV R3,B

MOV A,R5

JZ NEG3

NEG2: MOV A,R2 ;商求补

CPL A

INC A

MOV R2,A

NEG3: MOV A,R4

JZ OUT

MOV A,R3

CPL A

INC A

MOV R3,A

OUT: RET

Page 365: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·356·

子程序十七 单字节 BCD 码加法

【实现方法】

BCD 码加法即先求和再对运算结果进行二~十进制调整。

入口参数:R0(被加数),R1(加数)。

出口参数:R7(高字节)、R6(低字节)为和值。

【参考程序】

BCDADD: MOV A,R0

ADD A,R1

DA A ;十进制加法调整

MOV R6,A

CLR A

ADDC A,#00H

MOV R7,A

RET

子程序十八 单字节 BCD 码减法

【实现方法】

因为 MCS-51 没有十进制减法调整指令,只有十进制加法调整指令,所以先将减数进行

十进制求补,把减法变成加法,然后用十进制加法调整指令来调整运算结果,所得到的是

十进制补码形式的差值,注意:C=1 表示差值为正,C=0 表示差值为负。

入口参数:R0(被减数)、R1(减数);

出口参数:R2(补码形式的差值);

Page 366: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·357·

【参考程序】

BCDSUB:CLR C

MOV A,#9AH

SUBB A,R1 ;对减数求补

ADD A,R0

DA A ;十进制加法调整

MOV R2,A

RET

子程序十九 半字节 BCD 码乘法

【实现方法】

将累加器 A 中高/低半字节的 2 个一位 BCD 码数相乘,乘积仍以 BCD 码数的形式返回累

加器 A。

入口参数:A(高/低半字节分别为乘数和被乘数);

出口参数:A(BCD 码形式的积)。

【参考程序】

BCDM:MOV R0,A ;暂存数据

ANL A,#00001111B ;取累加器中的低位 BCD 码

MOV B,A

MOV A,R0

ANL A,#11110000B ;取累加器中的高位 BCD 码

SWAP A

MUL AB ;求积

MOV B,#10 ;将乘积转换成 BCD 码

DIV AB

SWAP A

ORL A,B

RET

Page 367: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·358·

子程序二十 单字节数据移入片内 RAM 区

【实现方法】

本程序将 R2 中的单字节新数据移入片内 RAM 的某个数据区,假设该数据区首地址在

R0 中,数据区长度在 R3 中。

【参考程序】

LOOP: MOV A,R2

MOV @R0,A ;将新数据移入地址指针单元

INC R0 ;修改地址指针

DJNZ R3,LOOP

RET

子程序二十一 单字节数据移入扩展 RAM 区

【实现方法】

它移入的原理,同子程序二十。假设扩展数据区首址为#TABLE,数据区长度在 R3 中,

新数据在 R2 中。

【参考程序】

BEGIN: MOV DPTR,#TABLE

LOOP: MOV A,R2

MOVX @DPTR,A ;将新数据移入地址指针单元

INC DPTR ;修改地址指针

DJNZ R3,LOOP

RET

子程序二十二 片内 RAM→片内 RAM 数据块复制

Page 368: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·359·

【实现方法】

R0:源数据区首地址;R1:目的数据区首地址;

R3:数据块长度。

【参考程序】

LOOP: MOV A,@R0

MOV @R1,A ;传递数据

INC R0 ;修改地址指针

INC R1

DJNZ R3,LOOP

RET

子程序二十三 片内 RAM→扩展 RAM 数据块复制

【实现方法】

R0:源数据区首址; DPTR:目的数据块首址;

R7:数据块长度。

【参考程序】

LOOP: MOV A,@R0

MOVX @DPTR,A ;传递数据

INC R0 ;修改地址指针

INC DPTR

DJNZ R7,LOOP

RET

子程序二十四 扩展 RAM→扩展 RAM 数据块复制

Page 369: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·360·

【实现方法】

R3(高)、R2(低):源数据区首址。

R5(高)、R4(低):目的数据区首址。

R6:数据块长度。

【参考程序】

LOOP:MOV DPH,R3

MOV DPL,R2

MOVX A,@DPTR ;把源数据送给累加器 A

INC DPTR

MOV R2,DPH

MOV R3,DPH ;修改源地址指针,为下一个字节的传送做准备

MOV DPH,R5

MOV DPL,R4

MOVX @DPTR,A ;把累加器中的数据送给目的存储区

INC DPTR

MOV R4,DPL

MOV R5,DPH ;修改目的地址指针,为下一个字节的传送做准备

DJNZ R6,LOOP

RET

子程序二十五 找单字节无符号最大数

【实现方法】

入口参数:R0(存放数据块的首址指针),R7:(字节数)

出口参数:R2(数据块中的最大数)

Page 370: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·361·

【参考程序】

MAX: DEC R7

MOV A,@R0

LOOP0: MOV R3,A ;取数据块的第一个数据作为最大数送给 R3

INC R0

CLR C

SUBB A,@R0

JNC LOOP1 ;(A)大于(@R0)则转向 LOOP1

MOV A,@R0 ;交换数据

SJMP LOOP2

LOOP1: MOV A,R3

LOOP2: DJNZ R7,LOOP0 ;循环

MOV R2,A

RET

Page 371: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·362·

附录 2 MCS-51 系列单片机

汇编语言程序上机调试过程

8031 特殊功能寄存器

1.P0(地址 80H)

D7 D0

87 86 85 84 83 82 81 80

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

2.P1(地址 90H)

D7 D0

A7 A6 A5 A4 A3 A2 A1 A0

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

3.P2(地址 0A0H)

D7 D0

97 96 95 94 93 92 91 90

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

4.P3(地址 0B0H)

D7 D0

B7 B6 B5 B4 B3 B2 B1 B0

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

5.TMOD(地址 89H)

Page 372: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·363·

6.TCON(地址 88H)

7.SCON(地址 98H)

8.PCON(地址 87H )

Page 373: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·364·

9.IE(地址 0A8H)

10.IP(地址 0B8H)

11.PSW(地址 0D0H)

Page 374: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·365·

8255A 命令和状态寄存器

1.方式选择控制字寄存器

2.端口 C 按位置位/复位控制字

3.方式 1 输入状态字(读 C 通道)

4.方式 1 输出状态字(读 C 通道)

Page 375: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·366·

5.方式 2 状态(读 C 通道)

D7 D6 D5 D4 D3 D2 D1 D0

OBFA INTE1 IBFA INTE2 INTRA

A 组 B 组

(取决于设置成方式 0 还是方式 1)

8155 命令和状态寄存器

1.8155 命令寄存器

2.8155 状态标志寄存器

D7 D6 D5 D4 D3 D2 D1 D0

× TIMER INTE�BF�INTR�INTE�BF�INTR�INTR:中断请求 INTE:端口中断允许

BF:缓冲器满标志 TIMER:定时中断

Page 376: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·367·

8279 命令、数据、状态格式

1.8279 命令

(1)键盘/显示器方式设置

D7 D6 D5 D4 D3 D2 D1 D0

0 0 0 D D K K K

D D(即 D4D3 为显示方式控制位),其定义如下:

K K K(即 D2D1D0 为键盘工作方式控制位),其定义如下:

D2 D1 D0 工作方式

0 0 0

0 0 1

0 1 0

0 1 1

1 0 0

1 0 1

1 1 0

1 1 1

外部译码扫描键盘,双键互锁

内部译码扫描键盘,双键互锁

外部译码扫描键盘,N 键依次读出

内部译码扫描键盘,N 键依次读出

外部译码扫描传感器阵列

内部译码扫描传感器阵列

选通输入,外部译码扫描显示

选通输入,内部译码扫描显示

(2)时钟编程命令

D7 D6 D5 D4 D3 D2 D1 D0

0 0 1 P P P P P

根据外部输入 CLK 的频率,选择 P P P P P 的值(2-31 范围之内)来设定对外部 CLK

的分频数,以产生一个 100KHZ 的内部时钟。

(3)读 FIFO 传感器 RAM 命令

D7 D6 D5 D4 D3 D2 D1 D0

0 1 0 AI X A A A

AI:自动加 1 标志

D4 D3 显示方式

0 0

0 1

1 0

1 1

8 个八位字符显示:左端输入

16 个八位字符显示:左端输入

8 个八位字符显示:右端输入

16 个八位字符显示:右端输入

Page 377: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·368·

X:任意

AAA:传感器 RAM 地址

(4)读显示器 RAM 命令

D7 D6 D5 D4 D3 D2 D1 D0

0 1 1 AI A A A A

AI:自动加 1 标志

AAAA:显示器 RAM 地址

(5)写显示器 RAM 命令

D7 D6 D5 D4 D3 D2 D1 D0

1 0 0 AI A A A A

AI:自动加 1 标志

AAAA:显示器 RAM 地址

(6)显示器禁止写入/消隐命令

D7 D6 D5 D4 D3 D2 D1 D0

1 0 1 X IW/A IW/B BL/A BL/B

IW/A:A 组显示写入屏蔽位,“1”被屏蔽。

IW/B:B 组显示写入屏蔽位,“1”被屏蔽。

BL/A:A 组显示消隐设置位,“1”被消隐。

BL/B:B 组显示消隐设置位,“1”被消隐。

(7)清除命令

D7 D6 D5 D4 D3 D2 D1 D0

1 1 0 C�C�C�CF CA

C�位定义

D4 D3 D2 清除方式

0 X 显示 RAM 全部清零

1 0 显示 RAM 清成 20H1

1 1 显示 RAM 全部置 1

0 不清除,(若 CA=1,则 D3、D2 仍有效)

CF=1:清除 FIFO 状态,中断请求复位

CA=1:总清,兼有 CD 和 CF 的功能

(8)结束中断出错方式设置命令

D7 D6 D5 D4 D3 D2 D1 D0

1 1 1 E X X X X

在传感器工作方式时,此命令复位 IRQ。

在设定键盘扫描 N 键轮回方式以后,如果 E=1,则 8279 以一种特定的错误方式工作。

2.数据格式

(1)被扫描键盘数据格式

Page 378: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·369·

D7 D6 D5 D4 D3 D2 D1 D0

CNTL SHIFT 扫 描 返 回

(2)传感器阵列数据格式

D7 D6 D5 D4 D3 D2 D1 D0

RL7 RL6 RL5 RL4 RL3 RL2 RL1 RL0

3.FIFO 状态字

D7 D6 D5 D4 D3 D2 D1 D0

DU S/E O U F N N N

FIFO RAM 中的字符数

F=1 时,表示 FIFO RAM 满

U=1 时,表示取空错

O=1 时,表示溢出错

传感器闭合,错误标志

显示器不可用

Page 379: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·370·

附录 3 MCS-51 系列单片机指令表

按照功能排列的指令表

数 据 传 送 指 令

对标志位影响序

号助记符 指令功能

时钟

周期 CY�AC OV P操作码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

MOV A,R��MOV A , direct

MOV A, @R��MOV A,#data

MOV R��, A

MOV R��,direct

MOV R��,�#data�MOV direct,A

MOV direct,R��MOV direct1 ,

direct2

MOV direct,@R��MOV direct,#data

MOV @R��, A

MOV @R�,direct

MOV @R�,#data

MOV DPTR,#data

MOVC A,@A+DPTR

MOVC A,@A+PC

MOVX A,@R��MOVX A,@DPTR

MOVX @R�, A

MOVX @DPTR, A

PUSH direct

POP direct

XCH A, R��XCH A, direct

XCH A, @R��XCHD A,@R�

A←(R�)�A←(direct)

A←(R�)A←data

R�←(A)�R�←(direct)

R��←data�direct←(A)

direct←(R�)�direct←(direct2)

direct←((R�))

direct←data

(R�)←(A)

(R�)←(direct)

(R�)←data

DPTR←data16

A←((A)+(DPTR))

A←((A)+(PC))

A←((R�))

A←((DPTR))

(R�)←(A)

(DPTR)←(A)

SP←(SP)+1,(SP)←(direct)

direct←((SP)),SP←(SP)-1

(A)←→(R�)�(A)←→(direct)

(A)←→((R�))

(A)�←→((R�))�

12

12

12

12

12

24

12

12

24

24

24

24

12

24

12

24

24

24

24

24

24

24

24

24

12

12

12

12

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

E8H~EFH

E5H

E6H, E7H

74H

F8H~FFH

A8H~AFH

78H~7FH

F5H

88H~8FH

85H

86H,87H

75H

F6H, F7H

A6H,A7H

76H , 77H

90H

93H

83H

E2H,E3H

E0H

F2H,F3H

F0H

C0H

D0H

C8H,CFH

C5H

C6H,C7H

D6H,D7H

Page 380: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·371·

算 术 运 算 指 令

对标志位影响序

号助记符 指令功能

时钟

周期 CY�AC OV P

操作码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

ADD A ,R��ADD A ,direct

ADD A ,@R��ADD A, #data

ADDC A, R��ADDC A, direct

ADDC A, @R��ADDC A,#data

SUBB A, R��SUBB A ,direct

SUBB A,@R�SUBB A, #data

INC A

INC R��INC direct

INC @R��INC DPTR

DEC A

DEC R��DEC direct

DEC @R��MUL AB

DIV AB

DA A

A←(A)+(R�)�A←(A)+(direct)

A←(A)+((R�))

A←(A)+data

A←(A)+(R�)+(CY)�A←(A)+(direct)+(CY)�A←(A)+((R��)+(CY)

A←(A)+data+(CY)�A←(A)-R�-(CY)�A←(A)-(direct)-(CY)

A←(A)-((R�))-(CY)

A←(A)-data-(CY)

A←(A)+1

R�←(R�)+1

direct←(direct) +1

(R�)←((R�))+1

DPTR←(DPTR)+1

A←(A)-1

R�←(R�)-1

direct←(direct)-1

(R�)←((R�))-1

BA←(A)×(B)

A÷B=A⋯⋯B

对 A 进行 BCD 调正

12

12

12

12

12

12

12

12

12

12

12

12

12

12

12

12

24

12

12

12

12

48

48

12

×

×

×

×

×

×

×

×

×

0

0

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

28H~2FH

25H

26H,27H

24H

38H~3FH

35H

36H,37H

34H

98H~9FH

95H

96H,97H

94H

04H

08H~0FH

05H

06H,07H

A3H

14H

18H~1FH

15H

16H, 17H

A4H

84H

D4H

Page 381: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·372·

逻辑运算和移位指令

对标志位影响序

号助记符 指令功能

时钟

周期 CY AC OV P操作码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

ANL A, R��ANL A, direct

ANL A, @R��ANL A, #data

ANL direct,A

ANL direct ,

#data

ORL A, R��ORL A, direct

ORL A, @R��ORL A,#data

ORL direct, A

ORL direct ,

#data

XRL A, R��XRL A, direct

XRL A,@R��XRL A, #data

XRL direct, A

XRL direct ,

#data

CLR A

CPL A

RL A�RR A�RLC A

RRC A

SWAP A

A←(A)∧(R�)�A←(A)∧(direct)

A←(A)∧((R�))

A←(A)∧data

direct←(direct)∧(A)

direct←(direct)∧data

A←(A)∨(R�)�A←(A)∨(direct)

A←(A)∨ (R�)A←(A)∨data

direct←(direct)∨A

direct←(direct) ∨data

A←(A)⊕(R�)�A←(A)⊕(direct)

A←(A)⊕((R�))

A←(A)⊕data

direct←(direct)⊕(A)

direct←(direct)⊕data

A←0

A←( )

A7

A0�

A7 A0�A�A�Cy �A�A�Cy

A7

~A4

A3

~A0

12

12

12

12

12

24

12

12

12

12

12

24

12

12

12

12

12

24

12

12

12

12

12

12

12

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

58H~5FH

55H

56H, 57H

54H

52H

53H

48H~4FH

45H

46H, 47H

44H

42H

43H

68H~6FH

65H

66H, 67H

64H

62H

63H

E4H

F4H

23H

03H

33H

13H

C4H

Page 382: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·373·

控 制 转 移 指 令

对标志位影响序

号助记符 指令功能

时钟

周期 CY�AC OV P操作码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

AJMP addr11

LJMP addr16

SJMP rel

JMP @A+DPTR

JZ rel

JNZ rel

CJNE A,direct ,

rel

CJNE A,#data,rel

CJNE@R��#data,rel

CJNE

R�,#data,rel

DJNZ R�,��rel

DJNZ direct,rel

ACALL addr11

LCALL addr16

RET

PC←(PC)+2,PC �~PC�←addr11

PC←addr16

PC←(PC)+2+rel

PC←(A)+(DPTR)

若(A)=0,则 PC←(PC)+2+rel

若(A)≠0,则 PC←(PC)+2

若(A)≠0,则 PC←(PC)+2+rel

若(A)=0,则 PC←(PC)+2

若(A)≠(direct),则 PC←(PC)+3+rel

若(A)=(direct),则 PC←(PC)+3

若(A)≥(direct),则 CY=0;否则,CY=1

若 A≠data,则 PC←(PC)+3+rel

若(A)=data,则 PC←(PC)+3

若(A)≥data,则 CY=0;否则,CY=1

若(R�)≠data,则 PC←(PC)+3+rel

若(R�)=data,则 PC←(PC)+3

若(R�)≥data,则 CY =0;否则,CY =1

若((R�))≥data,则 PC←(PC)+3+rel

若((R�))=data,则 PC←(PC)+3

若((R�))≥data,则 CY =0;否则,CY=1

若(R�)-1≠0,则 PC←(PC)+2+rel

若(R�)-1=0,则 PC←(PC)+2

若(direct)-1≠0,则 PC←(PC)+3+rel

若(direct)-1=0,则 PC←(PC)+2

PC←(PC)+2

SP←(SP)+1,(SP)←PC��SP←(SP)+1,(SP)←PC�PC �~PC�←addr11

PC←(PC)+3

SP←(SP)+1,(SP)←PC�SP←(SP)+1,(SP)←PC�PC �~PC�←addr16

PC�←((SP)),SP←(SP)-1

PC�←((SP)),SP←(SP)-1

24

24

24

24

24

24

24

24

24

24

24

24

24

24

24

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

&0(注)

02H

80H

73H

60H

70H

B5H

B4H

B8H~BFH

B6H,B7H

D8H~DFH

D5H

&1(注)

12H

22H

Page 383: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·374·

(续 表)

16

17

RETI

NOP

PC�←((SP)),SP←(SP)-1

PC�←((SP)),SP←(SP)-1

PC←PC+1 空操作

24

12

×

×

×

×

×

×

×

×

32H

00H

位操作指令

对标志位影响 操作码序

号助记符 指令功能

时钟

周期 CY�AC OV P

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

CLR C

CLR bit

SETB C SETB

bit CPL C

CPL bit

ANL C, bit

ANL C, /bit

ORL C, bit

ORL C, /bit

MOV C, bit

MOV bit, C

JC rel

JNC rel

JB bit, rel

JNB bit, rel

JBC bit, rel

CY←0�bit←0

CY←1

bit←1

CY← CY

bit←( bit )

CY←CY∧(bit)

CY←CY∧( bit )

CY←CY∨(bit)

CY←CY∨( bit )

CY←(bit)

bit←CY

若 CY =1,则 PC←(PC)+2+rel

若 CY =0, 则 PC←(PC)+2

若 CY =0, 则 PC←(PC)+2+rel

若 CY =1, 则 PC←(PC)+2

若(bit)=1,则 PC←(PC)+3+rel

若(bit)=0, 则 PC←(PC)+3

若(bit)=0,则 PC←(PC)+3+rel

若(bit)=1, 则 PC←(PC)+3

若(bit)=1,则 PC←(PC)+3+rel

且 bit←0

若(bit)=0, 则 PC←(PC)+3

12

12

12

12

12

12

24

24

24

24

24

24

24

24

24

24

24

×

1

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

C3H

C2H

D3H

D2H

B3H

B2H

82H

B0H

72H

A0H

A2H

92H

40H

50H

20H

30H

10H

注:√:表示对标志位产生影响;×:表示不影响标志位。

&0=a��a�a�00001B; &1= a��a�a�10001B。

Page 384: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·375·

附录 4 TMSD 多种语言调试程序

TMSD 是清华大学计算机工厂研制的多种语言调试程序,它是 TSC51/196 实验开发系统

的管理程序。目前,它支持 PLM96、PLM51、ASM96、ASM51、C96 五种语言调试,能自动识

别实验台上是 MCS51 系统还是 MCS196 系统,也能自动识别采用的是汇编语言还是 PLM 语言,

还是 C 语言,从而使用户能够在统一的界面下调试用户程序。

1 TMSD 启动

TMSD 启动是在 DOS 状态下进行的。当屏幕上出现了 DOS 提示符后,键入命令:TMSD

〈Enter〉即进入 TMSD 系统。命令中的〈Enter〉是指回车键。当屏幕出现 TMSD 字样时,

用户应打开 TSC-51/196 实验台电源,在实验台电源已打开的情况下应按下一个实验台上的

Reset 键。然后在主机上按回车键。这时屏幕上提示用户选择通讯口,用户应根据实际连

接情况选择一个通讯口,选中后,再按一次〈Enter〉键,即进入 TMSD 系统。

TMSD 启动时可以有一个开关,供选择通讯口。例如用户键入命令

TMSD/1〈Enter〉

则表示使用通讯口 COM1,启动后 TMSD 不再显示通讯口选择屏幕。开关值可以为 1、2、

3 或 4,分别代表 COM1、COM2、COM3、COM4。

另外,TMSD 命令后可以带被调试的文件名。

例如:键入命令

TMSD/1 PLC24 〈Enter〉

则表示使用 COM1 进行主机和实验台之间的通讯,被调试程序为 PLC24.PLM 或

PLC24.ASM。为了便于识别,特作如下约定,汇编文件使用扩展名.ASM,PL/M 源文件使用

扩展名.PLM,在当前目录下不能有同名的汇编文件和 PL/M 语言源文件。例如当前目录下不

能既有 PLC24.PLM,又有 PLC.ASM。

2 TMSD 菜单简介

TMSD 启动后,屏幕顶部就会出现一个主菜单条,它是全局的菜单系统。TMSD 主菜单条

Page 385: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·376·

形式如下:

2.1 System(系统)菜单

·Open Program 打开一个原程序。该源程序必须被预处理过,只输入文件名,不输

入扩展名。执行此命令后源文件窗口打开,同时将目标文件装入 RAM,目标代码窗口显示

与源代码窗口相应的目标代码。

·Open Module 打开源代码中的一个模块。一般调试源语句时,如果采用跟踪调试,

则遇上模块时会自动打开调用的模块。此命令主要用于非跟踪的情况下,用户在自己需要

时打开想看的模块。

·Emulator 设置仿真参数。主要是确定是否仿真。如果采用仿真,是否出借给存储器。

实验台上的存储器以 16K 字节为一块出借给用户,并确定每一块出借给用户的存储器是供

用户作为 RAM 使用,还是作为 ROM 使用(对于 MCS196,只能做 RAM 使用)。

·Debug Mode 确定是源代码调试方式,还是目标代码调试方式,二者可以切换。系

统 TMSD 启动后,如没有打开源程序,自动进入目标代码调试方式。打开源程序后,自动进

入源代码调试方式。

·Select Board 该菜单项只用于一带四系统中。选中 Select Board 命令后,在屏

幕上出现一对话框。对话框分为左、右两大部分。左半部分 Board Choice 是选择哪些实

验台通讯,即通讯选择项。对话框右半部分 Board off-line 是选择哪些实验台进入小键

盘(脱机)工作方式,即脱机选择项,这是一个复选框,一次可以选择多台实验台进入脱

机工作方式。

·Status 显示当前系统状态。

·DosShell 临时退出 TMSD,返回 Command 控制下,进行用户希望的操作,如编辑,

列目录等操作。操作结束后,使用 EXIT DOS 命令返回到 TMSD 系统。

·Quit 退出 TMSD 系统,返回 DOS 系统。

2.2 Memory(存储器)菜单

·Dump 显示指定地址开始的 RAM 内容。

·Fill 向实验台上的 RAM 块填充内容。填充方式,可以是以数字方式,各数字用空格

分开,也可以是字符串,需要用单引号或者双引号括起来,例如“a癰癱癲 。

·Find 在指定的存储区中查找某一个字符串。用法与 Fill(填充)功能相同。

·Search again 查找下一个匹配的字符串。如果是在存储区内查找字符串,就显

示在存储区窗口的第一个位置。如果查找不到,则显示出相应的提示信息。

·Move 把存储区中一个块的内容传到另一个块去。

·Compare 比较两块存储区的内容,显示出两块中内容不一致的第一个地址及内容。

System Memory Register Run Debug Eprom Window Help

Page 386: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·377·

·Load 将一个.BEN 文件装入 RAM。指定文件名时需要键入其文件名和扩展名。如指

定的长度大于文件长度,则实际装入长度为文件长度。如指定的长度小于文件长度,则装

入长度为指定的长度。如不指定长度,直接键入回车,则按文件大小装入。指定装入地址

时,指定值可以小于 4000H(十六进制)。但小于 4000H 的部分,只能装入与中断向量区有

关的部分,小于 4000H 的其余部分不予装入(与监控程序冲突)。

·Save 将一块存储区内容保存在文件中。

·Save Disam Code 以符号反汇编形式(.ASM)或列表形式(.LST)将存储区内的

一段内容以文件形式保存在磁盘上。

·Disassemble from 对存储区的内容进行反汇编,显示在目标码窗口内。

·Assemble 从指定地址进行简单的汇编。

2.3 Register(寄存器)菜单

·Display 显示有关寄存器的内容。

·Add Register 增加显示的寄存器。

·Modify PC 删除指定的寄存器。

·Modify PSW 修改程序状态字。

·Write Register 修改寄存器内容。

·Set User Register 此功能在汇编时使用。给用户建立一组寄存器,AX、BX、CX、

DX。其中每个寄存器包含高八位和低八位。例如 AX 包含 AH、AL。用户在汇编时可以使用

这些符号。只能够用于 MCS196。

2.4 Run(运行)菜单

·Go 从当前 PC 启动程序运行。

·Step 单步执行。在源代码调试方式下,每次执行一条源语句。在目标代码调试方

式下每次执行一条指令。但在遇上子程序或过程时,不跟踪进子程序或过程中。

·Trace 跟踪执行,能够跟踪进过程或子程序。

·Run to Cursor 运行到光标。从当前 PC 指向的地址运行到光标所在的行。

·Set PC to Cursor 将程序计数器 PC 值设置到光标所在行。

·Reload 将源程序重新装入。此时 TMSD 使用上一次指定的文件名。

·Restart 将 PC 设置到程序入口处。

·Demostrate 以浏览方式执行程序。用户能够从屏幕上看到程序的执行过程。

2.5 Debug(调试)菜单

·Add Watch 在 Watch(监视)窗口增加被监视的变量。

·Delete Watch 删除被指定的变量,使其不出现在 Watch 窗口中。

Page 387: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·378·

·Delete All Watch 删除所有变量,使它们不出现在 Watch 窗口上。

·Toggle Breakpoint 断点乒乓开关。光标所在行如果不是断点,则将该行设置为

断点。

·Clear All Breakpoint 删除全部断点。

·List Breakpoint 列出全部断点。

·Evaluate 表达式计算。此功能可用于进行计算。例如计算 28*32/5,则显示 168(舍

掉小数点)。除此之外,还可以进行变量运算。

2.6 Eprom 菜单

·Check 检查 EPROM 是否为空。

·Read Eprom 读 EPROM 的内容。

·Program 对 EPROM 进行编程,即写 EPROM。

·Compare 将一个 EPROM 的内容读出来,与指定文件的内容比较。

2.7 Window(窗口)菜单

·Window 该子目录管理各窗口的放大、缩小、移动、变焦、关闭等操作

·Size/Move 对当前窗口进行移动或改变大小。

·Zoom 对当前窗口进行变焦操作。

·Close 关闭当前窗口。

·Next 使下一个窗口成为当前窗口。

·Previous 使上一个窗口成为当前窗口。所谓上一个窗口和下一个窗口指的是 TMSD

中规定的顺序。五个窗口的轮转顺序是 5、4、3、2、1、5、⋯。例如对 4 号窗口(监视窗

口)来讲,3 号窗口(寄存器窗口)是下一个窗口,5 号窗口(源代码窗口)是上一个窗口。

但屏幕上不满 5 个窗口时,则只是在顺序轮转中去掉没打开的窗口而已。例如,屏幕上只

有 1、3、5 号窗口时,轮转顺序为 5、3、1、5、⋯。

·Close All 关闭所有窗口。

2.8 Help(帮助)菜单

·Help 子目录中只有两个子菜单项。选择 Help Contents 子菜单项时,显示出 Help

主屏幕,通过↑、↓、→、←光标键将光标移至待选项内后或移动鼠标光点至待选项内后,

待选项则以反视频显示,按〈Enter〉键或鼠标左键则显示出相应内容。用户可以通过↑、

↓、→、←、〈PgUp〉、〈PgDn〉、〈Home〉、〈End〉等键翻阅完毕后按〈Esc〉退出。选择 Help

│About 子菜单项时,则屏幕上出现 TMSD 字样的标题屏幕,按〈Enter〉键或〈Esc〉键则

退出。

除了 Help 子目录外,按〈F1〉键,则屏幕上会出现有关的帮助信息,同样可以使用上

段中所提到的各种键翻阅这些信息。结束后按〈Esc〉键退出帮助状态。

Page 388: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·379·

附录 5 TMSD 环境下的上机步骤

上 机 步 骤

1.EDIT 编辑源程序

注意以下两点:

(1)在 TSC-51/196 实验开发系统中,为了统一程序存储器和数据存储器这两种芯片,

采用程序存储器和数据存储器统一编址的方法,存储空间为 64K,其中监控程序占用 16K,

用户空间为 48K。

存储空间分配如下:

0000H~3FFFH 监控程序

4000H~0FFFFH 用户程序或数据

所以,实际上实验台上的 RAM 区从 4000H 地址开始,因此,除了特殊功能寄存器、片

内 RAM 和中断向量区以外,低于 4000H 的内容实际上我们是不能使用的。我们在编制源程

序时,实际代码区和数据区都必须在 4000H 以上。值得注意的是:不同的单片机开发系统

有所不同,如 DVCC 单片机开发系统就没有这样规定。我们解决的方法是:使用 ORG 定位伪

指令将程序实际的开始地址置在 4000H 以上。

例如: ORG 4000H

LJMP MAIN

MAIN:⋯

(2)必须将我们编辑的源程序保存为以 ASM 为后缀名的文件。

2.对源程序进行预处理

为了方便我们对源程序进行预处理,厂家提供了 A51.BAT 这个批处理文件。我们可以

使用它对源程序进行预处理,但应注意:用它处理源程序时不能带扩展名。

例如:用 A51.BAT 处理 T1.ASM 源程序时,可键入命令:

A51 T1 <Enter>

而不能键入命令:

Page 389: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·380·

A51 T1.ASM <Enter>

第二种情况会产生错误。

3.实验连线

4.启动 TMSD 进行程序调试

(1)读入程序

方法一:在 DOS 下键入 TMSD 命令的同时带上被调试文件名。

例如:

TMSD T01 <Enter>

方法二:在 DOS 状态下键入 TMSD<Enter>即进入 TMSD 系统,选择 System|Open Program

子菜单项,系统会弹出一个会话框,要求输入程序名(不输入扩展名 M51),也可直接选择

文件名。

(2)启动运行程序

TMSD 的主菜单中,选择 Run|Go 子菜单项或按<F9>。在程序运行的过程中,可以按空

格键<SPACE>停止程序的执行,也可按<CTRL+B>键,但后一种方法要求用户按实验台上的复

位键<RESET>以复位。

上机过程举例

MCS-51 单片机 P1 口实验

【实验内容】

P1 口做输入口,接 8 个钮子开关,以实验台上的 74LS273 做输出口,编写程序读取开

关状态,将此状态,在发光二级管上显示出来。

【实验目的】

1.学习 P1 口的使用方法。

2.学习延时子程序的编写和使用。

【实验说明】

P1 口为准双向口,P1 口的每一位都能独立的定义为输入线或输出线,作为输入的口线,

必须向锁存器相应位写入‘1’,该位才能作为输入。8031 中所有 P1 口锁存器在复位时均

Page 390: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·381·

置为‘1’,如果后来的口锁存器写入过‘0’,在需要时应写入一个‘1’,使它再成为输入。

先按要求编好程序并调试成功后,可将 P1 口锁存器中置‘0’,此时将 P1 口做输入口,

看看会有什么结果。再来看一下延时子程序的实现。常用的有两种方法,一种是用定时器

中断来实现,另一种是用延时子程序实现(即循环程序)来实现。在系统时间允许的情况

下可以采用后一种方法。

本实验系统晶振为 6.144MHZ,则一个机器周期为 T=12×(1/6.144MHZ)。现要写一个

延时 0.1S 的程序,可大致写出如下:

MOV R7,#255;(1)

DEL1: MOV R6,#X ;(2)

DEL2: DJNZ R6,DEL2 ;(3)

DJNZ R7,DEL1 ;(4)

上面 MOV、DJNZ 指令均需要两个机器周期,所以每执行一条指令需要 2T,现求出 X 值:

(X×2T +2T+ 2T)×255 +2T=0.1S

指令(3) (2)(4) (1)

把 T 带入等式可以计算出 X=98

【实验原理图】

P1.78031

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

+5V

GN

D

K1 K2 K3 K4 K5 K6 K7 K8

2K*8

L1 L2 L3 L4 L5 L6 L7 L8

D0

D1

D2

D3

D4

D5

D6

D7

18 3 17 4 7 14 8 1311

122 16 5 6 15 919

RE

SET

4.7K

CS2

WR’

74L

S02

74LS04

+5V

U4 74LS273

011 012 013 014 015 016 017 018

Page 391: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·382·

【实验连线】

P1.0~P1.7 接钮子开关 K1~K8;74LS273 的 011~018 接发光二极管 L1~L8;74LS273

的片选信号(CS4)接 08~0F 端此时 74LS273I/O 端口地址为 1B08H。

【流程图】

MCS-51 单片机 P1 口实验的上机步骤如下:

第一步:通读实验题目、要求、以及相关内容,并且根据流程图编写程序。以下用 EDIT

编辑的参考程序,并保存为 T1.ASM

参考程序 T1.ASM

PORT273 EQU 1B08H

ORG 4000H

START: MOV P1,#0FFH ;设置 P1 为输入口

LOOP: MOV A,P1 ;从 P1 口读入开关状态

MOV DPTR,#PORT273

MOVX @DPTR,A ;从 74LS273 输出到发光二极管

LCALL DEL ;调用延时子程序

LJMP LOOP ;循环

DEL: MOV R7,#255 ;延时子程序(0.1S)

DEL1: MOV R6,#98

DEL2: DJNZ R6,DEL2

程序 1 入口

P1 口锁存器置‘1’

输入开关状态

输出显示

Page 392: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·383·

DJNZ R7,DEL1

RET

END

第二步:对 T1.ASM 进行预处理

即:A51 T1<Enter>

第三步:实验连线

第四步:启动 TMSD 进行程序调试

1.读入程序

即:TMSD T1 <Enter>

2.运行程序

TMSD 的主菜单中,选择 Run|Go 子菜单项或按<F9>

Page 393: 单片机原理及应用 - idl.hbdlib.cnidl.hbdlib.cn/book/00000000000000/pdfbook/018/017/101777.pdf本书内容共分为三大部分,第一部分为单片机原理及应用,主要是理论教学内容。它

·384·

参 考 文 献

1.贾金玲.微型计算机原理与接口技术课程设计指导.重庆:重庆大学出版社,2001.12.

2.李洪伟.可编程单片机外围芯片 PSD 的原理及应用.北京:电子工业出版社,2003.1.

3.万福君.单片微机原理系统设计与应用.合肥:中国科学技术大学出版社,2003.7.

4.何立民.单片机应用系统的功率接口技术.北京:北京航空航天大学出版社,1993.3.

5.张仕斌.单片机原理及应用.北京:高等教育出版社,2003.7.

6.雷霖.微机自动检测与控制系统设计.北京:电子工业出版社,2003.4.

7.陈伟人.MCS-51 系列单片机实用子程序集锦.北京:清华大学出版社,1994.2.

8.马家辰.MCS-51 单片机原理及接口技术.哈尔滨:哈尔滨工业大学出版社,1998.9.

9.沙占友.单片机外围电路设计.北京:电子工业出版社,2003.6.

10.清华同方股份有限公司、教学仪器设备公司.TSC-51/98 单片机实验开发系统教

师用实验指导书.2001.6.