单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,...

203
新世纪高职高专教改项 目成果教材 单片机技术实用教程 蔡谷明 梁先宇 编著 高等教育出版社

Upload: others

Post on 02-Aug-2021

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

新世纪高职高专教改项目成果教材

单片机技术实用教程胡 锦 蔡谷明 梁先宇 编著

高等教育出版社

Page 2: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

内容提 要

本书以目前应用广泛的89 C51单片机为主线,系统介绍了其内部结构、功能、指令系统、定时/计数器、

中断系统、串行接口和并行接口,并根据高职高专教育的特点.融人了大量综合设计实例内容:为便于自学.

各章配有学习指导、小结、思考题与习题。

本书适用于高职高专、成人教育及在职工程技术人员学习和参考,亦可作为电子设计竞赛单片机内容培

训教材或自学用书。

图书在版编目 (CIP)数据

单片机技术实用教程/胡锦,蔡谷明,梁先宇编著.

一北京:高等教育出版社,2003.6

ISBN 7一04一012554一4

工.单一 II.①胡⋯②蔡,,·③梁⋯ ul.单片微

型计算机一高等学校:技术学校一教材 TV .TP368.1

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

出版发行 高等教育出版社

社 址 北京市西城区德外大街4号

邮政编码 100011

总 机 010一82028899

购书热线 010一64054588

免费咨询 800一810一0598

网 址 http : //www . he p . edu . cn

http: //www .hep . com . en

新华书店北京发行所

北京地质印刷厂

787 x 1092 1/16

12.75

300 000

2003年6月第 1版

2003年6月第 1次印刷

16.40元

本书如有缺页、倒页、脱页等质量问题,请到所购图书销售部门联系调换。

版 权 月斤有 ld眨权 X 究

Page 3: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

出版 说 明

为认真贯彻 《中共中央国务院关于深化教育改革全面推进素质教育的决定》和 《面向21

世纪教育振兴行动计划》,研究高职高专教育跨世纪发展战略和改革措施,整体推进高职高专

教学改革,教育部决定组织实施 《新世纪高职高专教育人才培养模式和教学内容体系改革与建

设项目计划》(教高 仁200川 3号,以下简称 《计划》)。《计划》的目标是:“经过五年的努力,

初步形成适应社会主义现代化建设需要的具有中国特色的高职高专教育人才培养模式和教学内

容体系。”《计划》的研究项目涉及高职高专教育的地位、作用、性质、培养目标、培养模式、

教学内容与课程体系、教学方法与手段、教学管理等诸多方面,重点是人才培养模式的改革和

教学内容体系的改革,先导是教育思想的改革和教育观念的转变。与此同时,为了贯彻落实

《教育部关于加强高职高专教育人才培养工作的意见》(教高 驻2000] 2号)的精神,教育部高

等教育司决定从2000年起,在全国各省市的高等职业学校、高等专科学校、成人高等学校以

及本科院校的职业技术学院 (以下简称高职高专院校)中广泛开展专业教学改革试点工作,目

标是:在全国高职高专院校中,遴选若干专业点,进行以提高人才培养质量为目的、人才培养

模式改革与创新为主题的专业教学改革试点,经过几年的努力,力争在全国建成一批特色鲜

明、在国内同类教育中具有带头作用的示范专业,推动高职高专教育的改革与发展。

教育部 《计划》和专业试点等新世纪高职高专教改项目工作开展以来,吝有关高职高专院

校投入了大量的人力、物力和财力,在高职高专教育人才培养目标、人才培养模式以及专业设

置、课程改革等方面做了大量的研究、探索和实践,取得了不少成果。为使这些教改项目成果

能够得以固化并更好地推广,从而总体上提高高职高专教育人才培养的质量,我化组织了有关

高职高专院校进行了多次研讨,并从中遴选出了一些较为成熟的成果,组织编写了一批 “新世

纪高职高专教改项目成果”教材。这些教材结合教改项目成果,反映了最新的教学改革方向,

很值得广大高职高专院校借鉴。

新世纪高职高专教改项目成果教材适用于高等职业学校、高等专科学校、成人高校及本科

院校举办的二级职业技术学院、继续教育学院和民办高校使用。

高等教育出版社

2002年 11月 30日

Page 4: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

前 . -

Intel公司的MCS-51系列单片机因具有全双工串行通信接口、定时/计数器等独特的功能

而被市场认可。ATMEL公司的89C x x系列单片机继承了MCS-51单片机的内核,管脚及指

令完全兼容,并与Flash存储器技术有机地结合在一起,以其优良的性价比获得了十分广泛的

应用。本书将以89C51为主线,系统地介绍其功能、结构、指令、接口的应用及综合设计等。

对PIC单片机也作了简要介绍。

本书根据作者多年的单片机教学和科研实践经验,结合电子设计竞赛单片机方面内容的培

训,从初学者角度出发,对单片机知识的介绍由浅入深,由点到面。在介绍单片机功能结构

时,紧紧把握 “如何与单片机接口,如何编写程序”这二个令学生困惑的环节,通过大量的系

统组成和应用程序编写实例,使学生在逐步掌握单片机系统知识的基础上,培养学生分析问

题、解决问题的能力,提高学生的动手能力和创新能力。本教材语言简洁,通俗易懂,不仅适

用于高职高专和成人教育,亦适用于对计算机结构了解不深的工程技术人员。

本书是在教育部 “高职高专教育电工课程教学内容体系改革、建设的研究与实践”(项目

编号IH31 - 1)课题组和高等教育出版社指导下编写完成的。胡锦同志编写第1章、第2章、

第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

李中发同志编写第9章,胡锦、蔡谷明负责全书的整理和统稿。参加本书编写工作的还有蔡

洁、谭双安、谢沙天、周少华、鲁萍等同志。

湖南大学彭楚武教授担任本书主审,并提出了许多宝贵的意见和建议。课题组院校对本书

的编写给予了大力支持。本书在编写过程中参考了有关作者的文献,在此一并表示诚挚的感

谢。由于编者水平有限,书中难免存在错漏或不妥之处,敬请读者指正。

编著者

2003年t月于岳麓山

Page 5: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

第1章 单片机基础知识·................. 1

1.1 概述·································⋯⋯ 1

1.1.1 微型计算机与单片机 ············⋯⋯ 1

1.1.2 89051系列单片机的结构特点···⋯⋯ 2

1.2 MCS一51与89C51···············⋯⋯ 2

1.3 89C51内部结构及功能部件 ···⋯⋯ 3

1.3.1 89051内部结构 ·······。··········⋯⋯ 3

1.3.2 主要功能部件 ··················⋯⋯ 3

1.4 CPU微处理器 ·····················⋯⋯ 4

1.4.1运算器 ···························⋯⋯ 4

1.4.2控制器 ···························⋯⋯ 6

1.5 程序存储器与数据存储器······⋯⋯ 6

1.5.1 程序存储器 ····。················⋯⋯ 6

1.5.2 数据存储器 ·····················⋯⋯ 7

1.5.3 专用寄存器 SFR ........................ 8

本章小结 ·································⋯⋯9 思考题与习题 ················,··········⋯⋯ 9

第2章 单片机基本系统 ·.............. 10

2.1 单片机基本系统 ···············⋯⋯ 10

2.1.1 89051引脚 ···········,·········⋯⋯ 10

2.1.2 单片机基本系统 ···············⋯⋯ 11

2.1.3 输入/输出引脚····················一 12

2.1.4 控制线···························⋯⋯ 12

2.1.5 低功耗操作方式与电源控制

寄存器PCON ··················⋯⋯ 12

2.2 单灯闪烁与顺序点亮硬件设计 ⋯ 14

2.3 程序设计 ························⋯⋯ 15

2.3.1 基本指令 ························⋯⋯ 15

2.3.2 汇编语言源程序格式和伪指令 ⋯⋯ 17

2.3.3 程序设计 ················。·······⋯⋯ 17

2.4 源程序汇编 ·······················一 19

2.5 编程器的使用 (机器码固化) ⋯ 20

本章小结··································一 20

思考题与习题···························⋯⋯ 20

第3章 指令系统·.......................... 21

3.1 寻址方式 ··························一 21

3.2 指令系统简介 ······‘·····。···。·⋯⋯ 22

3.3 数据传送类指令 ·.................... 23

3.4 算术操作类指令 ·········。·····⋯⋯ 28

3.5 逻辑运算类指令 ···············⋯⋯ 犯

3.6 程序转移类指令 ···············⋯⋯ 36

3.7 位操作指令 ····。················⋯⋯ 40

3.8 秒表设计 ························⋯⋯ 43

本章小结·································⋯⋯46

思考题与习题 ······················,····⋯⋯ 47

第4章 定时/计数器及中断系统 ⋯48

4.1 定时/计数器 ·····················⋯⋯ 48

4.1.1 定时/计数器的功能结构 。·······一 48

4.1.2 定时/计数器的方式寄存器T1410D

和控制寄存器TGON············⋯⋯ 49

4.1.3 工作方式及工作编码 ·········⋯⋯ 50

4.1.4 定时/计数器的初始化 ·········⋯⋯ 52

4.2 中断系统 ························⋯⋯ 54

4.2.1 中断源与中断服务程序的人口

地址 ···························⋯⋯ 54

4.2.2 中断结构与中断允许寄存器IE及

中断优先级控制器IP ·········⋯⋯ 55

4.2.3 中断的响应与撤除 ·········。··⋯⋯ 57

4.2.4 使用中断方式完成程序功能的

步骤 ······················,····⋯⋯ 58

4.3 定时/计数器与中断的应用 ···⋯⋯ 58

4.3.1 秒表程序再设计 ···············⋯⋯ 58

4.3.2 简易数字频率计的制作·········⋯⋯ 62

本章小结·················,····,··········⋯⋯65

思考题与习题 ··················,········⋯⋯ 65

第5章 串行口与通信 ·................. 67

5.1 串行接口的功能与结构 ,·,·····一 67

5.2 串行口收发控制器scaly ............ 69

5.3 串行u通信波特率 ············⋯⋯ 70

5.4 串行口应用程序编写 ·········⋯⋯ 71

·工 ·

Page 6: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

5.4.1 串行口初始化 ········。···········一 71

5.4.2 串行口工作方式。的应用程序

编写 ·················。·········⋯⋯ 72

5.4.3 双机通信实验 ············,····‘⋯⋯ 72

5.5 串行通信的电平转换接口电路 一 74

5.5.1 RS一232电平转换接口电路 ·····一 74

5.5.2 RS-422电平转换接口电路 ···⋯⋯ 75

本章小结·...................................... 76

思考题与习题·················,⋯⋯”’‘””’76

第6章 并行1/0接口与应用·........ 77 6.1并行1/0接口的结构和功能 ⋯⋯ 77

6.2 程序存储器与数据存储器的

扩展 ·.................··。·。·······⋯⋯ 80

6.3 并行1/0口的扩展 ·................. 82

6.3.1 INTEL 8155/8156 ··············⋯ ⋯ 82

6.3.2 8155/8156与89C51的接口······⋯⋯ 86

6.4 4位 LED显示芯片M C14499与

单片机的接口 ···········。,·⋯⋯’二‘88

6.4.1 MC14499 ·······················⋯ ⋯ 88

6.4.2 MC14499与89C51的接口 ······⋯⋯ 90

6.5 8位 D/A转换芯片AD558与

单片机的接口 ··········,··。·一 “‘二91

6.6 12位A/ D转换芯片ADS774与

单片机的接口 ······。····。·一 ‘”二‘93

6.6.1 ADS774 ‘”””·⋯ ”‘””‘.””“”‘’93

6.6.2 ADS774与单片机的接口 (简易

数字电压表的制作) ·········⋯⋯ 98

本章小结 ···························,··⋯⋯ 102

思考题与习题 ···············,··⋯⋯‘’‘”’102

第7章 综合性设计实例 ·.............. 103

7.1 设计概要 ····················⋯⋯‘’·‘103

7.2 键盘扫描 ···········,············⋯⋯ 106

7.3 电子时钟 ········,··············⋯⋯ Ill

7.3.! DS12887 ··,··卜二,··卜·一 ’卜··,···⋯ ⋯ 111

7.3.2 电子时钟的设计 ··············。⋯⋯ 119

7.4 音视频信号矩阵切换 ·········⋯⋯ 121

7.4.1 MT8816 ··························一 122

7.4.2 音视频信号矩阵切换 ·········。··⋯ 123

7.5 视频字符显示 ···1。··,····,·····,二125

7.5! D6145C ······,·,二‘·⋯ ⋯ ’,·,··⋯ ’·125

7.5.2 D6145C与89C51的接1i与应用 ⋯ 130

7.6 水温控制系统 (1997年全国

大学生电子设计竞赛试题)。··⋯132

7.7 自动往返电动小汽车 (2001年全国

大学生电子设计竞赛试题) ⋯⋯ 139

7.8 ATMEL89系列单片机介绍 ···⋯⋯ 149

7.8.1 AT89CIO51与 AT89 C2051······⋯⋯ 149

7.8.2 AT89C52·····。·················⋯ ⋯ 150

本章小结 ·········,······⋯⋯’‘”‘.”“””154

思考题与习题 ························⋯⋯ 155

第8章 PIC16C5 x系列单片机⋯⋯ 156

8.1 PIC16C5 x性能特点············⋯⋯ 156

8.2 PIC16C5 x结构及引脚·········⋯⋯ 158

8.3 指令系统 ······················。·⋯⋯ 160

本章小结 ····························,·⋯⋯ 168

思考题与习题 ····················。···⋯⋯ 168

第9章 单片机开发工具··,··,····一 :69

9.1 概述 ·······················。,,·’·⋯”’‘169

9.2 开发系统简介 ···,················一 370

9.2.1 组成与功能·.......................... 170

9....2 仿真系统硬件的安装 ···。···。·⋯⋯ 171

9.3 集成调试软件的使用 ·········⋯⋯ 172

附录1 89C x x系列单片机按功能

排列的指令表 ····。···,⋯⋯‘”182

附录2 89C x x系列单片机按操作

码顺序排列的指令表···⋯⋯ 187

附录3 89C x x系列单片机专用寄

存器SFR一览表··········一 191

附录4 89C x x系列单片机加电或

复位后专用寄存器状态⋯⋯192

附录5 89C x x系列单片机型号

介绍··············,············⋯⋯ 193

参考文献··.·····⋯⋯,..⋯。....·····..⋯⋯195

Page 7: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

第1章 单片机基础知识

【学习指导】 本章介绍89051内部结构、功能,包括CPU原理、程序存储器、数据存储器配置、专用寄存器SFR以及程序计数器PC、堆找指针SP的概念

与作用。有些内容可以在学习后面有关章节时,回头深入体会:通过太章学习,

要求掌握:

1. 89C51的主要功能结构。

2. 89C51片内程序存储器的容量与地址分布,CPU访问时与引脚EA电平的关

系。

3. 89C51片内数据存储器RAM的容量与地址分布及三个功能区的划分。

4. 89C51专用寄存器SFR的功能与地址分布。

5.程序计数器PC及 SFR中A, B, PSW, SP, DPTR的功能。

1.1 概述

微型计算机与单片机

一台计算机主要由这样几部分组成:CPU(进行运算、控制)、程序存储器、数据存储器、

输入/输出设备 (串行、并行输人/输出口等)。在个人计算机中,这些部分被分成若干块芯片,

安装在一个称为主板的印制线路板上;而在单片机中,这些部分全部集成在一块电路芯片内,

所以称之为单片机 (单个芯片),也称为微控制器。购买一块计算机主板 (含CPU)需要几千

元,而一块单片机仅需几元到几十元。当然,其工作速度、处理能力不可能和计算机相比,但

由于其成本低、体积小,作为实时控制则具有很强的优越性。

Page 8: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

89C51系列单片机的结构特点

首先,89CS1系列单片机在存储器结构上,严格地将程序存储器 (ROM)和数据存储器

(RAM)在空间上分开,并使用不同的寻址方式和地址指针。ROM用来存放调试好的程序指

令、常数及数据表格,RAM则用来存放少量的随机数据。采用这种存储器结构主要考虑到单

片机的控制特点,即需要较大的程序存储空间和较小的随机数存储空间。由于集成度的限制,

在单片机内的存储器容量不会很大,但允许用户在片外扩展存储器。因此,CPU可以进行操作

的存储器可分为内部程序存储器、外部程序存储器及内部数据存储器、外部数据存储器。

单片机芯片上集成了很多的元器件,需要的引脚就很多,但由于工艺和成品率等原因,芯

片上的引脚又不能太多。为了解决实际允许的引脚数和需要的引脚数之间的矛盾,单片机的引

出线一般都设计为多功能型。每条引线在某一时刻起什么作用,由指令和机器状态决定。因

此,单片机对外并不存在专用的数据总线和地址总线,而是采用分时复用技术来解决片外数据

和地址的传送间题。

在单片机中,有21个颇具特色的特殊功能寄存器SFR。要理解单片机的工作原理,必须

对这些特殊功能寄存器的工作过程有清楚的了解。正是由于有了SFR,才使一个只有40个脚

封装的单片机系统的功能获得很大的扩充,并使 1/0口在程序的控制下具有第二功能。利用

SFR还可以完成对定时/计数器、串行口和中断的控制。

单片机的另一个特点是在其内部有一个全双工的串行接口,在程序的控制下,串行口能工

作于四种方式。用户可根据需要将它设定为移位寄存器方式,以扩充 1/0接口和外接同步输

人、输出设备;或用作异步通信接口,以实现双机或多机通信。因此,单片机能很方便地组成

分布式控制系统。 最后,在单片机内部有一个能进行独立操作的位处理器,它有自己的累加器以及可寻址的

RAM、特殊功能寄存器和1/0口,并设有专门的按位操作的指令。利用这些功能,可以方便地

进行组合逻辑设计和用软件模拟组合逻辑的功能,这一点在工业控制中十分有用。

以上介绍了单片机结构的主要特点,这些特点的掌握对后面内容的学习十分重要。

1.2 MCS一51与89C51

当前,彩电、空调、洗衣机均采用单片机控制,它们所使用的单片机都是专用型,即不能

互换或移作它用。通用型单片机品种很多,Intel公司的MCS一51和ATMEL公司的89系列单片

机是目前市场上性价比较好的流行品种。它们的功能、指令、管脚基本相同,主要差别在于

ROM与RAM,如表1.1所示 (Flash参见7.8节)。

8031, 8032片内无 ROM,需要外扩程序存储器;8051, 8052为片内掩膜 ROM,供一次程

序固化;8751, 8752为光可擦片内ROM,由于擦写不方便,厂家生产较少;ATMEL89C51,

89C52为Flash存储器,擦写方便,为市场流行品种。以下主要介绍89C51的结构功能及其应

用。

Page 9: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

表 1.1 MCS一51与 89C51存储器容量

单片机型号片内程序存储器 ROM 片内数据存储器 RAM 专用寄存器SFR

容量 (字节) 地址分布 容量 (字节) 地址分布 容量 (字节) 地址分布

8031 无 128 OOH 一7FH 128 80H 一FFH

8032 无 256 OOH 一FFH 128 80H 一FFH

8051 掩膜 4KB OOOOH ~OFFFH 128 OOH 一7FH 128 80H 一FFH

8052 掩膜 SKB OOOOH ~1FFFH 256 OOH ~FFH 128 80H 一FFH

8751 光可擦4KB OOOOH ~OFFFH 128 OOH 一7FH 128 80H ~FFH

8752 光可擦8KB OOOOH 一1FFFH 256 OOH ~FFH 128 80H 一FFH

89C51 F1ash4KB 0000171~OFFFH 128 OOH 一7FH 128 80H 一FFH

89C52 F1ash8KB OOOOH 一1FFFH 256 OOH 一FFH 128 80H ~FFH

1.3

1.3.1

89C51内部结构及功能部件

89C51内部结构

89C51内部结构方框图如图1.1所示,它包括CPU、存储器 (ROM, RAM), 1/0接口、定

时/计数器、中断控制器等。这些部件集成在一块芯片内,片内各功能部件通过内部总线相互

连接 。

INTO.INTI. T0j T11

中断控制器

4KB

ROM

128B

RAM

定时/计数器

C/T0, C/Tl

CPU

]OSC

XTAL1 XTAL2德翌再习}一平甲A工E PSEN RD WR PO P1 P2 P3 RXD TXD

图1.1 89C51结构方框图

1.3.2 主要功能部件

89C51的主要功能部件包括:

Page 10: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

1.8位CPU

2.片内振荡器:振荡频率0一24MHz (MCS一51为1.2一12MHz) o

3. 4KB片内Flash ROM,片内外程序存储器寻址范围64KB

4. 128B片内RAM,片外数据存储器寻址范围64KB o

5. 21个专用存储器C

6. 4个8位并行1/0接口:PO, PI, P2, P3 0

7. 1个全双工串行接口。

8. 2个16位定时了计数器C/TO, C/TI o

9. 5个中断源,可编为二个优先级。

10. 111条指令,含乘、除法各 1条。

11.单总线结构。

12.单一+5V电源。

1. 4 CPU微处理器

CPU又称微处理器,由运算器和控制器二部分组成。

1.4.1运算器

运算器由算术逻辑单元ALU及相关的专用寄存器组组成。

算术逻辑单元ALU在控制信号作用下可进行各种算术操作和逻辑操作,如加、减、加1,

减1、逻辑与、逻辑或、逻辑异或、循环移位、数据传送、程序转移等;在 B寄存器配合下,

可进行乘、除等操作。

专用寄存器组主要用于指示当前所执行指令的内存地址、存放操作数和指示指令执行后的

状态等,是 CPU不可缺少的部件。主要包括程序计数器PC,累加器A、程序状态寄存器PSW,

堆栈指针SP、数据指针DPTR和专用寄存器B}

1.程序计数器 PC

程序计数器PC在物理上是独立的,是不属于专用寄存器 SFR块的一个 16位专用寄存器,

其寻址范围为OOOOH一FFFFH (64KB),它是管理程序执行顺序的特殊功能寄存器。程序计数

器具有以下三种功能:

(1)复位功能:单片机有效复位时PC内容为OOOOH。

(2)计数功能:CPU取指令时,总是以PC内的内容作地址,依此地址从 ROM中取出指令

的机器码,然后PC的内容自动加 1}

(3)直接置位功能:程序有跳转时,将跳转的目标程序地址自动赋给PC;程序在调用或

产生中断时,原调用或中断的断口地址会自动压人堆栈,待调用返回或中断返回时,其堆栈保

留的PC断口地址自动从堆栈弹人 PC内。

2.累加器

Page 11: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

累加器A是一个最常用的专用寄存器,大部分操作指令的操作数取自累加器A,其运算结

果大多也存放于累加器A中。指令系统用A作累加器的助记符。

3.程序状态寄存器PSW

PS W是一个8位寄存器,包含了程序状态信息。各位含义如下,其中PSW.1未用。

CY一“CI FO一“S1」RSO一OV一一 ” (1) P (PSW.O)奇偶标志:表征累加器A中值 1的个数的奇偶性,1的个数为奇数时值为

1,否则为Oo

(2) OV (PSW.2)溢出标志:在带符号加减运算时,当运算结果超出A的带符号数 (2的

补码)表示范围 (一128- + 127)时,值为 1,否则为0;乘法运算时,积超过255时,OV为

1,否则为0;除法运算时,除数为0时,OV为 1,否则为Oo

(3) RS1, RSO (PSW.4, PSW.3):工作寄存器区选择控制位。

为00选择区0;为01选择区1;为10选择区2;为11选择区3;参见1.4.2节。复位后指

向工作寄存器区Oo

(4) FO (PSW.5)标志:留给用户使用,可由程序置1或清0,也可由程序测试FO以控制

程序流向。

(5) AC (PSW.6)辅助进位标志:当进行加法或减法操作而产生低4位向高4位进位或借

位时,AC =1,否则为0;

(6) CY (PSW.7)进位标志:当进行加法或减法操作而产生进位或借位时,CY = 1,否则

为0。在位操作中,被当作位累加器。

PSW复位值为OOH.

4.堆栈指针SP

SP是一个8位寄存器,能自动加1或减1,专门用来存放堆栈的栈顶地址,故称为堆栈指针。

何谓堆栈?计算机中的堆栈类似于商业中的货栈,是一个按照 “‘先进后出”或 “后进先

出”规律存取数据的RAM区域。这个区域可大可小,常称为堆栈区。89C51的片内RAM有

128字节,地址范围为OOH一7FH,这个区域可用作堆栈区,即作堆栈来使用。堆栈有栈顶和

栈底之分,栈底地址由SP复位值决定,SP复位值为07H,即栈底地址是07 H。栈顶地址由SP

实时值决定,即由SP指示,是变化的。因此,当堆栈空无数据时,SP实时值等于SP初始值,

堆栈中存放的数据越多,SP实时值越大,堆栈每压人一字节数据,SP加 卜 每弹出一字节数

据,SP减 1。由于片内RAM最高地址为7FH,所以SP实时最大值不能超过RAM区的7FH单

元。89C51片内RAM只有 128字节,为了留出一些空间来存放运算数据,不能划给堆栈太多空

间,因此,程序开始时,往往重新赋SP初值,如MOV SP, # 60H即将片内RAM区内60H

7FH单元留给堆栈用。

堆栈有什么作用?当程序调用子程序或产生中断时,原程序断点地址 PC值必须自动保

留,以便于从子程序或中断返回时,PC指针能自动获取断点 PC值。堆栈具备自动压人和自动

弹出断点PC值功能。当然,用压人或弹出指令,也可将现场数据临时存放在堆栈中。

5.数据指针 DPTR

5

Page 12: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

DPTR是一个16位二进制寄存器,由高8位DPH和低8位 DPL拼装而成。既可以作为 16

位寄存器使用,也可以作两个独立的8位寄存器使用。它可用来存放片内ROM区中数据地址

和片外RAM区地址。

6.寄存器B

在乘除运算指令中,用到了寄存器B。乘法指令的两个操作数分别取自A和B,相乘结果

高8位存于B中,低8位存于A中:其他指令,B可当作一般寄存器存取数据。

1.4.2 控制器

控制器包括指令寄存器、指令译码电路、定时控制电路等部件。在振荡器的基准时钟作用

下,从程序计数器PC所指示的程序存储器ROM地址内取出指令 (机器码),送指令寄存器,

再经指令译码电路产生各种相应的操作时序和控制信号。有关片外工作时序将在6.2节中予以

介绍。

1.5

1.5.1

程序存储器与数据存储器

程序存储器

程序存储器是存放程序机器码的地方,程序存储器只能用专用编程器对它擦除 (全1)和

重写,单片机正常运行时只能读取其机器码,不能擦除与改写。由于89C51的PC有16位,故

寻址范围为64 KB,程序存储器的编址从OOOOH开始,最大可至FFFFH,

程序存储器的编址规律:先片内,后片外,片内、片外连续,二者不可重叠。对片内有

ROM的芯片 (EA为高电平,参见2.1.5节),复位后先执行片内的程序,当程序超过4KB (51

子系列)或超过8KB (52子系列)时,将自动转去执行片外程序存储器中的程序。对片内无

ROM的8031与8032, EA引脚接低电平,此时只访问片外程序存储器。如图1.2所示。

FFFFH

-

一器

-

见于

-

-

-

-存

-

-

R

-据

-

-

-

卜了

-

~

1000H FFH

OFFFH80日

7卜H

0000H

程序存储器

图1.2 89C51存储器配置

Page 13: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

要注意的是,程序存储器有7个特殊单元,第一个为0000 H,由于单片机复位后PC的内

容为0000 H,故系统复位后从OOOOH开始执行程序。另外6个单元0003H, OOOBH, 0013H,

OOIBH, 0023H, 002BH为中断服务程序人口地址 (参见4.2.1节),所以主程序一般放在30H

开始的单元内,OOOO H放置一条跳转指令 (LJMP MAIN)即可。

1.5.2 数据存储器

数据存储器是用来存取运算数据的地方,单片机断电时,其存放的数据随之失去。数据存

储器在物理上和逻辑上分为二个地址空间,一个是片内RAM,访问时用MOB'指令;另一个是

片外RAM(外扩),访问时用MOVX指令。片内RAM的容量非常少,许多情况下,为了降低

成本,减小外扩芯片数量,而不外扩片外RAM。因此,熟悉和用好片内RAM非常重要。RAM

在物理上又分3个不同的块,如图1.3所示,OOH一7FH单元组成低128字节的RAM块;80H

一FFH单元组成高128字节的RAM块 (仅52子系列有);80H一FFH单元组成128字节的专用

寄存器块 (SFR) o

数据缓冲区 (仅89C52有) 专用寄存器SFR

FFH FFH

80H 80H

通。、存器区{ 位、址区{

7FH

30H

20H

工作寄存器

127 120

7 0

IR7

IRO 3区

R 7

IRO 2区

R7

RO 1区

R7

RO 0区 00H

图1.3 89051内部数据存储器

在52子系列中,高128字节的RAM块与SFR块的地址是重合的,因此,访问高128字节

RAM块时,用寄存器间接寻址方式,访问SFR块时则只能用直接寻址方式 (参见3.1节寻址

方式)。访问低 128字节RAM块时,两种方式都可采用。

低128字节RAM块又划为三个功能区。第一个功能区OOH一IFH共32字节,称为工作寄

存器区,其中OOH一07H, 08H一OFH, IOH一17H, 18H一IFH分别称为工作寄存器0区、I区、

2区、3区,用专用寄存器PS W (程序状态字)中的二位 PSW.4, PSW.3来确定使用哪一个工

作寄存器区。每个区含有8个8位的寄存器,分别取名为RO一R 7 ,:

Page 14: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

第二个功能区2011一2FH共 16字节,称为位寻址区。8位/字节x 16字节二128位,位地

址分别为OOH一7FH,如图1.4所示。RAM 地址

位寻址区

ZFH

2FH

2DH

ZCH

2BH

2AH

2911

2811

2711

26H

25H

24H

23日

22H

7F 7E 7D 7C 7B 7A 79 78

77 76 75 74 73 72 71 70

6F 6E 6D 6C 6B 6A 69 68

67 66 65 64 63 62 61 60

5F 5E 5D 5C 5B 5A 59 58

57 56 JJ 54 53}}52 51 50

4F 4E 4D 4C 43 4A 49114847 46 45 44 43 42 41 40

3F 3E 3D 3C 3B 3A 39 38

37 36 35 34 33 32 3} 30

21犷 2E 2D 2C 2B 2A 29 28

27 26 25 24 23 22 21 2e

IF IE lD IC IB 1八 19 I8117 16 15 1d 13 12 I1 l0

0F OE OD 0C OB 0A 09 O8

07 06 05 。、}103 02 01 00

3Fl(

2区

!区

0IK

H

H

11

]

0

只J

,1

]

1

1

1

H

H

H

H

n曰

F

︵X

,J

I

n

n口

卜比户

作寄存器区

图1.4 89C51 RAM内工作寄存器区与位寻址区

第三个功能区30H一7FH为通用数据缓冲区。

1.5.3 专用寄存器SFR

SFR是特殊用途的寄存器集合,主要用于控制管理片内算术逻辑部件、并行1/0口、串行

1/0口 、定时/计数器、中断系统等功能模块的工作。用户在编程时可以置数设定,但不能任

意移作它用。89C51的SFR有21个,89052有26个,间断分布在片内80H一FFH地址范围内,

访问时只能采用直接寻址方式 (参见附录3)。本章前面已介绍与运算器相关联的累加器A、寄

存器B、程序状态字PSW、堆栈指针SP、数据指针 DPTR等,对89051、余下的寄存器将在后

面章节作介绍。

Page 15: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

本 章 小 结

1. 89051为8位CPU,内部含有程序存储器、数据存储器及21个专用寄存器,还配置有4个8位 1/0口、

1个全双工串行通信口、2个 16位定时/计数器和5个中断源。

2. 89C51片内有4KB电可擦程序存储器,地址为OOOOH一OFFFHo

3. 89C51片内有 128字节的数据存储器,地址为OOH一7FH。分为三个功能区:OOH一1FH为4个工作寄存

器区 (每区8个字节,取名RO一R7), 20H一2FH为位寻址区,30H - 7FH为通用寄存器区。

4. 89C51有21个专用寄存器,间断分布在 80H一FFH地址区域内,主要用于控制管理算术逻辑部件、并

行1/0口、串行1/0口、定时/计数器、中断系统等功能模块的工作。

思考题与习题

MCS一51单片机有哪些种类?各有什么特点?

单片机的结构特点主要表现在哪些方面?

描述 89C51内部结构和功能。

89051片内程序存储器容量为多少?寻址范围为多少?

89C51片内RAM容量为多少?可分为哪几部分?各有什么特点?

89051中决定程序执行顺序的寄存器是哪一个?它是几位的寄存器?有什么功能?

描述 PS W各位的含义。

什么是堆栈?89C51的堆栈最大容量为多少?堆栈有什么功能?

Page 16: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

第2章 单片机基本系统半豁袭爷经失穷砂忿半峪冷架 弥泌做 轰橄报翱 嗯纷份班爷务邢 梢扮裕田陇舒 姗众像亲扮兴冷翰所沦袋分岑沙渊 《淡汤琢斑夜戈余份含翎 汾欲橄 锁帐银拟 扮斟屺令笼举 班妙 泞称冷拍招黔粥 花旅漩么称义招袱弱欲份火书咏匆嵌

【学习指导」 本章介绍89051基本系统的构成与故障排除,并初步接触指令、源程序编写格式与编写方法,源程序的汇编与编程器的使用。通过本章学习,

要求掌握:

l . 89051引脚功能。

2.基本系统构成及故障排除。

3.源程序编写格式并初步掌握源程序编写方法,

4.源程序汇编。

5.目标代码 固化。

2.1

2.1.1

单片机基本系统

89C51引脚

99C51芯片采用高速 CMOs制造工艺,通用型

为40脚双列直插封装方式,其引脚如图2.1所示。

管脚顺序从缺口处左上角到左下兔依次为引脚 (,1)

一(20),右下角到右上角依次为引脚 (21)

(40)。只要将+5V电源接到Vcc:. VSS两端,将晶振接到XTAL1, XTA1}2两端,将复位电路接人 RST

端,给EA端加人高电平控制电压,然后将机器码

固化到8901内就可以使用了。

PLO

pIl

P]2

P1.3

PI.4

P1.5

P16

P!7

RST'Vru

RXD P3 0

fXD P3.1

INTO P3 2

INTI P3 3

10111‘

f!PI5

WR P3.6

RD P3.7

XTAL2

XTAL l

I'cc

P0.0

P0.1

P0Z

PO 3

1'0.4

PO5

PO6

PO. 7

FA/II Do

AL.F/PROG

PSEN

P27

P26

P25

P2 4

P23

P22

P2 I

P2O

八钊

0门

﹃尸

6

扮1朴

4

、、

、马

,、

1

,J

!

、、

诊礴

户臼

,‘

1

Q廿

自入

5

产今

月峙

今白

1

、J

、j

、j

,J

,‘

俘山

、乙

气‘

2

今~

今‘

勺‘

勺1

Q

找日

旧玛以

]6

17阴四

图2.1 89051芯片引脚图

Page 17: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

2.1.2单片机基本系统

单片机基本系统即单片机正常工作不可缺少的

部分,以后各例设计均在此系统的基础上进行。

1电源引脚 Vcr; (40)与Vss (20)

单片机正常工作需要有电源。Vss (20)为直流电源及数字信号输入或输出公共端,I' cc(40) Intel芯片为4.75一5.25V, 89C51为4一6V, 89LV51为2.7一6Vo

2外接晶振引脚XTAL1与XTAL2

单片机为什么要接振荡器?单片机内的 CPU在执行指定程序时,要经过 “取指”、 “译

码”,再定时给相关电路发出控制信号,以实现 “机器码指令”所要求的功能。这就要求内部

必须有一个基准时钟。可通过外接晶振或外接振荡信号二种方式来实现,一般采用外接晶振的

方法较方便。

XTALI (19), XTAL2 (18)为外接晶振的二个引脚。接人晶振时,还要接人二个20一30pF的瓷片电容 C1, C2,如图2.2所示。晶振频率因单片机工作速度而异,Intel MCS一51系列为

1 .2 - 12MHz, ATMEL 89C系列为0 - 24MHz,目前常采用 6MHz, 11.059MHz和 12MHz。石英晶

振起振后,(18)脚有一个3V左右的正弦波。C1, C2短路、晶振不良,89C51 (18), (19)脚

内部反相器会损坏。Vcc电源未加上等故障可能造成晶振不起振,使单片机无法工作。当采用

外部振荡器时,信号接入 (19)脚,(18)脚悬浮。振荡器的12分频为一个机器周期,当外接

12MHz晶振时,一个机器周期为l jis} MCS一51大多数指令都为一个机器周期。 3.复位与复位电路

单片机为什么要进行复位?单片机内的CPU“取指”过程即为CPU从PC指针所指定的程

序存储器ROM地址单元中读取 “机器码”的过程。单片机加电后,PC指针应指向ROM中某

个固定的地址单元,当然,程序开始的第一条指令也应放在ROM的这一地址单元内,这样整

个程序才能有序地执行。这个单元就是ROM的0000 H单元。只有上电复位正常后,PC值才为

OOOOH,即指向ROM的OOOOH单元。此外,专用寄存器SFR中的SP为07H,即指向片内数据

存储器 (片内RAM) 07 H单元,PO -- P3值为OFFH,其余的专用寄存器值大多为OOH.

怎样才能有效复位?当振荡器正常工作时,RST (9)脚上出现的二个机器周期的高电平

将使单片机有效复位。考虑到振荡器有一定的起振时间,该引脚必须保持toms以上高电平,

才能有效复位。复位电路有开机自动复位和手动复位,如图2.2中R,, C;, S」所示,其中S,为手动复位开关。通电时,电容两端相当于短路,因此 RST引脚为高电平,然后电源通过电

阻对电容放电,RST端电压慢慢下降,降到一定程度,即为低电平,单片机开始正常工作。注

意:复位信号为2个以上机器周期的高电平,单片机复位后正常工作时应该为低电平,如果未

加复位电平或复位后复位电平仍未撤除,则单片机不能正常工作,此时可检查RST电压及相

关器件R,、Cs, S,等。

在掉电期间RST/ v,,引脚如接上备用电源V,, (5V土0.5V),则可保存片内数据。当从。下

降到某一规定值时,VN。便向片内RAM供电。

4. EA/tiDD片内程序存储器选用端

!]

Page 18: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

单片机复位后,PC指针可能指向片内ROM OOOOH或片外ROM OOOOH单元,这取决于EA/

yDD (31)脚外接高电平 (指向片内ROM OOOOH)还是低电平 (指向片外ROM OOOOH) } 89C51

内部有4KB ROM,这时EA (31)脚需外接高电位Vcc。早期的MCS一51单片机多采用8031,片

内无ROM,需要外扩片外ROM,所以EA/ V DD接低电位Vss。如果将8031更换为89051,除了将

程序固化到89C51内部的ROM中之外,不要忘记把EA引脚由Vss改接到Ncc}

在编程期间,此引脚作编程电压VD。的输人端。

2.1.3 输人/输出引脚

89C51有4个8位1/0端口,分别称为PO一P3 } PO端口具有二个功能:不接片外存储器

时,可作双向输入/输出接口;在接片外存储器或扩展I/0接口时,用分时复用低8位地址和

双向数据总线。

P1端口为准双向1/0接口,单一功能。P2端口也具有二个功能:不接片外存储器时,作

准双向输人/输出接口;在接片外存储器或扩展I/0接口时,P2为高8位地址总线。P3端口除

作准双向1/0接口外,还具有第二功能:

P3.0 RXD 串行数据输人 (串行口工作在同步移位寄存器模式时,为数据输人/输出)

P3.1 TXD 串行数据输出 (串行口工作在同步移位寄存器模式时,为同步时钟输出)

P3.2 INTO外中断。请求输人端 P3.3钾 INTI夕卜中断1请求输人端

P3.4 TO:C/TO计数方式时计数脉冲输人端

P3.5 TI:C/T1计数方式时计数脉冲输人端

P3.6丽丽外接片外数据存储器时作写选通信号输出端 P3.7豆百外接片外数据存储器时作读选通信号输出端

2.1.4控制线

控制线RST/VED, EA/VDD, WR和RD在前面已介绍,还有两根控制线功能如下:

1.ALE/PROG

外接片外存储器时,其下降沿用于锁存PO端口输出的低 8位地址。在编程时,作编程脉

冲PROG输人端。

2. PSEN

接片外程序存储器时,作读指令信号输出端,故又称片外取指选通端。

2.1.5 低功耗操作方式与电源控制寄存器PCON

89系列单片机提供了2种低功耗操作方式:空闲方式和掉电方式。其目的是尽可能降低

系统的功耗。在低功耗操作方式下,Vcc由后备电源提供。在空闲工作方式中 (IDL = 1),振荡器继续工作,时钟脉冲继续输出到中断系统、串行口以及定时器模块,但不提供给CPU。在掉

12

Page 19: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

电方式中 (PD =1),振荡器停止工作。两种工作方式都是由SFR中的电源控制寄存器PCO N的

控制位来定义,PCON寄存器的各位定义如下:

SMOD GFO

D1 DO

PD 一IDL

SMOD:串行口波特率倍率控制位 (详见5.3节)。

GF1, GFO:通用标志位。

PD:掉电方式控制位。PD二1进人掉电工作方式。

IDL:空闲方式控制位。ILD二1进人空闲工作方式。

如同时将 PD和IDL置 1,则进人掉电工作方式。PCON寄存器的复位值为0 x x x 0000,

PCON. 4一PCON. 6为保留位,用户不能对它们进行读写操作。

1.空闲工作方式

当CPU执行完IDL二1 (PCON.0位)指令后,系统即进人空闲工作方式。这时,内部时钟

不供给CPU,而只供给中断、串行口、定时器部分。CPU的内部状态维持原状,即堆栈指针

SP,程序计数器PC ,程序状态字PSW和累加器A的所有内容保持不变,端口状态也保持不

变。ALE和PSEN保持逻辑高电平。

进人空闲工作方式后,有两种方法可以使系统退出空闲方式。一是任何中断请求被响应都

可以由硬件将PCO N.0 (IDL)清0而中止空闲工作方式。当执行完中断服务程序返回时,从置

空闲工作方式指令的下一条指令开始继续执行程序。另外,PCON寄存器中的GFO和GFI标志

可用来指示中断是否在正常情况下或在空闲方式下发生。例如,在执行置空闲方式的指令前,

先置标志位GFO(或GFI );当空闲工作方式被中断中止时,在中断服务程序中可检测标志位,

以判断系统是在什么情况下发生中断的,如果 GFO (GFI)为1,则是在空闲方式下进人中断。

另一种退出空闲方式的方法是硬件复位。由于在空闲工作方式下振荡器仍然工作,因此硬

件复位仅需2个机器周期便可完成。RST端的复位信号直接将PCON.0 (IDL)清0,从而退出

空闲状态,CPU则从进人空闲方式的下一条指令开始重新执行程序。在内部系统复位后的2-

3个指令周期这段时间里,系统禁止访问内部 RAM区,但允许访问端口。为了防止对端口的

操作出现错误,置空闲工作方式指令的下一条指令,不应该为写端口或写外部RAM的指令。

2.掉电工作方式

当CPU执行完PD = 1 (PCON.1位)指令后,系统即进人掉电工作方式。在这种工作方式

下,内部振荡器停止工作。由于没有振荡时钟,因此,所有的功能部件都停止工作。但内部

RAM区和特殊功能寄存器的内容被保留,端口的输出状态值都保存在对应的SFR中,ALE和

PSEN都为低电平。

退出掉电方式的惟一方法是由硬件复位,复位后将所有特殊功能寄存器的内容被初始化,

但内部RAM区的数据不改变。

在掉电工作方式下,Vcc可以降到2V,但在进人掉电方式之前 Vcc不能降低。在准备退出

掉电方式之前,Vcc必须恢复到正常的工作电压值,并维持一段时间 (约toms),使振荡器重

新启动并稳定后方可退出掉电方式。

]了

Page 20: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

2.2 单灯闪烁与顺序点亮硬件设计

通过第一章的学习,对单片机内部结构有了一定的了解,本章又学习了单片机的引脚与功

能,以及基本系统的构成。要完成单灯闪烁与顺序点亮的设计,需做三方面工作:一是硬件设

计,即单灯与顺序指示灯的接入;二是程序设计,即源程序的编写;三是源程序汇编和机器码

的固化己

本例硬件设计如图2.2所示,将发光二极管 LEDO接人P1.0管脚,即完成了 “单灯闪烁”

的硬件设计。以后各例可以此作为程序运行指示,即可判别基本系统是否正常,程序是否正常

运行。“顺序点亮”的硬件设计是将8个发光二极管LEDO一LED7分别接人P1.0一P1.7即可,

图中R2 - R9为限流保护电阻。由于电阻公共端接 岭c,故LED所接相应端口为低电平时有效

(点亮)。P1口复位值为FFH,复位后指示灯全灭。LED也可接人PO, P2或P3端口,这些端口

在以后各例中留作它用。+5V

图2.2 89C51单片机基本系统及顺序点亮LEDO一LED7接线图

Page 21: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

2.3 程序设计

2.3.1 基本指令

在进行程序设计之前,先介绍与本例有关的几条基本指令。

1.立即数送累加器

格式:MOV A,#data

代码(机器码):」0111 0100 741l 一立即数一

操作:(A)~#data

执行时间:l,us (1个机器周期,振荡频率为12AIHz时,1个机器周期为IJAs,下同) 说明:代码的第二字节为立即数,它与指令的操作码一起被放在程序存储器中,执行该指

令时,与操作码一起被取到CPU中:Data为0一255任一数。用十进制表示时.不加任何说明

字符;用十六进制表示时加 H,用二进制表示时加B。如255可写成#255,或#OFFH,或

# 1111 1111B。其中在用十六进制表示时,当高4位数为A, B, C, D, E, F时,在其之前需

插人 “0",如#OFFH.

2.立即数送寄存器

格式:MOV Rn, # data

代码:C互二二 78H一7FH 迎

操作:(Rn) F # Data

执行时间:1 tts

说明:Rn表示工作寄存器RO一R7中的任一个。

3.累加器内容送内部RAM或专用寄存器SFR

格式:MOB' direct,A

代码:F5 H

厦亘1AK 操作:(direct)~ (A); A内容不变。

执行时间:1II$ 说明:direct为RAM区OOH -7FH及SFR中的任一单元,当direct为PO一P3端口地址时,

其功能相当于一条输出指令。89C51无专用输入、输出指令。

4.累加器内容循环左移一位

格式:RL A

代码:23 H

Page 22: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

! 今 操作:A7-A6-二Al-AO

执行时间:Its

5.直接寻址位取反

格式:CPL bit

代码:B3H

一位地址一 操作:(bit)~ (bit)

执行时间:1 fcs

说明:指令中的位地址为内部RAM中位操作区 (20H一2FH)单元中的任一位或某一专用

寄存器的任一位。当位地址为PO一P3端口地址的某一位时,其功能为 “读一修改一写”指令。

6.空操作指令

格式:NOP

代码:OOH

操作:(PC)~ (PC)+1

执行时间:1 Ns

说明:PC不进行任何操作,仅程序计数器PC内容加1,相当于程序延时ltis (1个机器周期)。

7.寄存器内容减1不为零时转移

格式:DJNZ Rn, rel

代码:11101 l一 D8 H一DFH

一相对地址1 操作:(Rn ), (Rn)一1

若Rn=0,则 (PC)* (PC) +2,即程序继续往后执行;

若RnoO,则 (PC)~ (PC) + 2 + rel,即程序转移到相对地址 “标号”处。

执行时间:2rls

说明:相对地址 rel指程序转移的目标地址与现时地址之间的偏移字节数,其范围为一128

一+127,负数表示向前转移,正数表示向后转移。在程序中,rel往往是一个标号,在汇编过

程中,汇编程序自动计算偏移字节数。编写程序时,只要注意程序转移的目标地址 (标号)与

现时地址之间不超过偏移字节数范围即可。

8.长转移

格式:Limp addr16

代码:02H

addr16一8

addr7一0

操作:(PC)、指令中的add16一0

执行时间:2Fcs

]6

Page 23: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

说明:程序将执行PC新地址中的指令:

2.3.2汇编语言源程序格式和伪指令

前面学习了几条基本指令,在正式编写源程序之前,还需了解它的书写格式。

1.书写格式

一条汇编语句包括4项内容,格式如下,其中间2项是必要的。

标号:操作码,操作数:注释

标号:一条指令或一段程序的标记名称:它实际上是该指令或程序段的起始地址。如实例

一源程序中 “1VL41N”为整段主程序,DELAY为整段延时程序。其作用为程序调用或转移时作

目标人口地址,后面必须加冒号。第一个字符必须是字母,最多由6个字符组成。

操作码:操作码的助记符,用英文缩写表示。

操作数:立即数或数据所在地址。

注释:注释前用分号隔开,表示分号后的内容不需汇编,主要用于对前面程序的解释说

明,以方便阅读及交流。

2.伪指令

伪指令不产生目标程序,用于源程序汇编成机器语言。

(1) ORG伪指令

格式:ORG 16位地址

作用:定义随后的程序块或数据块汇编后的起始地址C

如实例一的ORG OOOOH表示LIMP MAIN汇编后的机器码02H, OOH, 30H要放在以000014

为起始的单元内。

(2) END伪指令

放在源程序后面,表示源程序结束。

(3) EQU伪指令

格式:标号 EQU 数据或地址

作用:定义特定的立即数据或特定的存储单元标号名称,一般放在主程序前面。在同一源

程序中,一个标号名称只能定义一次。

例:LEDO EQU Pl.。 表示程序中所有对P1.0的操作均可由LED。代替。 (4) DB DW伪指令

格式:标号:DB 单字节数据

标号:DW 双字节数据 (低8位在前,高8位在后)

作用:定义单字节或双字节数据内容。

2.3.3 程序设计

I.程序框图— 程序设计思路

实例一单灯闪烁和实例二顺序点亮的设计流程图如图2.3所示。

Page 24: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

实例一:单灯闪烁 实例二:顺序点亮

复位ViLEDO-LED7灭

初始化A--#OFEH

P1端}I --A

延A寸0.5s

A循环左移一位

图2.3 设计流程图

2.编写源程序

SLl. ASM(实例一源程序) ORG OOOOH

LJMP MAIN ;0003H一002BH为中断服务程序人口地址,预留

ORG 0030H

MAIN: CPL P1.0 ;接入P1.0引脚的LEDO指示灯由灭变亮或由亮变灭

DELAY: MOV R7, # 2 ;0. 5s延时程序

DELAY1: MOV R6,#250 ;

DELAY2:MOV R5,#250 ;llis

DELAY3:NOP ;1 us

NOP ;lFIs

DJNZ R5,DELAY3 ;2t.s

DJNZ R6,DELAY2 ;

DJNZ R7,DELAYI ;

IJMP MAIN

END

注:延时程序耗用时间为

x250+21 x250+21 x2二501507机器周期

S皿 .ASM

Limp

MAIN:

MAINZ:

18

+ {1+ L1+ (1+1+2)

(实例二源程序)

0 RG OOOOH

MAIN

ORG 003013

MOV A, #OFEH

MOV P1.A

P1端口初始状态为LEDO亮,其余灭,暂存于A中

Page 25: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

#2

#250

#250

7.

6

11︺

R

R

R

DELAY:

DELAYI:

DELAY2:

DELAY3:

DELAY3

DELAY2

DELAYI

RS

R4

R7

MOV

MOV

MOV

NOP

NOP

DJNZ

DJNZ

DJNZ

RL A

limp

END

;依次点亮第二个灯,其余灭

MAINZ

2.4 源程序汇编

设计好的源程序 “文件名 .ASM”还需汇编成列表文件 “文件名 .LST'’及目标文件 “文件

名.OBJ"。本实例由于程序简单,直接用MCS51. EXE汇编程序进行汇编即可,对于较复杂的

程序,需用在线仿真器进行程序调试。

1.源程序汇编

键人MCS51 SLI.ASM SLI.LST SLI.OBJ即可生成列表文件与目标文件。 查看列表文件

SL1.LST

ORG OOOOH

0000 020030 耳MP MAIN

ORG 0030H

0030 B290 MAIN: CPC 131 .0

0032 7F02 DELAY: MOV R7,#2

0034 7EFA DELAYI: MOV R6,#250

0036 7DFA DELAY2: MOV R5,#250

0038 00 DELAY3: NOP

0039 00 NOP

003A DDFC DJNZ R5,DELAY3

003C DEF8 DJNZ R6,DELAYI

003E DFF4 DJNZ R7,DELAYI

0040 020030 LJMP MAIN

END

左边一排十六进制数表示ROM地址,中间一排为程序指令的目标代码。SLI. OBJ为用

ASCII码显示的目标代码,可用连接程序转换成二进制机器码。

19

Page 26: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

2.目标代码转换成二进制机器码

键人T9651 目标代码文件名SL1. OBJ(双字节显示的ASCII机器代码)

二进制机器码文件名SLI.BIN(二进制机器代码)

即可生成机器码文件。该文件只能用89C51编程器才能查看,如果你的编程器可直接输人

目标代码文件,可省去这一步。

2.5 编程器的使用 (机器码固化)

将源程序的机器码固化到89C51内部的ROM中,需使用编程器。常用的89C51编程器有

TOP851, A LL03, ALL07等。按照编程器说明,根据所用芯片的厂家、型号,输人源程序机器

码文件名,然后键人P(编程)即可。可查看计算机缓冲区内容,也可查看编程前后89051

ROM区内容。固化了程序的89051芯片插人硬件线路板插座上之后,加电即可运行了。

本 章 小 结

1. 89051芯片基本系统由电源Vcc C+5V)与地Vss振荡电路 (一般为1.2一20MHz,视型号后缀而异)、

复位电路 (高电平复位)、EA控制线 (接高电平)4部分6根引脚构成,这是单片机正常工作不可缺少的硬件

基础。

2.系统复位时,PC值为OOOOH, SFR中除SP值为07 H, PO一P3为OFFH, SBUF不确定外,其余均为OOH,

3.程序设计与实验主要包括源程序编写、源程序汇编和目标代码固化三个环节。

4一条汇编语句包括标号、操作码、操作数、注释4项内容,其中操作码、操作数是必须的。

思考题与 习题

2.1在实例一中,如果LEDO不闪,怎样排除故障?(从电源价c、地Vss、复位、振荡及EA电平4个方

面分析)

2.2 将实例二的源程序汇编,并用编程器将目标代码文件 (或二进制文件)固化到89051中,检验其功

能是否正常。

2.3 将实例一与实例二功能结合在一起,即LEDO闪烁,LEDI一LED7顺序点亮,试编写相应程序并用实

验检验其功能。

2.4 简述单片机程序设计与实验的三个步骤。

20

Page 27: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

第3章 指 令 系 统

[学习指导】 熟练地掌握寻址方式及相关指令是编写程序的基础。本章介

绍89C51的七种寻址方式和五种按功能分类的共111条指令。通过本章学习,要求

掌握:

1.熟记根据指令功能分类的相关指令助记符。

2.结合寻址方式全面掌握指令格式。

3.通过常用功能程序块的编写,逐步提高准确运用指令的能力。

3.1 寻址方式

计算机的许多指令如数据传输、算术操作、逻辑运算等都要涉及操作数,这种指令在执行

时需要从操作数所在地址寻找与本指令有关的操作数。寻找操作数或操作数地址的方式称为寻

址方式。寻址方式越多,计算机功能越强。89C51主要有下述七种寻址方式。

1.立即数寻址

操作数紧跟在操作码后面,汇编后,数据存放在程序存储器内,无需另外寻找与取数,这

种方式称为立即数寻址。例如指令MOV A, # 30H中30H就是立即数,前面的 “#”表示其为

立即数。

2.直接寻址

直接给出操作数所在的地址以供读取或存放数据的方式称为直接寻址。例如指令MOV

A, 30H表示将寄存器30H内的数据送给Ao

直接寻址可访问数据的地址范围:

— 片内RAM区的低 128字节 (OOH一7FH);

— 专用寄存器SFR (80H一FFH)。注意:直接寻址是访问专用寄存器的惟一方式。

直接寻址不可访问52系列片内RAM的高 128字节(80H - FFH),也不可访问片外RAM区。

3.寄存器寻址

·27

Page 28: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

寻找工作寄存器并从该寄存器读取的或存放数据,称为寄存器寻址或寄存器直接寻址

例如指令MOV A, R7表示将寄存器R7内的数据送给A。寄存器寻址可访问的范围:

— 8个工作寄存器 RO一R7o

4.寄存器间接寻址

如果工作寄存器R0, R1及DPTR中的内容是操作数地址而不是操作数本身,即寻到该工

作寄存器后,以其中内容作地址去寻找相应地址单元读取或存放操作数,这种寻址方式称为寄

存器间接寻址。例如指令MOV A, @ RO表示从 RO中取出数据,再以此数据作为地址从相应

地址单元中取出数据送给Ao

寄存器间接寻址可访问的数据地址范围:

(1)用MOV指令时简称 “片内间址”

— 片内RAM区的低128字节 (OOH一7FH);

— 片内RAM区的高128字节 (80H一FFH)(仅52系列有)。注意:寄存器间接寻址是访

问片外RAM及52系列片内RAM区高 128字节的惟一方式。

— 不可访问SFR专用寄存器。

(2)用MOVX指令时可访问片外RAM区,称 “片外间址”

5.位寻力L 在计算机中,操作数不仅可以按字节存取与操作,也可对8位二进制数的某一位进行存取

与操作。如果把8位二进制数中的某一位作为操作数,这个操作数的地址称为位地址,对位地

址的寻址称为位寻址。89C51位寻址方式均为直接寻址方式。

例如指令CPL P1.0表示将P1.0管脚数据读人、取反后再送P1.0管脚。位寻址区范围:

— 片内RAM位寻址区 (字节地址20H一2FH,相应位地址OOH一7FH,参见图1.4);

— 专用寄存器SFR中13个寄存器共97位 (详见附录3).

6.基址寄存器加变址寄存器间接寻址

该寻址方式只有二条指令,主要用于访问放在程序存储器内的表格数据。例如指令MOW

A, @A+DPTR和指令MOVC A, @A十PC,以DPTR或PC作基本地址寄存器,以A作为变址

寄存器,它们之和作程序存储器地址,再从该地址单元中读取数据送给Ao

7.相对寻址

该寻址方式用于确定程序转移时的目标地址,而不是寻找操作数的地址。凡写有 rel的指

令都属相对寻址。

例如指令 DJNZ R7, rel表示不满足 (R7), (R7)一1等于0的条件时,PC中目标地址更

换为PC当前地址与相对地址rel的代数和。rel的意义参见2.3.1节。

3.2 指令系统简介

单片机的CPU在设计时已决定了它共有多少条指令以及每条指令所执行的操作,这些指

令的集合构成了指令系统。

89C51共有111条指令,按功能可分为数据传送、算术操作、逻辑运算、程序转移、位操

·22

Page 29: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

作五大类;按指令代码的字节数分类则有单字节指令49条,双字节指令46条,三字节指令16

条;按执行时间分类则有单机器周期指令64条,双机器周期指令45条,四机器周期指令2条

(乘除运算),接12MHz晶振时,执行时间分别为ltts, 2fAs, 41,s, 在分类介绍指令之前,先将描述指令的符号作一简单介绍。

# data:单字节立即数,可用十进制如#48、十六进制如#30H、二进制如#01001000B表

示。参见3.1节 “立即数寻址”。

# data] 6:双字节立即数。

direct: 8位内部数据存储器直接寻址单元地址。可以是OOH一7FH的片内RAM区或SFR

专用寄存器直接寻址单元地址,参见3.1节 “直接寻址”,指令中简称 “直接地址”。

Rn:当前选中的8个工作寄存器RO一R7中的某一个 (n= 0一7),参见3.1节 “寄存器寻

址 ”。

@ Ri:以当前选中的二个工作寄存器RO或 R1 (i=0或 l)中的内容作地址,再对该地址

单元存取数据。用 MOV指令称 “片内间址”,用 MOVX指令称 “片外间址”,参见3.1节 “寄

存器间接寻址”。

addll: 11位的目的地址,用于ACALL和AJMP指令中。编写程序时应注意,汇编后目标

代码的目的地址必须与下一条指令的第一字节在同一个 2KB程序存储器区地址空间内,否则

汇编提示 “出错”,此时可将指令修改为LCALL和limp,

addl6: 16位的目的地址,用于LCALL和Limp指令中。目的地址范围为64KB程序存储器

地址空间。

rel: 8位带符号偏移数。参见2.3.1节。

bit:内部RAM或SFR专用寄存器中直接寻址位。参见3.1节 “位寻址”。

A:累加器。

B:专用寄存器,用于乘法指令MUL和除法指令DIV中,亦可用作通用寄存器。

C:进位标志或进位位,或位操作中的累加器。

@:间接寻址寄存器或基址加变址间接寻址寄存器的前缀,如@Ri, @ DPTR, @ A十

DPTR,

/:位操作的前缀,表示对该位操作数取反,如/bit

(x): x中的内容。

((x)):由x间接寻址的单元中的内容。

。:箭头左边的内容被箭头右边的内容所代替。

3.3 数据传送类指令

数据传送类指令共有29条,使用的助记符有MOV(访问片内RAM), MOVX(访问片外

RAM), MOVC(访问程序存储器)、XCH (字节交换)、XCHD(低4位字节交换)、SWAP(高4

位与低4位交换)、PUSH和POP(堆栈操作)8种。其功能为将源操作数传送到目的单元内,

指令执行后,源操作数不变,目的单元内容修改为源操作数,源操作数可用立即寻址、直接寻

·2了

Page 30: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

址、寄存器寻址、寄存器间址、基址加变址的间址5种方式,目的操作数仅有直接寻址、寄存

器寻址、寄存器间址3种方式。数据传送指令均不影响标志C, AC及OV}

1.立即数置数指令 (5条)

(1) v.即数送累加器A

格式:MOV A,#data

代码:74H,立即数

操作:(A),#data

(2)立即数送直接地址单元

格式:MOV direct,#data

代码:75H.直接地址,立即数

操作:‘直接地址),#data

说明:直接地址单元指片内RAM (OOH一FFH)单元或SFR专用寄存器,不包括52系列片

内RAM (80H一FFH)的高 128字节。

(3)立即数送工作寄存器

格式:MOV Rn,#data

代码:78H - 7FH,立即数

操作:(Rn)。#data, n = 0一7

说明:Rn在内部 RAM中的工作寄存器区号由当前程序的逻辑状态字选择位 PSW.4,

PSW.3来确定。

(4)立即数送片内间址单元

格式:MOV @Ri, # data

代码:76H一77H,立即数

操作:((Ri) )~#data, i二0, 1

说明:片内间址单元指片内RAM低128字节 (OOH一7FH)与52系列的高128字节 (80H

一FFH),不包括SFRo

(5) 16位立即数送数据指针 DAPTR

格式:MOV DPTR,#data16

代码:90H,立即数高8位,立即数低8位

操作:(DPH)。#data15一8

(DPL)“ #data7一0

2. l'1,累加器为一方的数据传送指令 (6条)

(1)自接地址单元内容送累加器 A

格式:MOV A,direct

代码:E511,直接地址

操作:(A)。 (direct)

(2)累加器A内容送直接地址单元

格A:MOV direct,A

代码:F5 H.直接地址

·24

Page 31: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

操作:(direct)“ (A)

(3) -1一作寄存器内容送累加器A

格式:MOV A, Rn

代码:E8H一EFH

操作:(A), (Rn ),n=a一7

(4)累加器 A内容送工作寄存器

格式:MOV Rn, A

代码:F8 H一FFH

操作:(Rn)~ (A), n二0一7

(5)片内间址单元内容送累加器A

格式:MOV A, @ Ri

代码:E6 H一E7 H

操作:(A)~ ((Ri)), i=0, 1

(6)累加器A内容送片内间址单元 (内部 RAM)

格式:MOV @ Ri, A

代码:F6 H一F7 H

操作:((Ri)、。 (A),i=0,1

3.以工作寄存器为一方的数据传送指令 (5条)

(1)工作寄存器内容送直接地址单元

格式:MOV direct, Rn

代码:88H一8FH,直接地址

操作:( direct)。 (Rn),n=0一7

(2)直接地址单元内容送工作寄存器

格式:MOV Rn, direct

代码:A8H一AFH,直接地址

操作:(Rn)一 (direct) , n = 0一7

(3)片内间址单元内容送直接地址

格式:MOV direct, @ Ri

代码:86H一87H,直接地址

操作:( direct)一 ((Ri)), i=0, 1

(4)直接地址单元内容送片内间址单元 (内部 RAM)

格式:MOV @ Ri, direct

代码:A6H一A7 H,直接地址

操作:((Ri) )~ (direct), i=0, 1

(5)直接地址单元内容送另一个直接地址单元

格式:MOV direct2, directl

代码:85H,直接地址1(源),直接地址 2(目的)

操作:(direct2 ), (directl )

Page 32: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

4.访问外部 RAM的数据传送指令 (4条)

访问外部RAM只能使用片外间址寻址方式,指令为MOM

(1)外部RAM (8位地址)内容送累加器A

格式:MOVX A, @ Ri

代码:E2 H一E3 H

操作:(A), ((Ri)),i=0, 1

说明:外部RAM (8位地址)由RO或R1指向。指令执行时,在P3.7引脚出现RD读有效

信号,用作外部RAM的读选通。PO口分时输出由Ri指定的低8位地址信息及输入RAM单元

的数据内容,P2口不会受影响。

(2)累加器A内容送外部RAM (8位地址)

格式:MOVX @ Ri, A

代码:F2 H一F3 H

操作:((Ri)), (A),i=0, 1

说明:在P3.6引脚出现丽豆写有效信号,用作外部RAM的写选通,其余同 (1)。以上2

条可访问片外256字节空间。

(3)外部 RAM (16位地址)内容送累加器A

格式:MOVX A, @ DPTR

代码:EOH

操作:(A)~ ((DPTR))

说明:DPTR所包含的 16位地址信息分别由PO(低8位)和P2(高 8位)输出。选中单

元内容由PO输人,PO分时复用,其余同 (1).

(4)累加器A内容送外部 RAM (16位地址)

格式:MOVX @ DPTR, A

代码:FOH

操作:((DPTR))~ (A)

说明:DPTR所包含的16位地址信息分别由PO(低 8位)和 P2(高8位)输出,累加器

内容由PO输出,PO分时复用。其余同 (2)。以上2条可寻址64 KB存储空间。

5.访问程序存储器ROM内的表格数据指令 (2条)

MOVC是64KB ROM存储空间的查表指令,属基址寄存器加变址寄存器的间接寻址。

(1)以数据指针DPTR与累加器A的内容之和为地址,读取其内容送累加器Ao

格式:MOVC A, @ DPTR十A

代码:93H

操作:(A)~ ((A)+ (DPTR))

说明:指令首先执行16位无符号.位的加法操作,获得基址与变址内容之和,低8位相加

产生进位时,直接加到高位并不影响标志。

(2)以程序计数器PC与累加器A的内容之和为地址,读取其内容送累加器A

格式:MOVC A, @ A + PC

代码:83H

·26

Page 33: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

操作:(PC)~ (PC)+1

(A)~((A)+ (PC))

说明:以上2条为查表指令,基址寄存器分别是 16位的DPTR或程序计数器PC,变址寄

存器为Ao

6.交换数据指令 (5条)

交换数据指令为互相传送数据,一般以累加器A为主要方。

(1)累加器A内容与直接地址单元内容交换

格式:XCH A, direct

代码:C5 H,直接地址

操作:(A)二 (direct)

(2)累加器A内容与工作寄存器内容交换

格式:XCH A, Rn

代码:C8H一CFH

操作:(A)班 (Rn), n二0一7

(3)累加器A内容与片内间址单元内容交换

格式:XCH A, @ Ri

代码:C6H一C7 H

操作:(A)班((Ri)),i=0, 1

(4)累加器A内容与片内间址单元的低半字节内容交换

格式:XCHD A, @ Ri

代码:D6 H一D7 H

操作:(A3一0)之 ((Ri) 3一0), i二0, 1

(5)累加器A低半字节内容与高半字节内容交换

格式:SWAP A

代码:C4H

操作:(A3一0)亡 (A7一4)

7.堆栈操作指令 (2条)

堆栈操作指令多用于中断服务程序中保存现场和恢复现场,使用时必须成对使用。

(1)直接寻址单元内容压入堆栈 (压人指令)

格式:PUSH direct

代码:COH,直接地址

操作:(SP)~ (SP)+1

((SP))~ (direct)

(2)堆栈 (栈顶)内容弹出到某直接寻址单元 (弹出指令)

格式:POP direct

代码:DOH,直接地址

操作:(direct),((SP))

Page 34: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

(SP)~ (SP)一1

上例3.1〕 用2种不同的方法从Pi口读人数据并分别存人片内30H与片外30H地址单元

内。程序如下:

PROGI: MOV 30H, P1 ; (30H)~ (P1),直接寻址方式存人片内30H

MOV RO,#30H ; (RO)~ #30H

MOV A,P1 ; (A)~ (P1)

MOVX @ R0, A ; ((RO) )。 (A),片外间址方式存人片外30H

PROG2:MOV RO

MOV

MOV

#30H

PI

@ RO.A

MOVX @RO.A

; 读人数据暂存 A内

; 片内间址方式存入片内30H

; 片外间址方式存人片外30H

3.4 算术操作类指令

算术操作类指令共有24条,使用的助记符有ADD(不带进位加法)、ADDC(带进位加

法)、SUBB(带进位减法)、INC(加1), DEC(减1), MUL(乘法)、DIV(除法)和DA(十

进制调整)。其中加、减、乘、除均以累加器A为一方,运算结果将使CY, AC, OV三种标志

置位或复位,参见 1.4.1节 PSW寄存器和附录 to

1.加法指令 (8条)

加法指令分为不带进位加法ADD和带进位加法ADDC,各有4条。

(1i累加器内容加立即数

格式:ADD A, # data

代码:24H,立即数

操作:(A)~ (A)+#data

(2)累加器内容加直接地址单元内容

格式:ADD A, direct

代码:25H,直接地址

操作:(A)~ (A)+(direct)

(3)累加器内容加工作寄存器内容

格式:ADD A, Rn 代码:28H一2FH

操作:(A)~ (A)+ (Rn), n=0一7

(4)累加器内容加片内间址单元内容

格式:ADD A, @ Ri

代码:26H一27H

操作:(A) - (A)+((Ri)),i=a, 1

·28

Page 35: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

(5)累加器内容加立即数和进位

格式:ADDC A, # data

代码:34H,立即数

操作:(A)‘ (A)+(C)+#data

(6)累加器内容加直接地址单元内容和进位

格式:ADDC A, direct

代码:35H,直接地址

操作:(A)一 (A)+(C)+(direct)

(7)累加器内容加工作寄存器内容和进位

格式:ADDC A, Rn

代码:38H一3FH

操作:(A)~ (A)+ (C)+ (Rn),n=0一7

(8)累加器内容加片内间址单元内容和进位

格式:ADDC A, @ Ri

代码:36H一37H

操作:(A)~ (A)+(C)+((Ri)),i二0, 1

说明:加法对标志位的影响:C:相加后有进位,C置位,否则 C为0; AC:低半字节有

进位时,AC置位,否则为 0(如BCD加法);OV:相加后有溢出发生时,OV置位。

2.减法指令 (4条全为带进位减法)

(1)累加器内容减立即数和进位

格式:SUBB A, # data

代码:94H,立即数

操作:(A)于 (A)一(C)一#data

(2)累加器内容减直接地址单元内容和进位

格式:SUBB A, direct

代码:95H,直接地址

操作:(A)“ (A)一(C)一(direct)

(3)累加器内容减工作寄存器内容和进位

格式:SUBB A, Rn

代码:98H一9FH

操作:(A)。 (A)一(C)一 (Rn),n=0一7

(4)累加器内容减片内间址单元内容和进位

格式:SUBB A, @Ri

代码:96H一97H

操作:(A)~ (A)一(C)一((Ri)),i二0, 1

说明:减法对标志位的影响:C:不够减时,C为1,否则为0; AC:低半字节有借位时,

AC为1,否则为0; OV:相加后有溢出发生时,OV为to

3.加 1指令 (5条)

·29

Page 36: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

(1)累加器内容加I

格式:INC A

代码:04H

操作:(A)。 (A)+1

(2)直接地址单元内容加1

格式:INC direct

代码:05H,直接地址

操作:(direct), (direct)+1

(3)工作寄存器内容加 1

格式:INC Rn

代码:08H一OFH

操作:(Rn ), (Rn)+1, n=0一,

(4)片内间址单元内容加 I

格式:INC Ri

代码:06H一07H

操作:((Ri))~ ((Ri))+l, i=0

(5)数据指针内容加 1

格式:INC DPTR

代码:A311

操作:(DPTR), (DPTR)+I

说明:加1指令不影响标志位。

4.减1指令 (4条)

(1)累加器内容减 1

格式:DEC A

代码:14H

操作:(A)~ (A)一1

(2)直接地址单元内容减1

格式:DEC direct

代码:巧H,直接地址

操作:(direct)~ ( direct)一1

(3)工作寄存器内容减 1

格式:DEC Rn

代码:18H一1FH

操作:( Rn ), (Rn)一1, n=0一7

(4)片内间址单元内容减 1

格式:DEC Ri

代码:16H一17H

操作:((Ri))~ ((Ri))一1, i二0

30

Page 37: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

说明:减 1指令不影响标志位。

5.乘除及十进制调整指令 (3条)

(1)乘法指令

格式:MUL AB

代码:A4H

操作:(B7一0) (A7一0)~ (A) x (B)

说明:MUL执行单字节无符号数乘法。二个乘数分别放在A与 B中,乘积为 16位,高8

位放在B中,低s位放在A中。乘积大于255时,溢出标志OV为1,否则为0o c标志总为ao

乘除法是所有指令运行时间最长的,需4个机器周期。

(2)除法指令

格式:DIV AB

代码:84H

操作:(A)~ (A)/(B)的商

(B)~ (A)/(B)的余数

(C) -0,(OV) -a

说明:DIV指令执行单字节无符号数除法。被除数放在 A中,除数放在 B中,指令执行

后,商送 A,余数送B。标志C与OV均为0,只有当除数为0时,OV为1, A, B值不确定。

(3)十进制调整指令

格式:DA A

代码:OD4H

操作:若A中低半字节值大于9或AC二1,则 (A)“ (A) + 6;

若A中高半字节值大于9或C=1,则 (A)。 (A) +60H

说明:

a.十进制调整指令主要用于十进制数 (BCD码)相加之和可能超出BCD码表示范围,需

调整为十进制数。

b.十进制调整指令不影响OV标志。

。.不能直接运用DA指令对十进制减法操作结果进行调整,必须采用BCD码补码运算法

则。

d.不能用于将十六进制数转换为BCD码。

〔例3.2」 求十进制数37与38之和,要求和仍为十进制数并存于30H地址内。程序如

下 :

PROG:MOV A, #37H

ADD A,#38H

DA A

MOV 30H,A

说明:

(1)正确结果应该为75H (BCD码)。不经DA调整为37H + 38H二6FH,因低半字F>9,

经调整则为6FH + 06H二75Ho

了1

Page 38: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

(2)相加前输人的十进制数据必须为BCD码格式 (加 H),否则程序汇编时会自动将其转

换成十六进制数而产生错误结果。如果第一行不写成 BCD码而为#37,汇编为十六进制数得

25H,第二行为#38,汇编为十六进制数得26H,二数相加之和为4BH,经调整为 5111,显然

结果是错误的。

〔例3.3] 每秒从PO口读一次数据,存入片内1011- 7FH地址内,存满为止。程序如下:

STAND: MOV R0, # 1011 ; RO指向可存单元的起始地址

MOV R2, # 7011 ; R2存放可存单元的总字节数,1OH一7FH共有70H

个单元

STANDI:MOV A,PO

MOV @RO, A ; 以上2行可用 MOV @ RO, PO代替

ACALL DELAY ; 调用Is的延时程序,延时程序略

INC RO ; RO指向下一个地址

DJNZ R2, STANDI ; R2减I不为0时继续从PO取数

3.5 逻辑运算类指令

逻辑运算类指令共24条,使用的助记符有ANL(与指令)、ORL(或指令)、XRL(异或指

令)及CPL(取反)、CLR(清0) , RL(左环移)、RLC(带进位左环移)、RR(右环移)、RRC

(带进位右环移)。其中与、或、异或指令各有6条,其余6条指令只能对累加器A进行操作。

1.与指令 (6条)

(1)累加器内容逻辑与立即数

格式:ANL A,#data

代码:54H,立即数

操作:(A)。 (A)八#data

(2)累加器内容逻辑与直接地址单元内容

格式:ANL A, direct

代码:55H,直接地址

操作:(A)~ (A) /\ (direct)

(3)累加器内容逻辑与工作寄存器内容

格式:ANL A, Rn

代码:58H一5FH

操作:(A)。 (A)八 (Rn),n=0一7

(4)累加器内容逻辑与片内间址单元内容

格式:ANL A, @ Ri

代码:56H一57H

操作:(A)~ (A)八((Ri)), i二0, 1

(5)直接地址单元逻辑与累加器A内容

·了2

Page 39: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

格式:ANL direct , A

代码:52H,直接地址

操作:(direct)~ ( direct)八 (A)

(6)直接地址单元逻辑与立即数

格式:ANL direct , # data

代码:53H,直接地址,立即数

操作:(direct)~ (direct)八#data

说明:逻辑与功能是 “跟。与,值为0,跟1与,值不变”。

器A和内部RAM任一单元及专用寄存器的指定位进行清0控制

如指令ANL PI, # OFOH 将 P1口的低4位清0,高4位不变。

2.或指令 (6条)

(1)累加器内容逻辑或立即数

格式:ORL A,#data

代码:45H,立即数

操作:(A)~ (A) V#data

(2)累加器内容逻辑或直接地址单元内容

格式:ORL A, direct

代码:45H,直接地址

操作:(A)~ (A) V (direct)

(3)累加器内容逻辑或工作寄存器内容

格式:ORL A, Rn

代码:48H一4FH

操作:(A)~ (A) V (Rn), n=0一7

(4)累加器内容逻辑或片内间址单元内容

格式:ORL A, @ Ri

代码:46H一47H

操作:(A)~ (A) V ((Ri)),i二0, 1

(S)直接地址单元内容逻辑或累加器A内容

格式:ORL direct, A

代码:42H,直接地址

操作:(direct)~ (direct) V (A)

(6)直接地址单元内容逻辑或立即数

格式:ORL direct, # data

代码:43H,直接地址,立即数

操作:(direct)~ (direct) V#data

说明:逻辑或功能为 “跟。或,值不变,跟1或,值为1"0

器A和内部RAM任一单元及专用寄存器的指定位进行置1控制

如指令ORL P1, # OFH 将P1口的低4位置1,高4位不变。

因此,逻辑与指令可以对累加

(指定位为0),其余位不变。

因此,逻辑或指令可以对累加

(指定位为1),其余位不变。

Page 40: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

3异或指令 (6条)

(1)累加器内容异或立即数

格式:XRL A, # data

代码:64H,立即数

操作:(A)。 (A)④# data (2)累加器内容异或直接地址内容

格式:XRL A, direct

代码:65H,直接地址

操作:(A)~ (A) . (direct)

(3)累加器内容异或工作寄存器内容

格式:XRL A, Rn

代码:68H一6FH

操作:(A)~ (A)。 (Rn), n=0一7

(4)累加器内容异或片内间址单元内容

格式:XRL A, @ Ri

代码:66H一67H

操作:(A)~ (A) .((Ri)),i二0, 1

(5)直接地址单元内容异或累加器 A内容

格式:XRL direct, A

代码:62H,直接地址

操作:( direct)~ (direct) . (A)

(6)直接地址单元内容异或立即数

格式:XRL direct, # data

代码:63H,直接地址,立即数

操作:(direct)~ (direct) #data 说明:逻辑异或功能为 “相异为1,相同为0",即 “跟。异或,值不变,跟1异或,值取

反”。因此,异或指令可以对累加器A和内部RAM任一单元及专用寄存器的指定位进行取反控

制 (指定位为1),其余位不变。如指令XRL PI, # OFH 将P1口的低4位取反,高4位不变。

4.累加器A专用操作指令 (6条)

(1)累加器内容取反

格式:CPL A

代码:F4 H

操作:(A),一(/A)

说明:不影响标志位。

(2)累加器内容清0

格式:CLR A

代码:E4H

操作:(A)~#0

了4

Page 41: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

说明:该指令与MOV A, # 0结果相同。

(3)累加器内容循环左移

格式:RL A

代码:23H

操作:(An +1), (An), n=0一6

(AO), (A7)

说明:不影响标志位。

(4)累加器内容带进位循环左移

格式:RLC A

代码:33H

操作:(An +1)~ (An), n二0一6

(AO)~ (C)

(C)~ (A7)

(5)累加器内容循环右移

格式:RR A

代码:03H

操作:(An), (An+1), n二0一6

(A7)~ (AO)

说明:不影响标志位。

(6)累加器内容带进位循环右移

格式:RRC A

代码:13H

操作:(An)~ (An+1), n二0一6

(A7)~ (C)

(C), (AO)

说明:当A7为0时,循环左移一次相当于原内容乘以2;当AO为0时,循环右移一次相

当于原内容除以2;循环左移4次与循环右移4次,其结果和指令SWAP A相同。

[例3.4〕 将存于40H内的十进制数的十位数值与个位数值分别存于30H与31H内。程

序如下:

PROG:MOV A,#40H

ANL A, # OFH ;屏蔽高4位,保留低4位,得 “个位”数

MOV 31H,A

MOV A,#40H

ANL A, # OFOH ;屏蔽低4位,保留高4位,得 “十位”数

SWAP A ;高4位与低4位交换,即00一90的十位数转换成0一9

的 “十位”;数值

MOV 30H,A

说明:00一90的十位数转换成0一9是为进一步转换成LED显示码。

·了5

Page 42: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

〔例3.5] 将分别存于30H, 31H内的 “十位”数 (0一9)与 “个位”数 (0一9)合并为

一个字节的十进制数,并存放于40H内。程序如下:

PROG: MOV A, #30H

SWAP A ;将0一9的十位数变换成00一90

ADD A, #31H ;与用指令ORL A, #31H结果一样

MOV 40H, A

3.6 程序转移类指令

程序转移类指令有 16条,加空操作指令共 17条。可进一步分为无条件转移、条件转移和

子程序调用返回3类,分别使用助记符 LJMP, AJMP, SJMP, JMP, JZ, JNZ, CJNE, LCALL,

ACALL, RET、RETI等。

1.无条件转移指令 (4条)

(1)长转移指令 (64KB地址内)

格式:Limp add16

代码:02H,高8位地址 addr15一8,低8位地址 addr7一0

操作:(PC) -addrl5一0

说明:转移的目标地址可为OOOOH - FFFFH空间任意单元。编写程序时,目标地址可以是

一个标号,汇编时程序会自动将该标号转换为对应的16位地址。该指令为3字节指令,指令

的执行不影响标志位。

(2)绝对转移指令 (2KB地址内)

格式:AJMP addrll

代码:aloagag0, OOOIB (01H, 21H, 41H, 61H, 81H, AIH, CIH, ElH)

操作:(PC), (PC) +2

(PC10一0)~ addrl l

说明:

a.由于只有11位目标地址,程序无法在64KB范围内转移,故只能在2" = 2KB范围内转移。

b.余下的5根未知地址线A15 - A12将64KB分为32个子区,故转移的目标地址与程序下

一条指令必须在同一子区范围内。

。.编写程序时,目标地址往往是一个标号,汇编时,汇编程序会自动将该标号转换为对

应的11位地址,如发生超出转移范围错误时,需将AJMP指令改写为I-iMP指令或采用 “二次

转移”。

d.该指令为双字节指令,指令的执行不影响标志位。

(3)相对短转移 (一128一+127地址内)

格式:SJMP rel

代码:80H,相对地址

操作:(PC), (PC) +2

.了6

Page 43: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

(PC), (PC)+rel

说明:rel的概念及程序编写方法参见2.3.1节

(4)相对长转移 (64 KB地址内)

格式;JMP @A+ DPTR

代码:73H

操作:(PC)。 (A)+ (DPTR)

说明:

a.转移的目标地址由累加器A内容与数据指针DPTR内容相加而成,其加法运算不改变A

及DPTR内容,指令的执行不影响标志位。

b.该指令主要用于多分支转移 (散转),故又称为多分支转移指令 (散转指令)。

[例3.6〕 已知A的内容为OOH一05H,试编写一程序,根据累加器A不同的内容转移到

相应的子程序PG00一PG05中。

PROG: MOV DPTR, # TAB ;将 TAB表格首地址送 DPTR(如0100H)

RL A ;因TAB内的AJM指令为双字节,A的内容乘2为OOH,

02H, 04H,08H,OAH

imp@A+DPTR

TAB:AJMP PG00 ;0100(DPTR)+00(A)=O100H

AJMP PGO1 ;0100(DPTR)+02(A)=0102H

AJMP PG02 ;0100 (DPTR )+04(A)二0104H

AJMP PG03 ;0100(DPTR)+08 (A)二0108H

AJMP PC04 ;0100(DPTR)+OA(A)二OIOAH

2.条件转移指令 (8条)

(1)累加器内容为0转移

格式:JZ rel

代码:60H,相对地址

操作:若 (A)二0,则 (PC)~ (PC) +2+rel

若 (A) =A 0,则 (PC)~ (PC) +2

说明:

a.条件转移全部为相对寻址方式,如超出偏移字节数,可采用 “二次中转方式”。

b.指令执行时,不影响标志位。

(2)累加器不为0转移

格式:JNZ rel

代码:70H,相对地址

操作:若 (A) o0,则 (PC), (PC) + 2 + rel

若 (A) =0,则 (PC), (PC) +2

(3)累加器内容与立即数不相等转移

格式:CJNE A,#data, rel

代码:B5 H,立即数,相对地址

·了7

Page 44: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

操作:若 (A) 0#data,则 (PC), (PC)+3+rel

若 (A)二#data,则 (PC)~ (PC)+3

说明 :

a. (A)># data , C为0; (A)<# data , C为1;累加器内容均不变。

b.四条CJNE对C标志影响相同。

(4)寄存器内容与直接地址内容不相等转移

格式:CJNE A, direct, rel

代码:B5 H,直接地址,相对地址。

操作:若 (A) 7z: (direct),则 (PC)。 (PC) +3+rel

若 (A)= ( direct),则 (PC), (PC)+3

(5)寄存器内容与立即数不相等转移

格式:CJNE Rn,#data, rel

代码:B8H一BFH,立即数,相对地址

操作:若 (Rn) 0#data,则 (PC)~ (PC) +3+rel

若 (Rn)二#data,则 (PC), (PC)+3, n=0一7

(6)片内间接地址单元内容与立即数不相等转移

格式:CJNE@Ri, # data , rel

代码:B6H一B7 H,立即数,相对地址

操作:若 ((Ri)) ,z#data,则 (PC)~ (PC) +3+rel

若 ((Ri))二#data,则 (PC), (PC)+3, i=0, 1

注意:没有CJNE direct, # data, rel指令!

(7)某工作寄存器内容减 1不为0转移指令

格式:DJNZ Rn, rel

代码:D8H一DFH,相对地址

操作:(Rn), (Rn)一1

若 (Rn) 00,则 (PC), (PC)+2+rel

若 (Rn) = 0,则 (PC)~ (PC)+2, n=0一7

(8)直接地址内容减1不为0转移

格式:DJNZ direct, rel

代码:D5 H,直接地址,相对地址

操作:( direct)~ ( direct)一1

若 (direct) 0 0,则 (PC)~ (PC)+3+rel

若 (direct)二0,则 (PC)~ (PC)+3

注意:A减 1不为0转移可用指令 DJNZ A, rel (SFR中A的地址为 EOH)或 DEC A

rel均可 。

3.调子程序指令 (4条)

(1)长调子程序指令 (64KB地址内)

格式:LCALL addr16

·了8

JNZ

Page 45: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

代码:12H,高8位地址,低8位地址

操作:(PC)-(PC)+3

(SP)-(SP)+1

((SP))-(PC7-0) ;原程序低8位地址自动压入堆栈

(SP)-(SP)+1

((SP))-(PC15一8) ;原程序高8位地址自动压人堆栈

(PC)‘一addr 16

说明:原程序地址自动保留在堆栈中,当调子程序返回时送还给PC}

(2)绝对调子程序指令 (2KB地址内)

格式:ACALL addrl l

代码:(高8位地址)aioagast, OOOIB(即11H, 31H, 5tH, 71H, 91H, BIH, DIH, FlH)

(低8位地址)a7 *二ao B

操作:(PC)-(PC)+2

(PC)-(SP)+I

((SP) )-(PC7一0)

(SP)-(SP+1)

((SP))“(PC 15一8)

(PC10一0)-addrll

说明:addrll为目标地址的低11位,分别记作aloaga8,*,aoo

(3)子程序返回

格式:RET

代码:22H

操作:(PC15-8)-((SP)) ;原程序高8位地址自动出栈

(SP) f-(SP)一1

(PC7 - 0)-((SP)) ;原程序低8位地址自动出栈

(SP)-(SP)一1

说明:子程序返回指令把栈顶内容回送给PC指针。

注意:此指令必须与ACALL或LCALL指令配对使用。此指令与 RETI均不能使A及 PSW

恢复到原程序状态,如需将其恢复到原状态,需用指令另行处理 (参见中断一节)。

(4)中断返回

格式:RETI

代码:32H

操作:(PC 15一8)}((SP) )

(SP)-(SP)一I

(PC7一0)-((SP))

(SP),(SP)一I

说明:中断返回指令除了把栈顶内容回送给PC指针外,还能释放相应中断逻辑,使之能

接受同级另一中断请求 (参见中断一节)。

·了9

Page 46: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

4.空操作指令

格式:NOP

代码:OOH

操作:(PC), (PC)+1

[例3.7] 首地址分别为

地址。程序如下:

ZADD:MOV RO,#ADRO

MOV R1, #ADR1

MOV R7, # N

CLR C

LOOP: MOV A,@ RO

ADDC A,@ R1

MOV @RO,A

INC RO

INC R1

DJNZ R7,LOOP

ADRO与ADR1的各 n个字节无符号位相加,和存人ADRO的首

;RO指向被加数首地址 (低位字节)

;R1指向加数首地址 (低位字节)

;各有n个字节

;第一次相加,进位应为0

;“和”回放

;RO和R1分别指向下一字节

3.7 位操作指令

MCS一51单片机硬件结构除8位 CPU构成的字节处理机外,还附有一个功能很强的位处

理机 (或称为布尔处理机),特别适宜于位处理任务重、需要解决大量逻辑控制问题的场合。

一般应用中,往往也需对命令字 (SFR专用寄存器)进行初始化,采用字节操作与位操作 (仅

改变或检测某位的状态,而不影响其他位)相结合的方式,常使程序简单明了。

位处理指令共 17条,包括位传送、位逻辑操作和位条件转移三类,分别使用助记符

MOV, CPL, CLR, SETB, ANL, ORL及JC, JNC, JB, JNB, JBC等。在位操作指令中,操作

对象位为进位标志C (C的作用相当于字节操作中的累加器A)和直接寻址位bit(直接寻址位

bit寻址的范围为RAM区的位寻址区和 SFR专用寄存器区)。直接寻址位可以有下列4种表示

方式:(以FO为例)

(1)直接位地址方式:如ODSHa

(2)点操作符方式 (说明什么寄存器的什么位):如PSW.5}

(3)位名称方式:如FO.

(4)标号表示方式:若先用FLG定义FO,则在指令中可用FLG代替FOo

1.位操作指令 (2条)

(1)直接寻址位内容送进位位

格式:MOV C, bit

代码:A2H,位地址

操作:(C)~ (bit)

·40

Page 47: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

(2)进位位内容送直接寻址位

格式:MOV bit, C

代码:92H,位地址

操作:(bit) E- (C)

2.位逻辑操作指令 (10条)

(1)进位位取反

格式:CPL C

代码:B3 H

操作:(C)、 (C)

(2)进位位清0

格式:CLR C

代码:C3H

操作:(C) -0

(3)进位位置 1

格式:SETB C

代码:D3 H

操作:(C) F-1

(4)直接寻址位取反

格式:CPL bit

代码:B2H,位地址

操作:(bit)。 (bit)

(s)直接寻址位清0

格式:CLR bit

代码:C2 H,位地址

操作:(bit) E-0

(6)直接寻址位置1

格式:SETB bit

代码:D2H,位地址

操作:(bit) -1 (7)进位位内容和直接寻址位内容逻辑与

格式:ANL C, bit

代码:82H,位地址

操作:(C)于 (C)八 (bit)

(8)进位位内容和直接寻址位内容逻辑或

格式:ORL C, bit

代码:72H,位地址

操作:(C)~ (C) V (bit)

(9)进位位内容和直接寻址位取反后内容逻辑与

Page 48: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

格式:ANL C,/bit

代码:BOH,位地址

操作:(C)~(C) n(丽)

说明:指令执行后并不改变直接寻址位内容。

(10)进位位内容和直接寻址位取反后内容逻辑或

格式:ORL C, /bit

代码:AO H,位地址

操作:(C)~ (C)V (丽)

说明:指令执行后并不改变直接寻址位内容。

3.位条件转移指令 (5条)

(1)进位C内容为 1转移

格式:JC rel

代码:40H,相对地址

操作:若 (C)=1,则 (PC)“ (PC)+2 + rel

若 (C) =4 1,则(PC)~ (PC)+2

(2)进位C内容不为 1转移

格式:JNC rel

代码:50H,相对地址

操作:若 (C) ="o-' 1,则 (PC)~ (PC)+2+rel

若 (C)=1,则 (PC)~ (PC)+2

(3)直接寻址位bit内容为1转移

格式:JB bit, rel

代码:20H,位地址,相对地址

操作:若 (bit)=1,则(PC)~ (PC)+3+rel

若 (bit) 0 1,则 (PC)。 (PC)+3

(4)直接寻址位 bit内容不为1转移

格式:JNB bit, rel

代码:30H,位地址,相对地址

操作:若 (bit)}1,则 (PC)* (PC)+3+rel

若 (bit)=1,则 (PC)~ (PC)+3

(5)直接寻址位bit内容为 1转移,并清除该位

格式:JBC bit, rel

代码:IOH,位地址,相对地址

操作:若 (bit)二I,则 (PC).~ (PC)+3+rel, (bit) E-0

若 (bit) :}e= 1,则 (PC), (PC)+3

〔例3.8] 2个无符号数分别存于30H, 31H内,比较它们的大小,将小的数放在前,大

的数放在后,若相等,置标志FO为 1}程序如下:

S'T'ART: CIA FO ;标志 FO初始化

42

Page 49: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

CLR C ;比较大小只能用减法,减法都带进位

MOV A, 30H ;

SUBB A,31H ;(A)“ (30H)一 (31 H)

JZ ESTAB ;(A) =0,两数相等,置FO= 1然后结束

JC DONE ;有借位,即 (30H)<(31H)转结束

MOV A, 30H ;既不相等,又无借位即 (30H)> (3l H), (30H)

暂存于A内

MOV 30H,31H ;

MOV 31H,A ;

SJMP DONE ;

ESTAB:SETB FO

DONE: :

说明:第8句与第9句可用XCH A, 31 H;交换后 A内为 (31H)值。

MOV 30H,A,

仁例3.9〕 统计从P1口输人的数据串中正数、负数和零的个数,并分别存人 R0, R1,

R2中,有一个存满即停止统计。程序如下:

START: MOV R0, # 0 ;正数个数

MOV R1, # 0 ;负数个数

MOV R2, # 0 ;0的个数

ENTER: MOV A, PI ;读人P1值存于A内

JZ ZERO ;为0转ZERO处理

JB P1 . 7 , NEG ;P1.7为1表示为负数,转 NEG处理

INC RO ;既不为0,又不是负数,必定为正数,“正数”个

数加1

CJNZ R0, # OFFH, ENTER ;RO未计满,继续从P1读人数据。

AJMP DONE ;否则停止统计

ZERO: INC R2 ;"0”的个数加 1

CJNE R2, # OFFH, ENTER ;未计满,继续读入

AJMP DONE ;否则停止

NEG: INC R1 ;“负数,,个数加 1

ONE RI, # OFFH, ENTER ;未计满,继续读入

DONE:: ;否则停止

说明:实际从P1口读人数据时,应根据数据串的速率在该条指令中插人适当的延时。

3.8 秒表设计

在学习了单片机的全部指令后,便可动手完成一个较为复杂程序的设计。

Page 50: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

1.功能要求:用89C51设计一个 2位LED数码显示 “秒表”,显示时间为00一99s,每秒

自动加1,计满显示 “FF"。另设计一个 “开始”按键和一个 “停止”按键,按 “开始”键,

显示秒数从00开始;按 “停止”键,保持实时时间,停止计时。

2.硬件设计

图3.1所示为秒表的电路原理图。

2200

S, E-

220 Q

图3.1 “秒表”电路原理图

(1) LED数据显示接人:PO, P2作通用I/0接口使用时,具有锁存功能。如果用高亮型

共阳极数码管,可不加驱动电路,在共阳极端和电源+5V之间串人22052限流电阻即可。Po.0

一PO. 7分别接入 “十位显示数码管”的a, b, c, d, e, f, g, h段,P2.0一P2.7分别接人

“个位显示数码管”的a, b, c, d,。、f, g, h段。

(2)功能键接人:手动复位开关S,可作 “开始”键使用,满足设计要求。P3.2 (INTO)

引脚接人Sz“停止”键,正常工作时,该引脚为高电位,按下 “停止”键,该引脚为低电平,

查询该引脚电平可判断该键是否按下。

3.程序设计

在设计较复杂的程序时,大多采用思路清晰、调试简便的 “模块化”设计思想。本例由主

程序和3个子程序模块构成,主程序完成显示初始化、is延时、“停止”键查询和子程序调用

功能,3个子程序分别完成秒计数器加1(取名NBCD)、秒计数器中的BCD码转换成LED显示

码 (取名TBFLIN )、显示码送LED显示器 (取名 DISPIAY)功能。

先将内部RAM的5个单元分别定义为N (BCD码秒计数器),BCD1(个位数缓冲),BCD2

(十位数缓冲),CRTN1(个位显示码缓冲),CRTN2(十位显示码缓冲)。

川 NBCD:完成 (N) + 1- (N)的功能,同时将低4位 (个位)送 BCDI,高4位 (十

位)送BCD2o (2) TBFLIN:将存于 BCD1, BCD2内的十进制数转换成 LED显示码,分别存人 CRTN1,

CRTN2内。

‘44

Page 51: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

(3)DISPLAY:

LED2(PO口)。

源程序如下:

将存人CRTN1(个位)、CRTN2(十位)的显示码送数码管 LED1 (P2口)、

SL3.ASM(实例

ORG OOOOH

AJMP MAIN

ORG 0030H

N EQU 5FH

3源程序)

MAIN

DELAY:

DLI:

DL2:

DU :

BCDI EQU 5EH

BCD2 EQU 5DH

CRTNI EQU 5CH

CRTN2 EQU 5BH

MOV SP, #60H

MOV N,#0

MOV PO, #OCOH

MOV P2, #OCOH

MOV R7 #4

MOV R6, #250

MOV R5,#250

NOP

NOP

DJNZ R5,DI-3

JNB P3.2,MAINS

;定义秒计数器单元,因60H一7FH定义为堆栈区,

60H以下为应用程序可用区

;定义个位数缓冲单元

;定义十位数缓冲单元

;定义个位显示码缓冲单元

;定义十位显示码缓冲单元

;定义60H一7FH为堆栈区

;秒计数器初始位为0

;"0”的显示码OCOH送十位LED

;秒延时

;每I ms检测一次P3.2引脚,若为低电平,则停止

计时

;N秒计数器不等于99,转 NBCD子程序

MAIN I

MAINZ

DJNZ R6,DL2

DJNZ R7,DL1

MOV A,N

CJNE A,#99,MAINZ

SJMP MAINZ

ACALL NBCD

ACALL TBFLIN

ACALL DISPLAY

AJMP DELAY

MOV BCD1,#OFH

MOV BCD2,#OFH

ACALL TBFLIN

ACALL DISPLAY

SJMP MAIN3

;Is时间到且N值又不是99时,(N)~ (N) + 1

;BCD码转换成显示码

;显示码送LED显示器

;进人新的Is延时

;N值为99时,显示 “FF"

MIAN3:

;停止计时或N值为99时,不再执行延时is程序

·45

Page 52: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

NBCD: CLR AC

CLR C

MOV A,N

ADD A, #1

DA A

MOV N,A

ANL A, #OFH

MOV BCD1,A

MOV A,N

SWAP A

ANL A,#OFH

MOV BCD2,A

RET

TBFLIN: MOV A,BCD1

MOV DPTR, #DOT

MOVC A,@A+DPTR

MOV CRTN1,A

MOV A,BCD2

MOVC A,@A+DPTR

;N作BCD码加1计数

;个位送 BCD1

;十位送 BCD2

MOV CRTN2,A

RET

DOT: DB OCOH,OF9H,OA4H,OBOH ;0,I,2,3

99H,92H,82H,OF8H ;4,5,6,7

80H, 90H,40H,79H ;8,9,A,s

24H, 30H,86H,8EH ;C,D,E,F

DISPLAY: MOV P2,CRTN1

MOV PC,CRTN2

RET

说明:本列 “秒表”因延时程序误差而可能不够准确,但可从中体会程序设计思路。

本 章 小 结

1. 89051寻址方式可分为立即数寻址、直接寻址、寄存器寻址、寄存器间接寻址、位寻址、基址加变址

间接寻址和相对寻址七种,其中立即数寻址主要用于对 SFR和片内RAM区置数。

2.访问片内RAM (OOH一7FH)可使用直接寻址和寄存器间接寻址方式,其中工作寄存器区还可使用寄存

器寻址方式,位操作区还可使用位寻址方式。

3.访问SFR只能用直接寻址方式,其中 A, B, PSW, IE, IP, TCON, SCON, PO一P3 11个专用寄存器,

还可使用位寻址方式。

·46

Page 53: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

4.基址加变址间接寻址 (MOVC)仅用于访问 (读)程序存储器内的表格数据,且只能读入累加器 A内。

5.访问 (读、写)片外数据存储器只能用寄存器间接寻址 (MOVX),且只能与累加器A互送数据。

6. 89051共有 III条指令,按功能可分为数据传送、算术操作、逻辑运算、程序转移、位操作五类,其中

调用与返回 (RET), PUSH与 POP、中断与中断返回 (RETI)必须成对使用。

思考题与习题

3.1 89051有哪几种寻址方式?请举例说明。

3.2 89051指令按功能可分为哪五类?请举例说明。

3.3 内部 RAM的08H单元可以有哪几种寻址方式?举例说明。

3.4 指出下列指令的寻址方式和功能:

①MOV A,#30H OMOV A, 30H

C'MOV R0,#30H ④MOV@R0,#30H

⑤MOV@R0, A )MOVC A,@A+DPTR

CAJMP LOOP .SETB P1.0

3.5 写出将片内RAM中30H一3FH的数据传送给片外40H一4FH的程序。

3.6 写出将 ROM中O100H一OIOFH的数据传送给片内40H一4FH的程序。

3.7 已知 (A)二85H, (B)二86H, (PSW) =03H,请说明执行下列程序后堆栈中60H一62H及 SP内容

各为多少?

(1)MOv SP,#60H (2) POP PSW

PUSH A POP B

PUSH B POP A

PUSH PSW

3.8 请编写一段程序将累加器 A的数据 (十六进制)转换为 BCD码,个位存人30H内,十位存人31H

内,百位存人32H内。

3.9 设计初始地址为DATA的数据表格,表中按顺序放有 1024个元素值,每个元素为二字节。请编写能

根据R5, R4中元素序号查找对应元素值并放人R5, R4的程序 (R5为高位字节、R4为低位字节)。

3.10 设 DPH和DPL中有两数 。和 b,且均为小于 10的整数,试用查表法编写求 c二a,十宁,并把。送人

DPTR内的程序。

3.11 试编写双字节乘法子程序。

3.12 试编写延时2 min的延时子程序。

47

Page 54: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

第4章 定时/计数器及中断系统

【学习指导】 本章介绍定时/计数器及中断系统的结构和使用方法,并介绍 “秒表”查询和中断两种方式的相关程序以及数字频率计程序的设计。通过本

章学习,要求掌握:

1. TMOD, TCON, IE, IP四个专用寄存器各位的定义与设置。 2. TO与TI定时或计数初值的计算与设置方法。

3.中断源、中断标志及相应入口地址。

4.正确使用定时/计数器。

5.正确使用中断。

6.会编写一个完整的汇编语言程序。

4.1 定时/计数器

89C51有两个定时/计数器,即To和TI,主要用于内部定时、外部脉冲计数、测量脉冲宽

度和作串行口的波特率发生器。这些功能可使单片机方便地用于实时控制、定时检测,还可作

分频器和事故记录来用。其结构特点集中体现在以下方面:

1. 2个定时/计数器,由程序设置作定时器还是作计数器。这二种模式又可分别设置为工

作方式0、方式 I、方式2和方式3,

2.其定时时间或计数值也由程序设置,但都不能超过所设的最大值。

3.在定时时间到或计数值计满回零时产生溢出标志,可由程序查询相应标志 (查询方式)

或设置为自动产生中断 (中断方式)。

4.1.1定时/计数器的功能结构

什么情况下作定时器?什么情况下作计数器?如何确定定时时间?下面以定时/计数器0

48

Page 55: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

为例加以介绍。图4.1所示为定时/计数器0工作方式0结构图。

中断请求

图4.1 定时/计数器0工作方式0结构图

该结构图由控制部分、计数器及溢出标志(查询或中断标志)三个部分组成。控制部分有两

个开关S、和几,S,称为功能开关,由功能选择位C厅决定;S:称为运行控制开关,由门控制位GATE及运行控制位TRO决定。计数器由TL0和THO构成16位加1计数器,由方式控制位M0,

M1控制4种工作方式。当计数器产生溢出时,溢出标志TFO由0变1,此时表示定时时间到或计

数器满,可由程序进行查询或作中断标志用。允许位ETO=I,EA=I时,向CPU申请中断,有关

中断允许位的概念与设置将在4.2节中断系统中介绍。对于功能选择位C厅,门控制位GATE,

方式控制位 M1 ,MO以及运行控制位 TRO和溢出标志TM 的设置或检测,主要是通过 TMOD和

TCON两个专用寄存器来实现的。在分析其工作过程前,先来认识这2个专用寄存器。

4.1.2 定时/计数器的方式寄存器TMOD和控制寄存器TCON

1.方式寄存器TMOD

TMOD的地址为89H,复位时值为OOH,可通过字节传送指令来设定各位状态,

用位操作指令。其中低4位用于控制定时/计数器0,高4位用于控制定时/计数器

义如下 :

但不能使

1。各位定

GA丁王

D6 DS D4 D3 D2 D1 DO

CiT)M!】、。,】。二E{:、{、、一、。,

~一— ~、一 一 一 、/一— 一夕定时/计数器I 定时/计数器0

GATE:门控制位。为0时,作内部定时或外部计数,TO计数器运行控制由

l时,作脉冲宽度测量,TO运行控制由P3.2引脚和TRO逻辑与决定。

C/T:功能选择位。为。时,作内部定时;为1时作外部计数。

M 1 , MO:16位计数器工作方式控制位。

为00时,方式。,13位定时/计数器;

为01时,方式1, 16位定时/计数器;

为 10时,方式2,自动重载初值的8位定时/计数器;

为11时,方式 3, TO构成二个独立的8位加1计数器,T1无此工作方式,

发生器。

TRO决定;为

但可作波特率

Page 56: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

2.控制寄存器TCON

TCON的地址为88H,复位时值为OOH,一般用位操作指令设置或改变其状态。

WON的高4位中TRO, TR1用于控制定时器0和 1的运行,TFO, TF1作定时器0和1的

溢出标志;低四位用于控制外部中断方式并作相应中断请求标志,详见中断系统4.2.1节。各

位定义如下:

D7 D6 D5 ) D3 D2 D1 DO

二,一TR,一T。一TR。一二,一,T1 I二。1,二

3.工作过程分析

(1)内部定时与外部计数:如图4.1所示,当C/T = 0时,计数器的脉冲来自晶振频率的

12分频器,当晶振为12MHz时,计数脉冲周期为1 f.s,故称 “内部定时”;当C/T = 1时,计数脉冲来自TO即P3.4引脚 (Tl定时器计数脉冲来自TI即P3.5引脚),故称 “外部计数”。

无论用作内部定时还是外部计数,其门控制位GATB = 0,经反相为I,再和INTO即P3.2引

脚 (定时器1为丽丽一即P3.3引脚)“逻辑或”使A点电平为1,因此,S2的接通与断开,完全

由运行控制位TRO决定 (定时器1由TR1决定),TRO二1时,S2接通,计数器工作;TRO二。

时,S2断开,计数器停止工作。

(2)脉冲测量:被测脉冲由INTO即P3.2引脚接人 (用定时器1时由INT1即P3.3引脚接

人),预置Tft。二1, GATE= 1, TO为定时方式。则当IN丽为高电平时,TO计数,当一丽丽变为低

电平时,TO自动停止计数,同时,INTO向CPU申请中断。

4.1.3工作方式及工作编码

前面分析了定时/计数器控制部分的构成与设定,其计数器由控制位ml, MO可设定为4

种工作方式。除工作方式3, TO与T1不相同外,其余3种工作方式完全相同。

1.工作方式0

在此工作方式下,定时/计数器按13位加1计数器工作,TH构成13位中的高8位,TL的

低5位构成13位中的低5位,计数器溢出时TF二1,故TH, TL初值为0时,最大计数值应为

2'3=8192

2,工作方式 1

方式1和方式0几乎完全相同,惟一差别在于在以方式1工作情况下,TH与TL以全8位

参与操作,构成16位加1计数器,最大计数值为26 = 655360

3.工作方式2

在方式2时,定时/计数器分成一个8位的寄存器 (TH)和一个8位的加1计数器 (TL),

初始化时,必须对它们送相同的定时初值或计数初值。TL计数溢出时,不仅使标志TF置 1,

而且发出重装载信号,使三态门打开,将TH初值自动送入TL,使TL从初值开始重新计数,

而且TH内容保持不变。故方式2为自动重新装入初值的8位定时/计数器,又称为8位自动重

装载方式。最大计数初值为2' = 256。图4.2是T1工作方式2的结构图。T1的工作方式2常用

·50

Page 57: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

作串行接口的波特率发生器。

图4.2 定时/计数器1工作方式2结构图

4.工作方式3

工作方式3仅对TO有效。THO, T1.0为两个独立的8位加1计数器,TLO使用TO的状态控

制位GATE, C/T及TRO,工作过程与方式。、方式1类似,最大值为256o THO只能作为非门

控方式的定时器,借用T1的控制位TR1, TF1, TO的工作方式3结构图如图4.3所示。

1/12几c

1/12儿,

中断TO r i脚

GATE

INTO弓}脚

1/12fos, 中断

图4.3 定时/计数器0工作方式3结构图

如把TI设置为工作方式 3,相当于 TR1 = 0,即T1停止工作。TO采用工作方式 3后,

89C51就具有3个定时/计数器,即8位的定时/计数器TLO, 8位的定时器THO和16位定时/计

数器 (TH1, TL1)。定时/计数器 1虽然还可以选择为方式0、方式 1、或方式2,但由于TR1

和TF1被THO借用,故只能作串行口的波特率发生器 (如8位自动重载)。

5.定时/计数器0和 1的工作编码

表4.1列出了与定时/计数器0和1有关的寄存器。表4.2列出了工作方式与TMOD编码设置。

表4.1 与定时器1和2有关的寄存器

寄存器名称 用 途 地址 位寻址 复位值TCON 控制寄存器 88H 有 OOH

TMOD 方式寄存器 89H 无 (OH

T]刀 定时器TO低字节 89H 无 OOH

TLl 定时器T1低字节 8BH 无 OOH

THO 定时器TO高字节 8CH 无 OOH

TH1 定时器T1高字节 8DH 无 OOH

Page 58: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

表 4.2 工作方式与 TMOD编码设置

工作方式 GATE C/T M 1 MO 16进制 说 明

内部定时方式0 0 0 0 0 OH 13位方式

内部定时方式 1 0 0 0 1 1H 16位方式

内部定时方式2 0 0 1 0 2H 8位自动重载

内部定时方式3 0 0 1 1 3H T1无,TO为二个独立 8位

外部计数方式0 0 1 0 0 4H 13位方式

外部计数方式1 0 1 0 1 5H 16位方式

外部计数方式2 0 1 1 0 6H 8位自动重载

外部计数方式3 0 1 1 l 7H T1无,TO二个独立8位

外部控制 1 X X X

波特率发生器 0 0 1 0 2H 仅T1有此功能

(1)表中第1行一第8行为内部控制,即通过指令对TRO或TR1置位/清零来启动/停止相

应定时/计数器。内部定时计数脉冲来自主时钟频率的12分频;外部计数,TO由P3.4引脚输

人,T1由P3.5引脚输入。

(2)外部控制指TR二1,相应引脚P3.2(控制定时/计数器0)或P3.3(控制定时/计数器

1)为 1时,启动其工作;为0时,关闭其工作。外部控制时仍可分内定时4种工作方式与外

计数4种工作方式。

(3)定时/计数器 1不能设置在方式3工作,否则停止工作。定时/计数器0设置在方式3

工作时,相应定时/计数器1不能再置TF1为 1,即不能申请中断。

(4)定时/计数器 1作波特率发生器使用时,注意必须关闭相应中断 (ET1 =0)。上表仅列

出用主时钟频率作波特率的基准时钟,即内定时方式。

例如:若将 T1设定为 16位外部计数器,'1'0设定为 16位内部定时,则 TMOD值为51H

(01010001);若T1设定为8位自动重载 (如用作串行接口的波特率发生器),功为8位内部定

时,则TMOD值为21H (00100001B),

4.1.4定时/计数器的初始化

定时/计数器TO和T1是可编程序的,其工作方式和工作过程可通过程序进行设定与控制,

即所谓的初始化。因此,在使用定时/计数器之前,必须对它进行初始化。

1.初始化的步骤

(1)给TMOD送方式控制字:(只能用字节操作指令)如MOV TMOD, # 21 H表示T1设定

为8位自动重载,TO设定为 16位内部定时。

(2)给TO (TLO, THO)或T1 (TL1, TH1)送定时器初值或计数器初值。

(3)启动或停止TO, T 1的运行 (一般用位操作指令)。

·52

Page 59: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

如:SETB TRO;启动TO的运行

CLR TRO;停止TO的运行

2.定时器初值与计数器初值的计算与设定

(1)定时/计数器初值的计算与设定:定时/计数器无论用作定时还是计数,其计数部件功

能均为加1计数器,区别仅在于作定时器时,计数脉冲来自内部振荡信号 (f.-)的12分频;作计数器时,计数脉冲来自TO (P3.4)或TI (P3.5)引脚。当计数器由全 “1”变为全 “0"

时,产生溢出标志,TF为1。设定不同的计数初值时,计数器产生溢出时所需的脉冲个数 (计

数值)也就不同。假如计数初值设定为TC (TC的范围为0一M一1), M为最大计数值 (16位

方式时为65536, 13位方式时为8192, 8位方式时为256)。则计数值N=M一TC, (N范围为M

一1)。由此,便可得到计数器初值的计算公式:

TC二M一N

[例4.1」 设T1为8位自动重载方式,计数值为20时计数器初值的设定方法为:

MOV TL1, #236; M=256, N=20, TC=M一N=256一20二236

MOV THl,#236

(2)定时器初值计算与设置:作定时器使用时,计数脉冲来自人,。的12分频,设计数脉冲周期为TY(九5e = 12MHz时TY为1Ees),则定时时间T二NxTY二(M一TC) x TY,即计数值(脉冲个数)乘以脉冲周期,由此,便得到定时器初值的计算公式:

TC=M一 (T/TY)

[例4.2] 设TO为16位内部定时,要求设定为50 ms的定时时间,则定时器初值 TC二

65536一50000tis/ 1 F cs二65536一50000 =15536。用如下指令便可设置初值: MOV DPTR,#15536

MOV TLO,DPL

MOV THO,DPH

显然在关.c = 12MH:时,16位方式最大定时时间为65.536ms, 13位方式最大定时时间为8.192 ms, 8位方式最大定时时间为0.256ms。注意,计数器产生溢出后,必须重新对TH, TL

设置初值 (方式2除外),否则下一次计数器将从0开始计数。另外,作外部计数时,外部计

数的高低电平持续时间不得小于1个机器周期。

[例4.3〕 用TO作50m。内部定时,每50ms在T1引脚产生一脉冲供T1计数器作计数脉

冲,若T1计数器为20,便可得到定时 1秒的定时程序:

MOV TMOD, # 21H ; 初始化步骤1,设定工作方式:m为16位内定时,

T1为8位自动重载

MOV DPTR, # 15536 ; 初始化步骤2,设定定时或计数初始值

MOV TLO, DPL ; TO为50m。内定时

MOV THO,DPH

MOV TL1, # 236 ; T1计数值为20 = 256一236

MOV TH1,#236

SETB TRO ; 初始化步骤3,启动

SETB TRl

5了

Page 60: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

LOOP: JNB

CLR

MOV

MOV

MOV

CLP

TFO,$ 即50 ms未到,

TFO

DPTR

50 ms已到,

#15536

DPL ;

DPH

TFO不为1,

TFO为 1表示

原地等待,继续查询

清标志

功 重置初值

; 每50 ms在P3.5 (T1)引脚产生一脉冲送T1作计

数脉冲

SETB P3.5

JNB TF1, LOOP ; TF1不为1,即不够20个脉冲,继续查询TFO

CLR TF1 ; TFl为1,已有20个脉冲,即20 x 50ms二Is时间到

上述程序若将TO改为60ms内定时,TI计数值改为60000, 16位外部计数时则得到60ins x

60000二1小时的定时程序。

4.2 中断系统

上一节中定时程序采用的是查询方式,这种方式占用 CPU太多的时间,使 CPU“太忙太

累”,能否使定时/计数器独立工作,即定时时间到或计数器产生溢出、相应标志TF置1时,

"I晦时通知”CPU进行处理呢?能,这就是所谓的 “中断”方式。

当中断源 (定时/计数器TO或T1均为中断源)向CPU发出 “中断请求”(标志TM或TFI

置1)时,CPU立即停止原程序的执行 (相应中断是允许的),转为执行中断服务,即 “中断

响应”(执行中断服务程序,如 仁例4.3了中定时器TO的50ms到,重新置初值15536,在P3.5

引脚产生一个正脉冲)。中断服务完后自动返回,继续执行原程序,这一过程称为 “中断”。有

了这一功能,CPU便可分时处理多个程序,避免等待和查询,从而大大提高了工作效率。

4.2.1中断源与中断服务程序的人口地址

1.中断源

89051有5个中断源。

(1)外部中断0, 1

外部信号如输入/输出设备的中断请求、掉电、设备故障的中断请求等,作为外部中断信

号从P3.2 (INTO)引脚或P3.3 (INT1)引脚输人。外部中断请求有2种触发方式,即电平触发

和负跳变触发,由TCON中断方式控制位ITO与 IT1来决定 (参见4.1.2一节)。如将 TCON中

ITO(或IT1)设置为0时,称为低电平触发,即INTO(或 INT1)出现低电平时,使TCON中外

中断相应请求标志IEO〔或IE 1)置1;当I'm 〔或IT] )设置为I时,称为边沿触发,即INTO

(或INTI)引脚的负跳变使标志IEO(或IE1)置1,向CPU申请中断。引脚上的高低电平至少

应保持一个机器周期。

(2)定时/计数器0, 1溢出中断

·54

Page 61: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

定时/计数器0, 1溢出时,由内部硬件自动置标志TFO或TF1为1,向CPU申请中断。

(3)串行口中断

串行口中断请求由数据发送或数据接收引起,当一帧数据发送完后 (发送缓冲器空),内

部硬件自动置标志TI为 1;当一帧数据接收完后 (接收缓冲器满),自动置标志RI为1(详见

5.1串行口SCON一节)。,ri与RI“逻辑或”后向CPU申请中断,即数据发送与数据接收合并中一个中断源。

2.中断请求标志

上述5个中断源向CPU申请中断,都是通过相应标志置1实现的。

(1)标志IEO与IEI:占用TCON中的D1与D3位,为外中断0与1的中断请求标志。CPU

响应中断请求后,内部硬件自动清0。采用查询方式时,必须用程序指令清0 (CLR IEO或

CLR IEl)。

(2)标志TFO与TF1:占用TCON中D5与D7位,为定时/计数器。、I的计数溢出中断请

求标志。CPU响应该中断后,内部硬件自动清0。采用查询方式时,必须用程序指令清0 (CLR

TFO或CLR TF1)。

(3)标志RI与TI:占用SCON中DO与D1位,为串行接口数据接收与发送中断请求标志。

与前面4个中断不同的是,CPU响应中断后,不能自动清0。因此无论采用中断方式还是查询

方式,都必须用程序指令立即清0 (CLR RI或CLR TI)。中断方式时,该指令一般为中断服务

程序的第一条指令,以避免重新触发中断。

3.中断服务程序人口地址

当中断源发出中断请求 (相应标志置1), CPU响应中断后 (停止原程序的执行),转为执

行中断源 “紧急处理”程序,即所谓执行 “中断服务程序”,这个 “中断服务程序”放在程序

存储器中的哪个起始地址单元即 “人口地址”内,89C51有严格的规定:

外部中断0: 人口地址0003 H

定时/计数器0溢出:入口地址OOOBH

外部中断 1: 人口地址0013H

定时/计数器 1溢出:人口地址001 BH

串行口: 人口地址0023H

中断服务程序如果不放在相应起始地址内,则CPU无法找到。上述各单元相距很近,仅8

个字节。如果中断服务程序少于8个字节,可直接放置。一般中断服务程序都较长,所以人口

地址内往往放置一条无条件转移指令,以便分别跳转到中断服务程序的实际起始地址。

4.2.2 中断结构与中断允许寄存器IE及中断优先级控制器IP

1.中断允许寄存器IE

IE在专用寄存器SFR中A8H地址单元,系统复位时为OOH o

89C51的5个中断源,为便于灵活使用,在每一个中断请求信号的通路上设置一个位控开

关,即所谓的 “中断屏蔽触发器”。当位控开关为1时,中断请求信号才能进人CPU,称为

“中断允许”或 “中断开放”;当位控开关为0时,即使中断标志为1, CPU也不响应中断,称

.55

Page 62: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

为 “中断屏蔽”或 “中断禁止”。另外,还设置了一个总允许位控开关EA。这些位控开关由中

断允许寄存器IE控制。IE各位的定义如下:

中断允许寄存器查询硬件

INTO

INTl

高优先级中断请求

中断矢量

低优先级中断请求

中断矢量

DO一EXO

图4.4 中断系统结构图

D7 D6 D5 D4 D3 D2

EA一_}_一E,一ETII EXI

(1) EA:中断总允许位。EA=0,禁止一切中断;EA二1,各中断源是允许还是禁止,分

别由各自允许位确定。

(2) ES:串行口中断允许位。ES =0,禁止串行口中断;ES = 1,允许串行口中断。

(3) ETl:定时/计数器1允许位。若ETl = 0,禁止定时/计数器1中断。

(4) EXl:外部中断1允许位。若EM = 0,禁止外部中断to

(5) ETO:定时/计数器0允许位。若ETO=0,禁止定时/计数器0中断。

(6) EXO:外部中断0允许位。 若EXO二0,禁止外部中断Oo

2.中断优先级寄存器IP

89651中断分为2个优先级,每个中断源的中断优先级都可以通过优先级寄存器IP的响应

位来设定。IP在 SRF中B8H地址单元,系统复位时为OOHo IP各位的定义如下:

DO-PXO

D7 D6 D5 D4 D3 D2

P'1',一PXI

(1) PS:串行口中断优先级选择位。PS= 1,串行口中断为高优先级;PS =0,串行口中断

为低优先级。

(2) PT1:定时/计数器1中断优先级选择位。PT1二1,定时/计数器1为高优先级;PT1二

0,定时/计数器1为低优先级。

(3) PX1:外部中断1的中断优先级选择位。PX = 1,外部中断1为高优先级;PX二0,外

部中断1为低优先级。

(4) PTO:定时/计数器0中断优先级选择位。PTO二1,定时/计数器0为高优先级;PTO二

0,定时/计数器0为低优先级。

.56

Page 63: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

(s) PXO:外部中断0中断优先级选择位。PX二1,外部中断0为高优先级;PX=0,外部

中断0为低优先级。

3.优先级结构

CPU在响应中断时有优先级和优先权原则。

(1)优先级原则

a. CPU在响应多个中断请求时,先处理高优先级的中断服务程序,返回主程序并执行一

条指令后再处理低优先级的中断服务程序。

b.低优先级的中断服务程序可被高优先级中断请求所中断,即CPU在处理低优先级中断

服务程序时,若有高优先级中断发出中断请求,则CPU停止目前的中断服务程序,转为执行

高优先级的中断服务程序。处理完后再返回处理原来停止的低优先级中断服务程序,即所谓的

二次嵌套。

c一个中断得到响应后,它同级或低级的中断不能中断它。

(2)优先权原则

当S个中断中有2个或2个以上中断处于同一优先级且同时请求中断时,CPU先处理优先

权高的,后处理优先权低的。其优先权由高到低按外部中断0、定时/计数器0中断、外部中

断1、定时/计数器 1中断、串行口中断的顺序排列。

4.2.3 中断的响应与撤除

1.中断响应的条件

(1)相应中断是开放的。

(2) CPU未处理同级或更高级的中断。

(3)正在执行的指令已完成或执行最后一个机器周期。

(4)正在执行的指令如果为RETI或读写IE, IP指令时,至少需要再执行一条其他指令后

才会响应中断请求。

2.中断响应的过程 (内部硬件自动完成)

(1)每一个机器周期,CPU对所有中断标志顺序地检查一遍,按照优先级及优先权原则,

安排好响应顺序,当满足中断响应条件时,使相应最高优先权触发器置1.

(2)保留断点,即把程序计数器PC内容压人堆栈保存。

(3)清除相应中断请求标志IEO、工E1或TFO, TFI.(注意:串行口TI, RI必须用程序指

令清除。)

(4)把被响应的中断服务程序的人口地址送入PC,转人执行相应的中断服务程序。

3.中断响应时间

CPU响应中断时间一般为3一8个机器周期,在采用中断方式定时时,必须考虑其误差,

最短三个机器周期,包括:第一个机器周期用于查询中断标志 (若标志建立正好处在CPU执

行某指令的最后一个机器周期),第二和第三个机器周期用于保护断点,关闭CPU中断。未包

括2个机器周期的转移指令。

4.中断返回

5夕

Page 64: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

根据中断的目的,必须为相应中断源编写一个中断服务程序。任何中断服务程序的最后一

条指令,都必须是RETI,以便CPU自动从堆栈取出断点地址回送程序计数器PC,返回中断前

的原程序继续执行 (参见RETI指令功能)

5.中断请求的撤除

CPU响应中断请求后,在中断返回 (执行RETI)前,必须撤除请求,否则会错误地再一

次引起中断。这是不允许的。对于定时/计数器0, 1的中断请求及负跳变触发方式的外部中断

0, 1的中断请求,CPU在响应中断后内部硬件自动清除其标志TFO, TF1, IEO, IE1。对于串

行口中断标志,由于内部无硬件自动清除功能,必须在用户编制的中断服务程序中用指令CLR

RI或CLR TI清除。对于电平触发的外部中断,由于CPU对INN, INTI引脚没有控制作用,故

需用外接电路来撤除中断请求信号,或改为负跳变触发方式。

4.2.4使用中断方式完成程序功能的步骤

使用中断方式,必须按下列步骤进行。

1.在中断源相应入口地址放置一条跳转指令。例如定时/计数器0采用中断方式时:

ORG OOOBH

AJMP CTPROGO; CTPROGO为定时/计数器0的中断服务程序 “标号”。

2.中断系统初始化:开放相应中断及设定优先级 (只开放一个中断时可不予考虑),若为

外部中断,还应设定低电平还是负跳变中断触发方式。

SETB ETD; 开放定时/计数器0中断

SETB EA; 开放中断总允许

3.编写中断服务程序。注意:中断服务程序最后一条指令必须是中断返回指令 RETI o

4.3 定时/计数器与中断的应用

4.3.1秒表程序再设计

学习了定时/计数器及中断后,在不改变硬件电路的条件下,对3.8节秒表程序进行改进,

一方面可提高秒表的准确度,更重要的是通过相互对照.体会定时/计数器与中断的应用。定

时/计数器应用可分为查询方式 (不用中断)和中断方式 (使用中断)二种,现将二种方式对

照介绍,以利于掌握。

1.查询方式

本程序以定时/计数器0作50ms定时,定时/计数器 1作20脉冲计数,完成50ms x 20二is

的定时。程序开始的定义语句及NBCD, TBFLIN, DISPLAY子程序与3.8节秒表程序完全相同,

不再重复。现将主程序改进如下:(注意定时/计数器初始化的3个步骤)

Page 65: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

#60H

#0

#OCOH

#OCOH

#61H

; 显示初始化

SP

N

PO

PZ

MAIN: MOV

MOV

MOV

MOV

M0V TMOD

DELAY:

MOV

MOV

MOV

MOV

MOV

SETB

SETB

JNB

DPTR。#15536

; TI为8位自动重载计数方式,TO为 16位定时

方式

; TO定时时间为50n-is (fog。二12MHz)

TLO,

THO

TL1, ; T1计数值为20

TH1

TRO

TR1

TFO,

DPL

,DPH

#236

#236

CLR TFO

MOV TLO,DPL

MOV THO,DPH

CLR P3.5

; 查询TFO是否置1,不为1即50ms未到,原地

等待

; 50ms到,清标志

; 重新置初值

; 在P3.5 (T1)引脚产生一个脉冲,送T1作计

数器脉冲

SETB

JNB

P3.5

P3.2 M AIN3 ; 查询 P3.2 (INTO)引脚是否为低电平,若为

低电平停止计数

JNB TF1, DELAY ; 查询TF )是否置 1,不为1,表示 T1引脚未满

20个脉冲,即1。未到

MOV A,N ;

CJNZ A,#99,MAINZ ;

SJMP MAIN2

MAIN]: ACALL NBCD

ACALL TBLIN

ACALL DISPLAY

AJMP DELAY

MAIN2: MOV N,#OFFH

ACALL TBLIN

MAINS: ACALL DISPAY

SJMP MAIN'S ; 计满 “99",运行延时程序

说明:与3.8节秒表程序相比,仅将]s的软件延时改为定时/计数器延时,其余部分完全

相同。关于定时/计数器的初始化,请参照例4.1程序。

·59

Page 66: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

2.中断方式

上述程序用了三个查询,即查询TO的标志 TFO,查询T1的标志TF1,查询外中断口的引

脚P3.2是否为低电平。这些查询工作占用了CPU很多时间,并且 P3.2引脚电平的变化 (“停

止”开关拨下)也不能及时反映给CPU。将上例程序改为中断方式后,则更为实用,即使用中

断方式实现三个查询功能。

(1)程序结构分析

全部程序包括起始汇编与定义语句、主程序、三个中断服务程序、三个子程序四部分。

a.起始汇编与定义语句内容包括主程序、中断服务程序人口地址的定义以及 NBCD,

BCD2, CRTN1, CRTN2寄存器的定义。

b.主程序内容包括显示初始化、定时/计数器初始化、中断初始化。

c.定时/计数器0中断服务程序内容:TO设置为50ms内定时,TO中断表示50 ms时间到,

此时CPU作些什么事情呢?首先重新置初始值,接着在T1 (P3.5)引脚产生一个脉冲送T1作

计数输人,然后返回主程序。中断一次,计数器T1值加to

d.定时/计数器 1中断服务程序内容:T1设置为20个脉冲计数,T1中断表示 is时间到。

先重置初值,若秒计数器不满99,则执行 (N) + 1送 (N),进行BCD转换,送显示,然后返

回主程序;若秒计数器为99,则停止计时,显示 “FF",然后返回。

e.外中断0服务程序内容:外中断0中断,表示 “停止”键按下,停止计时 (关闭总中断

即可),维持原显示数据,然后返回。

(2)源程序 (注意:使用中断方式完成程序功能的三个步骤)

ORG OOOOH ; 起始汇编程序部分

AJMP MIAN

ORG 0003 H ; 中断使用步骤 1

AJMP INTPROGO ; 转人外中断0服务程序

ORG OOOBH

AJMP CTPROGO ; 转人定时/计数器0中断服务程序

ORG 001 BH

AJMP CTPROGI ; 转入定时/计数器1中断服务程序

N EGU 5FH

BCD EGU 5EH

BCD2 EQU 5DH

CRTI EQU 5CH

CRT2 EQU 5BH

ORG 0030H

MAIN: MOV SP, #60H

MOV N,#0

MOV P0, # OCOH ; 显示初始化

MOV P2,#OCOH

MOV TMOD, # 61H ; 定时/计数器初始化步骤1

60

Page 67: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

MOV

MOV

MOV

MOV

MOV

SETB

SETB

SETB

SETB

LOOP

LOOM

SETB

SETB

SETB

MOV

NOP

DJNZ

SJMP

MOV

DPTR,#15536

TLO, DPL ; 定时/计数器初始化步骤2

TH1,DPH

TL I,#236

TH1,#236

ETO ; 中断使用步骤2— 中断初始化,开放TO中断

ET1 ; 开放T1中断

EX1 ; 开放外部中断0

in ; 负跳变触发,“停止”键按下时,在 INTO引脚

产生负跳变

EA ; 开放中断总允许

TR1 ; 定时/计数器初始化步骤3

TRO ;

R7, # OFFH ; LOOP程序表示CPU等待中断,无事可做

CTRROGO:

R7,LOOM

LOOP

TI刀。DPL ; '1 '0服务程序,50 ms到重置初始值,在T1引脚

产生 1个脉冲

MOV THO,DPH

CLR P3.5

SETB P3.5

RETI

CTPROG 1 : MOV A, N ; T1中断服务程序

CJNE A,#99,CT1

MOV N, # OFFH ; N值为99时,显示 “OFFH", TO, TI停止运行

CLR TRO

CLR TR1

CTI: ACALL NBCD ; 列值不为99时,(N)‘ (N) + I

CT2: ACALL TABIN

ACALL DISPLAY

RETI

INTPROGO: CLR EA ; 外中断。服务程序。“停止”键按下时,关闭总

中断,停止计时

RETI

说明:

(I)本例中3个子程序 NBCD, TBLIN, DISPLAY与3.8节完全相同,省略。

(2)功 与外中断0的中断服务程序较短,可直接放置在相应人口地址内。

6]

Page 68: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

(3)未设定中断的优先级,复位时为同级,不会产生嵌套,故未作 “现场保护”处理。

4.3.2简易数字频率计的制作

当温度、压力、转矩和转速等物理量通过相关传感器转换成频率信号时,可利用数字频率

计对它们进行测量、显示,并通过串行口将数据发送出去。仍使用TO作50rns内定时 (中断方

式),N作20个脉冲减 1计数,表示 is时间到。T1作频率计使用。由于T1最大计数值为

65535,在定时时间为is时测量范围为1 Hz一65kHz左右,对于更低的频率,可延长定时时间;

对于更高的频率,可减少定时时间或外接分频器。换挡可由单片机自动换挡确定定时时间,也

可用测量脉冲周期的方式再转换成频率。本例仅讨论基本量程的测量,以便进一步掌握单片机

的基本使用方法。

1.功能要求

用89C51设计一个信号输人幅度为3一5V、频率为1 Hz一65 kHz的数字频率计。显示位数5

位,超过65535时,显示 “FFFFH"。要求每秒采样显示一次。

2.硬件设计

如图4.5所示。 2200 220 4 220 92 220 4 220 Q

濒+5V= f a bI II_I霸+5V颐+5V断+5vK f a bI II_I骂+5vf a b~I I1-1

‘口

哟阶

门动阎

,引司闯

司d阎

N洲侧州

一剑洲

口钊刘

图4.5 简易数字频率计电路原理图

(1)外测频率信号接人:外测信号经限幅整形 (74HC14)后接人T1 (P3.5)引脚,供T1

计数。

(2) LED数码显示接人:用5片HC373分别作个位一万位的数据输人锁存驱动,各片相对

应的数据输人端DO - D7分别并接后接人PO.0 - PO.7;数据输出端QO 07分别接到个位一万

Page 69: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

位显示器的a-f段;个位一万位锁存器锁存端11脚分别接到P2.0 - P2.4。数据显示器采用高

亮共阳极数码管,在共阳极与十5V之间串入2200的限流电阻。

3.程序设计

(1)程序结构分析:本程序用TO作50 ms定时,T1作频率计数。由TO与N(需定义,初

值为20)配合完成is定时。is时间到,从 T1计数器读出2字节 (16位二进制)数据,转换

成5位BCD码,存人BCDO一BCD5(需定义),最后送显示。因此全部程序包括起始定义语句、

主程序、2个中断服务程序和3个子程序。

a.起始汇编程序及定义语句包括主程序及2个中断服务程序人口地址的跳转指令,N减1

计数,NBCDO一NBCD4, CRTO一CRT4缓冲及数据转换时临时借用的AL, AH, BL, BH, CL,

CH, DL, DH等共19个寄存器的定义。请参照4.3.1节自行完成。

b.主程序内容为显示初始化,定时/计数器初始化,中断初始化。

。.定时/计数器 1中断服务程序:T1中断表示计数器有溢出,频率超过 65535 Hz,实现显

示5个 “F",然后返回。

d.定时/计数器0中断服务程序:ID中断表示50 ms时间到,首先重置初值,然后判断

(N)一1是否为0。若不为0,则 1秒时间未到,返回主程序;若为0,读取T1计数器内容,

送DH, DL,重新给TO, T1置初值 (准备下一秒的采样),然后调用 NBCD16(将 16位二进制

码转为BCD码,参见例3.11), TBLIN(将BCD码转为显示码,参照3.8节秒表程序自行完

成)、DISPLAY三个子程序,最后返回。

(2)主程序及2个中断服务程序如下:

MAIN: MOV SP, #60H

MOV N, # 20 ; 定时l秒的N值

MOV PO, # OCOH ; 显示初始化

MOV P2, # 0 ; 5个锁存器锁存端置0

MOV P2, #OFFH

MOV TMOD, #51H ; T1: 16位外部计数;T0: 16位内定时

MOV DPTR, #15536 ; TO置初值

MOV T切 ,DPL

MOV THO,DPH

MOV TL1, # 0 ; TI置初值

MOV TH1, #0

SETB ETD ; 开放TO中断

SETB ETI ; 开放T1中断-

SETB EA ; 开放中断总允许

SETB TR1 ; 启动TI,开始计数

SETB TRO ; 启动TO,开始定时

LOOP: MOV R7, # OFFH ; CPU等待中断,可用2.3.3节单灯闪烁程序取

LOOM : NOP

Page 70: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

DJNZ R7,LOOPI

SJMP LOOP

; T1溢出中断

CTPROGI: MOV PO,#8EH

MOV P2,#0

MOV P2,#OFFH

MOV DPTR, #15536

MOV TLO,DPL

MOV THO,DPH

MOV TLI,#0

MOV TH1, #0

CT01: RETI

; TO的50ms定时中断

CTPROGO: MOV DPTR,#15536

MOV T切 ,DPL

MOV THO,DPH

DJ NZ N,CTOI

MOV N, #20

MOV DL, TL1

MOV DH, TH1

MOV DPTR,#15536

MOV TLO,DPL

MOV THO,DPH

MOV TLI, #0

MOV THI,#0

ACALL NBCD16

ALALL TBLIN

ACAtL DISPLAY

RETI

DISPLAY: MOV PO,CRTI

CLR P2.0

SETB P2.0

MOY PO,CRT2

CLR P2.1

SETB 】理.I

MOV PO,CRT3

CLR P2.2

SETB 】趁.2

.64

; TI的溢出中断,"F'’显示码8EH送PO口

; 显示5个 “F"

; TO, TI重置初值,开始新的1秒采样

秒未到,返回

; 从 T1读出数据,送 DL, DH

; N, TI重置初始值,准备下一次采样

; 参考例3.H

; 参考3.8节自行完成

; 个位送显示

; 十位送显示

; 百位送显示

Page 71: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

MOV PO

CLR P2.

SETS 】叹

MOV PO

C LR P2.

SETS P2

RET

C RT4 ; 千位送显示

CRT5 ; 万位送显示

本 章 小 结

1.使用定时/计数器之前必须对它进行初始化,即通过程序对其工作方式和工作过程进行设定控制。主

要包括三项内容:

(I)给TMOD送方式控制字。

(2)给TLO, THO, TLI, TH1送定时戴计数初值。

(3)启动 (域停止)TO戴T1的运行。

2 使用中断方式完成程序功能时,下面三个环节至关重要:

(玲 在中断源相应入口地址单元放置跳转指令 (记住5个中断入口地址)。

(2)中断系统初始化— 开放相区中断及设定优先级。

(3)编写相应中断服务程序。

3.一个完整的汇编语言源程序主要包括以下四部分:

(I)起始汇编语句与寄存器定义语句 (前者指主程序、中断服务程序入口地址与相应转移指令)。

(2)主程序 (包括各模块初始化指令)。

(3)中断服务程序。

(4)子程序 {供主程序及中断服务程序调用,完成独立的功能)。

4. TMOD, TCON, IE, IP, SCON是89051较难理解和使用的5个专用寄存器,本章介绍了前四个,最后

一个在第五章介绍。其中TMOD只能用字节操作指令赋值,TCON, IE, IP用位操作指令简洁直观,SCON一般

用字节操作指令与位操作指令相结合的方式较方便。

5.定时初值与计数初值的计算方法:

计数初值:TC二M一N

定时初值:TC二M一 (T/TY)

思考题与习题

4.1 简述 TMOD, TCON各位的定义。

4.2 简述IE, IP各位的定义。

4.3 使用定时/计数器之前,为什么必须进行初始化?试以TI为8位自动重载外部计数、m 为16位内

部定时为例说明初始化的步骤:

4.4 使用中断方式完成程序功能时,为什么必须完成 3个环节的工作?试以外中断 1设定为边沿触发中

断关闭T1计数器为例进行说明。

4.5 什么叫中断和中断源?89C51有哪几个中断源?写出并记住各个中断源的人口地址。89C51响应中断

65

Page 72: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

最短时间为多少?

4.6 89051的5个中断标志是什么?在什么情况下被置位和复位?

4.7 中断源中,哪些中断可自动撤除?哪些中断需要用户撤除?

4.8 写出设定外中断为边沿触发的中断初始化程序。

4.9 写出允许 T1定时器溢出中断的指令。

4.10 注释下列指令的功能

MOV SP,#60H

MOV TMOD,#61H

MOV TLl,#156

MOV TH1, #156

MOV DPTR,#15536

MOV T功,DPL

MOV THO, DPH

SETB TRO

SETB TR1

SETB IT1

SETB EXl

SETB ETO

SETB ED

SETB EA

4.11 若外中断。和外中断1同时有中断请求信号输人,试问先响应哪个引脚上的中断请求?为什么?若

想改变这一顺序,该怎么处理?

4.12 89051的P1.0接有发光二极管 (设低电平有效),要求每 500m。闪烁一次,试用查询与中断二种方

式编写相应汇编语言源程序:

66

Page 73: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

第5章 串行口与通信

【学习指导」 本章介绍串行通信的结构和使用方法,并介绍查询方式发送数据和中断方式接收数据的相关程序。通过本章学习,要求掌握:

1. SCON专用寄存器各位的定义与设置。

2.串行口初始化的内容与步骤。

3.查询方式发送数据的程序设计。

4.中断方式接收数据的程序设计。

5.1 串行接口的功能与结构

什么是串行传输?它有什么特点?计算机与打印机打交道时,依靠的是并行接口,即同时

能传输8位 (一个字节)数据,采用多芯偏平电缆,传输速率高达40KB/s一1 MB/s。当计算机

与计算机打交道且相距较远时,这么多电缆,其安装、维护非常困难,且费用相当高。如果把

这8位数据一位一位地传送给对方,就是串行传输。显然,基本的串行接口只要一根数据发送

线,一根数据接收线,加上公共地线共3根线,这样,安装维护非常简单,成本很低。当然,

这种传输方式单位时间传送的信息量比并行传输方式要少得多。

MCS一51及89C51单片机独有的串行接口使其增色不少,这也是它得以广泛使用的原因之

一。它无需外扩芯片,便可完成和其他单片机或计算机之间的数据传送,如图5.1所示 (和计

图5.1 双机异步通信全双工连接方式

算机通信时,需接一块将0-5V转换成1 12V的电平转换芯片)。该串行接口为一个全双工异

步通信接口,即以一个字节为单位,同时发送和接收数据。使用同一个中断请求触发器和中断

Page 74: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

入口地址。此外,它还可作同步移位寄存器用,如数码显示屏数据的传送。

89C51是以一个字节为单位来传送数据的,实际传送时,系统自动加上起始位 (为0)和

终止位 (为1),称为一帧数据。未发送数据时,TXD为高电位,如图5.2所示,其中D8的有

无,即数据位是8位还是9位,由工作方式决定。

起始位 第N个字节 (8位数据)停止位 空闲位

(a)

DO Dl D2 D3 D4 D5 D6 D7 D8

起始位 第N个字节 (9位数}V

(b)

停止位 空闲位

图5.2 89C51异步通信帧格式

(a) 8位数据 (b) 9位数据

串行接口主要由收/发数据缓冲器SBUF,

构成,如图5.3所示。

写 SBUF

收/发控制器SCON、收/发控制门及移位寄存器

输出控制门

内部总线

内部总线

TXD引脚

中断

RXD引脚

读 SBUF

图5.3 URAT异步收发申行接口结构示意图

收/发数据缓冲器 SBUF是使用同一个地址 (99H)、功能不同的二个 8位缓冲器。发送

SBUF只能用程序写人数据,只能写人不能读出。写人数据后,便启动了一次数据发送过程,

即相应发送控制器按帧格式自动加上起始位、停止位,将数据一位一位地传送出。传送完毕

后,置SCO N中的TI为 1。接收SBUF只能用程序读出数据,即当SCON中的允许接收位 REN

为I时,RXD引脚的串行数据经门控电条进人移位寄存器,若收发双方设定相同的传输速率,

则移位寄存器在接收控制器的控制作用下,按此速率将一帧串入数据自动去掉起始位和终止

位,保留其有效位并存入移位寄器。什么时候开始移位?由于无数据时 RXD为高电平,当数

·68

Page 75: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

据帧起始位低电平到来时,接收控制器的检零电路发出相应的控制信号,按规定速率控制移

位。当寄存器存满一个字节时,便打开收SBUF的控制门,按并行方式把数据转送给收SBUF,

并置SCON中的RI为 1,请求中断,通知 CPU从收SBUF中取出数据。显然,接收SBUF是双

缓冲的,以避免在接收下一帧数据之前CPU未能及时响应接收中断,没有把上一字节数据取

走而产生覆盖的问题。系统复位不影响收/发缓冲器内容。

5.2 串行口收发控制器SCON

89C51串行口发送与接收的工作方式由专用寄存器SCON控制。SCON地址为98H,系统复

位时,该寄存器内容为OOH. SCON各位定义如下:

DO一Rl

D一

T

D7

SMO

D5

SM2

D4

REN

D3

1,B8

D2

RB8

SCON寄存器可采用字节操作指令或位操作指令,都必须用软件进行设置。

SMO, SM1:串行口工作方式控制位。2个控制位确定4种工作方式,如表5.1所示。

表 5.1 串行 口工作方式

SMO SM1 工作方式 功 能 波特率

0 0 方式 0 8位同步移位寄存器 (无起始、停止位) f_1 12

0 1 方式 1 8位异步 (加起始、停止位共 10位) 可变

1 0 方式 2 9位异步 (加起始、停止位共 11位) f_/64或f_/32

1 1 方式 3 9位异步 (加起始、停止位共 ii位) 可变

表中f.为振荡频率。方式2与方式3功能一样,仅波特率设置方法不同。

SM2:方式0为8位同步移位寄存器方式,SM2必须为0。方式1为8位异步通信方式,又

称8位无奇偶校验方式,主要用于双机通信,SM2一般设置为0。方式2与方式3用于双机通

信时,D8(第9位数据)为奇偶校验位,SM2设置为0;用于多机通信时,为多机通信使能

位。主机与从机设置不一样。

主机 (发送机)的设置,如表5.2所示。

表5.2 发送机 SM2的设置

说明

地址帧 (接收机机号)

数据帧 (数据命令)

从机 (接收机)初始化 SM2设置为 1。当收到的D8 (RB8 )为1时,表示接收的为地址

帧,接收控制器自动置RI为1,请求中断。在中场服务程序中进行比较,若为本机地址,用位操作指令置SM2 = 0,准备接收下一个数据帧。全部数据帧接收完毕后,必须重新置SM2 =

·69

Page 76: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

1;若不为本机地址,保持SVI2 = 1,接着收到的数据帧中,因D8 (RB8 )为0,不会引起本机

中断,因为该数据帧不是发给本机的。

HEN:允许接收位。REN = 1,允许接收;REN二0,禁止接收。

TB8:发送数据D8(第9位)。因发送缓冲SBUF为8位,第9位数据只好放在该位。方式

0与方式1未用。方式2与方式3中,双机通信作奇偶校验位,多机通信地址帧必须置TB8 =

I,数据帧必须置TB8 = 00

RB8:接收数据D8(第9位)。因接收缓冲SBUF为8位,第9位数据只好放在该位。方式

0未用,方式 1放停止位。方式2与方式3,双机通信放奇偶校验位,多机通信RB8 = 1为地址

帧,RB8二0为数据帧。

TI:发送中断标志。为方式0同步方式时,发完 8位数据后,硬件自动置 1;为异步通信

方式时,发停止位后,硬件置I。查询方式时,查询TI便知一帧数据是否发完;中断方式时,

TI = 1请求中断。查询和中断方式TI必须用位操作指令清0.

RI:接收中断标志。方式0同步方式接收完第8位数据后、异步通信方式接收到停止位

后,硬件自动置RI = I,请求中断,要求CPU取走数据。在中断服务程序中,必须用位操作指

令清 0,

5.3 串行口通信波特率

串行口的通信波特率反映了串行传输数据的速率,受传输端口电平、传输距离、MODEM

型号及传输线等因素的制约,需根据实际需要正确使用。

1.方式0的波特率

工作方式。中,串行口作同步移位寄存器用,其波特率是固定的,为f},/l2a 2.方式2的波特率

工作方式2中,串行口的波特率也是固定的,为f0.../64或fog,/32。由专用寄存器PCON中

SMOD位确定,系统复位时为。,即波特率二[25MOD/64] x f._ }OSC

显然,复位时SMOD = 0,则波特率为f_/64;若置SMOD = 1,则波特率为fos}/32 (f..。二12MH:时,为375kb/s)。上述二种工作方式均无需设置定时器的工作方式,这时,定时器1可

作另外用途。

3.方式1和方式3的波特率

这二种方式,波特率是由定时器1的溢出速率决定的,因而波特率是可变的。此时,定时

器1不能再作它用,只能专作波特率发生器,其工作方式设置为8位重载内定时方式较方便

(GATE, C/T, Ml, MO为OO1OB),即TMOD为2xH,其中x因定时器。工作方式而异。相应

公式为:

波特率九5。x 2s MODsc

12x32 x28一TH1(重载值) 表5.3列出了常用波特率和定aj%l器1的初值关系,供编写程序时参考 (表中SMOD为复位

值0)。

70

Page 77: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

表5.3 常用波特率和定时器1的关系

串行口

工作方式

波特率

W s)

f .-

(MHz)

定时器 】命令字

(TMOD高4位)

定时器1重载值 .误差 (TH I、TLI)

方式 0 1x106 12 x

x

方式 2 187.5 x 10' 12 x

.

X

方式 1, 3

1.2 x 103 11.0592 2H E8H 0

2.4 x 103 11.0592 2H F4H 0

4.8x 103 11.0592 2H FAH 0

9.6 x 103 11.0592 2H FDH 0

19.2 x 1护 一 11.0592 2H I FDH*}

0

9.6 x 103 12 2H } F9 H 7%*苦

4.8 x 103 14.75156 2H } }

一 F8 H一

0

6.4 x 103 14.75156 2H FAH 0

注:二表示 SMOD = 1.

‘爷表示实际波特率为89236/s.

5.4 串行口应用程序编写

由上面分析可知,串行口应用程序主要包含二个内容,一个是串行口的初始化,另一个是

数据发送时,只需把待发送的数据按字节顺序逐步送人发SBUF即可;数据接收时,每中断一

次,在中断服务程序中从收SBUF取走数据即可。

5.4.1 串行口初始化

串行口初始化的内容包括 SCON命令字和波特率设置二部分。

1.移位寄存器方式的初始化

波特率是固定的,无需设置。

MOV SCON, #OOH

SETB REN

;工作方式0发送数据

;允许接收 (接收程序加上这一条)

2.异步通信方式的初始化

W波特率为2400bit, 8位无奇偶校验的方式1为例。

MOV SCON, # 40H ;串行口设置为工作方式1

MOV TMOD, # 20H ;定时器1作波特率发生器,设置为8位自动重载方式

MOV TLl, # OF4H ;当九s。为11.0592MHz, 2400bit的初装值 MOV THl, # OF4H ;重载值

71

Page 78: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

SETB TR1

SETB BEN

;启动定时器1工作

;允许接收,接收数据时相应程序加此一条

5.4.2 串行口工作方式0的应用程序编写

工作方式0主要用于串行~并行或并行~串行的I/0扩展。图5.4所示是利用串行口工作

方式0来完成多位 LED数码显示的原理图。

图5.4 串行口工作方式。的应用

4094的Q:一Q。经1 k1,限流电阻分别接数码管。一h端,STB为4094允许端,串行数据由RXD (P3. 0)送出,移位时钟由TXD (P3.1)送出。若按图5.4所示,接有5块4094,且各自

接有万位一个位数码管 (因灌电流较大,一般宜采用高亮共阳数码管),如相应LED显示码存

放在31H(个位)一35H(万位)内,则显示程序如下:

DISPLAY: MOV SCON, # 0 ; 工作方式。,发数据

MOV R7, # 5 ; 共5个字节

MOV R0, #31H ; RO指向个位字节地址

CLR P1.0 ; STB允许数据串人

TXD : MOV A, @ RO ; 从显示码缓冲器内取数据

MOV SBUF, A ; 启动一个字节的发送

JNB TI,$ ; 一个字节 ((8位数据)未发送完,原地等待

CLR TI ; 字节发送完毕,清发送标志

WC RO ; RO指向下一个字节地址

DJNZ R7, TXD ; 5个字节未发完,转发下一个字节数据

SETB P1.0 ; 5个字节全部发完,.STB允许并出 (显示)禁止串

5.4.3双机通信实验

本实验由发/收二个单片机构成,串行口接法参见图5.1。发送机作现场数据采集,采集

的数据共5位BCD码,个位一万位分别存人31H-35H内。为方便接收机识别,在5位数据的

个位发送之前加人码头 (QFFH),万位发送后加人码尾 (OFEH)。接收机作显示用,即将串行

口接收到的一组数据用LED数码管显示。收/发双方晶振频率为11 . d592MHz,均工作于异步方

72

Page 79: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

式1,即8位无校验方式,波特率为2400b/so

接收机 LED数码显示器的接人电路及相应显示程序参见4.3.2节数字频率计的制作。这里

仅讨论其通信程序的编写。

l.发送机初始化和数据发送子程序 (查询方式发送数据)

;(1)串行口初始化程序 (插人发送机主程序)

MOV SCON,#40H

MOV TMOD, #20H

MOV TLI,#OF4H

MOV THI, #OF4H

MOV 30H, # OFFH ; 码头标识

MOV 36H, # OFEH ; 码尾标识

SETB TR1

;(2)数据发送子程序 (数据采集并转换成BCD码后调用该子程序)

TXD:MOV R7, #7

MOV RO,#30H

TXD卜 MOV A,@RO

MOV SBUF, A

JNB TI,$

CLR TI

INC RO

DJNZ R7,TXD 1

RET

2.接收机初始化和接收中断服务程序 (中断方式接收数据)

;(1)中断人口地址定义

ORG 0023H ; 串行口中断人口地址

AJMP SIOPROG ; 串行口中断服务程序定义

;(2)初始化程序 (插人主程序)

MOV SCON,#40H

MOV TMOD, #20H

MOV TLl, #OF4H

MOV THI, #OF4H

MOV III, # 30H ; 接收数据存放在30H开始的地址内

MOV R6, # 0 ; 接收数据字节数

SETB TR 1

SETB REN ; 允许接收

SETB ES ; 允许串行中断

SETB EA ; 允许总中断

3.串行口中断服务程序

7了

Page 80: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

SIOPROG:CLR RI

MOV A,SBUF

MOV@RI,A

INC R1

INC R6

CJNE A,#OFEH,SI01

CJNE R6, #7,BAK

AJMP SIOK

; 清接收标志

; 从收SBUF中取数据

; 存放在相应接收缓冲内存区

; R1指向下一个缓冲地址

; 接收字节加 I

SIOI: CJNE R6. #7,BACK

AJMP BAK

SIOK: ACAL LTBLIN

ACALL DISPLAY

BAK: MOV RI,#30H

MOV R6, #0

BACK: RETI

; A = OFEH.但R65;-- 7数据无效

; A = OFEH且R6=7,表示一组数据接收完毕,进入

处理

; A zA OFEH且R6=}-- 7,表示一组数据未接收完,保

留R, , R6值,中断返回,等待接收下一字节

; A } OFEH,但R6二7,表示数据有错

; 将31H一35H之BCD码转换为显示码

; 将显示码送LED显示

; 重新置初值,等待接收新的一组数据

; 中断返回

程序设计思路:不为码尾字节 (OFEH)且字节数不为7、则中断返回,准备接收下一字

节;不为码尾但字节数为7,或为码尾但字节数不为7,则该组数据无效,重新置R1为30H,

R6为0。只有收到码尾且字节数为7时才进人处理程序,调用TBLIN(参见4.3.2节 BCD码转

显示子程序)和DISPLAY子程序。

5.5 串行通信的电平转换接口电路

在很多信息处理系统中,往往用单片机作现场信息检测,然后把检测到的数据送给PC机

或其他单片机。为了提高硬件电路的驱动能力 (如一台单片机和多台单片机通信)、提高线路

的抗干扰能力、增加传输距离,必须对89C51 TXD引脚的电平进行转换。

5.5.1 RS - 232电平转换接口电路

PC机的串行口为RS - 232标准接口,其输入输出电平和89C51完全不同。89051用 “5V�

表示 “I", "0v”表示 “a",而PC则用 “一3-一15V”表示 “1", "+3一+15 NI''’表示 “0'

可使用 MC1488, MC1489或MAX232接口芯片进行电平转换。MC 1488/ 1489收发共需 2块芯片、

要求士12V电源;MAX2犯收发共用1块芯片,+5V单电源,使用较方便。图5.5所示为采用

MAX232来完成收、发电平转换的接口电路 (收、发、GND共3根线),单片机和PC机通信多

采用这一简单模式,而将PC与PC通信的应答线关闭。PC机通信程序的设计包括串行口初始

化、收发数据的缓冲等,可用 PC机汇编语言、VB通信控件或VC ++函数库等来实现。

74

Page 81: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

1叮 X489C5}

IBM-PC

RXD

TXE

MAX232

7 f0

8 9

14 I】

13 15 12

T_TLLTL1110丁XDRX】)

丁TI

}IL

一 GND

图5.5 与PC通信的电平转换接LZ电路 ((3线式)

5.5.2 RS - 422电平转换接口电路

当一台单片机同时和多台单片机通信或进行单片机与单片机之间远距离通信时,可采用两

线式的差分驱动和差分输人线接收方式。SN75176差分总线收发器系用于多点总线传输线双向

数据通信的单片集成电路,它是为平衡传输线而设计的,其设计符合EIA标准RS一422A。该

芯片最大驱动输出电流为60mA,接收输人阻抗为 12kf2,具有较好的抗共模干扰能力,可获得

较大的传输距离和较高的位速率。SN75176引脚和功能如图5.6所示。

cc B A GND 发送表 接收使能表

输入 1使能 {输出

AE DE D

输入 }使能 输出

场 AL R

李02V

毛 一02V

一02V< v�B <UV x

0

0

0

1

0

不定 Z

B

一0

1

2

D

一1

0

X

图5.6 75176引脚图及功能表

图5.7为SN75176与89C51的接口电路,V,,v_表示对称A, B两线,可以与多台相同接

口电路的单片机并联使用。

注意:

置 P1.0为

图5.7 RS一422电平转换接17电路

该电路为半双工通信方式,即P1.0为 “0”时,处于数据接收状态;发送数据时,

..I�。发送完毕后,P1.0返回 “0",等待接收数据。若需完成全双工通信,则收、

Page 82: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

发各需用一块芯片,接收芯片2, 3引脚接地,发送芯片2, 3引脚接十5V即可,通信线为2组

4线。

本 章 小 结

1使用串行口之前,必须对它进行初始化,即通过程序对其收发控制器 SCON和波特率进行设定.主要

包括四项内容:

(1)给SCON送控制字。

(2)给TMOD中与定时器1有关的高4位送方式控制字。

(3)给TL1及THl送初装值及重载值,确定波特率。

(4}启动定时器 1的运行。

2.数据发送可采用查询方式或中断方式。由于发送是主动的,采用查询方式编写数据发送程序较易掌握

且可靠。

3.数据接收是被动的,宜夹用中断方式。采用中断方式接收数据主要包括下面四个步骤:

(1)在串行口中断入口地址0023 H中放置跳转指令。

(2)串行口初始化。

(3)中断系统初始化— 开放串行口中断及总中断 (必要时可设定优先级).这二项内容一般在主程序中

完成。

(4)编写串行口中断服务程序。

中断服务程序一般包括数据读入暂存和处理二个部分,因收发双方通信协议而异。如一帧数据未接收完,

服务程序只作读入和暂存;若已接收完毕,则重置串行口字节记数器初值井根据接收的数据作相应处理。

4.单片机串行口与PC机通信时接线大多仅使用RXD, TXD与 GND(共地)三线,需注意接口电平的一

致性。

思考题与习题

5.1简述89C51申行口发送和接收数据的过程。 5.2 简述89C51串行口在四种工作方式下收发控制器 SCON的设置方法及相应波特率的产生方法。

5.3 请用查询方式编写数据发送程序。设主频 11.0592MHz,波特率2400b/s, 8位无校验,发送数据起始

地址30H,字节长度 IOH o

5.4 请用中断方式编写程序,接收上题发送的数据,要求存放在片内40H开始的地址内,接收完毕后,

回送 OCOH, OCH二字节。

5.5 参见4.3.2节,利用89051串行口和MC4094或HC164设计一个简易数字频率计,要求显示5位,超

过65536时,显示 “F"。试设计其硬件电路和相应程序。

5.6 设单片机主频及波特率同题5.3,请编写带奇校验的收发程序。

76

Page 83: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

第6章 并行1/0接口与应用

【学习指导】 本章介绍4个并行1/0口的结构和使用方法。通过本章学习,要求掌握:

1.使用P0, P2口的第二功能,扩展片外数据存储器RAW

2.使用端口的1/0功能,实现与具有串行输入功能芯片的硬件接口与相应程

序的设计。

3.1/0扩展芯片8155/8156与89C51的接口与基本使用方法。

4.D/A转换芯片与89C51的接口及程序设计。

5. A/D转换芯片与89C51的接口及程序设计。

6.1 并行1/O接口的结构和功能

在2.1.3节中已介绍,89C51有4个8位并行1/0端口,所有4个端口都是双向口。各端

口的位都包含一个锁存器,既可作输出锁存器,也可作输入缓冲器。89C51把这些锁存器当作

专用寄存器,分别称为PO - P3。使用时,既可以用字节操作指令,也可以用位操作指令来进

行读 (输人)、写 (输出),使用非常方便。其中P1端口为准双向1/0接口,单一功能使用;

P3端口的第二功能串行接口RXD, TXD在第五章已作介绍,外中断丽丁6、了两而和外部计数脉

冲输入TO, T1在第四章已作介绍;PO和P2端口,不接片外存储器时,可作准双向输人/输出

接口,接片外存储器或扩展1/0接口时,PO端口分时复用作低8位地址和双向数据总线,P2

端口作高8位地址总线。

1. PO口的结构和功能

图6.1所示为PO口的位结构图,它包含1个输出锁存器,2个三态缓冲器G, ,q,1个输

出驱动电路和2个输出控制电路。输出驱动电路由一对场效应管T, ,几组成,其工作状态由

输出控制电路控制。输出控制电路包括反相器G3、与门G4,模拟开关M SIX o

模拟开关MUX : Po口作双向I/O口时,内部 “控制”为 “o",将MUX切入下面位置,即

77

Page 84: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

电阻)

内部总线

写锁存器

图6.1 PO端口的位结构

几的栅极与锁存器亘短接,此时味输出为。,T,处于截止状态。当外接上拉电阻R后,P0. x

引脚状态就是锁存器状态。锁存器Q=0,心=1,则T2导通,PO一引脚为 “0”电平;锁存器

Q= 1, Q=0,则几截止,PO. x引脚为 “1”电平。即 口作地址/数据复用时,内部 “控制”

为“1",将MUX切人上面位置,即几的栅极与非门G3短接,当地址/数据为“1”时,G;为0,则几截止,味为1, T、导通,PO. x为 “1”电平;反之,地址/数据为 ‘0”时,G3为1,

则TZ导通,味为。,T,截止,P0. x为 “O"电平。

三态门G , G2: PO口作1/0数据输出时,为高阻状态;作1/0数据输人时,因指令而异,

分别说明如下:

(1) 1/0功能数据输出

当CPU执行 MOV PO, A, MOV PO. x,C或 SETB PO. x、CLR P0. x等指令时,三

态门G, , GZ处于高阻状态,MUX将T2栅极与锁存器Q短接,P0. x引脚状态就是锁存器输人的数据D,即输出数据经锁存器锁存后,再经TZ驱动。

(2) 1/0功能片外数据输人

作片外数据读人时,MUX状态同上。缓冲器G,, G:导通,为防止几导通,影响外部数

据,故读入之前,应先使用指令MOV P0, # OFFH或SETB PO. x使相应位结构中的T, ,毛截

止,再使用指令MOV A, PO或 MOV C, PO. x将P0. x引脚状态 (片外数据)读人,经内部总

线送A或C,同时,该数据被锁存器保存,经G,缓冲器使D保持不变,此时D与Q状态相

同。

(3) 1/0功能 “读一修改一写”

当CPU执行ANL PO, A以及ORL PO, A, XRL PO, A等指令时,实际上是重复上述片外

数据读人、修改和数据输出的功能。

(4)地址/数据分时复用功能

读功能主要用于外扩片外 ROM与外扩片外RAM。当CPU从片外ROM读取指令或从片外

RAM存取数据时,CPU先发出地址信号,即 “控制”信号为1,使MUX开关切人上部,驱动

器T}栅极与G:输人等电平,T,栅极接反相器G:的输出,因此,当地址/数据为 “1”时,T,

导通,T,截止,P0. x引脚为 “1";地址/数据为 “O.,时,T,截止,几导通,P0. x引脚为.,O�。

当CPU向片外ROM存入数据时,如执行 MOVX @ Rli , A或 MOVX @ DPTR, A指令时,

78

Page 85: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

其数据输出过程和上述地址信号输出完全一样。

当CPU从片外取指或从片外RAM读人数据时,如执行MOVX A, @ Ri与MOVX A,@

DPTR指令时,其 “控制”信号由 “1”变 “0",分别使T,,几截止,外部指令或数据仍经q

送人内部总线。

什么时候发出的是地址信号?什么时候发出的是数据信号?发地址信号时,89C51的第30

引脚ALE发出一正脉冲,使相应外电路 (74IS373)将地址信号及时锁存。取指令时,89C51

的第29脚瓦丽发出一负脉冲,使片外ROM激活,把相应指令送到PO口。对片外RAM读/写

数据,则由相应的豆jj/玩浪发出读选通信号或写选通信号。(详见6.2节时序图)

2. P1口的结构和功能

P1口只具备准双向1/0单一功能,如图6.2所示。没有MUX及几、味,T,用内部上拉电

阻代替。作1/0口使用时,工作过程与PO口的 (1) - (3)功能相同。

PI.x

内部总线

写锁存器

图6.2 P1端口的位结构

3. P2口的结构和功能

P2口除具有双向1/0口功能外,还具有第二功能,即外扩片外 ROM或外扩片外 RAM时,

作高8位的地址线。如图6.3所示。

图6.3跄端日的位结构

作通用1/0口,即 “控制”信号为0时,MUX切人下端,工作过程与PO口相同。外扩片

外ROM或外扩片外 RAM (执行MOVX A, @ DM 或MOVX @ DPTR,A指令)时,“控制”

信号为1, MUX切入上端,高8位地址经几反相加到几栅极。地址信号为 ‘0",则q输出

1, T,导通,P2. x引脚为 “0";地址信号为 “1”,则几输出 “0 " , T,截止,P2. x引脚为

"1”。

4. P3口的结构和功能

P3口是一个多用途端口,位结构如图6.4所示。作通用 I/0口使用时,工作原理和P1 ,

79

Page 86: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

P2相同,此时 “输出选择”为1,场相当于非门,缓冲器q为导通状态。(输出选择)

P3 x

内部总线

写锁存器

图6.4 玛端口的位结构

作第二功能使用 (参见2.1.3节),作输出时,如TXD, WR, RD由G:的第二功能输出线

输出,作输人时,如RXD, INTO, INT1, TO, T1由味缓冲器输人。要注意是,无论作第二功

能输人还是输出,锁存器必须为 “1”状态,系统复位时,已处于该状态。也就是说,在同一

个单片机系统中,可以选择作通用1/0口使用还是作第二功能使用,不得同时或交替作通用I/

O口与第二功能使用,若如此,必须用指令SETB P3. x置相应位锁存器为 “1”状态。

5.各端口的带负载能力及接口要求

Po口的输出和P1一P3口的输出在结构和功能是不同的,因此其带负载能力和接口要求也

有所相同。

PO口每位可驱动8个岱TTL输人,当外部芯片接近和超过此数量时,需加总线驱动芯片,

如74HC245 } PO口仅作地址/数据复用时,驱动管T1被激活,无需接外部上拉电阻;作通用I/

0口使用时,要接1Okn x 8的外部上拉电阻,否则输出信号不稳定。

P1一P3口每位可驱动4个 LS TTL输入,由于内部接有上拉电阻,作通用1/0口时,无需

外接上拉电阻。

6.2 程序存储器与数据存储器的扩展

利用Po, P2端口的第二功能,便可完成片外ROM与片外RAM的扩展,如图6.5所示。

当CPL从片外ROM读取指令或执行片外RAM存取数据指令时,PO口输出低8位地址与

一A7,间时89C51的30引脚 (ALE低8位地址锁存信号)发出正脉冲,其下降沿使其地址锁

存于74 HC373内,74HC373输出的低8位地址与P2输出的高8位地址 A:一A1s,同时送往

27 C64及6264(因27064及6264均为8KB,只需地址线13根戈一A12 )。若从片外ROM取指

令,89C51的29脚PSED片外取指选通信号的下降沿通过27 C64的OE (22脚)使该芯片处于输

出选通状态,输出的8位指令Dfl-D:通过89C51的PO口回送到内部总线。片外ROM取指和

片外RAM存取数据时序图如图6.6所示。

若执行片外RAM存数据指令,相应P3.6发出W豆(外部RAM写选通)信号,使Pa输出

的数据写入6264内;若执行片外RAM取数据指令,相应P3.7发出丽 (外部RAM读选通)信

80

Page 87: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

Ao Do

Ai Dt

A2 D2

A3 D3

A4 D4A5 D5A6 D6

A: D7

ucC

A8 PGh'l

A9 V ppAIOG塑All CE

A12阮

Ao Do

A, D1A7 D2A3 D3

A4 D4

A5 D5

A6 D6A7 D7

Vcc

As

A9 GND.Ago CS

·All双币Ail五石

Do Qo

D, Q]

D2 Q2

D3 Q.;

D4 Q4

D5 Q5

D6 Q6

D7 LEQ7

‘Al}6 A,gA3112.A41、A5}!6A6}19 A7}

}A9 24}Aio21IA> > 23IAi, 2

图6.5 片外ROM与片外RAM的扩展

A,-A,输出 指令输入 A,-A,输出

了 }卜一-月扩 }卜一一衬 }丫数据输入/输出

PO

{AS一 Al5输出 As-A15输出

P2

ALE

PSEN

RD/WR

图6.6 片外ROM取指和片外 RAM存取数据时序图

号,将6264处于输出选通状态,输出的8位数据D。一D,经Po口送人内部总线。 图中由于片外ROM与片外RAM的存取周期、指令及控制信号不一样,故地址可重叠,片

选端 CE可直接接地。实际使用中当程序太长时 (超过4KB),尽量选用内部ROM容量更大的

芯片,如89C52内部ROM容量为8KB, 89C55有20KB EEPROM,而不外扩ROM,力求减小产

品体积,降低功耗,提高性能。

I例6.1] 将片内20H一2FH的数据送往片外0000 H开始的地址内。程序如下:

MOV R0, # 20H ; RO (8位)指向片内数据起始地址

MOV DPTR, #OOOOH ; DPTR (16位)指向片外数据起始地址

MOV R7, # 16 ; 共16个字节

LOOP: MOV A, @R0 ; 取数据

81

Page 88: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

MOVX @DPTR,A

INC RO

INC DPTR

DJNZ R7,LOOP

存放数据

6.3 并行1/O口的扩展

在单片机的应用中常感觉输入/输出引脚不够用,需要扩展。输人/输出口扩展的方法很

多,一般可归为三类,第一类,采用通用TIM芯片,如4.3.2节图4.5所示,PO口经5片

74LS373扩展可驱动 5个 LED数码管;第二类,利用串行口工作方式 0,外接数片 4094或

HC 164,如5.4.2节图5.4所示,即可扩展驱动数片LED数码管;第三类,利用可编程多功能

芯片,如8255, 8155/8156等。8155/8156芯片内含256字节静态SRAM,性能价格比优于8255,

为常用的多功能扩展芯片,并且易于与89C51接口 (无需增加其他TTL芯片),故本节仅介绍

8155/81560

6.3.1 INTEL 8155/8156

1.性能特点

(1) 3个并行uO端口:2个可编程8位1/0口PA7一PAO, PB7一PBO, 1个可编程6位1/0

口 PC5一PCO}

(2) 256字节片内静态SRAM.

(3)一个可编程 14位的减 1计数器。

2.引脚说明

8155/8156为40引脚双列直插式芯片,如图6.7

所示 。

(1) Ucc (40脚)+ 5V, Vss (20脚)公共地,

标准接法。

(2) 8根地址/数据复用线:ADO一AD7,

ADO一AD7可以直接与89C51系列单片机的PO口

连接。地址锁存允许 (ALE)信号的下降沿将8位地

址锁存在内部地址寄存器中,该地址既可作存储器的

低8位地址,也可作1/0接口的通道地址,这将由输

人的lo/ m信号的状态决定。在AD7一ADO引脚上出

现的数据是写人还是读出8155,由系统控制信号WR

和RD决定。

(3) 22根通用1/0口线:PA7一PAO, PB7一PBO,

PC5一PCO,

82

PC3

PC4

TAN

RESET

PC5

T OUT

JON

CE (CE)

RD

W R

AIE

ADO

AD1

AD2

AD3

AD4

AD5

AD6

AD7

l‘ Ss

8155

(8156)

1’ ccPC2

PC1

PCO

PB7

P B6

P B5

P B4

P B3

P 132

PBl

PBO

队 7

队 6

PA5

PA4

PA3

队 2

队 1

队 0

40脚

38373635

343332

3l302928

2726252423

222l

1

,]

勺J

.4

1、︶

‘U

7

O八

n,

们钊

1

,一

气J

月勺

‘U

,.

00

0声

n

1

1

1

1

1

1

1

1

1

1

,‘

图6.7 8155/8156引脚图

Page 89: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

(4) 6根控制线:

RESET:复位线,高电平有效。复位后三个 1/0口为输人方式。

ALE:地址锁存允许线,下降沿有效。可直接接89C51的ALEo

丽 (CE):片选线,8155为低电平有效 (8156为高电平有效)。

lo/N--I: 1/O口和SRAM选择线。当lo/丽二1时,选择1/0口;当IO/M = 0时,选择读写

SRAM o

WR:写选通信号,低电平有效。AD7一ADO上的数据写人SRAM的某一单元 (10丽 二0

时),或写人某一 1/0口 (IO/M=1时)。

丽:读选通信号,低电平有效。8155 SRAM某单元的内容读至数据总线 (IO丽 二0时),

或1/0口的内容读至数据总线 (IO/M = 1时)。

(5) 2根计数器输人输出引线:T/IN, T/OUT

3.8155/8256内部结构

8155/8156内部结构如图6.8所示,各部分功能如下:

AD7---ADO

ION

ALE

PA7-PAO

RESET PC7-PCO

T/IN

Tioll"I PB7--PBO

图6.8 8155/81“内部结构

(1)双向数据总线缓冲器:该缓冲器是8位的,用于传送CPU对RAM存储器的读写数据。

(2)地址锁存器:共有8位,用于锁存CPU送来的RAM单元地址和端口地址。

(3)地址译码器和读写控制器:地址译码器的三位地址由地址锁存器输出端送来,译码后

可以选中命令/状态寄存器、定时器/计数器和 A, B, C三个 1/0寄存器中的某个来工作。读

写控制器接收丽和丽五线上的信息,实现对CPU和8155间所传信息的控制。

(4) RAM存储器:容量为256字节,主要用于存放实时数据。存储器存储单元地址由地

址锁存器输出端送来。

(5) 1/O寄存器:分为态 B, C三个端口。A口和B口的1/0寄存器为8位,既可以存放

外设的输出数据、又可以存放外设的输人数据;C口的1/0寄存器只有6位,用于存放 1/0数

Page 90: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

据或命令/状态信息。8155在某一时刻只能选中一个1/0寄存器工作,这由CPU送给8155的命

令字决定。

(6)命令寄存器和状态寄存器:皆为8位寄存器。命令寄存器存放 CPU送来的命令字,

状态寄存器存放8155的状态字。

(7)定时器/计数器:这是一个二进制14位的减1计数器,计数器初值由CPU通过程序送

来。

4. 8155/8156端口及内存地址分配

8155/8156内部有7个寄存器,需要三位地址来加以区分。表6.1列出了端口地址分配。

表 6.1 8155端口地址分配

CE IO/M A7 A6 A5 A4 A3 A2 A1 AO 所 选 端 口

0 1 x X X x x 0 0 0 命令/状态寄存器

0 1 x x x X X 0 0 1 A 口

0 1 x X x x x 0 1 0 B 口

0 1 x x X x X 0 1 1 C 口

0 1 x x X x X 1 0 0 计数器低8位

0 1 X x x x x 1 0 1 计数器高8位

0 0 x x x X x X x x RAM单元

注:x表示0或 to

5.8155/8156命令/状态寄存器

8155/8156三个并行1/0口的使用不像89C51的PO一P3口那样,可随意用作输人或输出,

它必须在使用前先定义,即设置。设定为输人,就不能作输出;设定为输出,就不能作输人。

具有这一特性的芯片,称为可编程芯片。设定即对命令寄存器写入相应的控制数据。

8155/8156的命令寄存器与状态寄存器处于同一地址单元 (OOH, 10/M二1),前者只能写

人,后者只能读出。这种现象类似于89C51的收、发缓冲器SBUF(地址同为99H,实际为2个

寄存器)。

(1)命令寄存器与命令字

将命令字写人命令寄存器内 (OOH),就可设定8155的工作方式并实现对中断和定时/计数

器的控制。命令字共有8位,各位定义如下:

TM2 { TM1

D5 D4 D3 D2 D1 】刀

IEB 一IEA 一PC: 一PC1 一PB 一。

D7和D6是计数器方式控制位,D5和D4是B口和A口的中断控制位,D3和D2是端口的

四种方式控制位,D1和DO分别是 B口和A口的输人/输出方式控制位。例如:若 DO =0,则

PA7一PAO被定义为输人方式;若DO二1,则PA7一PAO定义为输出方式。

TM2, TM 1:控制计数器工作方式。

00:无操作

01:立即停止计数器工作

84

Page 91: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

10:计数器计满后停止工作

11:启动计数器工作

IEB, IEA:控制端口B与A的中断。0:禁止中断;1:允许中断。

PC2, PC 1:控制端口工作方式,见表6.20

00: ALT,, A, B口基本输人输出,C口为输人

01: ALTZ, A, B口基本输人输出,C口为输出

10: ALT,, A为选通输人输出,B为基本输人输出,C为控制信号

11: ALT,, A, B均为选通输入输出,C为控制信号

PB, PA:控制端口B与A的数据传送方式。0:输人;1:输出。

8155的1/0又可分为通用1/0和选通1/0两种工作方式。在1/0方式下,8155可选择对片

内任一寄存器读写,端口地址由表6.1中A2AIA0三位决定,控制方式如表6.2所示 ,

表6.2 端口在四种 vo工作方式下对各位的定义

C 口通用 1/0方式 选通 1/0方式

ALT, ALTZ ALT, ALT,

PCO 输人 输出 A INTR (A口中断) A INTR (A口中断)

PC1 输人 输出 A BF (A口缓冲器满) A BF (A口缓冲器满)

PC2 输人 输出 A STB (A口选通) A STB (A口选通)

PC3 输人 输出 输出 B INTR (B口中断)

PC4 输人 输出 输出 B BF (B口缓冲器满)

PC5 输人 输出 输出 B STB (B口选通)

(2)状态寄存器

状态寄存器只读不写,用于存放8155的状态,CPU通过指令读取后,用于判断8155所处

的工作状态。状态字由七位组成,最高位空出不用,其余各位定义如下:

x } TIMER } INTEB } BFB

D3

NTRB INTEA 一 BFA

Do

NTPRA

TIMER:定时器中断。0:未计满;1:定时器溢出中断。

INTEB : B口中断允许。0:禁止;1:允许。

BFB: B口缓冲器。0:空;1:满。

INTRB : B口中断请示。0:无中断;1:有中断。

INTEA : A口中断允许。0:禁止;1:允许。

BFA: A口缓冲器。0:空;1:满。

INTRA : A口中断请求。0:无中断;1:有中断。

6.8155内部定时器及使用

定时器共有四种工作方式,由定时器长度字高字节中的M2, M1两位状态决定,定时器长

度字的低 14位用于给定时器设置初值。定时器长度字格式如图6.9所示。

8155定时器在不同工作方式下,T/OUT线上输出波形也不同。

·85

Page 92: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

D7 D6 D5 D4 D3 D2 DI DO

T, I Tb黯箫黔地址:04H

地址:05H

定时器长度高字节

M2 M 1

0 0: TOUT

0 I:TIOUT

1 0: TOUT

1 1: TOUT

------一 单次方波

------一 连续方波

------一 单次脉冲

------一 连续脉冲

图6.9 8155定时器长度字格式及 T/OUT输出波形

在01及11方式下,实际为自动重载 (重置初始计数值)方式。

T/OUT复位后为高电平。启动工作后 (命令寄存器高两位D7几送入11) T/IN每输人一个

脉冲,14位数器自动减1(初始值由CPU送人地址04H, 05H的值决定)。在00和01方式,计

数值减出1/2时,T/OUT跳为低电平 (奇数时慢一个输人脉冲); 在10和11方式,减到最后值

为1时,T/OUT跳为低电平。计数值到 “全0"时,T/OUT跳为高电平。

6.3.2 8155/8156与89C51的接口

8155/8156与89C51可直接连接,不需附加任何电路,使系统增加22根 1/0线,一个计数

器和256字节的SRAM。接口电路如图6.10所示。89C51 8155/8156

图6

〔例6.2〕 如图6.10所示,

单元内,共40H字节。程序如下:

START: MOV R0,#20H

MOV Rl,#OOH

MOV R7,#40H

CLR P1.I

CLR PLO

86

.10 8155/8156与89C51接l7电路

将89C51片内20H开始单元的内容依次存人8155的OOH开始

; RO指向89C51片内RAM首地址

; R1指向8155首地址

片选有效

IO/M二0,访问 8155的 SRAM

Page 93: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

LOOP: MOV A, @ RO ; 读人数据

MOVX @ R1,A ; 存人数据

INC RO

INC R1

DJNZ R7, LOOP ; 40H字节未完,继续

SETB Pl.I ; 已送完,关闭片选

END

[例6.3」 如图6.10所示,每秒从PA口读人一次数据送PB口,且存人8155的SRAM

内,存满为止。程序如下:

START: CLR P1.1

SETB P1.0 ; IO/M = 1,访问1/0口

MOV RO, # 0 ; RO指向命令寄存器地址

MOV A, # 02H ; 命令字0000, 001013, A口人,B口出

MOV @R0, A ; 以上三条为初始化8155

MOV R0, # 1 ; RO指向PA口地址

MOV R1, #0 ; RI指向8155片内RAM首地址

MOV R7, # 0 ; 共256字节

LOOP: SETB P1.0 ; IO/M = 1,访问1/0口

MOV RO, #1

MOVX A, @ RO ; 从PA口取数据

INC RO

MOVX @ RO, A ; 送 PB口

CLR P1.0 ; IO/M二0,访问SRAM

MOVX @ RI,A ; 存人 SRAM内

INC Ill ; R1指向下一个单元

ACALL DELAY ; 调用 Is延时 (略)

DJNZ R7,LOOP

SETB Pl.l ; 关闭片选

END

[例6.4」 如图6.10所示,要求T/OUT产生方波,且为T/IN的30分频。程序如下:

START: CLR P1.1 ;片选有效

SETB P1.0 ;访问1/0口

MOV RO, # 04H ;第1步送低8位计数值

MOV A,#30

MOVX @RO,A ;

INC R0, ;第2步送高8位计数值

MOV A, #40H ;0100, OOOOB,“分频”为连续方波 MOVX @RO,A ;

87

Page 94: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

Moti RO, #0

Mov A,#OCOH

MOVX @RO,A

SETB P1.1

END

;第3步,启动计数器工作

;1100,OOOO B

;设置完毕,关闭片选

6.4 4位LED显示芯片MC14499与单片机的接口

LED显示器与89051的接口方法很多,利用 M C 14499,仅占用89051三根 1/0线,便可实

现4位LED的动态扫描数码显示。

6.4.1 MC14499

M C14499是带有串行接口的7段LED数码显示器的译码/驱动芯片。使用时

流电阻和位驱动用的NPN型三极管。该器件可直接与单片机的1/0接口相连。

件。

1.主要特性

(1)可驱动4位七段数码显示器。每位除可驱动7个数码段外,还可驱动1

(2)较大的段输出电流:当输出电流为50rrA时,压降小于1.1V.

(3)串行时钟速率:最高为0.25MHza

(4)工作电压范围:VDD为4.5一6.5V,

(5)工作温度范围:0一+70 0C o

(6)位电流输出能力:可达8m-A,

2.引脚说明 (对于DIP封装的产品)

MC 14499引脚如图6.11 (a)所示。

,需外加段限

它是 CMOs器

个小数点段 。

M C 14499

以,r

e

︸t

卜Lr-I.

0八

,产

6

DATA

0SC

S,

S,

I'SS

15

14

13

12

】I

】O

MC1413

CLK

EN

Sl

S,

图6.11

(b)

4位显示芯片 MC14499引脚及与单片机的接口

MC 14499芯片引脚 (b)与89C51接口电路

Page 95: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

(1)数据输入脚

DATA(脚5):串行数据输人脚。数据的输人由13脚上的时钟信号驱动。

(2)控制输入脚

CLK(脚13):时钟输人脚。用于驱动串行数据的输入。

EN〔脚12):用于控制串行数据的输人和锁存器的加载,称为使能控制脚。当该脚为低

时,允许串行数据进人移位寄存器,但此时锁存器的内容不受移位寄存器内容的影响。当该脚

为高电平时,禁止串行数据进入移位寄存器,同时将移位寄存器的内容装入锁存器中。

OSC(脚6):振荡器连接脚。该器件的位扫描频率是由片内振荡器决定的。片内振荡器的

频率则由该脚对地接的电容决定,推荐的电容值为22nF。外部的振荡器信号也可以直接接到

该脚,推荐的频率范围为200一800 Hz o

(3)扫描输出脚

a一h(脚4, 3, 2, 1, 17, 16, 15, 14):段输出脚。

S;一S4(脚11, 10, 8, 7):位扫描输出脚。

3.内部结构

MC14499的内部结构框图如图6.12所示。它主要由输人移位寄存器、锁存器、多路选择

器 (开关)、段译码器、位译码器、段驱动器、位驱动器和小数点驱动器组成。该器件的串行

数据输入脚 (脚5)接收20位串行数据,其中16位是4位数码显示器要显示的数据代码,另

外4位用于指明对应位的小数点段是否点亮。输人的次序是小数点代码在先,数据代码在后,

如图6.13 (b)所示。20位移位寄存器中的后16位含数据代码,前4位含小数点代码。它们在

控制信号 (12脚)的作用下,被分别锁入 16位数据代码锁存器和4位小数点代码锁存器。16

位数据代码锁存器的输出以4位为一组送到多路选择器,多路选择器分时选择一组输出,到段

译码器,段译码器的输出再驱动段驱动器。4位小数点代码锁存器的输出送到另一个多路选择

器,4位小数点代码按位分时送往小数点段驱动器。位选择、段选择和小数点选择三者必须保

持严格的同步关系。

*透明锁存器

图 6.12

VDD=脚18 Vss=脚9

MC14499内部结构框图

Page 96: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

EN

DATA

C!K

S, S, S, S.t

‘小数点」马DZ D, Do

-S, BCD砰

9 101112

D, D, D, Do

-SZBCD码

13 14 1516

D, D2 D, D,

一S,BCD硬

17 181920

DID, D, Do

-S,BCD码

图6.13 MC14499串行输人数据时序和20bit输入格式

(a)串行输入数据时序 (时钟下降沿打人数据) (b) 206it输人格式

该器件还提供了一种实现级联的方法,即如果小数点代码锁存器被装人全 “1",则移位寄

存器的输出Q,被切换到小数点驱动器,如图6.14所示。这就是说,为了级联N个4位显示驱动器,首先应装人一组级联控制字,其步骤如下:

(1)使EN=0.

(2)向移位寄存器装人20位数据 (通过DATA脚),其中前4位为全 “1",

(3)使EN二1,加载锁存器。

(4)重复步骤 (1)一 (3) (N-1)次。

(5)这时,(N x 20)位数据被装人N个器件中。

图6.14 MC14499的级联方法

6.4.2 MC14499与89C51的接口

MC 14499与89051的接口如图6.11 (b)所示。图中14499的a-h引脚分别通过5052限流

电阻并联接到4个共阴数码管的a一h段。由于MC 14499的a一h段输出和S,一S4位输出均为高

电平有效,位驱动S,一乳经MC1413反相驱动,分别接到4个数码管的共阴端。M C14499第12

脚丽端为片选端,为低电平时,方可写人数据,高电平禁止数据写入;第5脚DATA端为串行数据输人;第13脚CLK为同步时钟,下降沿打人数据,如图6.13 (a)所示。

M C14499含有内部振荡器,BCD译码和动态扫描等电路,只需在6脚接人0. 022[- F的电容,然后从第5脚依次串行送入小数点及各位BCD码即可。

I例6.5] 设小数点及千位、百位、十位、个位的BCD码存于40H一44H内,则显示程序

90

Page 97: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

﹃2

0

R

R

如下 :

DISPLAY:MOV

MOV

CLR

:MOV

MOV

ACALL

INC

DJNZ

SET B

END

:SETB

RLC

MOV

CLR

DJNZ

RET

#5

#40H

DSI

P1.2

A,@RO

R2, #4

CRT

RO

R7,DSI

P1.2

;共5个单元

;RO指向40H

;14499片选有效

;每单元4bit

;5个单元未送完,继续

;已送完,关闭M C 14999

CRT P1.1

A

P1.0,C

P1.1

R2.CRT

;显示时钟为高电平

;带进位左移

;数据位送 P1.0

;时钟下降沿打人数据

;4位数据未完,继续

6.5 8位D/A转换芯片AD558与单片机的接口

1. AD558的特性与引脚

D/A转换芯片种类繁多,本书主要介绍 AD558。它无需外加元件和微调,即可完成与

89051的直接接口,具有接口简单、程序简明、成本低等优点,应用十分普遍。

主要特性如下:

(1)单一电源:+5一+15Vo

月月﹃习JJ|1--T

氏马压、叭马以氏马

(2)内有精密能隙电压基准和锁存器。

(3)完善的微处理接口。

(4)高速,1拼,输出稳定在土1/2LSB内。 (5)电压输出:0一2.56V及0一lov.

(6)低功耗7.5mW.

AD558为16脚双列直插封装,如图6.15所示。

2. AD558与89051的接口

利用 89051 PO口的1/0功能,可实现与AD558的直接接口,

如图 6.16所示。若 89051已外接 ADS774(参见图 6.22),其

P2.0, P2.1, P2.2已利用,则 AD558片选端CE接 P2.3,在 P2.3

的下降沿将送到PO口的数据打人AD558内部锁存器,在P2.3为

高电平时,PO与AD558处于高阻状态。PO作通用1/0口时,需外

16

15

14

13

12

】1

10

9

要议汀

不ou丁检测不,OUT选择AGND

OGND

ucc

CS

CE

图6.15 AD558引脚

Page 98: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

接上拉电阻。+12V

0-2.56V模拟信号输出

图6.16 AD558与89C51的接口

3.程序设计应用举例

[例6.6〕 设计用AD558输出一方波的应用程序。

START: MOV PO , # 0 ;先输出低电平

CLR P2.3 ;PO口数据打人 AD558

SETB P2.3

ACALL DELAY ;方‘波低电平持续时间

MOV P0, # OFFH ;输出高电平

CLR P2.3

SETB P2.3

ACALL DELAY ;方波高电平持续时间

AJMP START ;重复方波

仁例6.7」 设计用 AD558输出一三角波的应用程序。

START: CUR A ;先输起始电平0

Lip: MOV PO,A

CLR P2.3

SETB 1理.3

INC A

CJNE A, # OFFH, UP ;不为最大值,继续加

DOWN: MOV PO,A

CLR P2.3

SETB P2,3

DEC A

JNZ DOWN ;不为最小值,继续减

AJMP UP ;重复三角波

Page 99: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

6.6 12位A/D转换芯片ADS774与单片机的接口

ADS774是一种具有采样/保持功能的8位//12位A/D转换器,它采用电荷重新分配技术,

进行逐次逼近,实现A/D转换。它是AD574, ADC674和ADC774的替代产品,内部含有时钟、

量程电阻、采样/仿真、逻辑控制、三态输出缓冲等电路,模拟输人范围可为单极性或双极性,

是性价比优良的A/ D转换芯片。

6.6.1 ADS774

I.性能特点

(1)可与AD574, ADC674, ADC774等互换。

(2)具有采样/保持电路。

(3)具有内部基准、时钟和微机接口。

(4)能够高速捕捉和转换,最大转换时间不超过8.5tiso(5)采用+5V单电源工作。

(6)功耗小于 120mW o

2.引脚与内部结构

(1)引脚说明

ADS774的外形采用28脚的DIP封装结构,引脚排列如图6.17所示。引脚说明如下:

l'cc12/8

~ 28

27

26

25

24

23

ADS774 22 21

20

19

18

17

16

15

STS

DB 1 I

DB 10

DB9

DB8

DB7

DB6

DB5

DB4

DB3

DB2

DB 1

DBO

DGND

一一闷叶专换状态信息

-CSAO一且球斗

RJC任NC25

启动脉冲

又」一

100。匾 AGND

REF]

VE

BIPO

l OVi

20V

10

11

12

13

14

图‘.17 ADS774引脚和独立工作方式接线

1脚:VCC+5V电源输人端。

2脚:12/8,数据输出方式控制。12店二1对应12位并行输出;12厉=0对应8位双字节

输出,其中AO二0时,输出高8位,AO二1时,输出低4位,并用零补足尾随的4位。本例为

12位输出方式。

3脚:丽,芯片选择端。丽二。选中,丽-1未选中。本例接数字地DGNDa

9了

Page 100: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

4脚:AO,数据输出方式控制。当AO =0时,启动转换,按完整的12位 A/D转换方式工

作;当AO= 1时,启动转换,按8位A/D转换方式工作。AO的控制一般要和12店的信号结合

使用。本例为12位方式。

5脚:R元,工作状态控制端。R/C二。为启动转换命令,R/C = 1为数据读出命令。每启动一次,转换一次;多次转换,必须重复启动。读取数据必须置该引脚为高电平。

6脚:CE,芯片选择端,高电平有效。正常使用时,只有CE二1和CS二0,芯片才能工作。

本例直接接十5VJ

7脚:空脚。(AD574接+12V)

8脚:2.5V参考电压输出。

9脚:AGND,模拟地。

10脚:REF1,参考电压输人端。该电压可以外接,也可以直接使用8脚提供的基准。

11脚:V,,,对于仿效方式连接,可接地或接负电源;对于控制方式连接,可接+5Vo

12脚:BIPO双极性偏置端。直接从8脚引人偏置,则输人模拟信号为双极性。本例由

t 12V引入偏置,输人模拟信号为单极性。

13脚:单极性0 -V lov,模拟信号输人端,双极性时为士5Vo

14脚:单极性0一20V,模拟信号输人端,双极性时为1 love

15脚:DGND,数字地,控制信号输人及数据输出的共地端。

16-27脚:DBO一DB11, 12位数据输出端。

28脚:STS,工作状态输出端。STS = 1表示 A/D转换正在进行,STS =0表示 A/D转换完

成,可以读出数据。中断方式时,作89C51外中断请求信号,在中断服务程序中读取数据;查

询方式时,查询到该引脚为低电平便可读取数据。

(2)内部结构

ADS774的内部结构如图6.18所示,有采样/保持、D/A转换、输人逻辑控制、内部时钟、

2.5V参考、逐次逼近寄存器、三态缓冲控制等电路。

3基本接法与控制

(1)基本接法

图6.17是ADS774以控制方式工作在。一+lov输人范围的基本接法。启动转换命令的下

降沿 (负脉冲宽度最小为25 ns)使A/D接通至保持状态,并启动转换。转换期间,STS (28

脚)输出高电平,转换完成后下降至低电平。转换后所得数据被锁存到输出寄存器中,供CPU

读取。此外,在转换期间,STS信号使数据输出引脚处于高阻态,并禁止输人5脚的启动信

号。也就是说,在转换未结束前引脚5上的脉冲将不起作用,这就避免了干扰,使转换器开始

一次新的转换。

ADS774转换完成以后,在STS信号变低之前,立即开始捕捉新的信号,并跟踪输入,为

下一次转换作准备。

输人信号从13脚或 14脚接人,输入信号范围为十l ov或十20V o

(2) ADS774的控制

ADS774易于和大多数微处理器或其他数字系统接口,微处理器可以对每次转换实行完全

控制,也可使A/D转换按独立方式进行工作。完全控制方式由选择8位或 12位转换周期、启

·94

Page 101: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

ADS774l I }12bit 12rJ. B-5 D/A T>DIP-PAG 控 ·

上电复位

态缓冲器寄存器

半字节A

3 2叫’)

逐 次 逼 近 寄 存 器

24

半字节B

}砚] 2.5 V

参考电压218

半字节C

10

13

日周14

STS

DB 11

DB 10

DB9

DB8

DB7

DB6

DBS

DB4

DB3

DB2

DB1

DBO

DGND

图6.18 ADS774内部电路结构

动转换、选定输出数据格式和读输出数据几个步骤完成。输出数据可12位同时读出,也可以左

对齐数据格式先读高8位,后读低4位。五个控制输人 (12/8,丽、A0, R/C和CE)信号与

TTL/CMOS逻辑电平兼容。控制输人信号的关系如表6.3所示。

表6.3 ADS774逻辑控制关系

CE CS W C 12/8 AO 操 作

0 关 关 关 关 无操作

共 1 器 关 芳 无操作

今 0 0 关 0 启动 12位转换

个 0 0 釜 1 启动 a位转换

1 奋 0 升 0 启动12位转换

1 今 0 关 1 启动 s位转换

1 0 告 开 0 启动 12位转换

1 0 专 关 1 启动 8位转换

1 0 1 1 开 启动 12位转换

1 0 1 0 0 只使能高字节

1 0 1 0 1 使能4个低位尾随4个0(低字节)

注:,表示任意状态。

(3)独立工作方式

独立工作方式是指转换器的控制只限于对RA信号的操作。在这种方式下,丽和AO接数

字地,CE和12/8接+5V,输出数据为12位。A/D转换由RA信号的下降沿来启动,转换过

程中,STS信号为高电平。转换完成后形亡= 1, STS的下降沿使三态数据输出到缓冲器。

.95

Page 102: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

图6.19 (a)是只用R/C信号控制的A/D转换数据读出时序,(b)是利用R/C高电平选

通前一次转换后的数据,p/c 的下降沿开始新的转换时序。

如果希望用单个输入来启动转换,那么其他信号应该在实际起作用的一个信号跳变之前至

少稳定50ns,其时序如图6.19 (c)所示。25ns

-C

,S

-/(

nn

CO

RJC

STS

DB 11 -DBO 数据有效 数据有效D131I-DBO

数据有交高阻

30ns R/C

taa 刁口

信号捕获

信号捕获

tc一

转换 信号捕获

信号捕获

-tc-转-

些Cs一眺

Ao

sTSDB I I-DBO

tAQ+tC

图6.19 ADS774基本运行时序图

(a)由R/C下降沿启动转换时序

(。)由多个信号控制转换时序

(b)由RA 高电平选通转换时序

(d)控制与仿效时序

(4)采样/保持和仿效方式

这两种方式的基本区别在于对转换进行之前和转换进行之中输人信号状态的要求不同,图

6.19 (d)为这种关系的时序。表6.4为采样/保持与仿效方式的时间参数。在 (S/ H)控制方

式下,要求在1.4tts的捕捉时间内,输入信号的摆动快于ADS774的压摆率。转换命令到达以后,对于输人信号电平没有要求,因为此时输人信号已被采样,转换可立刻开始。

表6.4 控制与仿效方式时的参数

符 号 参 数S/H控制方式

(11脚接+5V)

仿效方式

(11脚接0-一15V)单位

T.AQ+tc

(吞吐时间)

12位转换 8 8.5 8 8.5 一

拌s8位转换 6 8.3 6 8.6

fi,

(转换时A )

12位转换 6.4 6.4

拜s

8位转换 4.4 4.4

t八, 捕捉时间 1.4 1.4 拜s

r胡笋 孔径时间 20 1600ns

t. 孔径误差时间 0.3 10

Page 103: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

在仿效方式下,转换命令和转换开始之间应有一段延迟时间,允许ADs774有足够的时间

在转换开始之前去捕捉输入信号。这个延迟增加了有效孔径时间0.02一1,6哪,但允许在大多数应用中用ADS774代替ADC774或AD574。

上述两种方式,一旦转换完成,内部采样/保持电路立即开始工作,以跟踪输人信号。

4.ADS774基本应用与注意事项

由于ADS774的接口与操作考虑到了各种应用,所以在进行线路设计时,可以很方便地接

成8位输出或12位输出;既可采用全控方式,也可采用仿效方式。图6.20所示为通过对AO

信号的控制输出二字节的基本接法。当AO二0时,读高字节;当AO二1时,读低字节。表6.5

为二字节输出格式。

地址总线

AO

图6.20 输出二字节的基本接法

表6.5 高8位与低4位二宇节格式

字节 DB7 DB6 DBS DB4 DB3 DBZ DBI DBO

高 DBll DB10 DBg�{

DB7 DB6 DBS Dl只

低 DB3 DBZ DBI DBO 0 0 0 0

为了正确地使用 ADS774,在具体设计电路时应注意以下几点:

(l) ADS774内部没有将模拟地与数字地连通,使用时可通过较宽的印制板线连通。

(2)1脚的+sv电源应接入0.1拼F的去祸电容。 (3) 模拟信号均以9脚为基准,并通过粗线与模拟电源地相连。

(4) 输入信号的范围选择如图6.21所示。其中图 (a)是单极性输人,从14脚输人为0-

20V,从13脚输人为0一10V; 图 (b) 是双极性输人,从14脚输入为一10一+roV,从 13脚输

人为一5一+SV。

(5)零位与满量程的调节。在图6.21中,RI 是单极性零位调整电位器,RS是双极性零位

Page 104: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

调整电位器,R2和R4是满量程调整电位器。

(6)由于ADS774的输人阻抗不高,在应用时,最好采用输入缓冲器连接,如AD7110

图6.21 单极性与双极性的连接

6.6.2 ADS774与单片机的接口(简易数字电压表的制作)

利用99C51, MC14499和 ADS774,可制作简易数字电压表。ADS774控制方式灵活,与

89051接口方法较多,设计时应尽可能采用简洁的硬件电路和清晰的程序。本例力求减少外围

辅助电路,采用 “独立工作方式”,其模拟输人范围为单极性。

1.硬件设计

根据上述引脚介绍,89051和ADC的接口需处理好三个问题:

(1)给ADC送一个启动脉冲。

(2)获取 ADC转换状态信息,即A/D转换的结束标志。

(3)读取转换数据。

89051和ADS774的接口应用电路如图6.22所示。用P2.0作ADS774的启动信号,即下降

沿启动。待数据转换结束后,置高电位读取数据。ADS774转换状态接89051的INTO (P3.2),

作89C51的外中断请求信号,这样既可以用中断方式也可以用查询方法 (查询P3.2引脚电平)

来读取数据 (参见图6.23 ADS774启动一转换一数据读取时序图)。数据的读取用了两片

74 HC245,一片为读取低4位数据,只进行8位转换 ((2脚接地),该片可省出;另一片为读取高8位数据。当74 HC245的当1, 19引脚为低电平时,B端数据送A端;当1, 19引脚为高电

平时,B端与A端处于高阻状态,即ADS774的输出数据不会影响 PO口的引脚,利用 PO端的

通用1/0特性,可分时读人低4位和高8位数据。这样,ADS774启动一转换一数据读取程序

就非常清晰。本例中利用了PO口的1/0功能,故端口应外接一个10Mx8的上拉电阻。加上

6.4节介绍的4位 LED显示电路MC 14489,便可完成采集与显示功能了。

2.程序设计

根据图6.11 (b)和图6.22,可完成A/D转换和显示程序。设读人数据的低4位存于30H

内,高8位存于31H内,被转换后的BCD码分别存人41H(最高位)至44H(最低位)内,小

98

Page 105: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

+SV

{ 一 5V

10,。T

89051

P0O

P0. l

PO.2

PO.3

PO4

PO.5

PO.6

P0.7

P2.1

P22

1OkQX8

HC245

10 kQ

11.059

MHz

启动 转换结束

R/C(启动脉冲)Lt -取数据

STS(转换状态信W

DB 11-DBO(数据读出}

图6.23 ADS774启动一转换一数据读取时序图

数点在40H内。当输人电压值为lov时,对应的12位二进制数据为FFFH,即4096,因此需经

两次转换,第一次标度变换4096 : 4二1024,第二次再转换成 BCD码。小数点设在百位上,即

显示00.00V一99.99V,故40H需装人0100B。下面以查询方式进行程序设计。

ORG 0000H

AJMP MAIN

ORG 0030H

DH EQN 50H ;定义4个单元

DI, EQN 51H ;

BH EQU 52H ;

BI, EQU 53H ;

MAIN: CLR P2.0 ;启动ADS774

JB P3.2,$ ;A/D转换未结束,等待

SETB P2.0 ;置R/C为高电平,准备读人数据

99

Page 106: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

MOV PO,#OFFH

CLR P2.1

MOV 30H,PO

SETB P2.I

MOV PO,#OFFH

CLR P2.2

MOV 31 H,P1

SETB P2.2

ACALL DV

ACALL BCD

ACALL DISPLAY

;置PO口端口锁存器为高电平,读引脚

;低4位送PO口

;PO口送 30H

;关闭低4位数据

AJMP MAIN

;高8位送PO口

;印 口送 31H

;关闭高8位数据

;调用除4子程序

;调用16进制转BCD码子程序

;调用显示子程序 (参见6.4节),注意将DISPLAY子程

序中END改为RET

;返回主程序,进行第2次采样、A/D转换及显示。若需

降低采样速度,可插人延时子程序

END

DV: MOV A,31H

ANL A, #OFH

ORL A,30H

SWAP A

MOV 30H, A ;31H的低4位与30H的高4位合并,交换后存人30H内

MOV A,31H

SWAP A

ANL A, # OFH ;31H的高4位移到低4位

CLR C

RRC A

MOV 31H,A

MOV A,31H

RRC A

MOV 30H, A ;以上程序为高4位与低8位除2

CLR C

RRC A

MOV 31 H,A

MOV A,30H

RRC A

MOV 30H, A ;继续除2

RET

10位二进制数据转为BCD码为双字节除法,除以1000得千位,除以100得百位,除以10

得十位,余数为个位。本例除以1000及除以 100采用循环相减的方法,被除数的双字节放在

100

Page 107: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

DH、DL内

BCD:

除数的双字节放在BH,

MOV DH,31H

MOV DL, 30H

MOV DPTR, #1000

MOV BH,DPH

MOV BL, DPL

MOV 41 H, #0

MOV 42H, #0

MOV A,DL

CLR C

SUBB A,BL

MOV B,A

MOV A,DH

SUBB A,BH

JC BC2

INC 41H

MOV DH, A

MOV DL, B

MOV BH,#0

MOV BL, #100

CLR C

MOV A,DL

SUBB A,BL

MOV B,A

MOV A,DH

SUBS A,BH

JC BC3

INC 42H

MOV DH,A

MOV DL, B

AJMP BC2

MOV A,DL

MOV B, #10

DIV AB

MOV 43H,A

MOV 44H, B

MOV 40H,#04H

BET

BL内。

;被除数送 DH, DL

;除数送BH, BL

;千位 BCD码

;百位 BCD码

BC1

;先进行低字节相减,余数暂存于B

BC2

;再进行高字节相减

;若DHDL < BHBL,即C置位,转执行BC2

;否则,千位加1

;余数回送DH, DL

;千位最大值为1,不需重复

;除数送BH, BL

;不够减,转执行BC3

;够减,百位加1

;重复相减

BC3

;十位数送43H

;余数送个位44H

;小数点送40H

101

Page 108: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

本 章 小 结

1.89051有4个8位的并行1/0端口,除P1端口外,每个端口除基A 1/0口功能外,还具有第二功能。与

外围芯片相接时,可据硬件接口和相应程序编写的难易程度,选取基本1/0口功能或第二功能。

2. PO口用作基本1/0口时,要特别注意外接上拉电阻。4个1/0]用作基本1/0口时,若需林端口读入数

据,必须先置相应端口锁存器为 “l’状态。

3.使用端口的 1/0功能,可以方便地实现与具有串行输入功能芯片的硬件接口。相应读写数据的程序应

根据其时序— 是同步时钟的下降沿 (或低电平)还是上升沿 (或高电平)读写数据来编写。

4. PO, P2口作第二功能使用时:外扩芯片如8155/8156可视为外扩 RAM,若外扩芯片内部无地址锁存,

则必须增加一块地址锁存芯片。利用地址线ALE可将PO口的地址信号从分时复用的地址/数据中分离出来,

再利用丽丽、丽控制线完成硬件连接。对相关芯片的读写操作.同片外RAM一样,可使用movx类指令。

5.A/D, D/A与89051的接口使用上述二种方式均可,A/D转换的程序设计包括三个步骤 (对应A/D转换

的3个时序节拍),即送启动脉冲一获取转换信息一读取数据。

思考题与习题

6.1 89051的4个1./0端口,各有什么功能?

6.2 89051在外扩片外RAM时,需要使用哪两个端口?用端口的什么功能?用哪三根控制线?

6.3 如图6.5所示,欲将片外起始地址为100H的共20个字节的数据转存到片内20H开始的地址内,试

编写相应程序。

6.4 如图6.11、图6.14所示,若芯片为同步时钟上升沿输人数据有效 试编写相应显示程序。

6.5 使用 P(}端口的1/0功能作数据输人输出时,其硬件电路和程序设计要注意什么?其他三个端口呢?

6.6 试编写使用AD558实现输出锯齿波的程序。

6.7 如图6.22所示,要求每秒将输人的电压采样转换并显示和发送一次,发送数据的格式为 BCD码,

千位、百位、十位和个位各占一字节。设主频 11.0592MHz, 8位无校验.24006it/s,试编写相应程序。

6.8 根据图6.14,试设计一个简易数字频率计的原理电路并编写相应程序。

6.4 根据图7.22,要求每分钟采集一次模拟电压,并把采集的数据依次更新存人20一2FH的数据区内。

试编写相应程序。

6.10 上题中,若要求连续采集1小时,且将数据存入片外RAM区。试设计相应电路并编写程序。

102

Page 109: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

第7章 综合性设计实例兴货乡以签嵌份湘娜戮努 排溉臼划份姗羚街玲 分斑留珍扮冷份 帝下斌日后龙发乐多戈成烹令涂饱引告签蕊公沈不出爸忿蔚 芳它当签多捻叹岁甘公3袋

[学习指导】 可靠性设计是单片机设计的基本要求,本章对此进行了基本论述。通过大量的综合设计实例 (其中7.6, 7.7节为较完整的实例),介绍89051

怎样与外围芯片接口,怎样编写程序。最后介绍89C x x系列单片机其他几种常用

芯片如8901051, 8902051, 89052的功能特点。通过本章学习要求掌握:

1.无论是硬件设计、程序设计还是程序的调试,力求模块化。

2.89051与外围芯片的接口需根据外围芯片的特点,采用通用1/0口方式或PO

口的第二功能地址/数据复用方式。

3.根据外围芯片的特点,编写相应命令字。

4. 8901051, 8902051, 89052的功能结构特点。

7.1 设计概要

以上各章介绍了单片机的内部结构原理、指令系统等,下面结合具体实例介绍如何将所学

的知识应用到具体的设计中。

1.设计基本要求

(1)可靠性、稳定性要高

产品的可靠性、稳定性是非常重要的。初次设计不要过份追求设计功能的完美,重点应放

在满足基本功能的前提下,力求系统的高稳定性和可靠性。待具备一定的设计、调试经验后,

再不断完善其功能。

(2)使用维护方便

设计的产品要从用户角度出发,力求操作简单、直观,便于使用。输人/输出插座标识清

晰,结构要规范化、模块化,便于维护。

(3)性能价格比要高

性能价格比高,使设计的产品具有良好的市场竞争力。

10了

Page 110: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

2.方案设计概要

(1)模块化设计

无论是硬件电路设计还是程序设计,都要求模块化。如硬件电路可分为单片机基本系统、

显示、键盘、通信、时钟、A/D转换、D/A转换、输出驱动等单元模块;程序设计可对应上

述电路模块,采用子程序调用或中断服务的方式。

(2)硬件软件设计要综合考虑

当一个设计项目出现硬件电路稍复杂但程序编制却简洁,或电路简洁但程序编制却复杂的

情况时,初次设计者因为编程经验不多,应考虑选择前者。如 LED数码显示,宜采用静态显

示,因相应显示程序较简单。当具备一定的编程调试经验和技巧后,再选择后者,以减少所用

器件的数量,缩小产品体积,降低成本,提高性价比。

(3)器件的选择

硬件电路接口芯片宜选用性价比优良、读取速度与89C51匹配且功耗低的器件。如

ADS774优于 AD574, ADC674, ADC774,接口电路比ADC0809简单;DAC558优于 DAC0832,

不需外接运算放大器;DS12887优于MC146818及DS1217等。

(4) CPU的驱动能力

外接电路较多时,要考虑其驱动能力。驱动能力不足,系统工作将不可靠,此时,单片机

与外接电路要增设驱动器。

(5)注意事项

初次设计,在一个产品中,不宜过多采用可编程器件 (如8155, 8279)和ISP可编程逻辑

器件 (如PAL, GAL器件)。过多采用这些器件,往往由于器件的质量问题,或接口电路设计

不正确,或可编程器件的控制命令字写入错误,或PAL, GAL器件熔丝图不正确等原因,使调

试举步艰难,陷人困境。 (同一型号的PAL, GAL器件,生产厂家不同,熔丝图可能会有差

异。)

3.调试步骤

(1)分模块调试

系统的程序调试要循序渐进,对各模块逐个进行调试。如本章7.3节电子时钟的调试可按

如下步骤进行:

a.显示程序:先进行6个数码管的显示程序调试。6个数码管分别显示1, 2, 3, 4, 5,

6,延时 is后左移1位。其目的为检查单片机基本系统是否正常,LED显示器件及驱动器件是

否良好,显示电路及显示程序是否正确。

b.键盘扫描程序:先设定0一9共10个数字键及一个 “设定”(设定时、分、秒)功能键。

每输人一个数字键,显示左移1位;按 “设定”键,显示 “灭”Is,“停留”2s。其目的为检

查 “按键”是否良好,键盘扫描程序是否正确。

c.时钟芯片读出显示程序:每秒从时钟芯片读出 “时、分、秒”数据并分别显示在6个

数码管上。其目的为检查时钟芯片的质量,接口电路的设计,命令字写人及时钟数据读取程序

是否正确。

d.时间校正:通过键盘 (10个数字键,1个功能键),对时钟芯片的时、分、秒进行校正

修改。

104

Page 111: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

(2)模块化程序再链接

所有模块化程序调试完毕后需再链接成完整的系统应用程序。链接调试要规范化,并重新

修正ROM, RAM区域规划。

(3)功能的进一步完善

如可增加年、月、日、星期的显示;“时钟校正”可采用 “一键多功能”,如 “电子手表”

的日期、时间、设置方式,以减少 “按键”数量,降低硬件成本,还可采用其他自动校时方

式。

4.可靠性、稳定性设计

(1)提高电源的稳定性和抗干扰性

a.电源电压要求稳定,其电压精度不仅要考虑89051的要求,还要兼顾各外围接口芯片

的要求。

b.电源的交流纹波及干扰要尽可能小,大的毛刺干扰可能会使程序不正常,严重时会使

可编程器件的命令字丢失或ISP器件PAL, GAL的熔丝图出错,失去相应逻辑功能。

c.设计印制电路时89C51及接口芯片的电源、公共地线应尽可能粗、短;各芯片的 峡C与

公共地之间要跨接0.O1rF的高频退祸电容。 d.单片机整机电路适于在电磁干扰小、温度适宜的环境下工作。各接口芯片应尽可能选

用功耗低的CMOS器件,以减少发热,同时应尽量远离电磁场和发热器件。

e.外围驱动电源,如电磁阀、步进电动机、水泵的12V, 24V电源不可与89C51的十5V或

A/D, D/A转换及运放的士12V电源共地,更不能共电源,它们之间可用继电器、光电祸合器

或固体继电器隔离。

f.温度、压力、重量等传感器要单独提供稳压电源,以提高稳定性,减少漂移。

(2)程序可靠性设计

a.不断优化程序,防止程序死循环。尤其注意查询方式引起的循环等待,如键盘采用扫

描 “查询方式”时,某个按键损坏短接,程序便会停留在该处,此时用万用表检查,扫描输出

某引脚及扫描输入某引脚恒为低电平。使用ADS774采用查询方式时,若STB不出现低电平脉

冲,也会使程序长时间处在查询等待状态。

b.注意防止内部寄存器数据相互冲突。89051内部 RAM数量很少,编程时,主程序、中

断服务程序和各子程序都需使用它们,如累加器A、工作寄存器RO一R7、数据指针DPTR等,

要特别注意进人或返回时,这些寄存器的数据是否需要保护。

c.使用微处理器监控电路。目前监控芯片较多,如MAX815, 793 0

MAX815由电源复位电路、Watchdog监测、低电压检测电路三部分组成,其内部结构原理如图7.1所示。

电源复位电路用来监测电源 VCC,一旦电源低于复位阑值 (4.75V),则通过比较器和复位

发生器产生一个高电平复位信号RESET

Watchdog用来监视微处理器的工作状态,若在Watchdog时钟输出周期 (t w},)内,微处理器不能触发Watchdog的输人端 (WDI ),则WDO输出低电平;当复位条件满足或电源VCC低于

复位IA值时,WDO也为低电平;一旦 VCC高于复位I-值,WDO就变为高电平。所以,通常将

WDO接微处理器的非屏蔽中断输入端,MR为手动复位端,可以在这个引脚接一个手动开关。

·了05

Page 112: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

89C51

某口线 —

』门二__一丁七

W OI

MR

不全〔

PFI

Watchdog

监测器

Watchdog

时钟&}一月一WDO

寸基

150mA 复位

发生器RFSET

又犷较器

工复位IwjI}ft 、比较器PFO

幸 电源 F降阂值目

图7.1 MAX815原理结构图

MAX815还可以监测其他辅助电源,如+12V电源。只要把被监测的电压通过分压电阻接

到PF1端,当被侧电压低于规定的阂值电压时,则在PFO端产生低电平.可以作为单片机的中

断,进而进行相应的处理。

实际使用时,可将WDC与复位发生器输入端MR引脚短接,另外利用单片机的一根口线来

控制WDI端。编程时,在应用程序 (如延时程序、查询等待程序等)中插入该口线的位操作

取反指令 (CPL),定时地向WDI发出脉冲,使WI又j输出为高电平,不影响“复位产生”电路,即RESET输出为低电平。一旦系统工作不正常,则系统不能向WDI发脉冲,当时间超过某一

时间宽度,则使丽万石输出为低电平,从而使RESET复位端产生一个高电平脉冲复位信号,使系统重新开始运行。

7.2 键盘扫描

键盘扫描与显示功能可以通过8279可编程键盘/显示接口芯片来实现。本例使用89C51的

1/0口功能,因其硬件电路和程序设计相对比较直观简洁。

1.功能要求

0一9数字键和其他待定功能键共64个,4位 LED数码显示,当输人数字键时,从右到左

依次显示相应数字;按其他功能键时,转人执行赋予该键相应功能的处理程序。

2.硬件设计

如图7.2所示,电路由1块89C51及5块 HC373和4位共阳LED显示器构成。其中U3

U6为4块UC373,作LED的8段显示缓冲及驱动。因LED为共阳连接,故8段位信号为低电

平有效,参见3.8节秒表制作。U2锁存器构成 “扫描”信号输出,P1口构成“扫描”信号输

人。在扫描输出8根线和扫描输人8根线的交叉处接有K00到K77共64个键开关,其中K00

K07, K10, K11分别为数字键0一9,其余为待定功能键。“扫描”输出每次发出一位低电平

(称 “行线”),其余各位均为高电平信号;若 “扫描”输人信号电平值全为1(因pi口接有上

·106

Page 113: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

拉电阻),说明无按键接下;若某位为低电平 (称 “列线”),说明该列有按键按下,由相应

“行线”值与 “列线”值合并便可判别闭合的键值。

肯+5V肖+5v骂+5V濒

+5V<x9

PI 0

PI.I

P1.2

P1.3

PIA

P1.5

PI.6

P1 7

图7.2 键盘扫描与显示原理图

加入相应串行通信电平转换接口电路 (参见5.5节),便构成了具有按键、显示、通信等

实用功能的键盘硬件电路。

采用非编码键盘,CPU必须定时对所有按键扫描一次,一旦发现有键按下,CPU通过程序

加以识别,并输人相应按键的处理程序,实现该键功能。下面仅对0一9共 10个数字键和6个

功能键 (功能待定)扫描过程加以分析:

(1)扫描输出

要查询是否有键按下,CPU先逐行输出1行低电平 (因扫描输人 P1口接有上拉电阻,无

键按下时输人为高),其余行为高电平。例如,扫描第一行8个数字键0一7时,第一行Do =0,

其余为1,即行扫描输出值为FEH,对应行线值为OOH;扫描第二行数字键8, 9及6个功能键

时,第二行D, = 0,其余为1,即行扫描输出为FDH,对应行线值为10H,见表7.10

(2)扫描输人

在CPU扫描第一行时,若 P1口输人为 FFH,说明此行无键按下,程序进行下一行扫描,

否则说明有键按下。有键按下时,该行一共有8个数字键,究竟是哪个键按下呢?程序应接下

来进行判断。先将 P1口信号读人并存到扫描缓冲器KBY内,该值可能是FEH, FDH, FBH,

F7H, EFH, DFH, BFH, 7FH中的某一个 (这里限定仅有一个键按下,未考虑双键或多键同时

按下,即仅一位为低电平,其余为高电平),通过带进位右移指令,便可求得列线值Yll,即

OOH一07H中某一个。

107

Page 114: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

(3)求键值

将行值Xll的高4位 (低4位总为0) 与列值Yll的低4位 (高4位总为0)合并,便可求

得相应按键的键值,如数字键9的行值为10H,列值为olH,键值为11H。

(4)去抖动

当有键按下时,程序不再扫描下一行,每 10ms读取 PI 口数据一次,直到该键松开,即读

人的列值为FFH时,程序便可进人相应键的处理程序。

表7.1 键 值 表

键值 键功能行 值

Xll

行扫描输出

KBX

列 值

Yll

列扫描输入

KBY

OOH 数字键 0 OOH FEH 00H FEH

01H 数字键 1 OOH FEH olH FDH

OZH 数字键 2 OOH FEH 02H FBH

O3H 数字键 3 OOH FEH 03H F7H

(岭H 数字键 4 OOH FEH C4H EFH

05H 数字键 5 OOH FEH l o5H DFH

06H 数字键 6 OOH FEH 06H BFH

O7H 数字键7 OOH I FEH 07H �� �� �一7FH一

IOH 数字键 8 10H FDH OOH 「卫H

11H 数字键 9 IOH FDH olH FDH

12H 功能键 1 IOH FDH 02H FBH

13H . 功能键2 IOH FDH 03H F7H

14H 功能键 3 10H FDH 一 04H EFH

15H 功能键 4 10H FDH 一 o5H DF】【

16H 功能键 5 10H FDH (巧H BFH

17H 功能键 6 IOH FDH I〕宁H 7FH

3.程序设计

即使硬件电路完全相同,若程序设计不同,相应的功能也是不一样的。除了解决 “按合抖

动”间题外,巧妙安排扫描输出,还可做到 “一键多功能”(通常可一键双功能),“双键同按”

或 “数键同按”功能 (不处在同一列线时),或防止 “双键同按”或 “数键同按”(指处于同一

列线时)。针对不同的问题,采用不同的设计方法。总之,键盘设计一般是硬件简单,功能复

杂,则程序也复杂。本节仅对键扫描程序和数字键处理程序作介绍,帮助读者人门。

;存储器定义

KBx EQu srH ; 扫描输出缓冲单元 xll EQu 5EH ; 相应 “行线”值缓冲单元

KBY EQtJ SDH ; 扫描输人缓冲单元

Yll EQu scH ; 相应 “列线”值缓冲单元

BcDI EQtJ SBH ; 个位数据 BcDZ EQu 5AH ; 十位数据

BcD3 EQu 59H ; 百位数据

BcD4 EQu 58H ; 千位数据 108

Page 115: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

CRT1 EQU 57H ; 个位显示码 CRT2 EQU 56H ; 十位显示码

CRT3 EQU 55H ; 百位显示码

CRT4 EQU 54H ; 千位显示码;主程序:I.显示初始化

ORG OOOOH

AJMP MAIN

ORG 0030H

MAIN; MOV SP, #60H

MOV BCDI, #0

MOV BCD2,#0

MOV BCD3,#0

MOV BCD4,#0

ACALL TBFLIN

ACALL DISPLAY

;2.键盘扫描程序

ASKKB: MOY KBX, # OFEH ; 第一次扫描DO二0,其余为 1即FEH

;以后依次为FDH, FBH, F?H, EFH, DFH, BFH, 7FHo

mov X11 , # 0 ; “行线值”相应为OOH, 20H, 30H, 40H, 50H,

60H, 70H

ASKKBI:MOV PO,KBX

SETB P2.0

CLR P2.0 ;扫描输出.即KBX数据送U,锁存器。

ORL Pi,#OFFH

MOV KBY. PI ; 扫描输人.暂存KBY

MOV A,KBY

CJNE A, # OFFH, SKEY ;KBY不全为1,有键按下,求 “列线值”

MOV A, KBX ;无键按下,扫描下一行

RL A

MOV KBx, A

MOV A, x11 ;相应调整 “行线值” ADD A, #10H

MOV x11, A

AJMP ASKKB1

;3卜求 “列线值”及 “键值”程序

SKEY: MOV Y11 , # 0 ; “列线值”OOH一07H,

MOV R7, #8

SKEY1: CLR C

109

Page 116: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

RLC A

JNC SKEY2

INC Y l l

DJNZ R7, SKEY1

AJMP ASKKB

SKEY2: MOV A, X11

ORL A, Yll

MOV B, A

SKEY3: ACALL DELAY

ORL PI, #OFFH

MOV A, Pt

CJNE A, #OFFH, SKEY3

MOV A,X11

JNZ SKEY4

AJMP NUMPRO

SKEY4: MOV A, B

CJNE A, #10H,SKEY5

MOV YlI,#8

AJMP NUMPRO

SKEY5: ONE A, #11H,SKEY6

MOV Yll,#9

AJMP NUMPRO

SKEY6:

;4.数字键处理子程序

NUMPRO: MOV BCD4,BCD3

MOV BCP3,BCD2

MOV BCD2,BCDI

MOV BCD1,Yll

ACALL TBFLIN

ACALL DISPLAY

AJMP ASKKB

;5. BCD码转换为显示码子程序

TBFLIN:MOV RO, #BCD1

MOV R1, #CRTI

MOV R7,#4

MOV DPTR,#DOT

TBFLIN 1:MOV A,@RO

MOV A,@A+DPTR

]10

; 为0,该列有键闭合,求键值

; “行列”合并,得 “键序号”即 “键值”

; 暂存B寄存器

; 延时l Oms,待闭合键 “松开”

; 闭合键未 “松开”,继续等待

; 第一行,为数字键0一7

; 键序号为 10H值时,判为数字键8

; 键序号为11H时,判为数字键9

; 转其他功能键相应判别处理程序

; 显示数据左移一位

; 数字键值补充到最右一位

; 重新开始键盘扫描

Page 117: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

MOV @R1,A

DEC RO

DEC R1

DJNZ R7,TBFLIN 1

RET

DOT: DB 03H,9FH,25H,ODH

49H,41H,IFH,OlH,09H

;6.显示子程序DISPLAY:MOV PO,CRT,,

SETB P2.1

99H

CLR P2.1

MOV PO,CRT2

SETB P2.2

CLR P2.2

MOV PO, CRT3

SETB P2.3

CLR P2.3

MOV P0, CRT4

SETB P2.4

CLR P2.4

RET

7.3 电子时钟

使用单片机89C51和时钟模块DS12887,可以非常方便地设计各种电子时钟或时钟控制器。

7.3.1 DS12887

时钟模块DS12887是PC机时钟芯片MC146818的改进产品,其引脚接口、内部操作方式与

M C146818完全一致,片内SRAM为 MC146818的两倍。该模块与 MC146818时钟芯片相比,最

大的改进是将芯片的晶体振荡电路、充电电路和可充电电池一起封装在芯片的上方,形成一个

加厚的集成电路模块,电路通电使用时,其充电电路便自动对可充电电池充电,充足一次电可

供芯片时钟运行半年之久。因此,该模块是一个真正的 “全自动日历时钟”。

1.性能特点

(1)可代替 IBM AT计算机的时钟/日历。

(2)与 MC146818B和DS1287管脚兼容。

(3)计秒、分、时、天、星期、日、月、年,并有闰年补偿功能。

111

Page 118: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

(4)二进制数码或 BCD码表示时间、日历和警报。

(5) 12小时或24小时时钟,12小时时钟模式带有PM和AM指示。

(6)夏令时功能。

不'cc

SQWNC

NC

NC

TRQRESET

OS

NC

Ri认'

AS

CS

4

2~

,‘

1

9

。n

rJ

八划

︸、

4

凡、

勺一

,1

,孟

,二

气孟

1

1

1

1

1

1

卜的的闪一50

价U

l胜J

,‘

1

气J乙

,、︺

,峙

1勺

厂n

月1

0凸

口产

1

1

1

(7 ) Motorola和Intel总线时序选择。

(8)总线复用,以减少管脚。

(9)有 128个RAM单元与软件接口。

(10) 14字节时钟和控制寄存器。

(11) 114字节通用RAM.

(12)可编程方波信号输出。

(13)总线兼容中断信号 (lRQ),

(14)可分别软件屏蔽及测试的三级中断。

(15)时钟更新周期结束中断。

(16)低压低功耗,工作电压3一6V

2.引脚说明

DS12887引脚如图7.3所示。

1脚:MOT,总线类型选择,MOT信号线用来选择接口总

线的类型。当MOT接 瑞D时,选择Motorola总线时序,这时可

与M681-1011, MC6801和M C 146805 E2等接口;当MOT接 VSS

时,选择非 Motorola(如 Intel)总线时序,这时可与 8051,

89C51等接口。

4一I1脚:ADO一AD7,地址/数据 (双向)复用总线。

12脚:I'ss,数字、电源公共地。

13脚:CS,片选端,低电平有效。

14脚:AS,地址选通。AS接89 051的ALE,下降沿锁存8

位地址。

15脚:R/ W,数据读/写信号,接89051的WR控制线。

MOT

NC

NC

ADO

ADl

八D2

AD3

八04

AD5

AD6

八口7

l .Ss

图7.3 DS12887引脚图

17脚:DS,数据读选通,接89051的RD控制线。

18脚:RESET,复位端,低电平有效。该操作不影响时钟日历运行。

19脚:IRQ.中断申请,由专用寄存器C决定。 23脚 : SQL(.方波输出二S QW方波输出的波形由寄存器A中的RS3, RS.", RSI-. RSO位

确定,其是否输出则由寄存器B的SQWE位决定。

24脚:Ecc,+5V电源。

注意RESET复位时将有:

川 周期中断允许位PIE被清零。

(2)闹钟中断允许位AIE被清零。

(3)更新结束中断允许位UIE被清零。

扭)中断请求状态标志位IRQF被清零。 (5)周期中断状态标志位PF被清零。

112

Page 119: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

(6)闹钟中断状态标志位AF被清零。

(7)更新结束中断状态标志位OF被清零。

(8) IRQ中断请求引脚为高阻状态。

(9)方波输出允许位SQWE被清零。 (10)若AS为低电平,备用线Standby允许输入。

3. DS12887内部结构

DS12887的系统结构如图7.4所示。它是由时钟/日历计数器,A, B, C, D四个寄存器,

10个字节的时钟、闹钟和日历RAM, 114字节用户RAM,以及相应的控制逻辑组成。

SQW

IRQ

RESET

DOUBLE

BUFFERED

图7.4 DS12987系统结构图

通过对寄存器A的设置,来确定分频计数器的基准频率和输出频率;通过对寄存器B的

设置,来确定更新周期、各种中断、数据格式、计时方式和输出方波的波形。10个字节的时

钟、闹钟和日历 RAM用来读或写时、分、秒、年、月、日、星期和闹钟值。另外,通过读寄

存器C和寄存器 D的状态,可以控制所需的实时时钟。

(1)地址映象

图7.5为 DS 12887的地址映象图,它共有 128个字节单元,其中,10个字节单元为存放时

间、闹钟值和日历的RAM, 4个字节单元为寄存器A, B, C和 D, 114个字节单元为通用的用

户 RAM

a.时钟、闹钟和日历RAM

处理器的程序可以读出这10个字节RAM中的时间、闹钟和日历值,也可以写人初始化时

的时间、闹钟和日历值。它们可以为二进制码或BCD码。

113

Page 120: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

缓冲单元及寄存器地址

二进制或BCD内容

用户 RANI

图7.5 0512887地址映象图

初始化时,应把寄存器 B中的D7位置 1(SET),以禁止时间/日历的更新。程序可按预定

的格式写入这 10个单元,10个单元必须使用相同的格式,由寄存器 B中DZ位 (DM)来确定

二进制码或 BCD码。写人后可以把 SET位清零。以允许分频计数器计数。初始化后,实时时

钟按指定格式进行计数,除非再次初始化,不能改变数据的格式二当寄存器B的DI位 (12/

24)为 “1”时,选择24小时计数方式,小时和闹钟时单元为0一23;当该位为 ”’时,选择

12小时计数方式,小时和闹钟时单元为1一12。最高位为0表示AM,最高位为 1表示 PM。表

7.2是这10个单元的数据格式。

表7,2 时间、闹钟和日历RAM数据格式

地址单元 功能 l

十进制范围范 围

二进制码 BCD码

。 {秒 0一59 00 ~3B 00 一59

l 秒闹钟 0~59 00~3B 00~59

2 分 0一59 00一3B 00一59

3 分闹钟 0一59 (X}一3B 00一59

4

(12小时方式)

日寸

(24小时方式)

1~ 12��一

01一OCAM,81一SCPM 01一12AM,81一92PM

0~23 00 ~17 00 一23

}

5

一时闹钟

〔12小时方式)

时闹钟

(24小时方式)

1~ 12 01一OCAM,81一SCPM 01一12AM,81一92PM

0~23 00一 17 0()~23

6星期

星期天二11一7 01一07 01一07

7 日 1~31 01~ IF 01一31

8 月 1~12 01一OC 01~12

9 年 0一99 100一63 00~99

114

Page 121: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

DS12887每秒进行一次更新操作,在此期间不能访问上述单元。

有两种方法来使用三个闹钟单元:

第一种,在适当的时、分、秒闹钟单元写人相应的闹钟值,若闹钟允许位 (寄存器B的

b5位 (AIE))为1时,则每天在指定的时刻发生闹钟中断。

第二种,在这三个闹钟单元中的一个或几个内写人 “不关心”码。所谓 “不关心”码是指

十六进制的CO一FF值,即这些单元的高两位都为 “1”的 “不关心”状态。在闹钟时单元写

人“不关心”码,就可在每小时产生一次闹钟中断。同样,在闹钟时和分单元写人“不关心”码,可

每分钟产生一次闹钟中断。若全部三个闹钟单元均为“不关心”码,则可每秒产生一次中断。

b.通用用户 RAM

DS12887中的114个字节SRAM没有特定的用途,它们可由程序任意使用,并且在更新周

期也可任意访问。由此可以扩充系统的RAM,并可用作低功耗电池后备供电的不掉电CMOS存

储器,以保存在失去主电源时也不能丢失的数据。

(2)寄存器

DS 12887有四个可由处理器访问的寄存器,在更新周期时也可访间它们。

a.寄存器A(地址OAH )

寄存器A用来确定基准频率和分频计数器的输出频率,其格式如下:

D7

UIP

D6

[)V2

D5

DVI

D4

DVO

D3 D2

RS3 1 RS2

DI DO

RSl !RSO 可读/写 (除UIP)

该寄存器除 D7位 (UIP)只可读外,其余7位都可读/写。

UP:更新正在进行标志位。它是一个只读位,不受RESET影响。寄存器B的D7位 (SET

位)置 “1”时,禁止更新周期,且把UIP位清零。

I'll,:表示正在或将要进行更新周期

..0�:表示没进行更新周期,此时可读时间、闹钟和日历值

DV2, DVI, DVO:基准频率选择。用来选择分频计数器的基准频率,也可以作分频计数

器。复位后0.5秒开始第一个更新周期。这三位可读/写,不受RE劝而影响。DS12887内置

32.768kHz振荡频率,则该3位设置为010.

RS3, RS2, RS1, RSO:分频输出频率选择。用来选择15种分频计数器输出频率,或禁止

其输出,详见表7.3。分频器通过SQ W引脚输出方波及周期中断。这4位可读/写,不受

RESET影响。

表,.3 分频输出频率选择

寄存器A选择位 中断速率 一 SQW输出 t pi 一 频率RS3 RS2 RS1 RSO

0 0 0 0 None None

0 0 0 1 3.90625ms 256Hz

0 0 1 0 7. 8125m8 128Hz

0 0 1 1 122.070tts 8.192kHz

0 1 0 }

0 244 . l 41 ras 4.096kHz

0 1 0 1 488.281ys 2.048kHz

115

Page 122: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

续表

寄存器A选择位 中断速率

t PI

SQW输出

频率RS3 RS2 RS1 RSO

0 1 1 0 976.562us 1.024kHz

0 1 1 1 1.953125 ms 512Hz

1 0 0 0 3.90625 ms 256Hz

1 0 0 1 7.8125ms 128Hz

1 0 1 0 15.625 ms 64Hz

1 0 1 1 31.25ms 32Hz

1 1 0 0 62.5ms 16Hz

1 1 0 I 125 ms 8Hz

1 1 1 0 250ms 4Hz

1 1 1 1 500ms 2Hz

通过程序还可以实现以下功能:

·使用寄存器B中D6位 (PIE)允许周期中断

·使用寄存器B中D3位 (SQWE)使方波输出允许 ·同时允许上述两种功能以同一速率工作

·禁止这两种功能

注:寄存器A初始化可设置为0010, 1111B. b.寄存器B(地址OBH)

寄存器B用来确定更新周期、各种中断的许可、数据格式、计时方式和输出方波的波形

其格式如下:

D7

SET

SET:

D6 D5

PIE } AIED4 D3 D2

U二 一SQWE I DM DI

24/12

DO

DSE 一可读/写

允许更新周期位。可读/写,不受RESET或芯片内部功能的影响。

+0�:表示允许更新周期

+1�:表示停止正在进行的更新周期,使程序可对时间和日历单元进行初始化

PIE:周期中断允许位。可读/写,瓦面丽将其清零,但不受芯片内部功能的影响。

I,1,,:允许寄存器C中的D6位 (周期中断标志PF)来使IRQ引脚为低电平,周期中断速 率由寄存器A中的RS3, RS2, RS1, RSO来决定

"O�:禁止周期中断激活面阅,但仍将在指定时间将周期中断标志PF置位

AIE:闹钟中断允许位。可读/写,丽蔽丽会将其清零,但不受芯片内部功能的影响。

+1,p:使寄存器C的D5位 (闹钟中断标志AF)允许激活IRQ

�0,#:禁止闹钟中断标志AF位激活1豆心,即使闹钟中断标志AF被置起

UIE:更新结束中断允许位。可读/写,SET位置位和豆ESE丁信号将其清零。

+1�:允许寄存器C的D4位 (更新结束中断标志位)来激活丽叮

..0�:没有上述功能

SQWE:方波允许位。可读/写,RESET信号将其清零。.116

Page 123: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

+1�:由寄存器A中RS3, RS2, RS1, RSO确定的方波出现在SQW引脚

110": SQL,引脚为低电平DM:数据格式位。可读/写,但不受面诬范了信号和芯片内部功能的影响。

..1�:表示时间和日期采用二进制码

110 1,:表示时间和日期采用BCD码

24/12: 24/12小时控制位。可读/写,只受软件影响,其他信号不起作用。

I'll,:时间单元为24小时计时方式

.,0�:时间单元为12小时计时方式;

DSE:夏令时允许位。不受五丽百r信号和芯片内部操作的影响。

.T :在四月的最后一个星期日,将 1: 59:59AM计至3:00:OOAM;在十月的最后一个星

期日,将 1:59 : 59 AM计回I:00:00 AM

“丁:不进行上述操作

注:寄存器B可设置为1000, 101M

。.寄存器C(地址Ocx)

寄存器 c是各种中断的标志状态位,只有4位,格式如下:

D? D6 D5 D4

RQF I PF AF l OF

D0

0 } 只读

IRQF:中断请求标志位。程序读寄存器C或RESET信号将其清零。

当发生PF = PIE二I或AF二AIE二1或L F = UIE二1时、I明F置1,即:

IRQF=PF " PIE+AF- AIF+OF " UIF

若IRQF = 1,则IRQ引脚为低电平。

PF:周期中断标志位。RESET信号或读寄存器C时清零。

只要由寄存器A中的RS3, RS2, RS1, RSO确定的周期跳变产生,PF则置 “1”。若此时

寄存器B中的PIE也为 “1",那么,PF = I使IRQF置位,并激活丽口,产生爪心信号。若PIE

不为 “I",那么,PF = I不会激活IRQ。

AF:闹钟中断标志位。RESET信号或读寄存器C时清零。

当现行的时间与闹钟时间相同时,AF位置 ..I�。若此时寄存器B中AIE也为 “1",则AF

=1使IRQF置 ..1 ,.,并激活丽币,使IR亘弓}脚为低电平。若AIE不为 “1", AF也不会激活IRQ o

OF:更新结束中断标志位。RESET信号或读寄存器C时清零。

在每个更新周期后,OF二I。若此时寄存器B中UIE也为 “1", UF=I将使IRQF置位,并

激活IR口。当UIE不为“I”时,OF = 1不会激活IRQ 寄存器C的D3一DO位没使用,读出时为0,但不能写人。

注:寄存器c可设置为0000, 000M

d.寄存器D(地址ODH)

寄存器D只有一位,表明RAM和时间有效值的状态,格式如下:

只读

117。一。?一

DZ一。

03一。

04一。

D7

一VRT一

Page 124: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

VRT: RAM和时间有效状态位。

若电源检测引脚 (PS)连续正常,VRT二1,则 RANT的信息有效;若电源检测引脚 (PS)

为低,VRT二0,则 RAM的信息无效。

处理器程序可在初始化时间和日期时置位VRT,表示RAM和时间有效。VRT位只可读出,

它不受RESET信号影响,只能通过读寄存器D置位。

寄存器D的D6一DO位没使用,读出时为 ‘0",但不能写入。

(3)分频计数器

如图7.4所示,DS12778分频计数器的基准频率为32.768kHz,由寄存器A的DV2, DV1,

DVO来控制;方波输出频率则由寄存器A的RS3, RS2, RS1, RSO来确定;分频器的1 Hz输出

至更新逻辑电路。

复位后过0.5s开始第一个更新周期。

a.力一波输出选择

22位的分频计数器15位接在一个15选1的选择器上,用它产生各种频率的方波信号,寄

存器A中的RS3, RS2, RS 1 , RSO确定方波频率。周期中断也使用同一个 15选 1选择器。频

率的选择参见表7.30

选择好频率后,可控制寄存器B的D3位 (SQWE )来允许或禁止SQ W引脚的输出信号。输出的方波信号可用作外部频率标准、频率合成器或在程序控制下发生各种声音。

b.周期中断选择

允许每隔500m,至30.517P。在丽口引脚产生一次周期中断。周期中断的速率控制与方波输出选择相同,但两者有不同的允许位,周期中断可以通过对寄存器B中的D6位 (PIE)置位来

实现。

周期中断可用于各种实时系统,它可用于定时扫描从开关闭合到串行接收等各种形式的输

人操作,也可用于多路显示扫描输出等。

c.更新周期

若_r述设置正确且寄存器B的D7位 (SET)为 “00,则 MC146818A每秒执行一次更新周

期。若SET= 1,则停止并禁止新的更新周期,以允许程序对时间和日期单元进行初始化。

更新周期的基本功能是秒单元加 1,如产生溢出则分单元加 1,直至年单元。更新周期也

把闹钟字节与相应的时间单元进行比较,若所有单元均相同或闹钟单元有 “不关心”码,则产

生闹钟中断。

对于32.768kH,时间基准,更新周期需1948t.s。在更新周期时,把寄存器A的D7位 (更新正在进行位UIP)置位,这时处理器不能访问时间、日期和闹钟单元,否则就会得到不确定

的数值。

为了正确地访问时间和日期信息,有以下三种方法:

第一,使用更新结束中断

若该中断允许,则在每个更新周期结束后产生中断 (每秒一次),它表示以后的999 ms期

间可正确地读取时间和日期信息。在退出中断服务程序前,应把寄存器C的D7位 (IRQF)清

零。

第二,用寄存器A的D7位 (UIP)来判断是否正在执行更新周期

118

Page 125: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

UIP位每秒变化一次。若UIP二1,将在244t.s后开始更新周期。所以,当UIP二。时,在时

间、日期发生变化前,月户至少还有244f,时间,故应避免该时间、日期的子程序超过244ts. 第三,用周期中断来判断是否正在执行更新周期

UIP位在寄存器C的D6位 (PF)两次置位之间置位。周期中断时间大于更新周期时间tuc

(248Ps或1984Fis)和teuc(更新周期前延迟时间,244!s)时,可使用周期中断来正确读取时间和日期。这时,只要在::工/2(周期中断时间,500ms, 250ms, 125ms, 62.5m。等,见表7.3)

加上teuc的时间内读出时间和日期,就可避免在更新周期进行读操作。

进行时间设置时需注意,在每月月底的11:59:58PM至0:00:00A M的2s内不应执行时间设

置操作,同样,在发生夏令时更换时间的2s内不应执行时间设置操作。

(4)中断

DS 12887有三种分立的全自动中断源:闹钟中断可程控为每秒一次至每天一次;周期中断

速率可选择为0.5s至30.517fs;更新结束中断可每秒产生一次,以通知程序更新周期结束。 处理器程序可通过寄存器的PF (D6位)、AF (D5位)、OF (D4位)位来选择允许哪些中

断,即相应的中断允许位置I,则允许相应的中断;反之,则禁止该中断。

若在允许中断时,中断标志已置起,仍立即激活IRQ引脚。因此,在允许新的中断时,程

序应清除以前所发生的中断。

在发生中断事件时,把寄存器C中的相应状态标志位置位,三个中断源在寄存器C中有

各自的标志位,它们的操作与寄存器 B的相应中断允许位无关。这些标志位有以下两种使用

方式 :

a软件扫描方式

该方式中,程序不允许中断。中断标志位用作状态位,程序在需要时去读它们。若标志位

置位,表示在读该位前已发生相应的中断事件。需注意的是,在读寄存器C的某状态标志位

时,会把寄存器C中所有标志位清除,因而会擦除了其他中断事件的记录。故每次读寄存器C

时,必须检查所有的标志位,以保证不丢失任何中断。

b.用标志位的方法允许中断

在中断标志位置位时,如寄存器B中的相应中断允许位为 “I",就会激活IRQ,使IRQ引

脚为低电平。只要三个中断源中有一个标志位和相应允许位置位,则IRQ引脚就保持为低电

平。在硕 =。时,寄存器C中的D7位 (IRQF)置1,表示有中断产生。在读寄存器C时,包

括工RQF位在内的所有标志位都清除。因此,当程序发现IRQF=1时,就必须找出标志位和札应允许位均为 “1”的中断源,并转去为它服务:注意:有可能同时发生多个中断,读取中断

标志时,不要遗漏其他的已产生中断的中断源。

7.3.2 电子时钟的设计

1.硬件设计

图7.6为89 C51和DS 12887的接口电路,PO.0 - PO.7分别接DS12887的DO - D7, ALE接地

址锁存AS,丽豆、RD分别接R/ W与DS。另外,片选及复位接89 C51的P2.7及P2.6,此二线读

者可根据实际情况改接其他引脚。图7.6电路再加上 LED显示及7.2节图7.1的键盘时间校正

119

Page 126: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

电路便可构成电子时钟。LED数码显示因所需数码管较多,可采用5.4.2节中图5.4所示的串

行静态显示方案或6.4.2节中图6.13所示的串行级联动态显示方案,但无论动态还是静态,

当数码管尺寸较大时,在数码管和信号引脚之间需加人功率驱动门。

时间校正可通过串行口 (如PC机)或键盘 (参见

7.2节)进行。

2.程序设计

(1)寄存器控制命令字分析

a. DS12887初始化:给寄存器A, B, C, D送控制

字 (CE片选有效)

OAH- # 2FH (0010, 1111B);中断速率500ms

OBH- # OAH (0000, 1010B);允许更新、禁闹、

方波,BCD码24小时计时方式、禁夏时

OCH- #0

ODH- #0

b.读写时钟:(读:读时钟数据;写:校正时钟)

OBH- # 8AH;停止更新,进行读写

OOH 秒 BCD码

02H F分 BCD码

04H F时BCD码

07H 日期BCD码

08H 月BCD码

09H F年BCD码

OBH- # OAH;停止读写,允许自动更新

c.外部RAM (89C51片外RAM)

地址 :OEH一7FH

(2)读写校正程序

a. DS12887初始化程序:

DSINITIAL: CLR P2.7 ;片选有效

MOV RO,#OAH

MOV A,#2FH

MOVX @ R0, A ;命令字送寄存器

INC RO

MOV A,#OAH

MOVX @ RO, A ;命令字送寄存器

INC RO

CLR A

MOVX @RO,A

120

89C51 DS 12887

POK.-I ADO-D7

INTO

P2 6

ALE卜州AS瞥一州罗岁 S(1W_RI)l一洲进P27卜一一一叫卜札 L _

图7.6 89C51与DS12887接口电路

Page 127: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

INC RO

MOVX @RO,A

SETB P2.7

b. DSRD:时间、日期数据读取子程序。时间、日期读取并分别存人寄存器 YEAR,

MONTH, DATE, TIME, MINUTE, SECOND(需定义)中 DSRD:CLR P2.7

MOV RO,#OBH

MOV A,#8AH

MOVX @ R0, A ;停止更新,进行读操作

MOV RO,#00

MOVX A,@RO

MOV SECOND, A ;存秒

MOV RO,#02

MOVX A,@RO

MOV MINUTE, A ;存分

MOV RO, #04

MOVX A,@RO

MOV TIME, A ;存时

MOV RO,#07

MOVX A,@RO

MOV DATE, A ;存日

INC RO

MOVX A,@RO

MOV MONTH, A ;存月

INC RO

MOVX A,@RO

MOV YEAR, A ;存年

MOV RO,#OBH

MOV A,#OAH

MOVX @R0, A ;允许更新

SETB P2.7

DSWR时间、日期校正与读出程序类似。

7.4 音视频信号矩阵切换

利用MT8816和89C51可以方便地构成以16 x 8 (16路输人//8路输出)为基本单元的音频

或视频信号的矩阵切换电路。

121

Page 128: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

7.4.1 MT8816

MT8816内含7一128线地址译码器、控制寄存器、8x16交叉点开关阵列,广泛应用于程控交换机、键控电话系统、无线移动通信及测试仪器等设备中,作为交换网络或模拟电子开

关。电路的基本特性为:

提供8x16模拟开关阵列功能

导通电阻 ( VDD = 12V) 45n(偏差SSZ)

模拟信号最大幅度 (峰一峰值)12V

开关带宽 45 MHz

非线性失真 0.01%

电源 4.5一13.2V

工艺 CMOs

MT8816引脚及功能控制如图7.7所示。

D6 D5 D4 D D2 D 1 DO 选择开关通路L L L L L L L 10-01

L L L L L L H 12-01

L L L L L H L 13-01

L L L L L F王 H 14-01

L L L L H L L 巧-01

I_ L L L H I H 16-01

L L L L 日 日 L 17-01

L L L L H H H 18-01

L L L H L L L 19-01

L L L H L L H 110-01

L L L HI}L H L 111-01

L L L 日 L H H 112-01

L L L H H L L 113-01

L 七 L H H L H } 114-01L L L H H H L 115-01

l L L H H H H 116-01

L L H 同 1几 11-116-02

L H L 同 1几 11-116-03

L H H 同 上 11-116-04

H L L 同 卜 11-116-05

H L H 同 1二 I1-116-06

H H L 同 上 11-J16-0?

H H H } 同 二 工1一丁18-08

l

rJ

I

气乙

,、J

l

V

O

D

O

C

O

HIZ乃1415佑口18既D4DZDIos

4039

招3736

35343332

31302928

27肠2524

2322

21

n户

1

,‘

飞︺

Jq

l、

产人曰

勺J

O八

QJ

I

1

气‘

1.1

1.月

目胜

月咔

丁.

rj

n曰

﹄、﹂

‘︺

Q

lll

l

今‘

,j

月斗

门曰

门曰

仁d

︹匕

、J

1

1

1

1

1

1

1

‘q

l、J

‘曰

门产

0矛

n们

]

]

1

1

1

1

,‘

08

ass 07

STS

06

V任

图7.7 MT8816引脚及功能控制图

引脚说明:

01一08:开关阵列8路输人或输出。

11一116:开关阵列16路输人或输出。

D4一D6:列地址码输人,对开关阵列进行列寻址。

DO一D3:行地址码输人,对开关阵列进行行寻址。

STB:选通脉冲输人。高电平有效,使地址码与数据得以控制相应开关的通、断。在STB

。122

Page 129: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

上升沿前,地址必须进人稳态;在 STB下降沿处,数据也应是稳定的。

DI:数据输人。DI为高电平,控制被选开关导通;DI为低电平,控制被选开关截止。

RST:复位信号输人。若为高电平,不管CS处于何态,均将全部开关置于截止状态。

CS:片选信号输人,高电平有效。

VD0:正电源,电压范围为4.5一13.2V,

VEE:负电源,通常接地。

VSS:数字地。

7.4.2 音视频信号矩阵切换

1.硬件设计

图7.8为16路输人//8路输出的原理图,其信号输人/输出缓冲电路根据音频或视频信号带

宽响应而异 (本图省略)。PO口8位数据经373锁存后再控制8816 (89C51仅外接一片8816时

可不用),其中DO一D3为16路输入选择,D4一D6为输出选择。D7 (DI) = 0,上述选择为断

开;D7 = 1,上述选择为接通。

10kQ X8

11121314巧16171819110川1121131141151160102030405060708

图,.8 16x8矩阵切换原理图

123

Page 130: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

2.程序设计

系统复位时,P2.7输出的高电平 (接8816RST引脚)使 8816复位,即全部输人与输出为

断开状态。

初始化时,首先撤消8816复位信号,即P2.7输出为低,然后进行11送01, 12送02,

18送08的操作。每操作一次,应使STB产生一正脉冲信号,使切换有效。

当单片机通过串行口或其他方式接到命令需更新切换方式时,必须先断开原接通点,再接

通新信号,否则会产生信号重叠。例如第6路 (101)输出,原接通第5路 (0100)输入信号,

现更新为第15路 (1110)输入,必须先关断第5路输人 (送信号0101, 0100),再接通第15路

输人 (送信号1101, 1110)。也就是说,更新切换时,需操作两次。参考程序如下:

;定义各输出缓冲单元,用于暂存相应输人路序号数据,供更新切换使用。

MX1 EQU 50H

MX2 EQU 51 H

MX3 EQU 52H

MX4 EQU 53H

MX5 EQU 54H

MX6 EQU 55H

MX7 EQU 56H

MX8 EQU 57H

MOK EQU 58H ;输出路数据暂存

CAK EQU 54H ;输人路数据暂存 ;主程序

MAIN: CLR P2.7 ;撤消8816复位信号

MOV R0, # 50H ;初始化 “输出缓冲单元”

MOV R7,#8

MOV A,#0

CKMO:MOV @RO,A

INC A

INC RO

DJNZ R7,CKMO

MOV A, # 80N ;初始化8816,首先将第I路输人送第I路输出

MOV R7,#8

CKNI l:MOV PO,A

SETB P2.0 ;控制信号送373锁存器

CLR P2.0

CLR P2.6 ;在STB引脚产生一正脉冲

SETB P2.6

ADD A, # I I H ;依次将第2路输人送第2路输出

DJNZ R7,CKMI

124

Page 131: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

;更新切换子程序,设输出路数 (OOH一07H)已存人MOK内,输人路数 (OOH一OFH)已

存入CAK内

CKM I O:MOV A,MOK

ADD A,#50H

MOV RO,A

MOV B, @RO

MOV @RO,CAK

MOV A,MOK

SW,4P A

MOV MOK, A

ORL A, B

ANL A, #7FH

MOV PO, A

SETB P2.0

CLR P2.0

CLR P2.6

SE'IM P2.6

MOV A,MOK

ORL A,CAK

ORL A,#SOH

MOV 邢 ,A

SETB P2.0

CLR P2.0

CLR P2.6

SETB P2.6

;A指向MX输出缓冲单元

;找出输出路对应的原输人路数,暂存于B

;新输人路数据保存于相应输出缓冲器内

;产生原输入路数的关断数据

;D7=0断开;第一次操作,关断原输入信号

;产生新输人路数的接通数据

;D7=1为接通

;第二次操作,接通新输人信号

7.5 视频字符显示

使用 NEC公司的D6145 C字符叠加芯片和单片机 89C51,可以在屏幕上显示时间、频道号

7.5.1 D6145C

D6145 C为CMOs集成电路,显示字符的格式为6x9点,由于字符间没有空位,该电路可

以显示两个或更多字符的组合,如数字及图表等。内含 16字符发生器 RAM,可以在显示时改

变字符或图表。

1.性能特点125

Page 132: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

(1)显示的字符数:12行x 24列。

(2)字符型式数:112 (ROM), 16 (RAM).

(3)字符大小:可选2H, 4H, 6H, 811/点中的任何一种。

(4)字符颜色:每个字符可选 8种颜色中的任何一种。

(5)背景:每个图像可在无背景、黑边、正方背景、空心背景之中选用一种 〔正方背景及

空心背景可任选8种颜色之一种。

(6)点矩阵:6x9点阵图像字符间没有间隙。

(7)闪烁:1:1,3:1或1:3任选。

(8)屏蔽脉冲:每行可在垂直方向上输出。

(9)双速扫描电视方式:垂直扫描线计数的切换使其适用于每场含有525扫描线的系统。

(10)与微处理器的接口:8位串行输人格式。

(11)电源:单一+5V电源。

(12)工艺结构:低功耗CAIOS电路。

叼0

7

6

4

飞︼

勺山

I

n钊

!

....

,.J

I

L

I

.

甲.工

,1

2.引脚说明 D6145C为18脚双列直插封装,引脚如图7.9所示。

CS:片选信号输人。低电平时为工作状态,高电平时

时钟输人 (CLK)及选通输人 (STB)禁止。

CLK:时钟信号输人。输人读数据用的时钟信号,在

时钟信号的上升沿读出,输人到DATA数据引脚。

STB:选通信号输人。输人串行数据之后输人选通脉

冲,在输人STB引脚选通脉冲的上升沿读出8位数据,如

果8位数据是字符,则在选通脉冲的下降沿数据地址增量

加1。

DATA:串行数据输人。该引脚输人控制数据,与CLK

VCC:电源,接+5V电源。

CS

CLK

STB

DATA

VCCCKOUT

OSl

OS2

V,

HO

H

V

飞王ST

VBLK

VB

VG

VR

VM

1

2

气J

jq

‘J

反U

7.

公n

Q

图7.9 D6145C引脚图

引脚的时钟输人同步读出数据。

CKOUT:振荡信号输出。

OS1, OS2:分别为振荡器的输人和输出,接振荡器电容或线圈。

VSS:接系统地。

Vm:字符信号输出监视器。如果任何字符信号输出VR, VG及VB为高电平,则输出高电

平信号。

VR, VG, VB:字符信号输出。输出与红、绿、蓝相对应的字符数据。

VBLK;消隐信号输出。输出消隐信号截止视频信号。

TEST:测试时钟输人端。输入测试时钟信号 (平常它与 t% s、相接)。

V:垂直信号输人。输人垂直同步信号,应确认在低电平有效时输人该信号。

H:水平同步信号输人。输人水平同步信号,当此信号为高电平时,振荡器发生振荡,与

信号的上升沿同步。应确认在低电平有效时输人水平同步信号。

HO:保持。低电平时振荡器停振,同时输出信号VR, VG VB及VBLK全部为低电平

(确认平时该信号置于高电平)。

126

Page 133: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

3.工作原理

(1)命令格式

所有控制命令为8位串行输入格式,初始化时,根据需要对 巧个寄存器写人相应命令数

据,如表7.4所示。

表 7.4 D6145C命令表

内 容 FO D7 D6 D5 D4 D3 D2

l

D1 ’ DO

显示字符数据地址 0 0 C6 C5 C4 C3 C2 C1一CO字符彩色闪烁数据 0 1 0 0 0 闪烁 红 绿 蓝

字符显示行位置地址 0 1 0 0 一l l AR3 AR2 AR1 ARO

字符显示列位置地址 0 1 0 1 AC4 AC3}J

一AC2 AC1 ACC

背景规范 0 1 I 0 BS4 BS3 Rb Gb Bb

写同步平滑通/断、显示通/断 0 1 1 I 0 0 D同步 SM DO

闪烁/振荡器控制 0 I I I 0 I BL2 BLI OSC

格式选择 X I }

1 1 I 那 FR

CRAM写人数据 I 0 0 CRS CR4一ICR3 CR2 CRI CRO

CRAM字地址 1 0 1 0 0 RW 3 RW2 RW1 RWO

GRAM行地址 1 0 1 0 l RU RL2 RL1 RLO

垂直位置起始地址 一 1 0 1 1 科 V3 V2 VI VO

水平位置起始地址 l 1 l D H4 H3 142 Hl H0

字符大小规范 1 1 0 55 S4 AR3 AR2 AR1 ARO

设置测试方式 l l . 1 一

l

1 ’ 0 份 12 丁1 功

(2)格式的选择/复位 (测试方式解除)

存储体。命令 (FO=0):

a.显示字符数据地址。

b.每个字符的彩色/闪烁数据。

c.字符显示行位置地址。

d.字符显示列位置地址。

e背景的规范。

f.写同步,平滑通/断,显示通/断。

9.闪烁/振荡器控制。

存储体1命令 (FO=1):

a. CRAM写人数据。

U. CRAM字地址。

“·CRAM行地址。

d.垂直位置起始地址。

e.水平位置起始地址。

127

Page 134: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

f.字符大小规范。

格式复位 (测试方式解除):

格式复位命令的位1 (FR)置于1时,测试命令方式解除,下列命令的内容复位:在测试

方式时不能接受普通的命令,因此在程序开始前务必确认测试方式已解除,格式已经复位。待

复位的命令有:所有行大小寄存器 (ARO一AR3)内容置0(即所有行都定在最小尺寸)。在上

述命令不复位又需解除测试命令方式时,可使用测试方式解除指令 (FO , D7, D6, D5, D4

D3,D2,D1,DO) = (1,1,1,1,0,0,0,0, 0)。

(3)格式选择命令

Fol D7 D6 D5 D4 D3 D2 Dl DO

! x } 1 } 1 一 1 } 1 } 1 } 1 } FO 一FR }

FO一D2:格式选择命令

D1:存储体选择位。D1二0,允许使用每个存储体0命令

D1=1,允许使用每个存储体1命令

DO:格式复位位。DO= 1,解除测试方式,将字符大小选择命令的内容复位。

(4)显示字符数据地址

D6145 C芯片内含有112个字符ROM,常用数字和英文大小写字母的数据地址如表7.5所

示。表中行列由C6一CO即OOH一7FH决定,其中70H一7FH地址为6x8可读写RAM,用户可

根据需要先将汉字或图形点阵写人相应地址内,需要显示时,再调用相应数据地址。

表7.5 常用显示字符数据地址

育代 0 1 2 3 4 5

[

6 7 8 9 ’A B C D E F

0 0 1 2 3 4 5 6 7 8 9 ( )

1 A s c.D E F G H I J K L M N a

2 P Q R S T U V W X Y 1 Z {!

5 ? a b c d e f g h IJ k L m 0

6 P q’Il

S t U V W x Y z

[

(5)字符显示位置地址

字符显示一共有 12行 x 24列,在屏幕上的位置地址,行由 AR3一ARO决定 (0000

1011),列由AC4一ACO决定 (00000一10111)。其起始位置地址,垂直上下由D4一VO决定,水

平左右由H4一HO决定 (水平禁用00000}0

(6)彩色闪烁数据

D0

Dl

绿

D2

FO D7 D6 D5 D4 D3

闪烁

D3:闪烁选择位。D3=0,不闪烁;D3=1,闪烁。

D2一DO:彩色选择.如表7.6所示。

128

Page 135: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

表7.6 彩色选择

字符彩色选择位

红 绿 蓝 字符彩色 红 绿 蓝 一 字符彩色0 0 0 黑 一 1 0 O 红

0 一} 0 1 蓝 1 0 1 . 品红

0 1 0 绿 一 1 ! 1 0 黄

0 1 1 青 一{一 1 一 1 1 白

(7)背景的规格

每个图像背景的形式及颜色可以用背景规格命令来指定,背景的形式有:无背景、黑边、

正方背景及背景。背景的颜色有:黑、蓝、绿、青、红、品红、黄、白等。

a.背景规格命令:

D0

Bb

D1

Gb

D2

Rb

D4 D3

BS4 }BS3

‘U

D

一1

,.-

-

D

-1

-

b.背景格式如表7.7所示,背景颜色如表7.8所示。

表7.7 背景格式 表,.8 背景颜色

BS4 BS3 背景格式

0 0 无

0 1 黑

1 0 一

正方背景

1 1 空心背景

Rb Gb Bb 背 景 颜 色

0 0 0 黑0 0 1 蓝0 1 0 绿

0 1 1 青

1 . 0 { 0 红

1 0 1 品红

1 1 一} 。 黄1 1 ! 1 白

无背景或黑边时置 (Rb, Gb, Bb)=(0, 0, 0)0

(8)振荡控制

此集成电路允许用闪烁/振荡控制命令将振荡器接通/断开,使它在不显示字符时,能够停

振,以节约电能。但是即使在停振后字符的连续性仍为可执行,所以要将显示控制命令与该命

令联合使用。

FO D7 D6 Ds D4 D3 D2 D1

B L2 一BD

D0

Osc

BL2, BU:闪烁控制位:

为0 0:闪烁断开

为0 1:通 1,断3

为1 0:通3,断1

为1 1:通 1,断1

osc:振荡控制位。DO =0,断开;DO二

(9)字符尺寸规格

接通。

129

Page 136: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

印 D7 D3

AR3

D2

AR2

D1

AR1

DO

ARO

n4-54

DS-55

D6一0

字符尺寸规格如表7.9所示。

表7.9 字符尺寸规格

字符尺寸规格位 线地址选择位

S5 S4 字符点的尺寸 AR3 AR2 ARl ARO 功 能

0 0 垂直 2H 水平 0 0 0 0 选择第 1线

0 1 414 2-t,Jo 0 0 0 1 选择第2线

1 0 6H 3"a&,

1 1 8H 4" a&, 1 1 -0 1 选择第 12线

2

1 dol=又瓜万丽z)请勿将地址置于OH一13H以外的地址。

7.5.2 D6145C与89051的接A与应用

1硬件设计

D6145与89051的接C1电路如图7.10所示,外加入视频行、场同步脉冲,便可从10脚VM

输出黑白字符,叠加到视频显示上,也可从VR, VG, VB输出彩色三基色字符信号。 M623

十Sv 89C51 D6145 C

V cc

行id步场同步

消隐

输出字符

图7.10 D6145C与89C51接0

2程序设计

D6145C写人时序如图7.11所示。

CS(1)

CLK(2)

STB(3)

DAIA(4)

-一一几丁一爪平.一---------------------一 万us一一一月一一一卜一一一一一一一一

一一一丈三卜《二卜一-----------------------一—

图7.11 D6145C写人时序

命令格式顺序: (1)格式选择:命令字FFH (D] = 1)或FDH (DI =0) 130

Page 137: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

(2)测试复位:FO= 1,命令字 EOH

(3)垂直位置起始地址:FO二1,命令字61H一7FH(上下位置)

(4)水平位置起始地址:FO= 1,命令字CIH一DFH(左右位置)

(5)字符尺寸:FO二1,命令字8CH

(6)背景规范:FO =0,命令字CFH(白色)

(7)闪烁/振荡控制:FO =0,命令字E9 H (E8 H关显示)

(8)闪烁控制:FO =0,命令字87H(不闪;8FH闪)

(9)显示行地址:FO =0,地址90H一9BH (0一12行)

(10)显示列地址:F(} = 0,地址 AOH一B7H (0一24列)

(川 字符数据地址:FO二0,数据地址OOH一7FH

上述第 (1)一(8)条为初始化程序,(9)一(11)条为显示数据程序。D6145 C命令为9

位,FO数据可加载到进位标志C内。

程序设计:若将 12: 38显示在第一行第一列开始的位置,程序如下:

DWR: CLR P1.4 ;片选有效

MOV A,#OFDH ;设置FO二0

ACALL WCR

MOV A, # 90H ;第 1行

ACALL WCR

MOV A, # OAOH ;第 1列

ACALL WCR

MOV A, # OIH ;数字 I的地址

ACALL WCR ;以上6行表示第1行第1列显示数字 “1”

MOV A,#OAIH ;第2列

ACALL WCR

MOV A, # 02H ;数字2

ACALL WCR ;以上4行表示第 1行第2列显示数字 ‘2"

MOV A, # OA2H ;第3列

ACALL WCR

MOV A, # OAH ;图形 “:”

ACALL WCR ;第3列显示图形 “:”

MOV A,#OA3H ;第4列

ACALL WCR

MOV A, #03H ;数字3

ACALL WCR

MOV A,#OA4H ;第5列

ACALL WCR

MOV A, # 08H ;数字8

ACALL WCR

131

Page 138: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

SETB

END

MOV

RLC

CLR

m OV

SETB

DJNZ

SETB

CLR

RET

PI.4 关闭D6145C

WCR:

WCR1:

R7, #8

PI.1

P1.0,C

P1.1

R7,WCR1

P1.2

PI.2

7.6 水温控制系统 (1997年全国大学生电子设计竟赛试题)

1.设计任务

设计制作一个水温自动控制系统,控制对象为 1升净水,水温可以在一定范围内人工设

定,并能在环境温度降低时自动调节,以保持水温基本不变。

2.功能要求

基本要求:

(1)温度设定范围40 - 90 cC,最小区分度1 CC,标定误差,19C.

(2)用十进制数码显示水的实际温度。

(3)环境温度降低时,温度控制的静态误差.< I'C o

发挥部分:

(1)温度控制的静态误差;0.290 0

(2)自动打印水温随时间变化的曲线。

3设计方案

方案一:此方案采用89C51单片机系统实现,键盘输入温度设定值,数码管显示设定值和

水温实测值,加热控制采用固体继电器组合控制,框图如图7.12所示。

方案二:此方案单片机仅完成数据采集、加热控制及通信功能,温度设定、温度显示、打

印由PC机完成,框图如图7.13所示。

图7.12 方案一框图 图7.13 方案二框图

132

Page 139: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

4.硬件设计

本设计采用方案一,目的为进一步熟悉和掌握单片机的综合应用。这里仍利用单片机的

1/0口功能,1片89C51和6片373锁存器,以降低硬件费用和简化程序设计。

(1)键盘扫描和显示部分

键盘扫描和显示分别由U2, P,口及Uj, U4, U:与3位LED共阳数码管构成。其P2.0用

于键盘扫描数据输出U:的数据锁存,P2.1用于小数位温度显示锁存,P2.2及P2.3用于温度个

位、十位的显示锁存,控制原理框图如图7.14所示。

图7.14 水温控制原理框图

U:输出仅用Qo与Q,,其余不用.即Koo一K07分别表示数字键0一7, h,o, K,,为数字键8,

9o K,2为 “设定显示”,便于随时查看设定的温度值,此时显示x x F,

(2)温度数据采集部分

测温采用热敏电阻温度传感器,如0℃时电阻为5012, 100℃时电阻为70C左右:先经放

大,再经V/F转换后接入单片机TO引脚,作脉冲计数,电路如图7.15所示。输人lov时,输

出约20kHz。也可采用6.6节介绍的转换芯片AD774 0+5V

89C51

弓lid[

图7.15 温度采集及V/F转换电路

]了3

Page 140: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

微烈

印机

BUSY

STB

n汀

矛妇

7J

仁卫

﹃‘

、、=

I

R

(3)打印部分

如图7.16所示,打印接口由8位数据线和2根控制线构成。

打印数据经U6锁存后,送微型打印机。 (4)加热控制部分

控制信号经U7锁存后,再经反相,驱动固体继电器。被控对象为电炉丝,通过控制加在电炉丝两端电压 (交流220V)的通断,

实现对水加热功率的调整,达到水温控制的目的。加热控制电路

图7.16 打印接口电路

如图7.17所示。加热部分由组合电炉丝构成,温差小于5C, A, B同时工作;温差大于5 cC

小于100C , A, B, C同时工作。因P0, P2复位为高电位,为防止系统复位时继电器误动作,

在2003驱动前加人4069反相器。

图,.17 加热控制电路

5.程序设计

(1)程序流程图

图7.18程序流程图

134

Page 141: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

温差二设定温度一实测温度。本流程图为假定容器已装满水,否则尚需加上液面检测和缺

水报警某功能。

(2)应用程序

;定义存储器单元

CCM EQU 5FH ;设定温度 (16进制) CCM1 EQU 5EH;设定温度 (个位BCD码)

CCM2 EQU 5DH;设定温度 (十位BCD码)

KND EQU 5BH ;设定温度 (输人位数) T10 EQU 5AH ;50ms计时周期

BCDO EQU 59H ;显示小数点值 (BCD码)

BCD1 EQU 58H ;显示个位数 (BCD码)

BCD2 EQU 57H ;显示十位数 (BCD码)

DH EQU 56H;

DL EQU 55H;

;定义人口地址

ORG OOOOH

AJMP MAIN

ORG 001 BH

AJMP CTPROG

ORG 0030H

;主程序及键盘扫描程序

MAIN: MOV SP, #60H

MOV P2, #0

MOV PO, #OFFH

SETB P2.5 ;关闭加热器

CLR P2.5

MOV P,#03H

MOV P2, # OEH ;显示 “0000

MOV P2, #0

MOV CCM , # 0 ;温度初始设定

MOV CCM1,#0

MOV CCM2,#0

MOV KND,#0

MOV TMOD, # 15H ;T1为16位内定时,TO为16位外计数

MOV DPTR,#15536 ;T1定时50 ms

MOV TH1,DPH

MOV TLl,DPL

MOV THO,#0

1了5

Page 142: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

MOV TLO, #0

MOV T10,#10

MAIN I: SETB TRO

SETB TR1

SEB ET1

SETB EA

ASKKB: MOV KND, #0

MOV PO,#OFEH

SETB P2.0

CLR 】趁.0

ORL PI,#OFFH

MOV A,P1

CPL A

CJNE A,#0,SKEY

ASKKBI:MOV PO,#OFDH

SETB P2.0

CLR P2.0

ORL P1, #OFFH

MOV A,P1

CPL A

CJNE A,#0,SKEY10

MAIN2: MOV R3,#OFFH

MAIN3: MOV R2,#OFFH

MAIN4: NOP

DJNZ R2,MAIN4

DJNZ R3,MAIN3

AJMP ASKKB

SKEY: MOV Y11,#0

MOV R4, #8

SKEY1: CLR C

RRC A

JC SKEY2

INC Y11

DJNZ R4,SKEY1

AJMP ASKKBI

SKEY2: CLR TRO

CLR TR1

CLR EA

136

;每50msx 10=0.5s测温一次

;开定时器中断

;扫描第1行 ‘0一7数字键”

;有键闭合,转 SKEY

;无键闭合,扫描第2行

;无键闭合,延时待定时器 1中断

;获取数字键序号 ‘0一7"

;有数字键按下时,关闭定时计数器及加热

Page 143: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

MOV PO, #OFFH

SETB P2.5

CLR P2.5

SKEY3: ACALL DELAY

ORL P1, #OFFH

MOV A,P1

CJNE A,#OFFH,SKEY3

AJMP NUMPR

SKEY 10: CJNE A,#01,SKEY1 l

MOV YlI,#8

AJMP SKEY2

SKEY 11: CJNE A,#02,SKEY 12

MOV Yll, #9

AJMP SKEY2

SKEY12: CJNE A,#04,SKEY 13

MOV BCDO,#OFH

MOV BCD1,CCM1

MOV BCD2,CCM2

MOV TRO

CLR TR1

CLR EA

ACALL DISPLAY

ACALL DELAY2

SKEY13: AJMP MAINZ

NUMPR: INC KND

MOV A,KND

CJNE A,#1,NUMPRI

MOV BCD2,#0

MOV BCDI,Y�

MOV BCDO,#OFH

ACALL DISPLAY

AJMP ASKKB

NUMPR2:CJNE A,#2,NUMPR3

MOV BCD2,BCD1

MOV BCD1,Yll

MOU BCDO, #OFH

延时 l Oms

;闭合数字键未松开,继续等待

;转数字键处理

;确定为数字键 “81,

确定为数字键 “g�

;为 “设定显示”键时,显示设定温度“xxF�

;关闭测温,显示停留2s左右

2s延时

;输人只有 1位数字时,显示 ‘0 x F"

;等待第二位数字键输入

ACALL DISPLAY

MOV A,BCD2 ;BCD码转16进制码

137

Page 144: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

NUMPR3:

;DELAY

;定时器

CTPROG:

CTPROG1:

CTPROG2:

SWAP A

ADD A, BCD]

MOV B,#16

DIV AB

SWAP A

ADD A, B

MOV B, A ;暂存于A

SUBB A,#40

JC NUMPR3 ;小于40T,设定温度无效

MOV CCM, B ;大于40T,保存新的设定温度

MOV CCMI, BCD1 ;保存个位、十位供 “设定显示”

MOV CCM2,BCD2

ACALL DELAY2

AJMP MAINZ

l Oms延时,DELAY2 2s延时及 DISPLAY显示程序略

1中断服务程序

MOV DPTR,#15536 ;重载50ms

MOV TH1,DPH

MOV TL1,DPL

DJNZ T10,CTPROGI

AJMP CTPROG2

RETI ;0.5s未到,中断返回

CLR TRO ;时间到,关闭定时计数器

CLR TR1

CLR EA

MOV T10 , # 10 ;重载时间初值PUSH A

MOV DH, THO ;读温测数据到DH, DL

MOV DL, TLO

ACALL BCD ;调用 16进制码转BCD码,参见4.3.2节

MOV BCDO, 3311 ;保存小数位MOV BCDI, 3211 ;保存个位

MOV BCD2, 31 H ;保存十位

ACALL DISPLAY ;显示实测温度值

MOV A, BCD2 ;十位与个位合并转为16进制

SWAP A

ADD A, BCDI

MOV B, #16

138

Page 145: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

DIV AB

SWAP A

ADD A,B

MOV B,A

SUBB A,CCM

JC CCPR

MOV PO, #OFFH

AJMP BACK

CCPR : MOV A,CCM

SUBB A,B

MOV B,A

SUBB A,#10

JC CCPR1

MOV PO, #OF8H

AJMP BACK

CCPR1: MOV A,B

SUBB A,#5

JC CCPR2

INOY 印, #OFCH

AJMP BACK

CCPR2: MOV 印 ,#OFEH

BACK, SETB P2.5

CLR 代 .5

POP A

SETB TRO

SETB TR1

SETB EA

RETI

;实测温度减设定温度

;小于设定温度,闭合相应加热器

;否则,关闭加热器

求温差

;温差)10cc,开A, B, C三组加热器

开A, B二组加热器

;仅开A组加热器

;重新启动定时计数器

7.7 自动往返电动小汽车 (2001年全国大学生电子设计竟赛试题)

I设计任务

设计并制作一个能自动往返于起跑线与终点线间的小汽车。允许用玩具汽车改装,但不能

用人工遥控。

跑道宽度0.5米,表面贴有白纸,两侧有挡板,挡板与地需垂直,其高度不低于20cm,

在跑道的B, C, D, E, F, G点处画有2 cm宽的黑线,各段的长度如图7.19所示。

139

Page 146: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

挡板

B c G H

0.5m

0.5m 3 -6m 3- 6m 0.5m

图 7.19 跑道线顶视图

2.功能要求

(1)基本要求

a.要求汽车从起跑线出发 (出发前车体不得超出起跑线),到达终点线后停留10秒,然

后自动返回起跑线 (允许倒车返回)。往返一次的时间力求最短 (从合上汽车电源开关开始计

时)。

b,到达终点线和返回起跑线时,停车位置离起跑线和终点线偏差应最小 (以汽车中心点

与终点线或起跑线中心线之间的距离作为偏差值)。

。.要求汽车在D一E段限速区往返时低速通过,通过时间不得小于8s,且不允许在此段内

停车。

(2)发挥部分

。.自动记录、显示一次往返时间 (记录显示装置要求安装在车上)。

b.自动记录、显示行驶距离 (记录显示装置要求安装在车上)。

c.其他特色与创新。

3.设计方案

此方案的基本思路是利用光电反射式开关检测不同的信号,经过单片机的处理,然后发出

控制信号,控制继电器的断开和吸合,从而控制电动机两端的电压,实现对电动机运行状态的

控制。由单片机内部定时/计数器作定时、计数,经串行口输出显示。

4.硬件设计

本设计的功能模块由检侧部分、单片机部分、显示部分以及自动控制小汽车的电动机驱动

部分组成,如图7.20所示。

图7.20 电路组成模块

(1)检测部分

检测部分由两个反射式光电开关控制,如图7.21所示。

一个开关装在小汽车的底部中点,用来检测地面黑线的位置,以控制小汽车的加速、刹

车、往返及D一E段的降速等功能;另一个开关装在从动轮旁,正对着从动轮的横截面,在从

动轮靠内的横截面上设置三个白点,使从动轮每转一周,传感器能检测到三个信号输人,即车

轮每转完三分之一周长产生一个信号输人。由公式可得:路程二脉冲数x (车轮周长//3) a

.140

Page 147: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

图7.21 检测部分电路

(2)单片机及显示部分

89C51将传感器检测到的信号转换成相应的控制信号,来控制继电器的状态,实现控制电

动机的工作电压,即控制车速。定时/计数器对时钟脉冲进行计数,小汽车行驶的时间和路程

经处理后,通过串行口输出显示,如图7.22所示。

显示部分显示小汽车运行的时间和路程。4个74HC164为4个共阳数码管的锁存、驱动电

路,数码显示每隔两秒交替显示时间和路程。显示板上还装有两个发光二极管,一个红色,一

个绿色。红的亮,表示显示的是时间;绿的亮,表示显示的是路程。 0十5V

接共阳极数码管 接共阳极数码管 接共阳极数码瞥 接共阳极数码管

童1协

QA QB QC QD QE QF QG QH川 Q.4 QB QC QD QE QF QG QH日IQA QB QC QD QE QF QG QHI日QA QB QC QD QE QF QG QH89C51

EA

INTO

RXD

TO

GDN RST

74HC164

CLR

74HC 164

CLR CLK

74HC 164

CLR CLK

74HC 164

CLR CLK

图7.22 微处理器及显示部分

(3)电动机驱动部分

电动机驱动由三个继电器组成。三个继电器组合成正6V, 3V及反向电压,通过控制电动

机的工作电压,从而控制电动机的运转状态,实现控制小汽车运行时的速度及方向。其中一个

继电器接单片机的P 1.2口,用来控制小汽车的运行方向;一个接单片机的P1.3口,控制小

汽车低速运行;还有一个接单片机的P1.4口,控制小汽车高速运行,如图7.23所示。

5.程序设计

(1)程序流程图

141

Page 148: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

图7.23 电动机驱动电路 图7.24 程序流程图

(2)应用程序

PD一JC EQU P3.4

WY一JC EQU P3.2

LAMP1 EQU P1.0

LAMP2 EQU P1.I

HIGH一BIT EQU PI,2

RUN EQU P1.3

FX一JDQ EQU P1.4

DISP一BIT BIT 0011

Si一BUF EQU 3011

S一L EQU 3011

S一H EQU 31H

M一L EQU 3211

M一H EQU 3311

JL一BUF EQU 3511

JL一0 EQU 3411

JL一1 EQU 3511

JL一2 EQU 3611

JL一3 EQU 3711

JL一4 EEQU 3811

142

;跑道检测输人

;位移检测输人

;低电平点亮

;低电平点亮

;为 1正向,为0反向

;时间记录区域

;秒的低位

;秒的高位

;分的低位

;分的高位

;距离记录区

;距离的地位

Page 149: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

TAB

JULIL EQU 3414

JULIH EQU 3514

TLDAT EQU 3914

TLDAT EQU 3AH

Si一COUNT EQU 5114

DUJ EEQU 0714

ORG OOOOH

AJMP MAIN

ORG 0003H

曰MP INTO一ZD

ORG 003014

DB 0314 9FH 0214 01H

DB 4914 4114 1FH 0114

CLR RUN

MOV SP,#6014

MOV TMOD,#0114

MOV SCON,#OOH

MOV DPTR, #55536

MOV THDAT, DPH

MOV TLDAT,DPL

MOV THO,THDAT

MOV TLO,TLDAT

SETB En

SETB EXO

SETB ITO

SETB EA

SETB PXO

MOV RO,#JL一BUF

MOV @RO,#8

INC RO

MOV @RO,#8

INC RO

MOV @RO,#8

INC RO

MOV @RO,08

MOV RO,#JL一BUF

LCALL DISPLAY

CLR LAMP1

09H

09H

MAIN

;定时器0工作于定时状态

10000

143

Page 150: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

STARTI

STAR2:

SETB

CLR LAMP2

CLR LAMP1

CLR LAMP2

MOV JULIL,#0

MOV JULIH,#0

:JB START, S

SETB TRO

MOV S一L,#0

MOV S一H, #0

MOV M一L, #0

MOV M一H, #0

MOV JL一1, #0

MOV JL一2, #0

MOV JL一3, #0

MOV JL一4, #0

FX一JDQ

M ALL PROC

LCALL DLYIOS

LCALL PROG

CLR TRO

MOV RO, #Si 一BUF

LCALL DISPLAY

LCALL DLIOOMS

LCALL DL100MS

LCALL DL100MS

LCALL DLIOOMS

LCALL DISP

LCALL DL100MS

LCALL DL10OMS

LCALL DLIOOMS

LCALL DL10OMS

SJMP XX

SETB RUN

SETB HGH一BT

JB PD一JC,$

LCALL DLYIOMS

JNB PD一JC,$

LCALL DLYIOMS

;启动电动机正向运转

XX

PROG:

·144

Page 151: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

JB PD一JC,乐

LCALL DLYIOMS

JNB PD一JC,$

CPL FX一JDQ

LCALL DLYIOMS

LCALL DL100MS

CLR HIGH一BIT

CPL FX一JDQ

JB PD一JC,$

LCALL DLYIOMS

JNB PD一JC,$

;进人第三条黑线,关闭高速电动机

LCALL

SETB

DLYIOMS

HIGH + 一BIT ;启动高速电动机,离开限速区

JB PD一JC,感

LCALL DLYIOMS

JNB PD一JC,$

CPL FX一JDQ

LCALL DL10OMS

CP FX一JDQ

CLR HIGH一BIT

JB PD一JC,$

LCALL DLYIOMS

JNB PD一JC,$

JB PD一KC,$

CPL FX一JDQ

JB PD一JC,$

CPL FX一JDQ

SETB BIGH一BIT

LCALL DLY20MS

LCALL DLY20MS

LCALL DLY20MS

CLR RUN

RET

;外中断0中断服务程序

INTO一ZD:

PUSH PSW

PUSH ACC

PUSH OOH

;进人第五条黑线,关闭高速电动机

145

Page 152: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

PUSH 01H

MOV A,JULIL

ADD A, #DWJL

DA A

MOV JULIL, A

MOV A,#0

ADDC A,JULIH

DA A

MOV JULIH,A

POP OIH

POP OOH

POP ACC

POP PSW

RETI

DISP: MOV DPTR,#TAB

MOV A,JULIL

ANL A, #OFH

ACALL DISI

MOV A,JULIL

SWAP A

MOV A,JULIH

ANL A,#OFH

ACALL DISI

MOV A,JULIH

SWAP A

ANL A, #OFH

ACALL DISI

RET

DISI: MOVC A,@A+DPTR

MOV SBUF, A

JNB TI,$

CLR TI

RET

;定时器0中断服务程序

COUNT一TO:PUSH PSW

CLR TRO

MOV THO,THDAT

MOV TLO,TLDAT

.146

Page 153: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

SETB TRO

PUSH ACC

PUSH OOH

DJNZ SJ一COUNT, TO一EXT

MOV Si一COUNT,#loo

INC S一L

MOV A,S一L

CJNE A,#to, TO一A2

INC一SH : MOV S一L#0 ;满十秒,秒的个位回零,十位加一

INC S一H

MOV A,S一H

CJNE A,#6,TO一A2

INC一ML: MOV S一H, #0 ;满六十秒,秒十位和个位回零,分的个位加一

INC M一L

MOV A,M一L

INC M一L

MOV A,M一L

CJNE A,#10,TO一A2

INC一MH : MOV M一L, # 0 ;满十分钟,各位回零,分的十位加一

INC M一H

MOV A,M一H

CJNE A,#6,功 一A2

MOV M 一H, #0

T()一A2: MOV A, S一L

JNB ACC.0,TO一EXT

JNB DSIB,LAMPI

SETB LAMPI

CLR LAMP2

MOV RO,#Si一BUF

LCALL DISPLAY

UMP 卫)一EXTI

T()一A3: CLR LAMP1

SETB LAMP2

LCALL DISP

TO一EXTI: CPL DISP一BIT

TO一EXT:

POP

POP

OOH

ACC

147

Page 154: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

POP PSW

R ETI

;显示子程序

DISPLAY:

DISLOP

PUSH

PUSH

MOV

MOV

MOV

MOVC

CLR

INC

DJNZ

POP

POP

RET

MOV

OOH

OIH

DPTR,#TAB

R1, #4

A,@RO

A,@ATDPTR

TI

RO

R1,DLSLOP

01H

OOH

DLYIOS:

DLY10: LCALL

LCALL

DJNZ

RET

: MOV

SJMP

: MOV

MOV

DJNZ

DJNZ

RET

: LCALL

LCALL

LCALL

LCALL

LCALL

LCALL

LCALL

LCALL

LCALL

LCALL

LCALL

R4, #250

DLY20MS

DLY20MS

R4,DLY10

DLYIOMS

DLY20MS

DL20A:

R2,#100

DL20A

R2,#200

R3, #50

R3,$

R2,DL20A

DL100MS DLY20MS

DLY20MS

DLY20MS

DLY20MS

DLY20MS

DLY20MS

DLY20MS

DLY20MS

DLY20MS

DLY20 MS

DLY20MS

148

Page 155: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

LCALL

LCALL

LCALL

LCALL

LCALL

RET

DLY20MS

DLY20MS

DLY20MS

DLY20MS

DLY20MS

7.8 ATMEL89系列单片机介绍

近几年,单片机技术的发展十分迅速,许多著名公司和厂商不断推出以Mcs一51为内核

的第三代单片机产品。如PHILIPS公司的83C552单片机,不但具有A/D转换输人和P1 %1M输出

功能,而且还备有12C总线接口;MAXIM公司的DS80C320单片机,时钟高达33MHz或40MHz,

每一个机器周期为时钟的4分频,而不是 12分频,其运行速度相当于89C51的99 MHz或

120MHz,且内带 “看门狗”、12位ADC、双串口等功能。

ATMEL公司是世界上著名的半导体公司之一,其令人注目的技术就是 Flash存储器技术

(快闪可编程/擦除只读存储器FPEROM-Flash Programmable and Erasable Read Only Memory,亦称Flash存储器)。运用这种技术,单片机的结构和性能有了极大的改进和提高,特别是在要求便

携和省电的设计中更为实用,而且与Intel MCS一51单片机引脚和指令系统完全兼容。

ATMEL89系列单片机可以分成低档型、标准型和高档型三类。如表7.10所示。这里仅介

绍20引脚的低档型AT89C1051, AT892051和40脚标准型AT89C52

表7.10 ATMEL89系列单片机常用产品分档一览表

分 档 型 号片内存储器/B

定时/计数器 特 点程序存储器 数据存储器

低档AT$9C1051 1 KB Flash 64 1个 16位 20 T脚

AT89C2051 2KB Flash 128 2个 16位 20引脚

I AT89 C51 4KB Flash 128 2个 16位 l

AT89C52士军 桂七

8KB Flash 256 3个 16位

} AT89LV51

} A铭9LV52

4KB Flash 128 2个 16位 低压

AT89 LV52 8KB Flash 256 3个 16位 低压

高档一‘T89S82528KB+Flash

256 3个 16位 SPI接 口2KB EEPROM

7.8.1 AT890051与AT89C2051

和89C51相比,89C1051, 89C2051在芯片的引脚配置上进行了简化,如图7.25所示。其

149

Page 156: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

引脚和功能的主要区别如下:

nU

g

OC

,1

乙C

气J

4

气,

,二

,一

1.1

1

1

1

1

1

1

1

1

勺一

、j

通峥

6

llJ

OO

门勺

RST

P3.0

P3.!

XTAL2

X1人LI

INTO 113.2

IN TI P3.3

TO P3.4

P3.5

GN D

ucc

P1.7

P1.6

P1.5

P1.4

P1.3

P1.2

P1.1 AINI

PLOAINO

P3.7

RS丁

RXD P3.0

TXD P3.1

XTAL2

XTALI

INTO P3.2

INTI P3.3

TO P3.4

Ti P3.5

CND

99C 1051

10 11

89C2051

ucc

P1.7

P1.6

P1.5

P1.4

P1.3

P1.2

Pl.l AIN1

PLO AINO

P3.7

图7.25 AT890051 2051的引脚

1.引脚由40根减为20根,减去了PO口与P2口及P3.6, EA, ALE, PSEN共20根引线;

P3.7引线无第二功能豆b。这说明它们不能外扩程序存储器ROM和数据存储器RAM,也不便

与可编程芯片接口(无ALE地址锁存,再E内片外取指选通以及片外数据的读写丽、丽1夏等信

号),即不能执行MOVX指令。

2.内含片内精密模拟比较器,同相输人端为 P1.0,反相输人端为 Pi. I,比较输出送片内

P3.6锁存器。 3. AT89C2051 ROM空间为2KB,寻址范围为OOOH一7FFH,其余功能与89C51相同。

4. AT89CIO51 ROM空间为1KB,寻址范围为000 H一3FFH; RAM空间为64字节,寻址范

围为OOH -3FH。无串行口,无定时/计数器 1,少两个中断源 (定时/计数器 1中断,串行口

中断)。

5.工作电压范围2.7一6V;工作频率:0一24MHzo

AT89 C 1051及89C2051适用于智能仪表的嵌入式工作系统,使用时要注意与89C51的区别。

7.8.2 AT89C52

1.引脚与功能

和89C51相比,AT89C52的引脚及功能与89C51基本相同,如图7.26所示,主要区别有以

下三点:

(1)片内RAM由128字节增加到256字节,新增128字节的地址为80H一FFH。由于该地

址与SFR专用寄存器地址相同,只能采用8位间址寻址方式访问,如MOV A, @ Ri(读取),

MOV @ Ri, A(存人),SFR只能采用直接寻址方式访间。

(2)增加了一个 16位的定时/计数器 T2,外部计数方式时计数脉冲由P1.0 (T2)引脚输

人,P1.1 (T2EX)引脚为计数控制端 (P1.0, P1.1的第二功能)。

(3)增加一个中断源定时/计数器2。其中断服务程序入口地址为002BH;中断允许位为

ET2 (IE.5:中断允许寄存器IE的D5,指令SETB ET2允许定时器2中断,CLR E12禁止中

断);中断优先级设定位】''I02 ( IP. 5:中断优先级寄存器IP的D5),同级别时,该优先级别最

低;中断标志TF2, CPU响应中断后,必须用程序清零。

150

Page 157: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

Q-口n

一U

I

,‘

﹃J

4

亡J

6

7

E

l

LCO.

0.

0.

0.

0.

一A

一PSEN

P2.7

4039383736353433犯3130292827262524232221

nU

‘..1,︸气」

1

,‘

,J

4

工I︶了匕

,月OO

n,

1

1

1

..

6

11︸月q

,J

Z

1

0︸

.

勺‘

,‘2

,子1,︸,一气乙

P

P

P

P

P

P

P

‘q

ll曰护七

,了

﹄托

n,

︸U

1

﹄‘es

l

习卫主

,t

l.1,了‘

T2P1.0

T2EXPl.1

P1.2

P1.3

P1.4

P1.5

P1.6

P1.7

RSTIVPDRXD P3.0

7X】〕P3.1

INTO P3.2

INTI P3.3

TO P3.4

TI P3.5

W直P3.6 RD P3.7

XTAL2

XTALI

厂ss

图7.26 ATB9C52引脚图

2.定时/计数器2的控制和方式寄存器

定时/计数器 2是一个具有 16位自动重装载或捕获能力的定时/计数器。它的工作方式可

分为三类,即捕获方式、定时/计数器方式和波特率发生器方式,其工作方式由控制寄存器

T2COM和T2MOD决定。

(1)控制寄存器T2COM

T2COM定义如下:

D7

TF2

D6

EXF2

D5

RCLK

D4

TCLK

D3

EXEN2

D2

TR2

DI

C/12

DO

CP/RL2

TF2:定时器2溢出中断标志。定时器T2作定时/计数器使用产生溢出时置位并申请中断,

只能用程序清零;作波特率发生器方式时,即RCLK二1或TCLK = 1时,定时器溢出不对TF2

置位。

EXF2:定时器2外部中断标志。当EXEN2二1且T2EX端发生的负跳变而造成捕获或重载

时使EXF2置位,申请中断。EXF2用程序清除。

RCLK:串行口接收时钟选择标志。RCLK = 1时,工作于波特率发生器方式。此时,T2的

溢出脉冲作为串行口方式 1和方式3的接收脉冲;RCLK = 0时,使用 T1的溢出脉冲作为接收

时钟。

TCLK:串行口发送时钟选择标志。TCLK二1时,工作于波特率发生器方式。此时,12的

溢出脉冲作为串行日方式1和方式3的发送脉冲;RCLK二0时,使用T1的溢出脉冲作为发送

时钟。

EXEN2:外部允许标志。EXEN2 = 0时,引脚T2EX (P1.1)外部信号不起作用;EXEN2二

1时,T2EX输人端负跳变信号会引发捕获或自动重载。

TR2:运行控制位。TR2二1时,启动T2运行;TR2二0时,停止T2运行。

C/丽:定时或计数方式选择位。C/元=0时,内部定时;cm = 1时,外部计数 (下降沿

了51

Page 158: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

触发)。

C P/丽豆:捕获或自动重载方式选择位。CP/丽工乏=1时,T2工作于捕获方式 (即当EXEN2

=1时,T2EX端的负跳变引发捕捉动作); CP/RL2 = 0时,T2工作于自动重载方式 (即当

EXEN2 = 1时,UEX端的负跳变和T2的计满溢出会引发自动重载)。

(2)方式寄存器T2MOD

M OD只用两位D1和DO,主要用于CP/RL2 = 0自动重载方式。定义如下:

D1

T20E

DO

DCEN

T20E:定时器2输出允许位。

DCEN:允许向下计数位。DCEN = 0时,设置为向上计数;DCEN = 1时,定时器2既可向

上计数又可向下计数。

注意 :

a.定时/计数器2的中断请求源,其请求是由标志TF2或EXF2经逻辑或产生的,CPU响

应中断后,需由程序判断,类似于串行中断RI与TI.

b.定时/计数器2只有 16位模式,不像TO与T1有8位和 13位模式。

3.定时/计数器2的工作方式

(1) 16位捕获方式

当CP/RL2二1时,T2工作于16位捕获方式,其结构原理如图7.27所示。

C/ T2=0 溢出

T2(P 1.0)一一一,I 、O-

C/T2=1

TL2

(8位)

TH2

(8位 )

T2EX(PL 1)一曰 -、L RCAP2LIRCAP2

EXEN2一止,:IMKiP}1A

图7.27 定时/计数器2的捕获方式

若EXEN2 = 0,且 C/T2 = 0作内定时,计数脉冲来自主振的12分频;C/T2 = 1作外部计

数,计数脉冲来自P1.0引脚。计数器溢出时TF2置1,申请中断。若EXEN2 = 1,除实现上述

内部定时或外部计数外,当P1.1引脚电平发生负跳变时,会把TH2和 TL2内容锁存人捕获寄

存器RCAP2L和RCAP2H中 (即所谓捕获功能),此时EXF2标志置1。请求中断 (注意,该中断标志实际由P1.1引脚电平发生负跳变引起,二个捕获寄存器供数据读出用)。

(2) 16位自动重载方式

若C P/RL2二0,二个捕获寄存器RCAP2L及RCAP2H变成二个重载初值寄存器,只要将定时或计数的初值送入这二个寄存器 (二个捕获寄存器供送人初值使用),当计数溢出或P1.1引

脚电平负跳变 (EXEN2 = 1)时,就会发生自动重载,即二个寄存器内容自动送人 TL2与TH2

内。如图7.28所示。

上述捕获方式及16位自动重载方式都是在T2MOD为复位值OOH,即T20E = 0, DCEN二0 152

Page 159: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

比J.J

工F

-

-X

下.

~

~E

T2(P 1.0)

TR2

C/ T2=0弋卜-----

C/T2=1

TL2

(8位)

TH2

(8位)

贡装 孚刁中断申请

T2EX(Pl.l)一曰 一、一 RCAP2LIRCAP2

EXEN2一‘些巡鲤些

图7.28 16位重载方式 (DCEN = 0 )

条件下工作,又称向上计数。

若置 DCEN = 1,则计数方式由Pi. I引脚电平控制。当P1.1引脚为1时,

重载方式中 “溢出重载”(向上计数)。当P1.1引脚为0时,重载值为FFFFH,

值计数到等于RCAP2H, RCAP2L设置值时,产生重载 (向下计数)。

无论上溢还是下溢,都将使TF2, EXF2置位。

(3)波特率发生器

当定时/计数器2工作于16位重载方式 (内部定时或外部计数均可),且

TCLK = 1(发),其溢出脉冲再经16分频,即可作为串行口收、发波特率。

处于 16位自动

当TH2, TL2数

RCLK=1(收),

显然,波特率二 f.

16 x 2 x [65536一 (RCA2H,RCA2L)〕

得重载值:RCA2H, RCA2L = 65536 - f.-

32 x波特率

要注意的是,当RCLK二1或TCLK = 1时,其TL2, TH2的溢出不再使TF2置位申请中断,

但P1.1的下降沿 (EXEN2 = 1)仍可使EXF2置位请求中断,即Pi. I可作外部中断2使用。

4.定时/计数器2的工作编码

定时/计数器 2使用非常灵活,表 7.11列出了和 12有关的寄存器,表 7.12列出了在

12MOD为复位值OOH时的工作方式与相应编码设置。

表7.n 和定时/计数器2有关的寄存器

寄存器名称 用 途 地 址 位寻址 复位值

T2CON T2控制寄存器 C8H 有 OOH

T2MOD T2方式寄存器 C9 H 无 OOH

RCAP2L 低字节捕获寄存器 CAH 无 OOH

RCAP2H 高字节捕获寄存器 CBH 无 OOH

TL2 72低字节计数器 CCH 无 (X)H

TH2 T2高字节计数器 CDH 无 (洲)H

15了

Page 160: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

表7.12 TZCON工作编码设置

工作方式 TF2 EX「2 RCLK TCLK EXENZ TRZ C/傀 CP/R工2 16进制

16位自动重载内定时内控制 {0 0 O 0 j o 0 O 0 00H

16位自动重载内定时外控制 0 0 0 0 1 0 0 0 08H

16位自动重载外计数内控制 0 O 0 0 O 0 l 0 02H

16位自动重载外计数外控制 O O 0 ’! O 1 0 l 0 OAH

16位捕获内定时内控制 0 O 0 {0 O 0 」 0 l olH

16位捕获内定时外控制 O 0 0 0 l O O l

l 09R

16位捕获外计数内控制 0 0 0 0 0 0 l l 03H

16位捕获外计数外控制 0 0 一}。 0 l 0 l 1 0BH

波特率发生器只收 0 0 l 0 0 0 0 O ZOH

波特率发生器只发 0 0 0 l 0 0 O o l0H

波特率发生器同收同发 0 0 }�� 一1 l 0 0 0 0 30H

注:(1)内部控制:EXENZ二0只有在定时/计数器计满溢出时,才发生捕获或重载。

(2) 外部控制:ExENZ二1,PI.1引脚电平负跳变,发生捕获或重载。

(3) 波特率发生器仅列出内部定时内部控制方式:

5.应用举例

[例7.7」 设主振频率为 12MHz,将定时计数器 2设置为50ms自动重载内部定时及内部

控制方式,且在m引脚产生一脉冲信号。

;中断服务程序

ORG OOZBH

CLR T兄 ;清标志

CPL P3.4 ;在引脚TO产生一脉冲 CPL P3.4

RETJ ;中断返回

;定时/计数器2初始化 (插人相应主程序内)

MOV 代CON,#0 ;16位自动重载内部定时、内部控制方式

MOv o盯R,#15536;置定时初始值 (65536一50()00)n、5=15536ms

MOV 」12,DPL

MOV T日2,DPH

MOV RCAPZL,DPL

MOV RCAPZH,DPH

SETB 服2 ;启动定时/计数器2

本 章 小 结

1.模块化方式是单片机硬件设计、程序设计及程序调试的较好方式。

2.电源的稳定性与程序优化是可靠性设计的二个基本要点。

3.89C51与外围芯片接口根据外围芯片的特点,可采用通用1/0口方式 (如 Mrr8816为8位1/0,D6145为

1万4

Page 161: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

位操作1/0),或PO口的地址/数据复用方式 (如时钟芯片DS12887)0

4.外围芯片命令字写入需结合命令字特征及写入时序进行。

5. 89CIO51, 89C2051是89C51的功能简化型产品,设计中若不需要相应简化了的功能,便可用它们替代

89C51. 89C52主要增加了定时/计数器2,它的功能很强,使用非常灵活。

思考题与习题

7.1 综合前面有关章节内容,设计一个电子时钟电路,要求有时、分、秒6位LED数码显示,0一9十个

数字键及一个 “校时”功能键的键盘,并编写相应程序。

7.2 设计一个32路输人//8路输出的视频矩阵电路,命令输人为串行通信方式 (24006it/s, 8位无校验),

通信格式为双字节 (十六进制),第一字节为输人号,第二字节为输出号,并编写相应程序:

7.3 设计一路的视频字符叠加电路,要求第一行显示时、分、秒,第二行显示年、月、日,秒脉冲由外

部提供,计时由程序完成,每小时由串行口进行校正,试编写相应程序。

7.4 若压力传感器测量压力为0 - 100kPa时,输出的电流信号为0一24mA。试设计一个数字压力计,要

求显示士0.1kPao

7.5 若重量传感器测量重量为。一1Okg时,输出的电压信号为0一10mv,试设计一个数字秤,要求显示

士Igo

155

Page 162: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

第8章 PIC16C5 x系列单片机

【学习指导】 Microchip公司推出的PIC16C5、系列单片机虽然没有串行接口,但由于电源范围宽,功耗低,驱动能力强,接口简单,指令高效等特点,仍

在不少产品中使用。本章简要介绍该系列单片机的性能特点和指令系统,可在阅

读有关PIC资料或开发其产品时参考。通过本章学习,要求掌握:

I. PIC 16C5、系歹,I单片机引脚功能。

2. PICI6C5 x系列单片机指令用法。

8.1 PIC16C5 x性能特点

PIC16C5 x系列单片机的主要性能特点体现在CPU性能、外围性能和工艺上。其单片机

CPU和普通单片机的最大区别是采用了减少指令系统技术 RLSC;外围部件的特点则是含有多

种先进的部件和功能;在工艺上由于采用CMOS技术,从而具有比其他工艺更好的性能。

I. CPU性能

PIC16C5 x系列CPU具有以下特点:

(1)采用RISC技术,只有33条基本指令。

(2)除了程序分支指令需要2个指令周期之外,其他所有指令都是单指令周期的。

(3)工作速度高,在20MHz振荡频率时,每个指令周期只有200ns o

(4)指令字长12位。

(5)数据字长8位。

(6)片内EPROM型程序存储器容量为 (512一2K) x 120

(7)片内静态存储器SRAM容量为 (25-72) x 8,它也用作通用寄存器。

(8)片内有7个硬件构成的专用寄存器。

(9)片内有2级硬件堆栈。

(10)对指令和数据的寻址方式有直接、间接和相对三种。

2.外围部件性能

156

Page 163: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

外围部件性能具有以下特点:

(1)片内有12-20条v0引脚,每条引脚都可以进行独立的输人/输出方向设定。

(2)有8位实时时钟/计数器 RTCC,它带有8位可编程的预定标器。

(3)有上电复位功能。

(4)有振荡器启动定时器。

(5)有监视定时器W DT。为了可靠工作,WDT含有自身RC振荡器。

(6)有保护代码的EPROM保密位。

(7)有省电的睡眠方式。

(8)可选择振荡器的EPROM位,确定4种振荡器,即低价RC振荡器,以RC标志;标准

石英晶体振荡器,以XT标志;高速石英晶体振荡器,以HS标志;省电低频石英振荡器,以

LP标志。

3.工艺性能

PIC16C5 x系列采用CMOS工艺,其性能如下:

(1)低功率、高速度CMOS的EPROM工艺。

AC- CMOS 3一15V

HSC- MOS 2一6V

HC- MOS 2一8V

(2)全静态设计。

(3)宽工作电压范围:商业产品的电压范围为2.5一6.25V;工业产品的电压范围为2.5-

6.25V;汽车产品的电压范围为2.5一6.0V.

(4)低功耗:在振荡频率为4MHz,电压为5V时,典型电流值小于2mA;在振荡频率为

32kHz,电压为3V时,典型电流值为151A;温度为。一70QC,电压为3V时,典型的备援电流值为3[LAo

4.PIC16C5 x器件类型

PIC16C5 x系列产品是为降低系统价格和功耗而设计的特殊单片机。它的电源接通复位和

振荡器启动定时器减少了对外复位电路的依赖。有4种振荡器结构可选,其中包括省电LPC低

功耗振荡器及廉价RC振荡器。省电的SLEEP方式,监视定时器CWDT及代码保护。这些特点

降低了系统价格和功耗,提高了系统可靠性。

紫外线可擦除的存储方式是用于开发的理想产品,同时,PIC16C5 x也有一次编程 (OPT)

的产品,可根据用途选择使用。

PIC16C5 x系列产品有汇编程序、软件仿真器、在线仿真器和编程器等支持,所有工具均

可用于IBM PC及其兼容机。

PIC16C5 x系列单片机的应用范围很广,包括高速汽车、实用马达、低功率遥控器、定点

设备、电信处理器等。EPROM技术使应用程序用户化,既快又方便。小型引脚封装和外形装

配使其可方便地应用于各种空间有限的环境。低价格、低功率、高性能、易使用及I/0灵活的

特点使PIC16C5 x系列获得广泛的应用,甚至在以前没有考虑用单片机的领域,例如大系统的

逻辑转换、协处理器中也得到了应用。

(1)紫外线可擦除器件

157

Page 164: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

表8.1中列出四种不同型号的器件,它们有不同的EPROM, RAM和I/0通道结构。这些

器件为样机开发系列试验提供最优条件。所需的振荡器结构是片内EPROM可编程控制的,如

"RC", "XT", "HS�, "LP�。不编程序状态时可擦除器件被设定成 “RC”类型。电源电压取决

于振荡器类型和频率,必须如。TP/ QTP器件所指明的那样在相同的范围内。

表8.1 PIC16C5 x系列单片机

型号 EPROM RAM I/0 封装

PIC16C54 512 x 12 32x8 12 18LPDIP, SOIC、SSOP

PIC 16 C55 512 x 12 32x8 20 28LPDIP, SOIC、SSOP

PIC16C56 1K x12 32x 8 12 18LPDIP, SOIC、SSOP

PIC16C57 2K x 12 80 x 8 20 28LPDIP, SOIC, SSOP

PLI开发工具 “PICPROTM及PICPPOTm" II可对PIC 16C5 x系列编程。该系列有多种EPROM

及RAM容量,多种I/0引脚、振荡类型、振荡频率和封装形式。

EPROM是可擦的,允许用户把应用代码写人。监视定时器WDT可以被屏蔽,代码保护逻

辑可以通过对EPROM中的专门位进行编程而启动。同时,在EPROM中,有16个专门的位用

于存放用户识别 (ID)码,主16位也可以由用户进行编程。

(2)一次可编程OTP器件

OTP在用户希望带改变代码和更新产品时特别有用,OTP有由工厂预置的振荡类型。

(3)快速周转产品器件QTP

8.2 PIC16C5 x结构及引脚

1.PIC16C5 x引脚

PIC16C5 x系列单片机共有4种型号的产品,型号分别为PICl6C54, PIC16C55, PIC16C56,

PIC16C57,其中PIC 16 C54和PIC16C56为18引脚的产品,PIC 16 C55和PIC 16 C57为28脚的产

品。它们的差别主要是I/O端口的引脚数量不同。PIC16C5 x系列单片机的引脚如图8.1所示。

洲2726252423222120

︶1

,J

、j

4

1、J

6

7,

pU

Q

RA2

RA3

RTCC

MCLR

VSS

RBO

RBI

RB2

RB3

1 ~ 18

2 17

3 16

4 15

5 14

6 13

7 12

8 11

9 10

RA1

RAO

OSC1

OSC2

VDDR)37

RB6

RB5

RB4

10

11

12

13

14

19

18

17

16

15犷16C57引脚

MCLR

OSC1

OSC2

RC7

RC6

RC5

RC4

RC3

RC2

RC1

RCO

RB7

RB6

RB5

似与NCvssNc喇阴忧切RBORBIRLBZRB3RB4

盯﹁

RRRRFRRR只

16C54, 16C56引脚 16C55,

图8.1 PIC16C5 x系列单片机引脚图158

Page 165: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

引脚功能如下:

RAO - RA3 : 1/0输入/输出端口A,也是寄存器 f5。它是一个4位1/0端口,可以进行位

控。

RBO一RB7: 1/0输入/输出端口B,也是寄存器 f6。它是一个 8位 1/0端口,可以进行位

控。

RCO - RC7: 1/0输入/输出端口C,也是寄存器f7。这个8位1/0端口只在PIC16C55和

PIC 16C57中有,可进行位控。 RTCC:实时时钟/计数器输人端。输人信号的上升或下降沿用于计数,边沿可通过程序选

择。

丽面工:主复位端。当MCLR为低电平时,对PIC16C5 x单片机复位。

OSC1:振荡信号输入端。输人外部振荡器振荡信号。用RC振荡器时,接RC电路;用石

英振荡器时,接石英晶体的一端。

OSC2:振荡信号输出端。用石英振荡器或陶瓷振荡器时通过一个串联电阻R,接振荡晶体

的一端。

VDD:电源。电压一般为5V,也可在2.5一6.25V之间选取。

VSS:接地端。 NC:无用端,即不连接内部的引线端。

2.结构简述

PIC16C5 x系列单片机芯片是低功耗、高速度、全静态的CMOS器件,内含EPROM, RAM,

1/0及中央处理单元。这种结构基于寄存器文件的概念,分别有数据和程序存储器及总线 (哈

佛结构)。数据总线及存储器 (RAM)是8位字宽,程序总线及存储器 (ROM)是12位字宽。

这种概念使强调位、字节和寄存器操作的指令系统能在指令读取和执行周期重叠情况下高速工

作,即当一条指令执行时,下一条指令可从程序存储器中被读出。

(1)时序图和指令周期

时钟输人 (OSCI脚)后,在片内进行4分频,形成4个没交越的方形脉冲时序。在每个

时序PC加 1,指令从程序存储器取出,在第4个时序存入指令寄存器,并在接着的1至4个时

序中译码和执行指令。

(2)数据寄存器文件

8位数据总线连接两个基本功能部件,即由80个可寻址的8位寄存器和I/0端口组成的寄

存器文件和一个8位字宽的算术逻辑单元ALU o 32字节的RAM可直接用块结构寻址,每个块

为16字节,用于对大量数据的存储器进行寻址。使用文件选择寄存器 (f4 ),数据可直接寻址

或间接寻址。特殊文字指令可执行立即数寻址,这种指令可从程序存储器取出数据送入 W寄

存器。

寄存器文件分为两个功能组,即操作寄存器和通用寄存器。操作寄存器包括实时时钟/计

数器RTCC, PC1、状态寄存器、1/0寄存器 (PORTS)以及文件选择寄存器;通用寄存器中存

放数据及控制格式。

另外,特殊寄存器用于1/0口配置及预定标器的功能设定。

(3)算术/逻辑单元 (ALU)

159

Page 166: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

8位字宽的ALU连接一个临时工作寄存器 (w寄存器),可对放在W寄存器及一些文件寄

存器中的数据进行算术和布尔操作,也可对W寄存器或任何文件寄存器中的操作量进行单独

操作。

(4)程序存储器

512字节的12位片内EPROM可被直接寻址。大型程序存储器可通过选择4个页,每页512

字节的页面来寻址。微程序PC自动加1控制。程序控制操作支持直接、间接、相对寻址模式,

能由位测试和跳转指令、调用指令、转移指令或将算出的地址装人 PC来实现。另外,片内两

级堆栈为子程序嵌套提供了方便。

8.3 指令系统

1.指令系统概述

PIC16C5 x每条指令字长12位,分为操作码和操作量。操作码用于确定指令的操作;操作

量有1或2个,各条指令不同。

对于字节操作指令,'IC 为文件寄存器指针,"d”为目标指针。文件寄存器指针用于确定

32个文件寄存器中指令所用的寄存器。

目标指针指明操作结果的存放地。"d”为0,结果送到W寄存器;"d�为1,结果送到指

令指明的文件寄存器C

对于位操作指令,"b”是位指针,用于确定操作所涉及的位;'If,,是文件寄存器指针,用

于指明操作位所在的文件寄存器。

对于立即数和控制指令,"k”代表 8或9位的内容,或代表立即数的值。

所有指令的运行只需一个指令周期,除非条件测试为真或程序计数器被指令结果改变,这

时需要2个指令周期。一个指令周期含4个振荡周期,因此,在振荡频率为4MHz时,普通指

令执行时间为Ills。如果条件测试为真或程序计数器被指令结果改变,指令的执行时间为2us o (1)除GOTO, CALL, MOVWF指令外,程序计数器的第9位在任何写PC指令中均被强行

清“0"· (2)当1/0寄存器用自身的内容修改自己时,例如 MOVF6, 1,其值为引脚上出现的值。

若输出引脚锁存1,而又被外部器件驱动为低,则数据被写为 “0"0

(3)对于TRIS f指令,其中f为5, 6, 7,它选中A, B或C端口时,W寄存器的内容送

特定文件 (端口)的三态锁存器。数据 “1”迫使引脚为高阻抗状态,并屏蔽输出缓冲器。

(4)若指令对文件寄存器fl操作,预定标器配置给RTCC时被清 “0"0

2.指令说明

(1) ADDWF W加到f

汇编符:ADDWF f, d

机器码:00 01 11 df ff ff

字 数:

周 期:

160

Page 167: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

操 作:(w+f) -W (d=0)

(w+f) -f (d=1)

状态位:C, DC, Z

说 明:把W寄存器的内容加到f寄存器。"d"为0,结果存于W寄存器;+d�为1,结

果存于f寄存器

(2) ANDLV} 立即数与W进行与运算

汇编符:ANDLW k

机器码:11 10 kk kk kk kk

字 数:1

周 期:1

操 作:(W /1 k) ->W

状态位:z

说 明:W寄存器内容和8位字节数k执行 “与”运算,结果存于W寄存器

(3) ANDWF W与f寄存器内容执行 “与”运算

汇编符:ANDWF f, d

机器码:00 01 01 df ff ff

字 数:1

周 期:1

操 作:(WAf)~ d

状态位:z

说 明:W, f寄存器的内容执行 “与”运算。..d�为0,结果存于W寄存器;+d�为1,

结果存于f寄存器

(4) BCF f寄存器的b位置 “0"

汇编符:BCF f, b

机器码:01 00 bb bf ff ff

字 数:1

周 期:1

操 作:O-f (b)

状态位:无影响

说 明:f中的b位置 ‘0"

(5) BSF f寄存器的b位置 “V,

汇编符:BSF f, b

机器码:01 01 bb bf ff ff

字 数:1

周 期:1

操 作:0-f (b)

状态位:无影响

说 明:f中的b位置 “j�

161

Page 168: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

(6) BTFSC 位测试,为 “0”时跳

汇编符:BTFSC f, b

机器码:0110 bb bfffff

字 数:1

周 期:1 (2)

操 作:f (b) =0时跳

状态位:无影响

说 明:f寄存器的b位为 “0",下一条指令就跳;b位为 “1",下一条指令废弃,代之

以执行 NOP指令,使本指令成为2周期指令

(7) BTFSS 位测试,为 “1”时跳

汇编符:BTFSS f, b

机器码:01 11 bb bf ff ff

字 数:1

周 期:1 (2)

操 作:f (b) = 1时跳

状态位:无影响

说 明:f寄存器的b位为 “V,,下一指令跳;b位为 “0",已取出的下一指令废弃并执

行NOP指令,使本指令成为2周期指令

(8) CALL 子程序调用

汇编符:CALL K

机器码:10 01 kk kk kk kk

字 数:1

周 期:2

操 作:PC + 1-TOS; k-PC < 7: 0 > 7 "0" < PC < 8 > , PA2, PA1, PAO-PC < 11: 9 >

状态位:无影响

说 明:·开始,PC十1地址人栈,8位有效值装人PC位<7: 0>7, PC第9位清。,PC位

<2, 0>位装人PC < 11, 9<位,CALL是2周期指令

(9) CLRF 清f、清<d

汇编符:CLRF f, d

机器码:00 00 01 1 f ff ff

字 数:1

周 期:1

操 作:OOH-f, OOH-d

状态位:无影响

说 明:f寄存器清 “0"} d为 “0", f, W寄存器清 “0"; d为 “1”,只f寄存器清 “0"

(10) CLRW W寄存器清 “0"

汇编符:CLRW

机器码:00 00 0100 00 00

162

Page 169: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

00H- W

状态位:2

说 明:W寄存器清 ‘1011,:位置 “1"a

(11) CLRWDT 监控定时器清 “0"

汇编符:CLRWDT

机器码:00 00 00 00 00 00

字 数:1

周 期:1

操 作:OOH-WDT, O-WDT预定标器

状态位:1-TO, 1-PD

说 明:监控定时器复位,标志位TO, PD置 “1",预定标器复位

(12) COMF f取反

汇编符:COMf f, d

机器码:00 10 Ol df ff ff

字 数:1

周 期:1

操 作:f- d

状态位:z

说 明:f寄存器内容求反。d为 ‘0",结果存于W寄存器;d为 “1",结果存于f寄存器

(13) DECF f减 1

汇编符:DECF f, d

机器码:00 00 11 df ff ff

字 数:1

周 期:1

操 作:(f一1) -d

状态位:C, DC,: 说 明:f寄存器减 to d为 ‘0'",结果存于W寄存器;d为 “1",结果存于f寄存器

(14) DECFSZ f减1,结果为0时跳

汇编符:DECFSZ f, d

机器码:00 00 11 df ff ff

字 数:1

周 期:1 (2)

操 作:(f-1) ->d;结果为0时跳

状态位:无影响

说 明:f寄存器内容减 to d为 “0’’,结果存于W寄存器;d为 “1",结果存于f寄存

器。若结果为 ‘0",则跳过下一指令;结果为 “1",下一指令废弃,执行空指令

16了

Page 170: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

(15) GOTO 无条件转移

汇编符:GOTO k

机器码:10 1k kk kk kk kk

字 数:1

周 期:2

操 作:k-PC < 8 : 0 > , PA2, PA1, PAO-PC < 11: 9 >

状态位:无影响

说 明:GOTO是无条件转移指令。11位立即数被装人P的0-10位,PC锁存器的3-4

位被装人P的最高位。GOTO是2周期指令

(16) INCF f寄存器内容加 1

汇编符:INCF f, d

机器码 :00 10 10 df ff ff

字 数:1

周 期:1

操 作:(f+ 1) -d

状态位:C, DC, z

说 明:f寄存器内容加to d为 “0",结果存于W寄存器;d为 “1",结果存于f寄存器

(17) INCFSZ f加1,结果为 “0”时跳

汇编符:INCFSZ f, d

机器码:00 11 11 df ff ff

字 数:1

周 期:1 (2)

操 作:(f+1) -->d,结果为0时跳

状态位:无影响

说 明:f寄存器内容加 to d为 “0",结果存于 W寄存器;d为 “1",结果存于f寄存

器。若结果为 “0",则跳过下一指令;

结果为 ‘0",下一指令废弃,执行一条NOP指令使其成为2周期指令

(18) IORLW 立即数与W寄存器内容执行 “或”运算

汇编符:IORLW k

机器码:11 01 KR KR KK KK

字 数:1

周 期:1

操 作:(WV k) -W

状态位:Z

说 明:W寄存器内容与立即数k进行 “或”运算,结果存于W寄存器

(19) IORWF W与f寄存器内容执行 “或”运算

汇编符:IORWF f, d

机器码:00 01 00 df ff ff

164

Page 171: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

:1

:(WVf) -d

状态位:z

说 明:W与f寄存器内容执行 “或”运算。d为 “0",结果存于 W寄存器;d为 “

结果存于f寄存器

(20) MOVF 传送 f寄存器内容

汇编符:MOVF f, d

机器码:00 10 00 df ff ff

(f) - d

状态位:z

说 明:传送f寄存器内容。d为 “0",结果存于W寄存器;d为 “1",结果存于f寄存

(21) MOVLW 立即数送W寄存器

汇编符:MOVLW k

机器码:11 00 kk kk kk kk

字 数:l

周 期:1

操 作:k- W

状态位:无影响

说 明:8位立即数送人W寄存器

(22) MOVWF W寄存器内容送到f

汇编符:MOVWFf

机器码:00 00 00 1 f ff ff

字 数:1

周 期:1

状态位:无影响

说 明:将数据从W寄存器送到f

(23) NOP 空操作

汇编符:NOP

机器码 :00 00 00 00 00 00

字 数:1

周 期:1

状态位:无影响

说 明:空操作

(24) OPTION 装数据人 OPTION寄存器

165

Page 172: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

汇编符:OPTION

机器码:00 00 00 00 00 10

字 数:1

周 期:1

操 作:W-OPTION

状态位:无影响

说 明:W寄存器内容装人。PTION寄存器

(25) ETLW k 送立即数到W

汇编符:RETLW k

机器码 :10 00 kk kk kk kk

字 数:1

周 期:2

操 作:k- W; TOS-PC

状态位:无影响

说 明:8位立即数送W寄存器。从栈顶装返回地址入PC。该指令为2周期指令

(26) RLF 带标志位循环左移

汇编符:RLF f, d

机器码:00 11 01 df ff ff

字 数:1

周 期:1

操 作:f<n>-d<n+l>, f<0>-c, c-d<0>

状态位:C

说 明:f寄存器带标志位循环左移。d为 “0",结果存于W寄存器;d为 “1”,结果有

于f寄存器

(27) RRF 带标志位循环右移

汇编符:RRF f, d

机器码:00 11 00 df ff ff

字 数:1

周 期:1

操 作:f<n>id<n-1>, f<0>-c, c-d<7>

状态位:C

说 明:f寄存器带标志位循环右移。d为 “0",结果存于W寄存器;d为 “1”,结果存

于f寄存器

(28) SLEEP 节电方式

汇编符:SLEEP

机器码:00 00 00 00 00 11

字 数:1

周 期:1

166

Page 173: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

操 作:O--PD, 1--TO, OOH--WDT, O--WDT预定标器

状态位:TO, PD

说 明:掉电标志位 (PD)清 ‘0",超时标志位置 “1"。监视定时器及预定标器清 +0�,

程序处理进入SLEEP模式,振荡器停振。详情参见 SLEEP工作方式部分

(29) SUBWF f减去W

汇编符:SUBWF f, d

机器码:00 00 10 df ff ff

字 数:1

周 期:1

操 作:dlrf OX20 ; f (20H)清 “0"

MOV1W 1 ;送1到W寄存器

SUBWF 0X20 ;(20H) = f (20H)一W=0一1二FFH Carry = 0:结果为负

;减法程序例子2

MOVLW OXFF ;

MOVWF 0X20 ;f (20H)=FFH

CLRW ;W二0

SUBWF 0X20 ;f (20H) = f (20H)一W = FFH一0 = FFH Carry = 1:结果为正

说 明:f减去Wo d为 “0",结果存于W寄存器;d为 “1",结果存于f寄存器

(30) SWAPF 半字节交换

汇编符:SWAPF f, d

机器码:00 11 10 df ff If

字 数:1

周 期:1

操 作:f<O: 3>--d, <4: 7> , f<4: 7>}d<O: 3>

状态位:无影响

说 明:f寄存器高、低半字节互换。d为 “。”,结果存于w寄存器;d为 “1,,,结果存

于f寄存器

(31) TRIS 把数据装人TRIS寄存器

汇编符:TRIS f

机器码:00 00 00 00 Of ff

字 数:1

周 期:1

操 作:W-TRIS寄存器f

状态位:无影响

说 明:W寄存器内容装人TRIS f寄存器 (f为5, 6, 7)

(32) XORLW 立即数与W “异或”

汇编符:XORLW k

机器码:11 11 kk kk kk kk

167

Page 174: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

1

1

(W “异或”k)~W

状态位:z

说 明:W寄存器内容与k进行 “异或”运算,结果存于W寄存器

(33) XORWF W寄存器与f寄存器进行 “异或”运算

汇编符:XORWF f, d

机器码:00 01 10 df ff ff

字 数:1

周 期:I

操 作:(W “异或”f) -d

状态位:z

说 明:W寄存器与f寄存器进行 “异或”运算。d为 “0",结果存于W寄存器;d为

.1 1.,,结果存于f寄存器

本 章 小 结

1.PIC16C54及PIC16C56为 18脚芯片,有 A0 4根 I/0线 RAO一RA3, B口 8根

PIC16C55及PIC16C57为28脚芯片,增加 C口8根1/0线 RCO一RC7o

2,PICI6C5 x有33条指令.对寄存器操作就是对端口的操作。端口A对应寄存器f5 ,

F6 ,端口C对应寄存器 Pa

1/0线 RBO一RB7o

端口B对应寄存器

思考题与习题

8.1 用PIC16C54设计一个4路开关量输人8路开关量输出的电路,要求输出接4个指示灯 LEDO - LED3

及4个微型继电器」XO一JX3o

8.2 上题电路,若输入为0001, 0010, 0100, 1000,相应点亮指示灯 LED并闭合继电器ix,编写相应程

序。

]68

Page 175: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

第J章 单片机开发工具

[学习指导) 从用户源程序的编写到单片机应用系统正常工作前的全过程,称为单片机应用系统的开发,用以实现这一开发的工具称为开发装置或开发

系统。通过本章学习,要求掌握:

1.熟悉开发工具的构成与连接。

2.熟悉集成调试软件的使用。

9.1 概述

单片机应用系统的程序存储器必须写有调试好的应用程序,系统才能运行。即使研制人员

对所采用的单片机结构、指令系统以及系统的硬件电路和元器件都十分熟悉,也难确保所编制的

程序不出错。因此,必须要有调试过程,甚至反复多次调试。由于程序是连续高速运行的,我们

无法观察它的运行情况,也无法加以修改。为了对应用程序进行诊断、修改,必须使用开发工具。

开发系统本身也是一个计算机系统,在完成上述开发任务过程中,可对应用系统进行仿

真,即把应用系统自身的单片机拨掉,将开发系统的仿真插头插人以取代原单片机,从而实现

对用户样机软件包和硬件的故障诊断和调试。

1.开发工具的作用

开发工具应具以下主要作用。

(1)系统硬件电路的诊断。

(2)程序的输人与修改。

(3)除连续运行程序外,还具有单步运行、设断点运行和状态查询等功能。

(4)能将程序固化到EPROM芯片上。

2开发工具的功能

一个较完善的开发工具应具备以下功能:

(1)较齐全的开发软件工具。例如:配有汇编语言,便于用户编制应用程序;能自动生成

169

Page 176: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

目标文件;配有反汇编软件,能将目标程序转换成汇编语言程序;有丰富的子程序库供选用。

(2)有全速跟踪调试、运行的能力,占用的硬件资源尽量少。

(3)为便于模块化软件调试,宜配置程序转储、程序文本打印的功能与设备。

换一种说法,它应具备:

(1)交叉汇编功能。将汇编语言程序翻译成机器码,如果手工翻译,需有专门的训练,具

效率不高,常出错,出了错难以检查。借助计算机翻译,称为交叉汇编法,例如将编好的汇编语言源程序键人PC机,启用PC机的交叉汇编程序进行翻译。其结果可以打印输出,或通过

RS - 232接口传送到单片机的存储器,或经由EPROM编程器直接写人EPROM芯片。

(2) EPROM编程器功能。为将翻译好的机器码程序写人EPROM,它应具有EPROM编程器

的功能,或至少能连接EPROM编程器。

(3)仿真功能。仿真就是用开发系统的资源来仿真应用系统,此时开发系统便是仿真器。

3.在线仿真

仿真器控制的硬件环境与应用系统完全一致,即就是实际的应用系统。它又分为两种:

(1) CPU仿真。此时拔下应用系统的CPU,改插开发系统的仿真头,两个系统便共用一个CPU。再拔下应用系统的程序存储器,而仿真器存储器中存放的是应用系统的程序。仿真器运

行该程序,检测应用系统的硬件功能并调试应用系统软件。这就是所谓 “出借”CPU的方法。 仪)EPROM仿真。拔掉应用系统的程序存储器,插上仿真头,即以仿真器的RAM代替应

用系统的程序存储器,其地址与所拔应用系统存储器的地址相同。该 “出借”的RAM中所存

为应用程序。在此基础上启动应用系统,检测调试其软硬件。

常见的通用机开发系统的结构如图9.1所示。

EPROM写入插座

图,.1 通用机开发系统

9.2 开发系统简介

单片机的开发系统很多,国内研制推出的也有很多品种,性能和价格各不相同。有的是通

用型,可开发多种机型;有的是专用型,只能开发一种或少数几种机型。后者的优点是价廉,

但前者性能、功能强,更具竞争力。现有的开发系统一般都能用于MCS一51系列或ATMEL89C

x x系列单片机应用系统的开发。下面对它们的通用功能加以介绍,使读者对开发系统有一定

的了解和认识。

9.2.1组成与功能

开发系统包括仿真系统硬件与集成调试软件两部分。

·170

Page 177: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

1.仿真系统硬件

(1)仿真系统硬件是一种大规模在线可编程芯片,它将整个单片机仿真控制电路集成在芯

片中,仿真CPU外置在仿真头上,通过更换不同的仿真头,可对各种单片机进行仿真。

(2) 8位/16位兼容,可仿真8位及16位单片机。

(3)采用硬件断点技术,不占用单片机任何资源。用户应用程序运行时,按 Ctrl一C键可

中断程序运行,返回监控。

(4)用串行口与计算机通信,波特率自动设置,最高可达38 4000

(5)可配接逻辑分析仪,能实现复杂的组合断点,观察逻辑波形,分析时序关系。

2.集成调试软件

(1)具有编辑、汇编、编译、调试和软件模拟等功能,所有操作可通过窗口和菜单的选择

来完成。将软件命令和程序运行情况集中反映在同一屏幕上,称为集成环境。它可以减轻用户

记忆众多命令的负担,便于编写和调试软件,直观地反映运行情况,提高软件开发效率。

(2)支持汇编语言、PLM, C高级语言源程序的调试。

(3)可观察数组、记录等各种复杂变量。

(4)可用软件模拟方式调试用户程序,即用计算机模仿单片机的运行情况,而无需仿真器

硬件的支持。当软件模拟单片机运行成功后,再用仿真器仿真调试。这种功能对单片机的学习

和开发是十分有用的。

(5)可在Windows98或 Windows2000环境下操作。

9.2.2 仿真系统硬件的安装

仿真系统硬件安装示意图如图9.2所示。

仿真头 !{}户板

接至计算机串行口

图,.2 仿真系统硬件安装示意图

1.仿真头

将仿真头连接到34芯仿真电缆上。注意电缆只能从一个方向插人,方向错误将插不进去。

2.电源

使用单5V直流电源,提供的电流应不小于IA,电压误差尽可能小。电源正、负极不可接

反。接好并检查无误后再通电。如果仿真系统不是脱机独自使用,则必须与计算机RS - 232接

口接好后再开电源。

3.计算机

仿真系统提供两个RS一232插头,一个9芯,另一个25芯,可根据计算机串行接口RS232

171

Page 178: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

的情况选择。仿真系统与计算机连接时,两者都必须关断电源,否则易导致损坏。

4.用户板

(1)仿真头插入用户板时,其方向应与仿真头上CPU的方向一致。

(2)仿真头的电源是仿真系统提供的,由于仿真头上CPU芯片的电源脚与它所对应的插

针并未相连,当仿真头插人用户板时,其电源与用户板的电源并不相通。

(3)仿真系统与用户板电源的电压值应相同,否则易损坏仿真系统和用户板器件。

(4)接线片 (也称跳线器)的连接要正确,以确定使用仿真头上的12MH:晶体振体 (出

厂方式)还是使用用户板上的晶振。

针对不同的单片机机型,开发系统一般配置有多个仿真头,其选用和注意事项请参阅产品

说明书。

9.3 集成调试软件的便用

对于不同的单片机机型,集成调试软件不同;对于汇编语言与高级语言,集成调试软件也存在差别。前者表现于CPU窗口区,后者因两种语言对符号表的处理不同,因此观察窗口

(WATCH)是不同的。下面以MCS一51系列汇编调试软件为例进行说明。

图9.3所示为MCS一51系列集成调试软件的屏幕显示,它包含三部分:顶部一行为菜单

栏;中间为工作窗口区;底部一行为常用命令快捷键提示栏。

菜单栏,

关闭窗l1}}}File

主菜单项

Edit Search孺、AzsemblcCPU审II标志

Optior(Debug 运’‘状炎之、、、、_

Windows Rvady 窗El号

程Jf

存储器、、 堆 IV.

片·外数据

存储器-

Cl'U

可位,1址位

,,尸 R(= AA on M nr009U W NOE .⋯ ,_,吧一 u i } rxi nri nri nr0001 00 NOP *lv F- 滋=6666丽 orUW2 A78--mil李N RI. MR, Pi= on on on or,0003 00 N0l-、一__ 一“、、汇编源程序语句 滋二 M M M N1‘0004 W NOV 一““、、二,112 n[把到性 M 一’机器码 RS- OO四 00 00(洲沁5 的 NOI, “”.”’ R石= w w w T0006 F580 MOV P0. A k7= M nn no M0007 00 NOP A=nn DP--aM P0-FR0008 00 NOP inn W=(MO Pl=n.0009 00 NOP utm=lxuxxxm Pl)=rrt11111A 伪 NOP _ near-r-A w m vn Dl-r. r.

LK1Ul3 (K) NOP / —

内部寄存器区

程)卜地址

F2 Save F3 Open ;7丫而民F瓦}F7 Trace; FB,ftl} F9 Make

理妙alClrl-F7 Add watch

程序区 常川命令提示行

图,.3 MCS一51系列的集成环境

.172

Page 179: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

1.菜单栏

含主菜单项和运行状态字两部分。

下面结合图9.3,分别介绍集成环境各个部分的作用。

(1)主菜单项

主菜单项占据了菜单栏的大部分,File, Edit,⋯、Window等均为主菜单项,主菜单是软

件的最上层菜单。

(2)运行状态字

运行状态字位于菜单栏的最右端,状态字根据软件运行状态给出相应的提示信息。

Ready 表明可以进行操作 LA 表明逻辑分析仪正在工作

Wait 表明请稍候 LA RUN 表明仿真器与逻辑分析仪在同时工作

PM 表示在下装用户程序 RL 表明逻辑分析仪正在上装波形

Running 表明仿真器正在运行用户的程序

(3)菜单命令的执行方式

菜单栏提供编辑和调试软件时要用到的各种命令,这些命令是以菜单方式给出的。当菜单

栏中的某项被选中后,将弹出下层菜单。图9.4所示为选中菜单栏中Search项后弹出的下层菜

单。有些下层菜单还有更下层的菜单。第二层菜单中有两类命令:直接命令和对话框命令。

直接命令方式

菜单中命令项后不带省略号 “⋯”的称为直接命令项,如图9.4中的 “Search again”命令,选中它后便可直接执行它指定的命令。

对话框命令方式

在弹出的下层菜单中如果某项的后面有省略号 “⋯”,则表明选中该项后将弹出一个对话

框。图9.4中的 “Find”就是带有对话框的命令项。对话框的形式有多种,其作用是要求用户

对某些软件操作的要求作出选择或输人有关的信息,这些信息不能用简单的 “是”或 “不是”

来表达,必须输人由用户决定的内容。例如,对话框要求用户输人的是文件名等信息。图9.5

中间部分为Sesrch \ Find命令的对话框。

2.对话框

对话框有多种与用户对话的形式。

(1)操作命令框

图9.5中间部分的方框为选择Search \ Find项后弹出的对话框,选择它后可执行查找字串

的操作。其中写有OK和Cancel的两个方框为两个操作命令框,选择OK执行查找字串的命令,

选择 Cancel则放弃所有的选择,不执行任何命令返回。

(2)用户输入框

用户输人框由用户输人有关信息。例如,本对话框应由用户输入要查找的字符。

(3)列表框

图9.6是File \ Open项弹出的对话框,中间的部分为列表框,用户可从列表框中选择一个已经存在的源文件。选择源文件时先用鼠标在欲选的文件名上点一下,再用鼠标点命令操作框

"Open"。其他菜单弹出的列表框中可能是其他内容,如磁盘的子目录等。

了73

Page 180: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

l3dit I Search I Run Assemble Option Debug windo%% s

Find.

Replace-Search againFind Libel

\-ICSS! C!,tJ

x

RcadN

!一

印07()50301l.’l.’l.’um

}1DD G 7 , A B C D L F

砂瓢XDArA

DADA

BIT

00 00 00 W 以〕

00 00 00 00 00

00 《丫)a) (助 以)

(

W

00 00 (K)

叨 00 00

00 00 W

0 0 0 0 0 00 0 0 0 0 0 0 0 0 000 0 0 () () 0 0 (t)

I;OP

NOP

NOP

NOP

OP

NOP

nor

Not'

N()!》

Nol'

Nol'

N()!,

U 一1

nn (x)00 0000 0000 0000 加ao 的oo 00

W 加

oo 00

0(1 00

00 00

00 0()

oo 00

00 oo

W W

PO=FF

P卜FF

P2=1'I'

丫入.丫”一X

..f

,,

1臼凡

一习只

.t

.ly介工U八

世帕知-鲤0

幽姗一的一。

c

”11

1)

1,11=l

C()旧一的-0

.00(X)(X)伪伪的0000功伪别

1?1))))))介沙众

一0000阅的的00阅阅Dl代川

一腿tl=少少{4=沙介{7=哟间附PSW- CAFKSOXP P3--FF

00000000000000000000的(x)

姗姗撇哪洲0005撇撇姗姗协咖F2 Savc F3 Open FT'1'race F8 Step F9 Make Ctrl-I'4 1:va1 Ctrl-F7 Add watch

图,.4 Search的下层菜单

(4)命令参数选择框

图9.5中的命令参数选择框要求用户选择一项或多项命令选项。选择时用鼠标在 “「〕”号

中点一下,选中后 “〔」”标记有 “X'’字符,未选择的为空白。解除选择时用鼠标在 “[I”内

XDAIA 000 00 00 00 00下f 111一 Find-资毛于共只苦=II’_’ _ ,川尸姗八他

}Text to find 甲!I厂 f ]Case Sensitive .,_ +1 is⋯ rV 】lift. ..}.. .....-11‘、,、 -t.I., 沁 落吃ur7 八 t M iv iC、,UIUS 0O 川之 MA 1r.”:

}{} ”’一”“II; ."t令框

}{’一’‘数选择o1:一 [}

DATA 00 00 00 00 00

13[T 00 0 0 0 0

Canccl

1,ZSavo1;30Pc:1「7‘lhcc l:SSlcP I才9入lakcCtrl-F4 l?val Ctrl-F7 Add watchF3 Open F7 "fracc F8I'2

图9.5 Search、Find菜单项的对话框

·174

Page 181: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

'ilc Edit Search Run Assemble Option Debug Windo+s I七。;纽(】

!!11:二二二二二二二二二二二二二二二二二二二二二二二二二二、ICS; IADDR 0 2 3 :1 5 6 7

CPl:二二二二二二二二二二

R 9 A II 〔 D 卜 卜

t)

-们

们一fj

PRAM OW

EItAM 000

1RANI 00

FLAG 00

W W W

00 00 00

00 00 00

0 0 0

00 W 00 00 W 00 W 00 00 (0

一 。pen find

SP 0 -1

07 00 00

05 00 00

’03 00 001 01 00 00

}Fl: 00 00

,FD 00 00 Fl3 00 00

0 00 00 00

0 00 00 00

0 00 00 00 0 00 00 00

0 00 00 00

0 00 00 00

0 00 00 00

0 00 00 00

P=0000 PO=FF

C=0000 11 1=FF

0000000 P2=FF

,AFM Oa P P3=FI'

叨-产

的-匀

因J川

Na川e

(只洲只)

00 01

00 02

0003

0001

以洲15

以N)6

0017

a以】8

0009

OOOA

仪洲III

NOP

NOP

NOP

NOP

NOI'

NOP

NOP

NOP

NOp

NOP

、()!,

NOP

、夕屺农柜

000000000000000000泪叨00

F2 Save 1-'3 Open 177 Trace 18 Step F9 Hake Ctrl-F4 Eval Ctrl-F7 Add watch

图,.6 对话框中的列表框

再点一次即可。图9.5中选中的是 “Whole words only'’项。 (5)命令参数单选框

图9.7中标有 “( )”的选项为命令参数单选框。在多个标有 ( )号的选项中只能选择

其中的一项,各个选项之间是互斥的。图9.7中选中的是 “With Address”项。

File Edit Search Run Assemble Option一 Debug Windows一 ‘-------Ready}

XDATA 000 00 00 00 00

DAIA 00 00 00 00 00

Cancel

F2 Save 1'3 Open F71'race F8 Step F9 Nlake Ctrl-1'4 Eval CIrl-F7 Add watch

图9.7 对话框中的命令参数单选框

了方

Page 182: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

(6)时变表触发框

图9.5、图9.6和图9.7中标有 “「十一”的为时变表触发框。用鼠标选择它后,将用户输

人窗口放大,并显示出在本次输人之前已经输入的信息。它实际上是一个记录表,记录了本次

开机后用户输人的所有信息。

(7)对话框的操作

如果菜单命令后有省略号 “⋯”,选择它后将打开一个对话框。使用对话框可以方便地浏

览和设置多个选择项。

(8)命令框的操作

对话框中一般有二个标准动作按钮,即OK和Cancel。如果选择OK,则确认了对话框中的

各项选择;如果选择Cancel,各项原有选项的内容不变,也不执行任何命令,退出对话框。按

Esc键与选Cancel是等效的。

使用键盘时,可按下某项中高亮度字符选择之。按Tab键可使光标在对话框中从某项移到

另一项。使用鼠标时,在预选的命令框中按下鼠标左键即可。

(9)用户输人框的操作

输人框是用户打人正文的地方。绝大多数基本的正文编辑键均适用于输人框。如果输人的

信息超过框的长度,那么框中的内容自己滚动。如果输人框右边有一个下拉箭头 “十”,那么

将弹出一个记录用户已往输人信息的时变表。按下 “分”浏览时变表,双击鼠标按钮,可以从

浏览表中选择一项用户前几次使用输人框时打人的正文,这条正文便自动调人用户输人框,可

省去用户重复输人这条正文的操作。在时变表外单击鼠标按钮或按Esc键可从时变表中退出。

(10)列表框的操作

列表框如图9.6所示,它的作用是列出已有的文件或其他有关选项,供用户直接从表中选

择。选中的项直接被调人对话框,可省去用户输人的操作。

(11)命令参数选择框的操作

在对话框中选择某个命令参数选择框时,其中出现字符 “X",表示该命令参数选择框被

打开;命令参数选择框为空表明它被未被选中。在命令参数选择框中按下鼠标按钮,使用键盘

时,按Tab键直到该命令参数选择框被高亮度显示,然后按下空格键,或直接选择高亮度字

符,从而打开或关闭一个命令参数选择框。

(12)命令参数单选框的操作

命令参数单选框与命令参数选择框区别仅在于,前者总是以互斥选项组的形式出现,只能

有一个选项被打开。选择命令参数单选框的操作与命令参数选择框的操作相仿。

3.窗口区

集成环境中的中间部分是窗口区,它可包含一个或几个窗口。图9.3窗口中只有一个窗

口,即CPU窗口。CPU窗口又由单线划分成几个部分。图9.7则有4个窗口:1号窗口为CPU

窗口,2号窗口为观察窗口 (Watch) , 3号和4号为两个不同的源程序编辑窗口。CPU窗口的

编号固定为1号,观察窗口固定为2号,源程序编辑窗口编号从3开始,可以打开多个。每个

打开的源文件占用一个窗口,可打开的窗口数受计算机内存限制,内存越大则可打开的窗口越

多。每个窗口最上面一行中间部分的文字标明窗口名称,如图9.7中标的 “MCS51 CPU",表

明它是名为 “MCS51 CPU”的窗口。窗口右上角的数字为窗口编号。

176

Page 183: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

窗口区中的所有窗口只有一个是激活的,激活窗口的四周为双线且为高亮度线。激活窗口

左上角标的 “「」”符号是关闭该窗口用的,当鼠标点在它上面时,则关闭这个窗f.=I。窗口右上

角的 “_个〕”符号为激增窗,用于放大或缩小该窗口。各个窗口激活后也可移动。

集成环境允许设置多个窗口 (窗口数目由内存容量决定),但在任何时刻,只能有一个窗

口处于活动状态,用户可以在设置的多个窗口之间切换。用户选择的任何菜单命令和输人的信

息,只是针对被激活的活动窗口进行的。

各个窗口的作用和对窗口的操作方法,将在介绍相关的命令时予以说明。

(1) MCS-51系列 CPU窗口

CPU窗!I如图9.3所示,它包括下列8个部分:

a. ADDR 0-二F [地址栏二

最上面一行标有 “ADDR 0 1 ...F”的是地址名称栏,"ADDR”表示集中在一行中16个存

储器 (或寄存器)单元的第一个单元的地址,"0 ... F"表示它的下面对应着16个存储单元 (或

寄存器),"0”下面对应的2位16进制数是第一个地址中的内容,"1”下面对应的是第二个地

址单元中的内容,依此类推,+ F�下面是第16个存储单元的内容。

"ADDR"下面如果是4位地址值,则表明这个地址是程序存储器或数据存储器的,如果地

址值是 2位,则表明是单片机内部各类寄存器地址。地址值左侧的字符串 “CODE",

"XDATA", "DATA”和 “BIT"表明这一行的地址是程序存储器地址、数据存储器地址、单片

机内部寄存器地址和标志寄存器中的各个标志位地址。

b. CODE 「程序存储器〕

它是为用户观察程序存储器内部信息而设置的,共有64KB的地址空间,但一般情况下只

显示16个单元的信息。"ADDR"栏下的是以16进制表示的4位地址,地址后的16个数是这个

地址及其随后的16个存储单元的内容。如果希望同时看到更多的信息,可用 “专”或 “个”

键选择下一行的16个地址。若用鼠标,可拖动右边的滚动条查看下面的16个单元,或单击右

侧的激增框,将窗口放大到满屏幕,同时查看更多的内容。

当用鼠标选中某个地址单元后,直接按数字键或A... F键,将弹出一个窗口,用户可为该

单元输人新的数值。

如果地址值较大,用鼠标翻页比较麻烦,可先用光标选中CODE窗口,再按Atl一G键,

则可弹出一地址窗口。用户输入地址值后,光标将自动定位在要求的地址单元上,然后再修改

这一单元的内容。

。.XDATA 〔数据存储器」

它是为用户观察外部数据存储器的信息、而设置的,共有64KB的地址空间。其操作方法与

程序窗口 “CODE”相同。在仿真87/89系列单片机且P0 , P2口作1/0用时,应关闭XDATA窗

口。

当用鼠标选中某个地址单元后,直接按数字键或A... F键,将弹出一个窗口,用户可为该

单元输人新的数值。

如果地址值较大,用鼠标翻页比较麻烦,可先用光标选中XDATA窗口,再按Atl - G键,

则可弹出一地址窗口。用户输入地址值后,光标将自动定位在要求的地址单元上,然后再修改

这一单元的内容。

177

Page 184: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

d. DATA 仁单片机内部数据存储器」

它包括单片机内部数据存储器共256字节,其中通用寄存器32字节 (即4组RO一R7),

地址为OOH一1FH;直接可寻址位 16个字节,地址为20H一2FH,专用寄存器 (SFR)共 128字

节,地址为80H - FFH。其操作方法与程序窗口 “CODE'’相同。

e. BIT 仁位寻址窗口]

8031单片机内部RAM块中的16个字节 (RAM地址为20H一2FH)。其操作方法与 “CODE"

相仿,所不同的是,这时 ‘0 -- F"栏下对应的是 16位,而不是 16个字节。

应注意的是,在对内部RAM进行位操作时 (指查看和修改),位的地址值与内部RAM字

节的地址值是有区别的,例如,内部 RAM中地址为20H的字节,若要位寻址,则位地址为

OOH,而不是20H0

f. SP 〔堆栈指针」

CPU窗口右上角是堆栈指针,最上面一栏的 “SP", �0�,“一1”三项下面对应的分别是:

"SP”下面对应的是堆栈地址;+0�下面对应的是堆栈地址中的内容;“一1”表示上一个堆栈

地址即 “SP"下面的地址减 1,“一1”下面对应的是上一个堆栈中的内容。例如,.. SP0下面

的地址是07, "0'’下面第一行的00是07H单元中的内容,“一1”下面的00是06单元中的内

容。

进行堆栈操作时,11 SP>,下的第一行总是栈顶的地址,其下的各个地址随之变化。若系统

复位,则SP地址初始化为07H,考虑到08H一1FH属于工作寄存器区1一3,若程序设计中用

到这些区,最好把SP值设为1FH或更大值。

9,工作寄存器区

CPU窗口的右下角是寄存器区,标有 “RO二”⋯ “R7=”、“A”、“B’,等字符。它们可直

接反映单片机中常用寄存器的状态。这些寄存器内部的信息也可在 “DATA”窗口中查到,但

是,在这个窗口列出更为直观方便。它列出了41个寄存器的内容,分别如下:

" RO二”⋯ " R7二” 通用寄存器

由于单片机内有4个工作区,每个区中都有RO---R7共8个寄存器," RO = '⋯ "R7 = "

右侧对应的是寄存器的内容,共分4列,每一列对应一个工作区中的8个寄存器中的数据。

"A二” 累加器

它表示累加器中的内容。

"B=” B寄存器

它表示 B寄存器中的内容。

"DP二” 数据指针

等号后的4位是数据寄存器的地址指针,其左侧的高2位表示的是DPH,低2位表示的是

DPL.

"PO = '⋯ " P3二” PO ... P3口寄存器

它们用于查看和修改PO ... P3口的内容。应该说明的是,由于PO口和P2口用作地址总线

和数据总线,而总线上的数据是一直变化的,所以,窗口中的PO和P2的值是不确定的,或者

说,它们的值是没有意义的。当使用POD8751仿真头时,PO, P2口显示的是PO, P2口作为

1/0口的值。

178

Page 185: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

"PSW = CASRSOXP" BIN = 00000000” 状态字寄存器

"PWS"表示状态字寄存器,等号右面的是8个状态位— C, A, F, R, S, 0, X和P}

"BIN二00000000”等号右面的8位二进制数与 “PS W”中各位对应,表示它们的状态值。 (2)反汇编窗口

CPU窗口的左下角部分是反汇编窗口,它是当前用户窗口中用户源程序经汇编后生成的目

标码,包括地址码、机器码和反汇编程序。这个窗口提供的信息对用户调试程序十分有用。

4.汇编错误信息

01:Bad operation

操作码错

02:Bad operand

操作数错

03:Bad constant

常数错

04:Bad string

字符串错

05:Repeat define or constant

重复定义或常数。汇编程序期望一个标识符,但却出现一个常数,或虽是一个标识

符,但它已被定义过

06:Divide场zero

被0除。表达式中。作为除数

07:Invalid character

非法字符。该字符在汇编语言中无定义

08:Null string

字符串长度为0

09:UnExpected "END" in include file

包含文件中出现了不期望的 “END"。一个程序不能在包含文件中结束

10:“)”Expected

期望 “)”

11:“(”Expected

期望 “(”

12:"CR" Expected

期望 “CR"。汇编程序已成功地汇编了一行,但此行中还有内容未用到。

13:“,”Expected

期望 “,”

14:Procedure name error

过程名应是一个未定义的标识符。汇编程序期望一个标识符,但却出现一个常数,

或虽是一个标识符,但已被定义过

15:PROC symbol not define:

179

Page 186: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

过程已结束,但还有过程人口没有定义

16:File name Expected

期望文件名。INCLUDE, USES命令行中需要文件名

17:Bad ORG

ORG定义的地址错

18:Jump out of range

跳转出范围

19:Too many FORWARD define

太多的向前定义 (大于2K)

20:Too many labels in program

程序中标号太多(大于I K)。程序中的标号太多,建议使用汇编程序提供的过程结构

21:Too many labels in procedure

过程中标号太多 (大于1K)。一个过程中的标号太多,过程不应太大,可将这个过

程分成若干个规模较小的过程

22:Too many debug file

被调试的文件太多。一个程序最多可调试含48个子文件的源程序

23:Bad bit address

位地址错。位地址的范围为:

-20一2FH

·大于80H且能被8整除

24:PROC can not in procedure

过程中不能定义过程。过程不可嵌套

25:Too many Entry in procedure

过程的人口太多。一个过程最多可有30个人口。如果过程人口多于30个,可分成

若干个规模较小的过程

26:Symbol not define:

标号未定义

27:Program out of range

程序超出了程序存储器的地址空间

28:DB or DW too long

DB或DW太长。每个 DB和 DW最多允许定义255字节,可用几个 DB或 DW来定

义大量数据

29:Too many lines

源程序行太多。列表及源代码调试功能允许源程序的最大行数为%Ko

30:UnExpected "END" in Procedure

过程中不期望的 “END"。过程已结束但还有人口没有定义

31:Too many labels

列表中标号太多

180

Page 187: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

32:PROC not end in unit

单元中的过程必须在单元中结束

33:“END" Expected

期望 “END"

34:TITLE String Expected

期望标题。TITLE语句中必须有一标题字符串

字符串,TITLE的初值即为一空白串

35:String too long

字符串太长。字符串的长度最大为255字节

36:IF too deep

IF嵌套太深。最多可嵌套8层

37:File too large

汇编源程序文件太大。一个文件最大为64K,

个文件中

38:“」”expected

期望 “」”

39:“〔”expected

期望 “仁”

40:IF expect

期望 "IF"

41:ENDIF expect

期望 “ENDIF"

42:“二”expect

期望 “二”

编程器操作选项

Programmer烧写芯片刁 Blank check :空白检查

Verify :校验

Read :读出代码

Program :烧写程序

Program Configuration :程序配置 Auto Option :自动设置

,如果不想打印标题,可设为一空白

可用INCLUDE语句将源程序放置在几

181

Page 188: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

附录1 89C x x系列单片机按功能排列的指令表

数 据 传 送 指 令

序号 助 记 符 指 令 功 能对标志位影响

C,}AC一0=操作码

1 MOV A,Rn A- Rn x X x 甲 E8H一EFH

2 MOV A, direct AF-(direct) x x x 丫 E5H

3 MOV A,@Ri A-(Ri) x x x 丫 E6H,E7H

4 MOV A,#data A- data x x X 了 74H

5 MOV Rn, A Rn- A x X x x F8- FFH

6 MOV Rn,direct Rn-(direct) x x x x A8- AFH

7 MOV Rn,#data Rn-data x x x x 78H- 7FH

8 MOV direct, A direct- A X X x x F5H

9 MOV direct, Rn direct-Rn X X x x 88H-8FH

10 MOV directl , direct2 Directl - (direct2 ) x x x x 85H

11 MOV direct,@Ri direct- (Ri ) X x x x 86H, 87H

12 MOV direct,#data direct-data x x x x 75H

13 MOV@Ri,A (Ri)-A X X x X F6H, F7H

14 MOV @ Ri ,direct ( Ri)F ( direct) x x x x A6H- A7H

15 MOV @Ri,#data (Ri )'-data x x x x 76H- 77H

16 MOV DP1'R,#datal6 DPTR-datal6 X x x X 90H

17 MOVC A,@A+DPTR A- (A+DPTR) X x X 丫 93H

18 MOVC A, @A+PC A-(A+PC) x X X J 83H

19 MOVX A,@Ri A-(Ri) x x x 召 E2H,E3H

20 MOVX A,@DPTR A-(DPTR) x x x 丫 EOH

21 MOVX@Ri,A (Ri)-A x X x X F2H, F3H

22 MOVX @ DPTR,A (DPTR)f-A x x X x FDH

23 PUSH direct SP-SP+1 (direct)~ ( SP) X x x x COH

24 POP direct direct--( SP) ,SP-SP一1 X x X x IK)H

25 XCH A,Rn A : R」1 x x x 丫 C8H,CFH

26 XCH A I direct A F (direct) x x X 丫 C5 H

27 XCH A,@凡 A: (Ri) X X x J C6H,C7H

28 XCHD A, @ Ri A3_p}(Ri)3一。 X x X 丫 D6H,D7H

182

Page 189: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

续表

算 述 运 算 指 令

序号 助 记 符 指 令 功 能 对

Cv

标志

AC

位影

0丫

P

操作码

29 ADDA,Rn A~ A +R刀 寸 丫 丫 丫 28H ~ZFH

3O ADDA,direct A“A+(direcl〕 丫 丫 了 丫 25H

3l ADDA,@Ri A,A+(Ri) 创 了 丫 丫 26H,27H

32 ADDA,#data A, A+data 创 丫 寸 1了 24H

33 ADDCA,Rn A,A+Rn+Cy 创 汀 寸 丫 38H ~3FH

34 ADDCA,direc[ A,A+(direct)+Cy 丫 丫 丫 、一 35H

35 ADDCA,@Ri A,A+(Ri)+Cy 了 丫 寸 丫 . 36H,37H

36 ADDCA,#data A,A+data+Cy 了 丫 了 了’一

34H

37 SUBBA,Rn A,A一Rn一Cy 丫 丫 丫 丫 98H一gFH

38 SUBBA,direct A,A一(direct)一Cy 丫 丫 丫 丫 .

}

95H

39 SUBBA,@Ri A,A一(Ri)一Cy 丫 了 了 丫 96H,97H

40 SUBBA,#data A“A一da之a一Cy 丫 丫 丫 丫 94H

4l INC A A一 A +1 X X X 丫 (只H

42 INC Rn Rn“ Rn+1 X X X X 08H一OFH

43一}INCdirCe, direct一(direct)+1 X X X X 05H

44 INC @ Ri (Ri)~(Ri)+1 X X X X 06H,O7H

45 INC DPI’R DPI,R“ DPTR +1 X X x}一、 A3H

46 DEC A A~ A 一 1 火 X X 丫 14H

47 DEC Bn Rn~ Rn一1 X X X X 18H ~IFH

48 DEC direct Direct,(direct)一1 洲 X X 义 15H

49 DEC @ Ri (RI),(Ri)一1 x一X X X 16H,17H

50 MUL AB BA一 A xB 0 X 州 了 A4H

51 DIV AB A于B二A··⋯ B 0 X 丫 了 84H

52 DA A 对A进行 BCD调正 了 丫 了 丫 1川H

18了

Page 190: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

续表

逻辑运算和移位指令

序号 助 记 符 指 令 功 能对

Cy

标志

AC

位影

OV

口向

P

操作码

53 ANL A, Rn A- A八Rn X x x 丫 58H 、5FH

54 ANL A, direct A- A A (direct) x x x 了 55H

55 ANL A,@Ri A- A八(Ri) x x x 了 56H-57H

56 ANL A,#data A-A八data x x x 丫 54H

57 ANL direct, A directs-( direct)八A x x x x 52H

58 ANL direct,#data directs-( direct)八(iata x x x x 53H

59 ORL A, Rn A-A V Rn x x X J 48H-4FH

60 ORL A, direct A-A V (direct) X x X 丫 45H

61 ORL A, @ Ri A-AV (Ri) x x x 丫 46H,47H

62 ORL A,#data A-AVdata x x X 丫 44H

63 ORL direct, A Direct-( direct) V A x X x x 42H

64 ORL direct,#data Direct-( direct) V data x x x x 43H

65 XRL A, Rn A-AOO Rn x x x 了 68H-6FH

66 XRL A , direct A-A④ (direct) X x X 了 65H

67 XRL A,@Ri A-AO+ (Ri) x x X J 66H,67H

68 XRL A,#data A-A④ data x x x 丫 64H

69 XRL direct, A direct--(direct)④ A x x x x 62H

70 XRL山rest,#data direct-(direct)④ data x x X x 63H

71 CLR A A- 0 x x X 丫 E4H

72 CPL A A- A x X X x F4H

73 RL A -A7..”二AO-A7 x x x X 23H

74 RR A AO-A7 ... ... AO- v x x x 03H

75 RLC A AO-Cy一A7...... Ao- 丫 x x 了 33H

76 RRC A A,-C,一A7...... Ao- J x x 丫 13H

77 SWAP A (A7一A4):4-- (A3一Ao) x x x x C4H

·184

Page 191: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

续表

控 制 转 移 指 令

序号 助 记 符 指 令 功 能对标志位影响

C,一AC一OV一操作码

78 AJMP addrl l PC,o PCo-addrll x X x X &0(注)

79 LJMP addrl6 PC- addrl6 x X x x 02H

80 SJMP rel PC-PC+2+rel x x x x 80H

81 JMP @ A+DPTH PC-(A+DPTR) x x x x 73H

82 JZ rel 若A二0,则PC-PC+2+rel x x X x 60H

若AOO,则PC-PC+283 JNZ rel 若A#0,则 PC-PC+2+rel x x x x 70H

若A=0,则 PC-PC+2

84 CJNE A, direct, rel 若A尹(direct),则PC-PC十3+rel 丫 X x x B5H

若 A二(direct),则 PC-PC十3

若A〕 (direct),则CY-0;否则,C'= 185 CJNE A,#data, rel 若A 7,- data,则PC-PC+3+rel 丫 x x x B4H

若A = data,则 PC-PC十3

若A }_: data,则C,二0;否则,C,二186 CJNE Rn,#data , rel 若A并data,则PC-PC十3+rel 丫 x x x B8H-BFH

若 Rn二data,则 PC-PC+3

若Rn : data,则q=0;否则,C,二187 CJNE@Ri,#data, rel 若(Ri) o data,则PC-PC+3十rel 了 x x x B6H, B7H

若(Ri)=data,则PC-PC+3

若(Ri) o data,则PC-PC+3+rel

若(Ri之二data,则Cy=0;否则,Cr=188 DJNZ Rn,rel 若Rn一1并0,则PC-PC+2十rel x x x X D8H- DFH

若 Rn一1=0,则 PC-PC十2

89 DJNZ direct, rel 若(direct)一1:A 0,则PC-PC+3+rel x x x x DSH

若(direct)一1二0,则PC-PC+3

“90 ACALL addrl l PC- PC+2 X x X x &1(注)

SP-SP+1,(SP) -PC,,

SP-SP+1,(SP).-PCH

PCIO一。-addrll

91 LCALL addrl6 PC-PC十3 x x x x 12H

SP-SP+1,(SP) -PC,,

SP-SP + 1,(SP)_PCH

PCis - o-addrl6

92 RET PCH-(SP),SP-SP一1 x x x x 22H

PC,,-(SP),SP-SP一1

93 RETI PCH-(SP),SP-SP一1 x x x x 32H

PCB- (SP),SP-SP一1

94 NOP PC- PC十1 x x x x OOH

空操作

了85

Page 192: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

续表

位 操 作 指 令

注:&0=aloaga800001 B o&1二aloaga810o

.186

Page 193: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

附录2 89C x x系列单片机按操作码顺序排列的指令表

代码 字节数 助记符 操作对象 }一代码 字节数 助记符 操作对象

00 1 NOP {22 1 RET

01 2 AJMP Code addr 一23 1 RL A

02 3 UMP Code addr 一24 2 ADD A,#data

03 1 RR A {25 2 ADD A, data addr

04 1 INC A }26 1 ADD A,@ RO

05 2 INC Data addr 一27 1 ADD A,@ R1

06 1 INC @ B0 一28 1 ADD A,RO

07 1 INC @ Rl 一29 1 ADD A, R1

08 1 INC RO 2A 1 ADD A, R2

09 1 INC R1 12B 1 ADD A, R3

OA 1 INC R2 一一2C 1 ADD A, R4

OB 1 INC R3 一2D 1 ADD A, RS

OC 1 INC R4 一2E 1 ADD A, R6

OD 1 INC RS 一2F 1 ADD A, R7

OE 1 INC R6 130 1 JNB Bit ad击,code addr

OF 1 INC R7 {31 1 ACALL Code addr

10 3 JBC Bit ad击,code ad击 }32 1 RETI

11 2 ACALL Code addr {33 1 RLC A

12 3 LCALL Code addr 134 2 ADDC A,#data

13 1 RRC A 一35 2 ADDC A, data ad击

14 1 DEC A 136 1 ADDC A,@ RO

15 2 DEC Data addr }37 1 ADDC A,@ Rl

16 1 DEC @ RO 138 1 ADDC A,RO

17 1 DEC @ Rl 139 1 ADDC A, R1

18 1 DEC R0 {3A 1 ADDC A, R2

19 1 DEC R1 一「3B 1 ADDC A, R3

1A 1 DEC R2 一3C 1 ADDC A, R4

1B 1 DEC R3 一}3D 1 ADDC A, RS

1C 1 DEC R4 一一}3E 1 ADDC A, R6

1D 1 DEC RS 3F 1 ADDC A, R7

1E 1 DEC R6 40 2 JC code addr

1F 1 DEC R7 一41 2 AJMP code addr

20 3 JB Bit addr,code addr 一42 2 ORL data addr,A

21 2 AJMP Code addr 一43 3 ORL Data addr,#data

.187

Page 194: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

续表

代码 字节数 助记符 操作对象 !代码 字节数 助记符 操作对象

44 2 ORL A,# data {6B 1 XRL A, R3

45 2 ORL A, data addr 一6C 1 XBL A, R4

46 1 ORL A,@ RO {6D 1 XRL A, R5

47 1 ORL 人,@ R1 一6E 1 XRL A,R6

48 1 ORL A,RO 一6F 1 XRL A, R7

49 1 ORL A, R1 一70 2 JNZ code ad击

4A 1 ORL A, R2 一71 2 ACALL code addr

4B 1 ORL A, R3 一72 2 ORL C bit addr

4C 1 ORL A, R4 }}73 1 imp @ A +DPTR

4D 1 ORL A, RS }74 2 MOV A,#data

4E 1 ORL A, R6 175 3 MOV Data addr,#data

4F 1 ORL A, R7 一76 2 MOV @ R0,# data

50 2 JNC Code addr }77 2 MOV @R1,#data

51 2 ACALL 一

Code addr 】78 2 MOV RO,# data

52 2 ANL Data addr, A 179 2 MOV R1,#data

53 3 ANL Data ad击,# data {7A 2 MOV R2,#data

54 2 ANL A,#data {7B 2 MOV R3,#data

55 2 ANL A, data addr 】7C 2 MOV R4,#data

56 1 ANL A,@ RO 一7D 2 MOV R5,#data

57 1 ANL A,@ R1 }7E 2 MOV R6,#data

58 1 ANL A, RO 一7F 2 MOV R7,#data

59 1 ANL A, R1 一80 2 SJMP code addr

5A 1 ANL A, R2 !81 2 AJMP code addr

5B 1 ANL A, R3 82 2 ANL C bit addr

5C 1 ANL A, R4 83 1 MOVC A,@ A十PC

5D 1 ANL A, R5 一11 84 1 DIV AB

5E 1 ANL A, R6 }85 3 MOV data addr, data addr

5F 1 ANL A, R7 】86 2 MOV data addr, @ RO

印 2 JZ Code ad击 87 2 MOV data addr,@R1

61 2 AJMP Code ad山 88 2 MOV data addr, RO

62 2 XRL Data ad击,A I 892 MOV data adds, R1

63 3 XRL Data addr,#data 一8A 2 MOV data addr, R2

64 2 XRL A,# Data 一8B 2 MOV data addr, R3

65 2 XRL A, Data addr 一l8C 2 MOV data addr, R4

66 1 XRL A, @ RO 】8D 2 mov data addr, RS

67 1 XRL A,@ R1 一8E 2 mov data addr, R6

68 1 XRL A,RO 8F 2 mov data addr, R7

69 1 XRL A, R1 }90 3 mov DPTR,#data

6A 1 XRL A, R2 {91 2 ACALL code addr

·188

Page 195: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

续表

代码 字节数 助记符 操作对象 }{代码 字节数 助记符 操作对象

92 2 MOY Bit addr,C IB9 3 CNJE R1,#data,code addr

93 1 MOVE A,@ A + DPTR 一BA 3 CNJE R2,#data, code addr

94 2 SUBB A,# data 一BB 3 CNJE R3,#data, code addr

95 2 SUBB A, data addr )BC 3 CNJE R4,#data, code addr

96 1 SUBB A,@ RO I BD 3 CNJE R5,#data Icode addr

97 1 SUBB A,@ R1 {BE 3 CNJE R6,#data, code addr

98 1 SUBB A,RO {BF 3 CNJE R7,#data,code addr

99 1 SUBB A, R1 {CO 2 PUSH data addr

9A 1 SUBB A,R2 IC1 2 AJMP code addr

9B 1 SUBB A, R3 {C2 2 CLR Bit addr

9C 1 SUBB A, R4 {C3 1 CLR C

9D 1 SUBB A, R5 {C4 1 SWAP A

9E 1 SUBB A, R6 {C5 2 XCH A , data addr

9F 1 SUBB A, R7 }。6 1 XCH A,@ RO

AO 2 ORL C, bit addr 一一。 1 XCH A,@ R1

A1 2 AJMP Code addr {C8 1 XCH A,RO

A2 2 MOV C bit addr {Cg 1 XCH A, R1

A3 1 INC DPTR {CA 1 XCH A,R2

A4 1 MUL AB {{CB 1 XCH A, R3

AS Reserved 一CC 1 XCH A, R4

A6 2 MOV @ RO, data ad击 】CD 1 XCH A, RS

A7 2 MOV @Rl , data addr 」一CE 1 XCH A, R6

A8 2 MOV RO, data addr }CF 1 XCH A, R7

A9 2 MOV R1, data ad击 一DO 2 POP Data addr

AA 2 MOV R2 , data ad、 一{D1 2 ACALL Code ad击

AB 2 MOV R3, data addr 一D2 2 SETB Bit addr

AC 2 MOV R4, data ad击 一D3 1 SETB C

AD 2 MOV R5, data addr ID4 1 DA A

AE 2 MOV R6, data addr 一DS 3 DJNZ data addr,code addr

AF 2 MOV R7, data addr 一一D6 1 XCHD A,@ RO

BO 2 ANL C , bit addr 一D7 1 XCHD A,@ Rl

Bl 2 ACALL code addr 一D8 2 DJNZ RO,code addr

B2 2 CPL bit addr 一D9 2 DJNZ Rl,code addr

B3 1 CPL C 一DA 2 DJNZ R2, code addr

B4 3 CJNE A,# data code addr 一DB 2 DJNZ R3 I code ad击

B5 3 CJNE A,data addr, code addr {DC 2 DJNZ R4, code addr

B6 3 CJNE @ R0,# data. code addr {DD 2 DJNZ RS, Code addr

B7 3 CJNE @ R1,# data, code addr IDE 2 DJNZ R6, code addr

B8 3 CJNE RO,#data, code addr 一DF 2 DJNZ R7, code addr

·189

Page 196: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

续表

代码 字节数 助记符 操作对象 }代码 字节数 助记符 操作对象

EO 1 MOVX A,@ DPTR 一。 1 MOVX @ DPTR, A

E1 2 AJMP code addr 一一F1 2 ACALL code addr

E2 1 MOVX A,@RO 一一F2 1 MOVX @ R0, A

E3 1 MOVX A,@ R1 {。 1 MOVX @ R1,A

E4 1 CLR A 一F4 1 CPL A

E5 2 MOV A, data addr }F5 2 MOV data ad击,A

E6 1 MOV A,@RO }II F61 MOV @ R0, A

E7 1 MOV A,@ R1 }F7 1 MOV @ Rl,A

E8 I MOV A, RO 一一。 1 MOV R0, A

E9 1 MOV A, Rl 一一, 1 MOV R1,A

EA 1 MOV A, R2 {{FA 1 MOV R2, A

EB 1 MOV A, R3 {FB 1 MOV R3,A

EC 1 MOV A,R4 FC 1 MOV R4,A

ED 1 MOV A, RS }。 1 MOV RS,A

EE 1 MOV A, R6 }FE 1 MOV R6, A

EF 1 MOV A, R7 }FF 1 MOV R7, A

190

Page 197: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

附录3 89C x x系列单片机专用寄存器 SFR一览表

专用寄存器名称 符号字节地址

位地址与位名称

D7 D6 DS D4 D3 D2 D, Do

PI)口 PO 80H 87 86 85 84 83 82 81 80

堆栈指针 5P 81H

数据指针低字节 DPL 82H

数据指针高字节DPTR

DPH83H

定时器/计数器控制 W ON 88HTFI

8F

TRl

8E

TFO

8D

TRO

SC

EE 1

8B

IT1

8A

IEO

89

ITO

88

定时器/计数器方式控制 TMOD 89H GATE C/T M, Mo GATE C/T M, MO

定时器/计数器0低字节 T切 8AH

定时器/计数器 1低字节 TL1 8BH

定时器/计数器0高字节 THO 8CH

定时器/计数器1高字节 TH1 8DH

P1 口 P1 90H 97 96 95 94 93 92 91 90

电源控制 PCON 97H SMOD GF1 GFO PD IDL

串行控制 SCON 98HSMO

9F

SM1

9E

SM2

9D

REN

9CTB89B

RB8

9A

TI

99

R1

98

串行数据缓冲器 SBUF 99H

P2 口 P2 八0H A7 A6 A5 A4 A3 A2 A1 AO

中断允许控制 IE A8HEA

AF

E12

AD

ES

AC

ET1

AB

EX1

AA

E护n】

A9

EXO

A8

P3口 P3 BOH B7 B6 B5 B4 B3 B2 B1 BO

中断优先级控制 IP B8HPT2

BD

PS

BCPT1BB

PXI

B

PTO

B9

PXO

B8

定时器/计数器2控制 T2CON C8HTF2

CF

EXF2

CE

RCLK

CD

TCLK

CC

EXENZ

CB

TR2

CA

C/T2

C9

CP/RL2

C8

定时器/计数器2自动重

装载低字节RLDL* CAH

定时器/计数器2自动重

装载高字节RLDH* CBH

定时器/计数器2低字节 ,r u. CCH

定时器/计数器2高字节 TH2' CDH

程序状态字 PSW DOHC

D7

AC

D6

FO

DS

RS1

D4

RSO

D3

OV

D2 D1

P

累加器 A EOH E7 E6 E5 E4 E3 E2 E1 EO

B寄存器 B IOH F7 F6 F5 F4 F3 F2 F1 功

注:表中带*的寄存器都与定时器/计数器2有关,只在52子系列芯片中存在。RLDH, RLDL也可写作RCAP2H, RCAP2L,分别称为定时器/计数器2捕捉高字节、低字节寄存器。

必须注意:在128个字节的SFR块中,仅有21个((51子系列)或 26个(52子系列)字节是专用寄存器,即是有定义的,如用涉及直接寻址字节寻址的指令去访问该块中未定义的字节是没有意义的。

·191

Page 198: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

附录4 89C x x系列单片机加电或复位后专用寄存器状态

寄存器 二进制值 { 寄存器 二进制值

ACC" 00 000000 TMOD 0000000 0

B赞 00 000000 】T2MOD' x x x x x x 0 0

PSW' 00 000000 一TCON 000000 00

SP 000 00 111 一ON“ 0000000 0

DPTR 一】THO 000000 00

DPH 00 000000 一TLO 000000 00

DPL 000 00000 一THl 000000 00

PO" 111 11111 一TLI 00000000

Pl 11 111111 一TH2' 00000 000

P2并 111 11111 一二· 000000 00

P3 ' 11 111111 一RCAP2H' 0000000 0

IP* AT89C51 x x x 00000 一RCAP2L' 000000 00

AT89C52 x x 000000 lSCON‘ 000000 00

IE" AT89C51 0 x x 00000 一SBUF 不定

AT89C52 0 x 000000 一、ON COMS 0 x x x 00 00

注:x表示未定义。

二表示可位寻址。

十表示仅52子系列存在。

192

Page 199: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

附录5 89C x x系列单片机型号介绍 89CXX系列单 片机共有 7种 型号,分别 为 AT89C51, AT89LV51, AT89C52. AT89LV52, AT89C1051,

AT89C2051 , AT89S8252。其中AT89 LV51和AT89LV52分别为AT89C51和AT89C52的低电压产品,最低电压可低

至2.7V; AT89C1051和AT89C2051为低档型低电压产品,有20条引脚,最低电压也为2.7V,

89系列单片机的型号编码由3个部分组成,分别是前缀、型号、后缀。它们的格式如下:

AT89C x x x x x x x x

其中:AT是前缀

89C x x x x是型号

x x x x是后缀 下面分别对这3部分进行说明,并对其中有关参数的表示和含义作相应解释。

1.前缀

前缀由字母 “AT”组成,表示该器件是ATMEL公司的产品。

2.型号

型号用 “89C x x x x”或 “89LVx x x x”或 “89S x x x x”等表示。

089Cxxxx”中,9表示内部含Flash存储器;C表示是 CMOS产品。

"89LV x//、”中,LV表示低压产品。

"895 x x x、”中,S表示含可下载Flash存储器。

此部分的x x x、表示器件型号数,例如:51, 1051, 8252等。

3.后缀

后缀由 “xxxx"4个参数组成,每个参数的表示和含义不同。在型号与后缀部分有 “一’号隔开。

后缀中的第一个参数x用于表示速度。它的含义如下:

x =12,表示速度为12MHz;

x=16,表示速度为 16MHz;

x =20,表示速度为20MHz;

x =24,表示速度为24MI{z

后缀中的第二个参数x用于表示封装形式。‘它的含义如下:

x=D, Cerdip;

x二J,塑料J引线芯片载体;

x二L,无引线芯片载体;

x二P,表示塑料双列直插DIP封装;

x =S,表示SOIL封装;

x二Q,表示PQFP封装;

x=A,表示TQFP封装;

x二W,表示裸芯片。 后缀中第三个参数x用于表示温度范围。它的含义如下:

x二C,表示商业产品,温度范围为0一+70'C ;

x =I,表示工业产品,温度范围为一40一十85'C ;

x二A,表示汽车用产品,温度范围为一40一+1259C;

19了

Page 200: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

x = M,表示军用产品,温度范围为一55一+150'C

后缀中的第四个参数x用于说明产品的处理情况。它的含义如下:

x为空,表示处理工艺是标准工艺;

x = /883,表示处理工艺采用 MIL-STD-883标准。

例如,一个单片机型号为 “AT89C51 - 20PC0,则表示的含义是:该单片机是ATMEL公司的Flash单片机,

内部是 C51结构,速度为20MHz,封装为DIP,是商业产品,按标准处理工艺生产。

194

Page 201: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

参 考 文 献

1 丁元杰主编 .单片微机原理及应用 .北京:机械工业出版社,2000

2 胡汉才编著.单片机原理及其接口技术.北京:清华大学出版社,1998

3 孙涵芳编著 .单片机原理及应用 .北京:航空航天大学出版社,1990

4 余元权编著.ATMEL89系列单片机应用技术.北京:航空航天大学出版社,2002

5 李全利主编 .单片机原理及应用技术 北京:高等教育出版社,2001

6 何立民主编 .单片机应用技术选编 .北京:航空航天大学出版社,1998

7 陈章龙编著.单片机接口技术手册.上海:复旦大学出版社,1992

8 杨振江编著 .新型集成电路 .陕西:西安电子科技大学出版社,2000

9 第三届全国大学生电子设计竞赛组委会编 .第三届全国大学生电子设计竞赛获奖作品

选编.北京:北京理工大学出版社,1997

10 全国大学生电子设计竞赛组委会编 .第四届全国大学生电子设计竞赛获奖作品选编 .

北京:北京理工大学出版社,1999

195

Page 202: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,

平口 召曰 倒 口A7q1 月毛 万口 HJ j

高等教育出版社依法对本书享有专有出版权。任何未经许可的复制、销售行为均违反《中华

人民共和国著作权法》,其行为人将承担相应的民事责任和行政责任,构成犯罪的,将被依法追究

刑事责任。为了维护市场秩序,保护读者的合法权益,避免读者误用盗版书造成不良后果,我社

将配合行政执法部门和司法机关对违法犯罪的单位和个人给予严厉打击。社会各界人士如发现

上述侵权行为,希望及时举报,本社将奖励举报有功人员。

反盗版举报电话:(010) 82028899转6897 (010)82086060

传真:(010) 82086060

E一mail:dd@hep. com. cn

通信地址:北京市西城区德外大街4号

高等教育出版社法律事务部

邮编:100011

购书请拨打读者服务部电话:(010)64054588

责任编辑 李葛平

封面设计 王凌波

责任绘图 宗晓梅

版式设计 陆瑞红

责任校对 尤 静

责任印制 宋克学

Page 203: 单片机技术实用教程idl.hbdlib.cn/book/00000000000000/pdfbook2/018/017/92206.pdf第3章及附录,蔡谷明同志编写第4章、第5章、第6章、第7章,梁先宇同志编写第8章,