单片机原理及应用课后习题答案 - - 张兰红 下载本文

http://www.wkfxw.com 文库分享网

单片机原理及应用 张兰红

9

第 1 章 微型计算机的基本概念

1.1 微型计算机由哪几部分组成?每一部分各起何作用?

解: 微型计算机由微处理器芯片、存储器芯片、输入/输出接口电路芯片与总线组成。 微处理器是微型计算机的核心,它通常包括 3 个基本部分:① 算术逻辑部件 ALU(Arithmetic

Logic Unit),对传送到微处理器的数据进行算术运算或逻辑运算的电路,如执行加法、减法运算,

逻辑与、逻辑或运算等。② 工作寄存器组,用来存放操作数及运算的中间结果等。③ 控制部件,

包括时钟电路和控制电路,时钟电路产生时钟脉冲,用于计算机各部分电路的同步定时;控制电路

产生完成各种操作所需的控制信号。

存储器是微型计算机的重要组成部分,计算机有了存储器才具备记忆功能。 I/O 接口是沟通 CPU 与外部设备的不可缺少的重要部件。外部设备种类繁多,其运行速度、 数据形式、电平等各不相同,常常与 CPU 不一致,所以要用 I/O 接口作桥梁,起到信息转换与协 调的作用。

总线是在微型计算机各芯片之间或芯片内部各部件之间传输信息的一组公共通信线。 1.2 什么是 CPU?什么是主机?

解:由于运算器、控制器是计算机处理信息的关键部件,所以常将它们合称为中央处理单元 CPU

(Central Processing Unit,简称 CPU)。

通常把运算器、控制器、存储器这三部分称为计算机的主机。 1.3 何谓计算机系统?何谓单板机?何谓单片机?

解:计算机与外围设备、电源、系统软件一起构成应用系统,称为计算机系统。

在一块印刷电路板上,集成了中央处理单元 CPU、只读存储器 ROM、随机存取存储器 RAM、 I/O 接口、定时器/计数器、中断系统等功能部件,构成一台完整的微型计算机,称为单板机。

在一块半导体芯片上,集成了中央处理单元 CPU、只读存储器 ROM、随机存取存储器 RAM、 I/O 接口、定时器/计数器、中断系统等功能部件,构成一台完整的微型计算机,称为单片机。

1.4 为什么要采用总线结构?芯片为什么要通过缓冲器才能挂在总线上?

解:微型计算机采用总线结构后,芯片之间不需单独走线,大大减少了连接线的数量。 挂在总线上的芯片不能同时发送信息,否 则多个信息同时出现在总线上将发生冲突而造成出错。

如果有几块芯片需要输出信息,就必须分时传送,为了实现这个要求,挂在总线上的各芯片必须通

http://www.wkfxw.com 文库分享网

过缓冲器与总线相连。

1.5 何谓程序计数器?程序计数器中存放的是什么内容?它对计算机的工作起什么作用?在什么情

况下,程序的执行顺序发生转移?此时程序计数器的内容是怎么样的? 解:程序计数器 PC 是管理程序执行次序的特殊功能寄存器。

程序计数器 PC 中存放的是下一条要执行的指令的地址。它管理程序执行的次序。 在执行转移指令的情况下,程序的执行顺序发生转移。此时程序计数器直接接受内部总线送来

的数据,并用该数据取代原有的内容。

1.6 评价存储器有哪些重要的指标?为什么说存储器性能已成为计算机性能提高的关键?

10

解:存储器的重要指标是容量和存取速度。

容量越大,则记忆的信息越多,计算机的功能就越强。存储器的存取速度比 CPU 的运算速度要

低,所以存储器的工作速度是影响计算机工作速度的主要因素。 1.7 综述存储器的种类、特点、用途和优缺点?(主要针对内存)

解:按结构与使用功能分,内存储器可分为随机存取存储器 RAM 和只读存储器 ROM 两类。 随机存取存储器 RAM 又称读写存储器,它的数据读取、存入时间都很短,因此,计算机运行时,

既可以从 RAM 中读数据,又可以将数据写入 RAM。但掉电后 RAM 中存放的信息将丢失。 RAM 适宜存放原始数据、中间结果及最后的运算结果,因此又被称作数据存储器。

只读存储器 ROM 读出一个数据的时间为数百纳秒,有时也可改写,但写入一个数据的时间长达

数十 ms,因此在计算机运行时只能执行读操作。掉电后 ROM 中存放的数据不会丢失。 ROM 适宜存放程序、常数、表格等,因此又称为程序存储器。 只读存储器又可以分为下列四类:

① 掩膜 ROM:在半导体工厂生产时,已经用掩膜技术将程序做入芯片,用户只能读出其内容而

不能改写。掩膜 ROM 只能应用于有固定程序且批量很大的产品中。

② 可编程只读存储器 PROM:用户可将程序写入 PROM,仅程序一经写入就不能改写。

③ 可擦除可编程只读存储器 EPROM:用户可将程序写入 EPROM 芯片。如果要改写程序,先 用紫外灯照射芯片,擦去原先的程序,然后写入新程序。与 PROM 芯片一样,写入的速度很慢,且

要用到高压,所以必须用特定的 EPROM 编程器写入信息。在计算机运行时只能执行读操作。 ④ 电擦除可编程只读存储器 EEPROM:这是近年发展起来的一种只读存储器。由于采用电擦 除方式,而且擦除、写入、读出的电源都用十 5V,故能在应用系统中在线改写。但目前写入时间较

长,约需 10ms 左右,读出时间约为几百 ns。

1.8 何谓堆栈?为什么要设置堆栈?栈区是怎样确定的?数据进栈、出栈按照何种规律?进栈用什

么指令?出栈用什么指令?进栈、出栈时栈指针如何变化?通常栈底所指是什么内容? 解:微型计算机中的堆栈是读写存储器 RAM 中的一个特殊的区域,是一组按照“先进后出”的方式工

作的、用于暂存信息的存储单元。

http://www.wkfxw.com 文库分享网

设置堆栈的目的是便于保护断点地址与现场信息。 用堆栈指针指示堆栈所在的位置。

数据进栈、出栈“按先进后出”的原则工作。

进栈用 PUSH 指令,出栈用 POP 指令。进栈时指针向地址增加的方向变化,出栈时指针向地址

减小的方向变化。

栈底是最先进栈的信息所在的单元。 1.9 请解释下列名词:

(1) 字长,字,字节,BCD 码,ASCII 码。 (2) 指令,指令地址,指令系统,程序。

解:(1)一台计算机一次所能处理的二进制代码的位数称为该计算机的字长。 16 位二进制数称为一个字。 8 位二进制数称为一个字节。 二进制编码的十进制数,简称二

十进制数,又称 BCD 码 (Binary Coded Decimal)。

11

ASCII 码是美国标准信息交换代码(American Standard Code for Information Interchange)的缩写。

(2)指令:控制计算机进行各种操作的命令称为指令。 指令地址:指令所在存储单元的地址。

指令系统:一台计算机所具有的所有指令的结合,称为该计算机的指令系统。 程序:一系列指令的有序集合称为程序。 1.10 计算机中常用的计数制有哪些? 解:二进制、十进制(BCD)、十六进制。 1.11 什么是机器码? 什么是真值?

解:把符号数值化的数称为机器数或机器码,原来的数值叫做机器数的真值。 1.12 完成下列数制的转换。 (1)10100110B=( )D=( )H (2)0.11B=( )D

(3)253.25=( )B=( )H

(4)10ll011.101B=( )H=( )BCD 解:

(1) 166,A6 (2) 0.75

(3) 11111101.01,FD.4

(4) 5B.A,10010001.011000100101

1.13 8 位和 16 位二进制数的原码、补码和反码可表示的数的范围分别是多少? 解:8 位二进制数原码(127

~+127)、16 位二进制数原码(32767 ~+32767)

8 位二进制数补码(128~+

127)、16 位二进制数补码(32768 ~+32767)

8 位二进制数反码(127~+

http://www.wkfxw.com 文库分享网

127)、16 位二进制数反码(32767~+ 32767)

1.14 写出下列真值对应的原码和补码的形式。 (1) X=111001lB (2) X=71D

(3) X=+1001001B 解:

(1) 原码:11110011B 补码:10001101B (2) 原码:11000111B 补码:10111001B (3) 原码:01001001B 补码:01001001B

1.15 写出符号数 10110101B 的反码和补码。 解:11001010B,11001011B

1.16 已知 X 和 Y 的真值,求[X 十 Y]的补码 (1) X=1110111B Y=+l011010B

(2) X=56D Y=21D

12

解;(1) 11100011B (2) 00100011B

1.17 己知 X=1101001B, Y=1010110B. 用补码求 XY 的值。

解:11101101B

1.18 请写出下列字符的 ASCII 码。 4A3=!

解:34H,41H,33H,3DH,21H

1.19 若给字符 4 和 9 的 ASCII 码加奇校验,应是多少? 解:34H,B9H

1.20 上题中若加偶校验,结果如何? 解:B4H,39H

1.21 计算下列表达式。

(1) (4EH 十 10110101B) ×(0.0101)BCD=( )D (2) 4EH(

24/08H 十‘B’/2)=( )B 解:(1) 129.5D (2) 101010B

13

第 2 章 MCS51 单片机的硬件结构

2.1 请结合课本中 MCS51

系列单片机的结构图,阐明其大致组成。

http://www.wkfxw.com 文库分享网

解:按功能部件分,51 子系列单片机由 CPU、数据存储器 RAM、程序存储器 ROM、特殊功能寄存

器、4 个并行 I/O 口、1 个串行口、定时器/计数器、中断系统等八个功能部件组成。 CPU 由累加器 A、暂存器 1、2、ALU、PSW 等组成 数据存储器由 RAM 地址寄存器、RAM 单元等组成。 程序存储器指 EPROM 或 ROM。

SFR 指 P0、P1、P2、P3 锁存器、B、DPTR 等。 2.2 综述 MCS51

系列单片机各引脚的作用,并进行分类。 解:(1) 主电源引脚 Vcc:接+5V 电源正端。 Vss::接+5V 电源地端。 (2) 外接晶体引脚

XTAL1:片内反相放大器输入端 XTAL2: 片内反相放大器输出端 (3) 输入/输出引脚 P0.0P0.7:

P0 口的 8 个引脚。在不接片外存储器与不扩展 I/O 接口时,作为准双向输入/输 出接口(在输入时需要附加条件的双向输入输出口,称为准双向 I/O 口)。在接有片外存储器或扩展

I/O 接口时,P0 口分时复用为低 8 位地址总线和双向数据总线。 P1.0P1.7:

P1 口的8 个引脚。可作为准双向 I/O 接口使用。对于 52 子系列,P1.0 与 P1.1 还有 第二种功能:P1.0 可用作定时器/计数器2 的计数脉冲输入端 T2;P1.1 可用作定时器/计数器 2 的

外部控制端 T2EX。 P2.0P2.7;

P2 口的 8 个引脚。一般可作为准双向 I/O 接口;在接有片外存储器或扩展 I/O 接 口且寻址范围超过 256 个字节时,P2 口用为高 8 位地址总线。 P3.0P3.7;

P3 口的 8 个引脚。

① 一般可作为准双向 I/O 接口; ② P3 口的第二功能如表 21 所示。 表 21

引脚 第二功能 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7

http://www.wkfxw.com 文库分享网

RXD (串行输入口) RXD (串行输出口)

INT0 (外部中断 0 请求输入端) INT1 (外部中断 1 请求输入端)

T0 (定时器/计数器 0 计数脉冲输入端) T1 (定时器/计数器 1 计数脉冲输入端) WR (片外数据存储器写选通信号输出端) RD (片外数据存储器读选通信号输出端)

14

2.3 EA 引脚的作用是什么?在下列四种情况下, EA 引脚各应该接何种电平? (1)只有片内 ROM。 (2)只有片外 ROM。

(3)有片内 ROM 和片外 ROM。

(4)有片内 ROM 和片外 ROM,片外 ROM 所存为调试程序。

解: EA /VDD:片外程序存储器选用端。 (1) EA =1。 (2) EA =0。

(3) 若片外 ROM 和片内 ROM 编址不重叠,则EA =1。

(4) 若片外 ROM和片内 ROM 编址重叠,则 访问片内ROM 时EA=1,访 问片外 ROM 时EA=0。 2.4 MCS51

系列单片机的引脚中有多少根I/O 线?它们与单片机对外的地址总线和数据总线之间有 什么关系?其地址总线和数据总线各有多少位?对外可寻址的地址空间有多大? 解:MCS51

系列单片机有 4 个 I/O 端口,每个端口都是 8 位双向口,共占 32 根引脚。在无片外扩 展的存储器的系统中,这 4 个端口的每一位都可以作为双向通用 I/O 端口使用。在具有片外扩展存

储器的系统中,P2 口作为高 8 位地址线,P0 口分时作为低 8 位地址线和双向数据总线,P3 口作为

控制线使用。地址和数据线分别是 16 位和 8 位,对外可寻址的地址空间是 64KB。 2.5 程序计数器的符号是什么?MCS51

系列单片机的程序计数器有几位?它的位置在哪里? 解: 程序计数器的符号是 PC,MCS51

系列单片机的程序计数器有 16 位,为一个专用寄存器。在 CPU 内部。

2.6 何谓程序状态字?它的符号是什么?它的位置在哪里?它各位的含义是什么?为 1、为 0各代表

什么?各在何种场合有用?

解:程序状态字是一个 8 位寄存器,它包含了程序运行的状态信息,它的符号是 PSW。它的位置在

CPU 中。各位含义如下: D7 D6 D5 D4 D3 D2 D1 D0 C AC F0 RS1 RS0 O2 P

(1)进位标志位 C(PSW.7):

作用:在执行某些算术操作类、逻辑操作类指令时,可被硬件或软件置位或清零。

http://www.wkfxw.com 文库分享网

例如 8 位加法运算时,如果运算结果的最高位D7 有进位,则 C=1,否则 C=0; 又如 8 位减法运算时,如果运算结果的最高位D7 有借位,则 C=1,否则 C=0。 (2)辅助进位标志 Ac(PSW.6):

作用:8 位加法运算时,如果低半字节的最高位 D3 有进位,则 Ac=1,否则 Ac=0;8 位减法

运算时,如果 D3 有借位,则 Ac=1,否则 Ac=0。 Ac 在作 BCD 码运算而进行二—十进制调整时有用。 (3)软件标志 F0(PSW.5)

作用:是用户定义的一个状态标志。可通过软件对它置位、或清零。编程时,也常测试其是否

建起而进行程序分支。

15

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

作用:用软件置位或清零,以确定四组工作寄存器中的哪一组工作,它们与各组的对应关系为

RS1 RS0

0 0 0 组(地址从 0007H) 0 1 1 组(地址从 080FH) 1 0 2 组(地址从 1017H) 1 1 3 组(地址从 181FH) (5)溢出标志 OV(PSW.2):

作用:当执行算术运算时,由硬件置位或清零,以指示溢出状态。各种算术指令对该位的影响情

况在指令系统中详细介绍。 (6)奇偶标志 P(PSW.0):

每执行一条指令,单片机都能根据 A 中 1 的个数的奇偶自动令 P 置位或清零:奇为 1,偶为0。

此标志对串行通信的数据传输非常有用,通过奇偶校验可检验传输的可靠性。 2.7 MCS51

系列单片机的内存由哪几部分组成?其编址与访问的规律是怎样的? 解:MCS51

系列单片机内存由程序存储器与数据存储器两个独立的空间。 程序存储器的编址自 0000H 开始,最大可至 FFFFH。MCS51 单片机有 3 种不同的芯片:片内 有掩膜只读存储器的(如 8051、8 052)、片 内有 EPROM的(如 8751)和片内没有只读存储器的(如 8031、

8032),而 ROM 的寻址范围为 64KB,所以片内程序存储器的容量远小于该数,可见如扩展片外存

储器,其裕量是很大的。

ROM 编址规律:程序存储器的编址规律为:先片内、后片外,片内、片外连续,二者一般不作

重叠。根据 PC 的内容进行访问。 片内 RAM 从 00H 开始编址,片外 RAM 从 0000H 开始,部分地址重叠(实际并不完全一样), 若只需扩展少量片外 RAM,容量不超过 256 个单元,则也可以按照 8 位二进制编址,从 00H

http://www.wkfxw.com 文库分享网

开始,

到 FFH 结束。由于访问片内外 RAM 所用的指令不一样,不会引起混淆。 2.8 MCS51

系列单片机片内RAM 有多少单元?有哪些用途?这些用途各占用哪些单元?堆栈的栈 区设在哪里?

解:51 子系列片内 RAM 有 128B 单元,52 子系列片内 RAM 有 256B 单元。 单片机片内 RAM 可分为:工作寄存器区,位寻址区,数据缓冲区三个区域。 (1) 工作寄存器区:00H1FH

单元为工作寄存器区。供用户编程时使用,临时寄存8 位信息。分

为四组: 0 7 R ~ R ,但同时只能有一组参与程序程序的运行,用 RS1,RS0 两位的状态来选择参与

运行的工作寄存器组。 (2) 位寻地址:20H2FH,

对该区的每一位,都有一个位地址,共有 128 个位地址。 (3) 数据缓冲区:30H7FH(

52 子系列为 30H~FFH),作为普通的 RAM 单元使用。 (4) 堆栈栈区一般设在 2FH 以上的单元。 2.9 MCS51

系列单片机在片内集成了哪些主要逻辑功能部件?各个逻辑部件的主要功能是什么? 解:MCS51

单片机在片内集成了中央处理器(CPU)、程序存储器(ROM)、数据存储器(RAM)、 定时器/计数器、并行 I/O 接口、串行 I/O 接口和中断系统等几大单元。

CPU是整个单片机的核心部件,由 运算器和控制器组成。运 算器可以完成算术运算和逻辑运算,

16

其操作顺序在控制器控制下进行。控制器是由程序计数器 PC(Program Counter)、指令寄存器 IR

(Instruction Register)、指令译码器 ID(Instruction Decoder)、定时控制逻辑和振荡器OSC 等电路组 成。CPU 根据 PC 中的地址将欲执行指令的指令码从存储器中取出,存放在 IR 中,ID 对 IR 中的指

令码进行译码,定时控制逻辑在 OSC 配合下对 ID 译码后的信号进行分时,以产生执行本条指令所

需的全部信号。

程序存储器(ROM)用于存储程序、常数、表格等。 数据存储器(RAM)用于存储数据。

8051 内部有两个 16 位可编程序的定时器/计数器 T0 和 T1,均为加 1 计数器。可用于定时和对

外部输入脉冲的计数。

8051 的中断系统主要由中断允许控制器 IE 和中断优先级控制器 IP 等电路组成。可实现对 5 个

中断源的管理。8051 的中断系统主要由中断允许控制器 IE 和中断优先级控制器 IP 等电路组成。其

中,IE 用于控制5 个中断源中哪些中断请求被允许向CPU 提出,哪些中断源的中断请求被

http://www.wkfxw.com 文库分享网

禁止;IP

用于控制 5 个中断源的中断请求的优先权级别。 I/O 接口是 MCS51

单片机对外部实现控制和信息交换的必经之路,用 于信息传送过程中的速度 匹配和增加它的负载能力。可分为串行和并行 I/O 接口。 2.10 8051 单片机的控制总线信号有哪些?各有何作用? 解:独立的控制线一共有 4 条: (1)ALE/ PROG :地址锁存允许/编程线,配合 P0 口引脚的第二功能使用。在访问片外存储器时,

8051CPU在P0.7~P0.0 引脚上输出片外存储器低8位地址的同时在ALE/ PROG 上输出一个高电位 脉冲,用于把这个片外存储器低8位地址锁存到外部专用地址锁存器,以便空出 P0.7~P0.0 引脚线

去传送随后而来的片外存储器读写数据。在不访问片外存储器时,8051 自动在 ALE/ PROG 上输出频

率为 fosc/6 的脉冲序列。该脉冲序列可用作外部时钟源或作为定时脉冲源使用。 (2) EA /Vpp:允许访问片外存储器/编程电源线,可以控制 8051 使用片内 ROM 还是使用片外

ROM。若EA =0,则允许使用片内 ROM;若EA =1则允许使用片外 ROM。 (3)PSEN :片外 ROM 选通线,在执行访问片外 ROM 的指令 MOVC 时,8051 自动在PSEN 上产

生一个负脉冲,用于为片外 ROM 芯片的选通。其他情况下PSEN 线均为高电平封锁状态。 (4)RST/VPD:复位/备用电源线,可以使 8051 处于复位工作状态。

2.11 何谓特殊功能寄存器?8031 有哪些特殊功能寄存器?试按其用途相关联的硬件功能单元(如

CPU、并行 I/O 口、串行 I/O 口、定时器/计数器、中断控制等)进行分类。

解:特殊功能寄存器也称专用寄存器。专用于控制、管理片内算术逻辑部件,并行 I/O 口,串行 I/O

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

除 PC 外,8031 有 18 个专用寄存器,其中 3 个为双字节寄存器,共占用 21 个字节,按其用途

相关联的硬件功能单元可分:P0 口,堆栈指针、数据指针低字节,数据指针高字节,定时器/计数器

/计数器 0 高、低字节,定时器/计数器 1 高、低字节,P1 口,电源控制、串行控制;串行数据缓冲

器,P2 口,中断允许控制,P3 口,中断允许优先级控制,程序状态字,累加器,B 寄存器共 18 个 专用寄存器。

2.12 何谓时钟周期、指令周期、机器周期?针对 MCS51 系列单片机,如采用 12MHZ 晶振,它们 的频率和周期各是什么?

解: 振荡器输出的振荡脉冲经二分频成为内部时钟信号,用作单片机内部各功能部件按序协调工作

http://www.wkfxw.com 文库分享网

的控制信号,其周期称时钟周期。

机器周期:6 个时钟周期构成一个机器周期。

17

指令周期:CPU 执行一条指令的时间。 针对 MCS51

系列单片机,采用 12MHZ 晶振,则振荡周期为 0.167us,时钟周期为 0.333us,

频率为 6MHZ,机器周期为 1us,频率为 1MHZ,指令周期为 1us 到 4us,频率为 1MHZ 到 0.25MHz。

2.13 综述 P0、P1、P2、P3 口各有哪几种功能。

解:这 4 个接口可以并行输入或输出 8 位数据;也可按位使用,即每一根输入/输出线都能独立地

用作输入或输出。四个 8 位并行口的功能各不相同:

P0 口是三态双向口,通常称为数据总线口,因为只有该口能直接用于对外部数据总线的读写操

作,P0 口还用于输出外部数据存储器的低 8 位地址。由于是分时输出,故应在外部加地址锁存器将

地址数据锁存,地址锁存信号用 ALE。

P1 口是专门供用户使用的 I/O 接口,是准双向接口。

P2 口是供系统扩展时作高 8 位地址线用,如果没有系统扩展,例如使用 8051/8751 单片机不扩

展外部存储器时,P2 口也可以作为用户 I/O 线使用。P2 口也是准双向口。

P3 口是双功能口,该口的每一位均可以独立地定义为第一 I/O 功能或第二 I/O 口功能。P3 口的

第二功能如表 21 所示。

2.14 在读回端口数据时,为什么应读锁存器内容,而不宜读引脚电平?

解:假如通过三态门从引脚上读回数据,有时会发生错误。例如用一根口线去驱动一个晶体管的

基极,在向此口线输出 l 时,锁存器 Q=1,但晶体管导通后,引脚上的电平已拉到低电平(0.7V),

从引脚读回数据会错读为 0。

2.15 阐明“准双向口”这一名称所以要加用“准”字的理由。

解:在执行输入操作时,如果锁存器原来寄存的数据 Q=0。那么由于Q =1 将使 V1 导通,引脚被

始终箝拉在低电平上,不可能输入高电平。为此,用作输入前,必须先用输出指令置 Q=1,使 V1

截止。正因为如此 P1 口称为准双向接口。 2.16 8031单片机与开关及LED发光二极管接口电路如2.16题图所示。用 8031单片机P1 口的P1.3P1.0

作为数据输入口,联接开关 K3K0, P1.7P1.4

作为输出口,联接发光二极管 LED3LED0; 编程使开关 K3K0

http://www.wkfxw.com 文库分享网

的状态由 P1.3P1.0 输入,再由 P1.7P1.4

输出,通过发光二极管显示出来,要求开关合上时,二 极管亮,开关断开时,二极管不亮。

+5V

EA

P1.5 P1.6 8031 P1.7 LED1 LED2 LED3 P1.4 +5V P1.0 P1.1 P1.2 LED0 P1.3 K1 K2 K3 K0

2.16 题图

解: ORG 2200H

MOV A,#FFH ;P1 口为输入,先送 1

18

MOV P1,A ;P1 口低 4 位输出 1 LOOP:MOV A,P 1 ;口状态输入 SWAP A ;开关状态到高 4 位

ORL A,#0FH;低 4 位为 1,为下一次输入做准备 MOV P1,A ;开关状态输出 AJMP LOOP ;循环

2.17 电路如 2.17 题图所示,用 8031P1 口的 P1.0、P1.1 作为变量 X、W 的输入端,用 P1.2 作为电

路输出端,并用 LED 来显示输出,P1.3 端传送状态消息。当检测到 P1.3 为低电平时,CPU 开始运

算 D = (X ù W) ù ( X ú W ) ,并把结果送 P1.2 输出显示,然后重新开始检测 P1.3 状态信息,试编

写完成上述要求的程序。 EA +5V

X W

http://www.wkfxw.com 文库分享网

P1.0 P1.1 8031 P1.3 Y P1.2

2.17 题图

解:参考程序如下: ORG 0000H LJMP MAIN ORG 0100H

MAIN: MOV P1,#08H LOOP: MOV C,P1.3 JC LOOP MOV P1,#03H MOV C,P1.0 ANL C,P1.1 CPL C MOV 00H,C MOV C,P1.0 ORL C,P1.1 ANL C,00H MOV P1.2,C SJMP MAIN END

2.18 第 2.18 题图示电路中,X1、X2、X3 是三个故障源,当系统无故障时,X1、X2、X3 均为低电

19

平,对应的三个显示灯全灭;当某部分出现故障时,其对应的输入端由低电平变为高电平,从而引

起 51单片机中断,中 断服务程序的任务是判定故障,并 点亮对应的发光二极管,发 光二极管 LED1~

LED3 对应三个输入端 X1~X3。试编程。 +5V

EA

P1.3 P1.4 8031 P1.5 INT0 + X1 X2 X3 LED1

http://www.wkfxw.com 文库分享网

LED2 LED3 P1.0 P1.1 P1.2

2.18 题图

解:参考程序如下: ORG 0000H LJMP MAIN ORG 0003H LJMP INT0SER ORG 0100H

MAIN: MOV P1,#0FFH SETB IT0 SETB EX0 SETB EA

LOOP: AJMP LOOP

INT0SER: JNB P1.0,L1 CLRP1.3

L1: JNB P1.1,L2 CLRP1.4

L2: JNB P1.2,L3 CLRP1.5 L3: RET END

2.19 设某单片机应用系统的 P1 口连接如第 2.19 题图所示,要求根据 K0 的合断情况决定 D1、D0

的点亮。如果 K0 合上,D0 点亮,如果 K0 断开,D1 点亮。试编程实现之。 解:

ORG 0000H LJMP MAIN ORG 0100H

MAIN: MOV P1,#0C0H LOOP: JB P1.7,ELSE CLRP1.0

20

AJMP LOOP

ELSE: CLRP1.1 AJMP LOOP END +5V +5V

EA

K0

http://www.wkfxw.com 文库分享网

D0 D1 P1.7 P1.1 P1.0 8031

第 2.19 题图

2.20 设某单片机应用系统的 P1 口连接如第 2.20 题图所示,问:

+5V +5V

EA

K0 K1 D0 D1 P1.7 P1.6 P1.1 P1.0 8031

第 2.20 题图

(1) 执行第一条指令后,哪些指示灯会亮? (2) 第二条指令的用处?

(3) 执行下列指令到最后,(A)=?要求写出分析过程。 MOV P1,#0EH ORL P1,#C0H MOV A,P1 ANL A,#C0H

解: 1. D1 会亮。

2.为 P1.7、P1.6 的输入做准备。 3.A 的内容为 80H。 2.21 MCS51

怎样实现上电复位与操作复位?并请综述各专用寄存器复位后的状态。 解:与其他计算机一样,MCS51

单片机系统有上电复位和操作复位两种方法。所谓上电复位,是

21

指计算机上电瞬间,要在 RST 引脚上出现宽度大于 10ms 的正脉冲,使计算机进入复位状态。操作

复位指用户按下“复位”按钮使计算进入复位状态。

复位是靠外部电路实现的。2.21 题图是上电复位及按钮复位的一种实用电路。

上电时+5V 电源立即对单片机芯片供电,同时经R 对 C3 充电。C3 上电压建立的过程就是负脉

冲的宽度,经倒相后,RST 上出现正脉冲使单片机实现了上电复位。按钮按下时 RST 上同样出现

http://www.wkfxw.com 文库分享网

高电平,实现了操作复位。在应用系统中,有些外围芯片也需要复位,如果这些芯片复位端的复位

电平与单片机一致,则可以与单片机复位脚相连。因此,非门在这里不仅起到了倒相作用,还增大

了驱动能力。电容 C1、C2 起滤波作用,防止干扰窜入复位端产生误动作。 10 K W

C 2 C 3 C 1

CC

V

100 pF 10μ F 10μ F

2.21 题图 复位电路

各专用寄存器复位后的状态 如下表所示:

22

第 3 章 MCS51 系列单片机的指令系统

3.1 MCS51

系列单片机的寻址方式有哪几种?请列表分析各种寻址方式的访问对象与寻址范围。

解:①立即寻址、②寄存器寻址、③寄存器间接寻址、④直接寻址、⑤基址寄存器加变址寄存器间

接寻址、⑥相对寻址、⑦位寻址。 寻址方式 访问对象 寻址范围 立即寻址 立即数 ———— 寄存器寻址

工作寄存器 R0~R7,累加器 A 、寄存器 B , 数据指针 DPTR,位处理器 C

00H~1FH,E0H,F0H、82H、 83H

寄存器间接寻址 RAM 单元 内部 RAM 及外部扩展的 64KRAM

直接寻址 ROM 和 RAM 内部 RAM 00H7FH, SFR

80HFFH, ROM64KB

变址寻址 ROM ROM 0000HFFFFH 相对寻址 ROM ROM 0000HFFFFH 位寻址 位寻址区 内 RAM 20H2FH 中的可寻

址位,SFR 中的可寻址位

3.2 要访问片内 RAM,可有哪几种寻址方式 ?

解:对于 51 系列,要访问片内 RAM,有间接寻址、直接寻址、位寻址。52 子系列访问片

http://www.wkfxw.com 文库分享网

内低 128

个字节有直接寻址、位寻址、间接寻址,高 128 字节有间接寻址。 3.3 要访问片外 RAM,可有哪几种寻址方式 ? 解:访问片外 RAM 有寄存器间接寻址方式。 3.4 要访问 ROM,可有哪几种寻址方式 ?

解:要访问 ROM 有直接寻址、变址寻址、相对寻址

3.5 试分别对 51 子系列和 52 子系列,说明 MOV A,direct 指令与 MOV A,@Rj 指令的访问范围。

解:MOV A,direct 指令中 direct 对于 51 子系列的访问范围为内 RAM 中的低 128B 单元,从 00H

到 7FH,访问 SFR 的范围是从 80H 到 FFH;52 子系列的访问范围与 51 子系列的访问范围相同。

MOV A,@Rj 指令对于 51 子系列的访问范围为内 RAM 的 128B 单元,从 00H 到 7FH,对于

52 子系列的访问范围为片内 RAM 从 00H 到 FFH。

3.6 传送指令中有哪几小类是访问 RAM 的?哪几个类是访问 ROM 的,CPU 访问 ROM 多不多?

什么时候需要访问 ROM?

解: 访问 RAM 的有:以累加器 A 为一方的传送指令,不以累加器为一方的传送指令,用立即数置

数的指令,访问片外 RAM 的传送指令, 进栈出栈指令,交换指令。 访问 ROM 的有: 基址寄存器加变址寄存器间址指令

23

因为 ROM 是只读存储器,用作程序存储器,已事先存入各种程序,常数、表格等,CPU 访问

ROM 不多,当执行程序,程序转移以及用户访问时需要访问 ROM。 3.7 区分下列指令的不同功能: ⑴ MOV A ,#24H 与 MOV A,24H ⑵ MOV A ,R0 与 MOV A, @R0 ⑶ MOV A, @R0 与 MOVX A,@R0

解:⑴ 前者是将立即数 24H 送入 A 中,后者是将 24H 单元的内容送入 A 中. (2) 前者将 R0 中的内容送入 A 中,后者是将以R0 中的内容为地址所在单元的内容送入 A 中.

(3) 前者是将片内 RAM 以 R0 中的内容为地址所在单元的内容送入 A 中,后者是将片外 RAM

的以 R0 中的内容为地址所在单元的内容送入 A 中.

3.8 设片内 RAM30H 单元的内容为 40H,设片内 RAM40H 单元的内容为 10H,片内 RAM10H 单

元的内容为 00H,(P1)=0CAH,请写出下列指令执行后的结果。 MOV R0, #30H MOV A, @R0 MOV R1, A MOV B , @R1 MOV @R0 , P1

http://www.wkfxw.com 文库分享网

MOV P3 , P1 MOV 10H ,#20H MOV 30H, 10H

解: MOV R0, #30H ; R0←30H MOV A, @R0 ; A←40H MOV R1, A ; R1←40H MOV B , @R1 ; B←10H

MOV @R0 , P1 ; 30H ←0CAH MOV P3 , P1 ; P3←0CAH MOV 10H ,#20H ; 10H←20H MOV 30H, 10H ; 30H←20H

3.9 已知:(A)=35H,(R0)=6FH,(P1)=(90H)=FCH,(SP)=C0H,试写出下列指令的执行结果。 (1) MOV R6,A (2) MOV @R0,A (3) MOV A,#90H (4) MOV A,90H (5) MOV 80H,#81H (6) MOVX @R0,A (7) PUSH A (8) SWAP A (9) XCH A,R0

24

解: (1)MOV R6, A ; (R6)=35H (2)MOV @R0, A ; (6FH)=35H (3)MOV A, #90H ; (A)=90H (4)MOV A, 90H ; (A)=FCH (5)MOV 80H, #81H; (80H)=81H (6)MOV @R0, A ; (6FH)=35H

(7)PUSH A ; (SP)=C1H,(C1H)=35H (8)SWAP A ; (A)=53H

(9)XCH A, R0 ; (A)=6FH,(R0)=35H

3.10 已知:(A )=02H,(R 1)=7FH,(D PTR)=2FFCH,片 内 RAM(7FH)=70H,片 外 RAM(2FFEH)=11H,

ROM(2FFEH)=64H,试分别写出下列指令的执行结果。 (1) MOV A ,@R1 (2) MOVX @DPTR,A (3) MOVC A,@A+DPTR (4) XCHD A,@R1

解:(1) (A)=70H (2) 片外 RAM(2FFCH)=02H

(3) (A)=64H (4) (A)=00H 片内 RAM(7FH)=72H 3.11 已知:(A)=78H,(R1)=78H,(B)=04H,C=1,片内 RAM(78H)=DDH,片内 RAM(80H)=6CH, 试分别写出下列指令的执行结果(如涉及标志位,也要写出)。 (1) ADD A ,@R1 (2) ADDC A,78H

http://www.wkfxw.com 文库分享网

(3) SUBB A,#77H (4) INC R1 (5) DEC 78H (6) MUL AB (7) DIV AB

(8) ANL 78H,#78H (9) ORL A,#OFH (10) XRL 80H,A

解:(1)(A)=55H (PSW)=11×××1×0 (2)(A)=56H (PSW)=11×××1×0 (3)(A)=00H (PSW)=00×××0×0

25

(4)(R1)=79H (5)(78H)=DCH

(6)(BA)=01E0H, C=1 OV=1 (7)(B)=00H,(A)=1EH (8)(78H)=58H (9)(A)=7FH (10)(80H)=14H

3.12 请对下列各组数分别计算“与”、“或”、“异或”的结果: (1) 10011010B 和 00001111B (2) 11010011B 和 01011010B (3) 11001100B 和 00110011B (4) 10101010B 和 11111111B

解:(1)结果分别为 00001010B 10011111B 10010101B (2)结果分别为 01010010B 11011011B 10001001B (3)结果分别为 00000000B 11111111B 11111111B (4)结果分别为 10101010B 11111111B 01010101B

3.13 为达到下列要求,请说明应采用何种逻辑操作,采用什么操作数,要求不得改变各未涉及位的 内容。

(1) 使累加器的最低位置1 (2) 清除累加器的高四位 (3) 使 A.2 和 A .3 置 1。

(4) 清除 A.3、A .4、 A.5、A .6

解:(1)逻辑或操作 操作数:00000001B (2)逻辑与操作 操作数:00001111B (3)逻辑或操作 操作数:00001100B (4)逻辑与操作 操作数:10000111B

3.14 写出下列各条指令的机器码,并逐条写出依次执行每一条指令后的结果和 PSW 的内容:

(1) CLR A

(2) MOV A, #9BH (3) MOV B,#0AFH

http://www.wkfxw.com 文库分享网

26

(4) ADD A,B

解: (1)机器码 E4H ;(A)=0 (2)机器码 749BH ;(A)=9BH (3)机器码 75F0AFH ;(A)=AFH

(4)机器码 25F0H ;(A)=4AH;(PSW)=11XXX1X1B

3.15 要选用工作寄存器 3 组,请采用三种不同的指令实现之。 解: (1) SETB PSW.4 SETB PSW.3

(2) ORL PSW,#18H (3) MOV PSW,#18H

3.16 列举三种能使累加器 A 内容清零的指令,并比较其优缺、点。 解: (1) ANL A,#00H (2) MOV A,#00H (3) CLR A

3.17 回答问题:

(1) 算术操作类指令对标志位的影响。 (2) 逻辑操作类指令对字节内容的修改。

解:(1)算术操作指令的执行将影响特殊功能寄存器中状态寄存器 PSW 的 3 个标志位: C:(PSW.7)进位标志;Ac:(PSW.6)辅助进位标志;OV:(PSW.2)辅助进位标志 3 个标志除特别指出外,指令服从以下规则:

① 操作结果在最高位有进位输出(加法时)或借位输入(减法时),C=1;否则;C=0。 ② 操作结果的低 4 位有进位输出( 加法时)或 有向高4 位的借位( 减法时),A c=1;否 则;A c=0。

③ 溢出标志OV满足逻辑关系式OV=C6⊕ C 7; C6 为加法时,累加器 A 的 D6 位向 D7 产生的进位,或减法时累加器 A 的 D6 位向 D7 产生的

借位,有进位或借位时,C6=1;

C7 为加法时,累加器 A 的 D7 位向更高位产生的进位,或减法时累加器 A 的 D7 位向更高位产

生的借位,有进位或借位时,C7=1;

OV 标志位常用于加减指令对带符号数做补码加、减运算时,(OV)=1 表示加、减运算的结果超出

了 A 所能表示的带符号数的范围(128~ 127)。

(2)①若要对内部的某几位清零,而其它位保持不变,可以选用 ANL direct,#data 指令,在需

27

要清零的位上对应的 data 的相应位清零。

② 若要对内部的某几位置 1 可以选用ORL direct,#data 指令,在需要置 1 的位上对应的 data

的相应位置 1。

③ 若要对内部的某几位求反可以选用XRL direct,#data 指令,在需要求反的位上对应的 data

http://www.wkfxw.com 文库分享网

的相应位置 1。若要对内部 RAM 某单元求反可以选用 XRL direct,#0FFH。

3.18 要将片内 RAM 0FH 单元的内容传送去专用寄存器 B,对 0FH 单元的寻址可有三种方法:

(1) R 寻址; (2) R 间址;

(3) Direct 寻址;

请分别编写出相应程序,比较其字节数、机器周期数和优缺点。 解: (1) MOV R0,0FH MOV B,R0

(2) MOV @R0,0FH MOV B,@R0 (3) MOV B,0FH

(1) 占四个字节数,四个机器周期数;(2) 占四个字节数,四个机器周期数;(3) 占三个字节

数,三个机器周期数;所以第三种方法最好。

3.19 设(R0)=7EH, (DPTR)=10FEH,片 内 RAM 7EH 单元的内容为 0FFH;7F单元的内容为 38H,

试为下列程序的每条指令注释其执行结果。 INC @R0 INC R0 INC @R0 INC DPTR INC DPTR INC DPTR

解: INC @R0;将 7EH 单元的内容加1,即 7EH←00H INC R0 ;R0←7FH INC @R0 ;7FH←39H INC DPTR ;DPTR←10FFH INC DPTR ;DPTR←1100H INC DPTR ;DPTR←1101H

28

3.20 试编程:引用“与”运算,判断某 8 位二进制数是奇数还是偶数

解: 设该 8 位二进制数放在累加器 A 中,如果是奇数,将 F0 标志置 1,如果是偶数,将 F0 标志 清 0。 ORG 2000H

START:MOV R0,A ANL A,#01H JZ LOOP MOV A,R0 SETB PSW.5 SJMP HERE

LOOP: MOV A,R0 CLR PSW.5

http://www.wkfxw.com 文库分享网

HERE: SJMP HERE

3.21 试编程:引用“或”运算,使任意 8 位二进制数的符号位必为“1”。 解: ORG 2000H START:ORL A,#80H

3.22 请思考:引用“异或”运算,怎样可使一带符号数的符号位改变、数据位不变:怎样可使该数必 然变“0”。

解: 将该数与 80H 相异或,就可以改变其符号位,而数值位保持不变。 将该数与其本身相异或,就可以使该数必然为 0。 3.23 要选择工作寄存器组,可有几种编程办法? 解:可以采用如下三种办法: (1) SETB PSW.4 SETB PSW.3

(2) ORL PSW,#18H (3) MOV PSW,#18H

3.24 设 ROM、片内 RAM、片外 RAM 各有关单元的内容示如下图,问执行下列程序段后(A) =?

0000 AJMP 030H ORG 0030H

0030 MOV R0,#32H

29

MOV A,@R0 MOV R1,A MOVX A,@R1 MOVC A,@A+DPTR 30H 33H 32H 31H 30H 31H 32H 33H

片内RAM 30H 33H 32H 31H 32H 30H 33H 31H 片外RAM

0030H

http://www.wkfxw.com 文库分享网

0033H 0032H 0031H 30H 33H 31H 32H ROM

解: (A)=30H

3.25 若在片内 RAM30H 单元中有二位压缩的 BCD 码 95H,问执行下列程序后,片内 RAM30H 单

元的内容是什么?31H、32H 的内容又是什么?并写出 BCD 码十进制调整的过程。 MOV R0,#30H MOV A,@R0 ANL A,#0FH MOV R3,A MOV A,@R0 SWAP A

ANL A,#0FH ADD A,R3 DA A

MOV @R0,A MOV R3,A INC R0

ANL A,#0FH MOV @R0,A INC R0 MOV A,R3 ANL A,#0F0H SWAP A MOV @R0,A RET

解: (30H)=14H;(31H)=04H;(32H)=01H;

30

第 4 章 MCS51 汇编语言程序设计

4.1 请解释下列名词:

机器码 助记符 操作码 操作数 源程序 目标程序 汇编程序 汇编语言 汇编语言程 序 汇编指令 汇编 机器汇编 人工汇编 解:机器码 二进制代码形式的指令

操作码 用指令的英文缩写表示,便于辨识指令的功能,也便于记忆,称为助记符。

操作数 是参与该指令操作的操作数或操作数所在的地点(寻址方式),有时,用一个表达式

http://www.wkfxw.com 文库分享网

来表

示一个操作数,例如#TAB 十 1。 源程序 汇编语言程序与高级语言程序 目标程序 二进制代码形式的程序 汇编程序 机器汇编时用到的软件

汇编语言 用缩写的英文单词表示操作码,用字母、数字表示操作数的语言 汇编语言程序 用汇编指令书写的程序

汇编指令 用缩写的英文单词表示操作码,用字母、数字表示操作数的指令 汇编 将汇编语言源程序翻译成目标程序的过程 机器汇编 由机器完成汇编工作

人工汇编 由编程人员手工完成汇编工作。

4.2 经过汇编后,下列各条语句的标号将是什么数值? ORG 2000H TABLE: DS 10

WORD: DB 15,20,25,30 FANG: EQU 1000H BEGIN: MOV A,R0

解:TABLE=2000H;WORD=200AH;FANG=1000H;BEGIN=200EH

4.3 下列程序段经过汇编后,从 2000H 开始的各有关存储单元的内容将是什么? ORG 2000H TAB: DS 5 DB 10H,10 DW 2100H ORG 2050H

31

DW TAB

DB “WORK”

解:从 2000H 到 2004H 单元内容为预留的 (2005H)=10H ;(2006H)=0AH (2007H)=00H ;(2008H)=21H (2050H)=00H ;(2051H)=20H (2052H)=57H ;(2053H)=4FH (2054H)=52H ;(2055H)=4BH

4.4 下列程序段经过汇编后,从 1000H 开始的各有关存储单元的内容将是什么? ORG 1000H

TAB1: EQU 1234H TAB2: EQU 3000H DB “START” DW TAB1,TAB2

解: (1000H)=53H ;(1001H)=54H (1003H)=52H ;(1004H)=54H (1005H)=34H ;(1006H)=12H (1007H)=00H ;(1008H)=30H 4.5 有程序如下:

http://www.wkfxw.com 文库分享网

CLR C CLR RS1 CLR RS0 MOV A,#38H MOV R0,A MOV 29H,R0 SETB RS0 MOV R1,A MOV 26H,A MOV 28H,C

要求:(1) 区分哪些是位操作指令?哪些是字节操作指令

32

(2) 写出程序执行后,片内 RAM 有关单元的内容。 (3) 译成机器码。

(4) 按汇编语言程序的标准格式书写,要求有各条指令的存放地址和必要的注释。 解: (1) 位操作指令为 CLR、SETB 指令,再加上MOV 28H,C

(2) (C)=0;(RS1)=0;(RS0)=1;(A)=38H;(R0)=38H;(29H)=38H;(R1)=38H;(26H)=38H; (28H)=0

(3)、(4)略。

4.6 试编程: 将两个四位二进制数并存与一个字节。

解: 设两个四位二进制数分别存放于 R0 和 R1 的低半字节,合并后的结果存于 R2 中。 ORG 2000H

START:MOV A,R1 SWAP A ORL A,R0 MOV R2,A SJMP $

4.7 试编程: 有两个双字节压缩的 BCD 码数相加,设这两待加数分别按先低后高原则存放在 30H、

31H 和 40H、41H 单元,和要求放回 30H、31H 单元。 解: ORG 0050H

START:MOV R0,#30H MOV A,@R0 ADD A,40H DA A

MOV @R0 ,A INC R0 MOV A,@R0 ADDC A,41H DAA

MOV @R0 ,A SJMP $ END START

4.8 试编程:将累加器 A内容低四位送片外 RAM 7AH 单元,高 4位送片外 RAM 7BH单元,

http://www.wkfxw.com 文库分享网

7 AH、

33

7BH 单元的高 4 位均清零。 解: ORG 0050H START:MOV 7CH,A ANL 7AH,#0FH MOV 7AH,A MOV A,7CH ANL A,#0F0H SWAP A

MOV 7BH ,A SJMP $ END START

4.9 试编程: 将片内 RAM 50H、51H 单元二个无符号数中较小的数存与 60H 单元。 解: ORG 2000HH START:CLR C MOV A,50H SUBB A,51H JC LESS

MOV 60H ,51H SJMP ELSE

LESS: MOV 60H,50H ELSE:

4.10 试编程: 将片内 RAM 60H~69H 单元中的十个数相加,和的低 8 位存入 7EH,高 8 位存入 7FH。

解: ORG 2000H

START:MOV 7FH,#00H MOV R1,#09H MOV R0,#60H MOV A,@R0 INC R0

LOOP: ADD A,@R0 JNC LP1 INC 7FH

34

LP1: INC R0 DJNZ R1,LOOP MOV 7EH,A DONE:

4.11 试编程: 统计从片内 RAM 60H 单元起所存 60 个数中“0”的个数,并存入工作寄存器 R7。

解: 按照题意看,本题所用单片机是 52 子系列机型,符合题意要求的程序为: ORG 2000HH

http://www.wkfxw.com 文库分享网

START:MOV R7,#00H MOV R1,#60 MOV R0,#60H

LOOP: MOV A,@R0 JNZ NPLS INC R7

NPLS: INC R0 DJNZ R1,LOOP DONE:

4.12 试编程:将 ROM 中自 2000H 单元起的 100 个数,按序移至片外 RAM 自 2080H 单元起的内 存区间去。 解: ORG 2000H

START:MOV DPTR,#2000H MOV R1,#64H MOV R2,#0

LOOP: MOV A,R2 MOVC A,@A+DPTR MOV R3,A MOV A,#80H ADD A,R2 MOV DPL,A MOV A,R3 MOVX @DPTR,A INC R2

MOV DPL,#0

35

DJNZ R1,LOOP DONE:

4.13 试编程:将 ROM中以 TAB 为初址的 32个单元的内容依次传送到片外 RAM以 00H为初址的

区域去(规定用查表指令)。 解: ORG 2000HH

START:MOV DPTR,#TAB MOV R0,#00H MOV R2,#20H LOOP: CLR A MOVC A,@A+DPTR MOVX @R0,A INC DPTR INC R0

DJNZ R2,LOOP DONE: SJMP DONE 4.14 阅读下列程序,

http://www.wkfxw.com 文库分享网

(1)说明该程序的功能。 (2)填出所缺的机器码。

(3)试修改程序,使片内 RAM 的内容达到右下图所示的结果。 7A MOV R2,#0AH MOV R0,#50H E4 CLR A

E6 LOOP: MOV @R0,A 08 INC R0

DA DJNZ R2,LOOP DONE:

解:(1)将片内 RAM 自 50H 单元起的 10 个单元清零。 (2) 7A 0A 78 50 E4 F6

36

08 DA FC

(3)在 MOV @R0,A 指令后添一条 INC A 指令。 4.15 阅读下列程序,并要求: (1) 说明程序的功能。

(2) 写出涉及的寄存器及片内 RAM 单元的最后结果。 MOV R0,#40H MOV A,@R0 INC R0 ADD A,@R0 INC R0 MOV @R0,A CLR A

ADDC A,#0 INC R0 MOV @R0,A

已知(40H)=98H,(41H)=AFH。

解:(1)(43H)、(42H)←(40H)+(41H)

(2) A 的内容为 01H,R0 的内容为 43H;C=1。

片内 RAM42H 单元的内容为 47H,43H 单元的内容为 01H。 4.16 阅读下列程序,并要求: (1) 说明程序的功能。

(2) 写出涉及的寄存器及片内 RAM 单元的最后结果。 MOV A,61H MOV B,#02H MUL AB ADD A,62H MOV 63H,A

http://www.wkfxw.com 文库分享网

CLR A ADDC A,B MOV 64H,A

已知(61H)=F2H,(62H)=CCH

37

解:(1) 将片内 RAM61H 单元的内容左移一位与 62H 的内容相加,将结果的高 8 位存入 64H、低 8 位存入 63H。

(2) A 的内容为 02H,63H 的内容为 B0H;64H 的内容为 02H。 4.17 已知(R3)=FBH,(R4)=64H,阅读下列程序,并要求: (1) 说明程序的功能。

(2) 写出涉及的寄存器及片内 RAM 单元的最后结果。 CLR C MOV A,R3 RRC A MOV R3,A MOV A,R4 RRC A MOV R4,A

解:(1) 程序功能:实现16 位数带进位位循环右移一位。 (2) (R3)=7DH,(R4)=B2H,C=0。 4.18 阅读下列程序,并要求: (1) 说明程序的功能。

(2) 写出涉及的寄存器及片内 RAM 单元的最后结果。 ORG 1000H

ABS: MOV R0,#38H MOV R1,#48H MOV R2,#06H

LOOP: MOV A,@R0 JNB A.7,NEXT CPL A SETB A.7 INC A

NEXT: MOV @R1,A INC R0 INC R1

DJNZ R2,LOOP DONE:

38

解:(1) 片内 RAM 自 38H 单元起 6 个单元的内容分别取补后,依次存放到片外 RAM 自 48H 单元起

的 6 个单元的内容不变;

(2)片内 RAM 自 38H 单元起 6 个单元的内容不变;

片外 RAM 自 48H 单元起 6 个单元的内容依次为:(48H)=48H,(49H)=8EH,(4AH)=FFH,

http://www.wkfxw.com 文库分享网

(4BH)=D8H,(4CH)=00H,(4DH)=BCH。

39

第 5 章 MCS51 的中断系统

5.1 请列举 MCS51

系列单片机的中断源和中断申请方法。 解:51 子系列有五个中断源: (1)外部中断 0、1

输入/输出设备的中断请求,掉电、设备故障的中断请求等都可以作为外部中断源,从引脚

INT0或INT1输入。外 部中断请求INT0、INT1有两种触发方式:电 平触发及跳变触发,

由 TCON

的 IT0 位及 IT1 位选择。

IT0(IT1)=0 时INT0 或INT1为电平触发方式,当引脚INT0 或INT1 上出现低电平时就向 CPU 申请中断,CPU 响应中断后要采取措施撤消中断请求信号,使INT0 或INT1恢复高电平。

IT0(IT1)=1 时为跳变触发方式,当 INT0或INT1引脚上出现负跳变时,该负跳变经边沿检测

器使 IE0(TCON.1 )或 IE1(TCON.3 )置 1,向 CPU申请中断。C PU响应中断后由硬件自动清除 IE0、

IE1。CPU 在每个机器周期采样INT0 、INT1,为了保证检测到负跳变,引脚上的高电平与低电平

至少应各自保持 1 个机器周期。 (2). 定时器/计数器 0、1 溢出中断

定时器/计数器计数溢出时,由硬件分别置 TF0=1 或 TF1=1,向 CPU 申请中断。CPU 响应

中断后,由硬件自动清除 TF0 或 TF1。 (3). 串行接口中断

串行接口的中断请求由发送或接收所引起。串行接口发送了一帧信息,便由硬件置 TI=1、向

CPU 申请中断。串行接口接收了一帧信息,便由硬件置 RI=1,向 CPU 申请中断。CPU 响应中断

后必须用软件清除 TI 和 RI。

52 子系列有 6 个中断源:增加了定时器/计数器 2 中断请求。 5.2 MCS51

单片机响应外部中断的典型时间是多少?在哪些情况下,C PU将推迟对外部中断请求 的响应?

解:响应外部中断的典型时间是 38 个机器周期

当遇到下列三种情况之一时,CPU 将推迟对外部中断请求的响应: (1)CPU正在处理同级的或更高优先级的中断。

(2)所查询的机器周期不是所当前正在执行指令的最后一个机器周期。 (3)正在执行的指令是 RETI 或是访问 IE 或 IP 的指令。

http://www.wkfxw.com 文库分享网

5.3 中断服务子程序返回指令 RETI 和普通子程序返回指令 RET 有什么区别?

解:指令 RETI 与指令 RET 的差别是: RETI 指令执行完毕,把响应中断时所置“1”的优先级状态触

发器清“0”,而 RET 指令则没有这个动作,其它过程的都是相同的。

40

第 6 章 MCS51 的定时器/计数器

6.1 请归纳 MCS51

系列单片机的定时器/计数器共有哪些用途,并说明其具体用法。 解:定时器/计数器是 MCS51

单片机的重要功能模块之一。在检测﹑控制及智能仪器等应用中,

常用定时器作实时时钟,实现定时检测、定时控制。还可用定时器产生毫秒宽的脉冲,驱动步进电

动机一类的电气机械。计数器主要用于外部事件的计数。 具体用法略。

6.2 综述定时器/计数器 0、1 四种工作方式的工作特征与用法。

解:定时器/计数器 0、1 有四种工作方式,工作特征与用法为:方式 0;13 位定时器/计数器,

方式1;16位定时器/计数器,方式2;具有自动重装初值的8位定时器/计数器,方式3;定时器/计数

器0分为两个8位定时器/计数器,定时器/计数器1在此方式下无意义。

6.3 8051单片机内部有几个定时器/计数器?它们是由哪些特殊功能寄存器组成?

解: 8051单片机片内设有2个定时器/计数器:定时器/计数器T0和定时器/计数器T1,T0由TH0、

TL0组成,T1由TH1、TLl组成。T0、T1由特殊功能寄存器TMOD、TCON控制。 6.4 定时器/计数器的4种工作方式如何设定? 解: 用M1、M0两位的状态来设定。 6.5 说明 MCS51

系列单片机定时器/计数器 0、1 的结构与工作原理。

解:结构:定时器/计数器 0、1 由加法计数器、TMOD 寄存器、TCON 寄存器等组成。 定时器/计数器的核心是 16 位加法计数器,用特殊功能寄存器 TH0(8CH)、TL0(8AH)及 THl(8DH)、TLl(8BH)表示。TH0、TL0 是定时器/计数器 0 加法计数器的高 8 位和低 8 位,THl、

TLl 是定时器/计数器 1 加法计数器的高 8 位和低 8 位。 工作原理:作计数器用时,加法计数器对芯片引脚 T0(P3.4)或 T1(P3.5)上输入的脉冲计数。每输

入一个脉冲,加法计数器增加1。加法计数溢出时可向 CPU 发出中断请求信号。

作定时器用时,加法计数器对内部机器周期脉冲 Tcy 计数。由于机器周期是定值,所以对 Tcy

的计数也就是定时,如 Tcy=1us,计数值 100,相当于定时 100us。

加法计数器的初值可以由程序设定,设置的初值不同,计数值或定时时间就不同。在定时器/

http://www.wkfxw.com 文库分享网

计数器的工作过程中,加法计数器的内容可用程序读回 CPU。 TMOD 用来选择定时器/计数器 0、1 的工作方式,低 4 位用于定时器/计数器 0,高 4 位用于

定时器/计数器 1。其值可用程序决定。

TCON 高 4 位用于控制定时器 0、1 的运行,低 4 位用于控制外部中断,与 定时器/计数器无关。

6.6 定时器/计数器 0 已预置为 FFFFH,并选定用方式 1 的计数器方式,问此时定时器/计数器 0 的

实际用途将是什么?

解:因为此时定时器/计数器并不用于定时或计数,只要随机外来一个脉冲即可以溢出,向 CPU 申

请中断,故这一内部中断源实际上已经成为外部中断源使用。

6.7 定时器/计数器 0 如用于下列定时,晶振为 12MHz,试为定时器/计数器 0 编制初始化程序:

(1) 50ms; (2) 25ms。

解:(1) 由于 Tcy=1us,故有 T=(65536x) Tcy=(65536x) ×1us=50ms

得 X=15536=3CB0H

41

即 TH0=3CH,TL0=B0H ORG 2000H

START:MOV TH0,#3CH MOV TL0,#B0H MOV TMOD,#01H SETB TR0

(2) 由于 Tcy=1us,故有 T=(65536x) Tcy=(65536x) ×1us=25ms

得 X=40536=9E58H 即 TH0=9EH,TL0=58H ORG 2000H

START:MOV TH0,#9EH MOV TL0,#58H MOV TMOD,#01H SETB TR0

6.8 定时器/计数器 0 已预置初值为 156,且选定用方式 2 的计数器方式,现在 T0 引脚上输入周期

为 1ms 脉冲,问:

(1) 此时定时器/计数器 0 的实际用途是什么? (2) 在什么情况下,定时器/计数器 0 溢出? 解:(1) 实际用作定时器,但采用外部时钟脉冲

http://www.wkfxw.com 文库分享网

(2) 满100ms 定时器/计数器 0 将溢出。

6.9 设 fosc=12MHz,定时器/计数器 0 的初始化程序中断服务程序如下: ;主程序

MOV TH0,#0DH MOV TL0,#0D0H MOV TMOD,#01H SETB TR0

;中断服务程序

000B MOV TH0,#0DH MOV TL0,#0D0H RETI

问: (1) 该定时器/计数器工作于什么方式? (2) 相应的定时时间或计数值是多少?

(3) 为什么在中断服务程序中要重置定时器/计数器的初值? 解: (1) 工作于方式 1,定时器方式 (2) 定时时间为(655360DD0H) ×1us=62000us=62ms;

42

(3) 说明该单片机应用系统需要定时器/计数器 0 反复定时工作,所以必须对定时器/计数器重

复置初值,以供再次投入定时计时。

6.10 使用一个定时器,如何通过软硬结合方法实现较长时间的定时?

解: 设定好定时器的定时时间,采用中断方式用软件设置计数次数,进行溢出次数累计,从而得到

较长的时间。

6.11 请编写两段程序,分别用指令延时法和定时器定时 10ms,设晶振为 12MHz。 解:指令延时法:计算过程见课本 P122 例 317, 注释部分为每条指令的机器周期数。 DELAYl:MOV R1,#65H ; 1 DL2: MOV R2,#18H ; 1 DLl: NOP ; 1 NOP ; 1

DJNZ R2,DL1 ; 2 DJNZ R1,DL2 ; 2 RET ; 2

选用 T0 方式 1 定时 10ms , 初值计算 : fosc=12MHz , 机器周期为 1μs 。 X = 21610×103/ 1=6553610000=

55536=D8F0H,即有 TH0=D8H,TL0=F0H。程序为: MOV TMOD,#01H MOV TH0,#0D8H MOV TL0,#0F0H SETB TR0 SJMP $

http://www.wkfxw.com 文库分享网

6.12 设晶振为 12MHz, 请编写两段程序, 分别用指令延时法和定时器实现 30ms 延时。 解:指令延时法:计算过程见课本 P122 例 317, 注释部分为每条指令的机器周期数。 DELAYl:MOV R3,#03H DL3: MOV R1,#65H ; 1 DL2: MOV R2,#18H ; 1 DLl: NOP ; 1 NOP ; 1

DJNZ R2,DL1 ; 2 DJNZ R1,DL2 ; 2 DJNZ R3,DL3; 2 RET ; 2

选用 T0 方式 1 定时 30ms , 初值计算 : fosc=12MHz , 机器周期为 1μs 。 X = 21630×103/ 1=6553630000=

35536=8AD0H,即有 TH0=8AH,TL0=D0H。程序为: MOV TMOD,#01H MOV TH0,#8AH MOV TL0,#0D0H

43

SETB TR0 SJMP $

6.13 某单片机系统: fosc=12MHz,定时器/计数器 0 用于 20ms 定时,定时器/计数器 1 用于 100

次计数,定时器/计数器 0 和定时器/计数器 1 均要求重复工作。问: (1) 外部计数脉冲应从何引脚输入? (2) 试编能达到上述要求的程序。

解:(1) 外部脉冲从 T1(P3.5)引脚输入。

(2) 本题 100=0064H,定时器/计数器 1 选择为方式 1,初值 X=65536100= 65436=FF9CH

定时器/计数器 0 选择为方式 1,初值X=6553620000= 45536=4E20H,所以定时器/计数器预置以 B1E0H。

设定时器/计数器串接使用,以得到 20ms*100=2s 的定时,满足每隔 2s,做某种动作的需要。 程序为: ORG 2000H START:??. ??

MOV TMOD,#51H

REPEAT:MOV TH1,#FFH MOV TL1,#9CH MOV TH0,#B1H MOV TL0,#E0H

http://www.wkfxw.com 文库分享网

CLR P3.5 MOV IE,#88H SETB TR1 SETB TR0 LOOP: ?? ??

JNB TF0,$ CLR TF0

JBC F0,ELSE SETB P3.5 MOV TH0,#B1H MOV TL0,#E0H CLR P3.5

44

SJMP LOOP ?? ??

ELSE: ?? ??

AJMP REPEAT ORG 001BH SETB F0 RETI

6.14 阅读下列程序,设 fosc=12MHz,请回答:

(1)该程序每隔多少时间执行一次检测程序?是怎样安排达到的?

(2)定时器/计数器 0 及定时器/计数器 1 各在什么情况下溢出?列出您的计算。 (3)为程序作出注释。 0000H LJMP 0030H ; 主程序 ORG 0030H

START: CLR T1 MOV TMOD,#51H MOV IE,#8AH MOV TH0,#0D8H MOV TL0,#0F0H MOV TH1,#0E8H MOV TL1,#90H SETB TR0 SETB TR1

;中断服务程序 ORG 000BH LJMP 0080H ORG 0080H

T0OV: SETB T1

http://www.wkfxw.com 文库分享网

MOV TH0,#0DBH MOV TL0,#0F0H CLR T1

45

RETI

ORG 001BH LJMP 0090H ORG 0090H

T1OV: MOV TH1,#0E8H MOV TL1,#90H

?? ;此起为检测程序 RETI

解:(1)该程序每隔 1 分钟执行一次检测程序。 (2)T/C0 定时时间=(65536D8F0H)*

1us=10000us,所以 T/C0 在 10ms 定时时间到时溢出。 T/C1 计数值=65536E890H=

6000,所以 T/C1 在计数到 6000 次时溢出。 (3) 略。

46

第 7 章 MCS51 的串行口

7.1 MCS51

系列单片机串行口有哪几种工作方式?请说明各种工作方式的功能、应 用场合与相应的 波特率。

解:串行口有 4 种工作方式。方式 0 并不用于通信,而是通过外接移位寄存器芯片实现扩展并行 I

/O 接口的功能。该方式又称移位寄存器方式。方式1、方式 2、方式3 都是异步通信方式。方式 1

是 8 位异步通信接口,一帧信息由 10 位组成。方式1 用于双机串行通信。方式 2、方式3 都是 9 位

异步通信接口、一帧信息中包括 9 位数据,1 位起始位,1 位停止位。方式 2、方式 3 的区别在于波

持率不同,方式 2、方式 3 主要用于多机通信,也可用于双机通信。 7.2 何谓波特率?综述 MCS51

系列单片机有哪些功能部件可作为波特率发生器、以 及相应的波特 率计算公式。

解:在一帧信息中,每一位的传送时间(位宽)是固定的,用位传送时间 Td 表示。Td 的倒数称为波特

率(Baud rate),波特率表示每秒传送的位数。

在 8031/8051/8751 单片机中,工作方式 1、工作方式 3 的波特率取决于定时器/计数器 1 的

溢出速率及 SMOD,并由下式决定

http://www.wkfxw.com 文库分享网

波特率=2 SMOD ×定时器/计数器 1 溢出速率/32

7.3 何谓串行通信、单工、半双工、全双工、发送、接受、异步通信、同步通信、起始位、停止位、

空闲位、一帧信息、同步字符、双机通信、多机通信。

解:一条信息的各位数据被逐位顺序传送的通信方式称为串行通信。 信息只能单方向传送称为单工;

信息能双向传送但不能同时双向传送称为半双工; 能够同时双向传送则称为全双工。

通信技术中,输出又称为发送(Transmitting),输入又称为接收(Receiving)。

异步通信用起始位“0”表示字符的开始,然后从低位到高位逐位传送数据,最后用停止位“1”表

示字符结束。

同步通信中,每一数据块开头时发送一个或两个同步字符,使发送与接收双方取得同步。数据

块的各个字符间取消了起始位和停止位,所以通信速度得以提高。

—个字符又称一帧信息。一帧信息包括 1 位起始位、8(9)位数据位和1 位停止位,数据位增加

到 9 位。

双机通信:一台主机对一台从机的通信方式。 多机通信:一台主机对多台从机的通信方式。

47

第 8 章 MCS51

系列单片机扩展存储器的设计

8.1 MCS51

系列单片机对外有几组总线?哪几组?请说明每组总线的组成。

解:单片机对外呈三总线形式。由 P2、P0 组成 16 位地址总线;由 P0 分时复用为数据总线;由

ALE、PSEN 、RST、EA 与 P3 口中的INT1、INT0 、、T0、T1、WR 、RD 共 10 个引脚组成

控制总线。

8.2 8031 最小系统包含哪些芯片,试画出它的实用电路草图。

解: 8031 本身、片外程序存储器与地址锁存器组成了一个真正可用的、未曾扩展的最小系统。

8031 ALE P0.0P0.7

EA

PSEN

OE

74LS373 Q1Q8 A0A7

http://www.wkfxw.com 文库分享网

A8A12 D0D7

OE

2764(1) CE P2.0P2.4 P2.5 G D1D8 8 8 8 8 5 5

803l 的最小系统草图

8.3 请阐明 8031 最小系统必须用地址锁存器的理由(联系时序讲) 解:

8.3 题图 最小系统的工作时序

51系列单片机在设计时为最小系统规定了8.3题图所示的工作时序。自 图可见P2口用于送出PCH

信息,P0 口用于送出 PCL 信息和输入指令;在每个机器周期中,ALE 脉冲两次有效,它的频率为

2MHz; PSEN 脉冲也是两次有效。ALE 第一次有效发生在S1P2 和 S2P1 期间,而当 S2 状态周期、

它处下降沿时 P0 口上低 8 位地址信息 PCL 被锁存到地址锁存器;然后在 S4 状态周期、

PSEN 处上

升沿时将指令读入单片机。ALE 第二次有效发生在 S4P2 和 S5P1 期间,在 S5 状态周期、ALE 处下

48

降沿时 P0 口上新的 PCL 值又被锁存到地址锁存器,以待下一机器周期的 S1 状态周期、

PSEN 处上

升沿时读入新的 PC 值所指地址中的指令。这样,在每个机器周期的 S1 状态周期已取有该机器周期

要执行的指令信息,而在 S1P2 期间将开始执行。

8.4 8031 单片机用及片外 ROM 和片外 RAM 时,有哪些引脚送出地址信息?请综述在各种不同情

况下,访问片外 ROM 和片外 RAM 的方法(地址线的接法)。 解:由 P0 口和 P2 口送出地址信息。

不同容量的片外 ROM和片外 RAM 所需要的地址线的根数是不一样的,根 据容量大小决定所要

连接的 P2 口的地址线的跟数。

8.5 某系统片外 RAM 的片选电路如下图所示:RAM 共 7 路,有 2K×8 位和 1K×8 位两种芯片,其

片选信号都是低电平有效。请为各路 RAM 芯片注明它的容量和地址范围。

http://www.wkfxw.com 文库分享网

A15 A14 A13 A12 A11

0

>=1

0

0

0

>=1

0

0

0

>=1

0

0

0

>=1

0

0

A10

2A

G G

2B

1

G

C B A

0

Y Y Y Y

1

2

4

http://www.wkfxw.com 文库分享网

5

Y

第一路片选端 第二路片选端 第三路片选端 第四路片选端 第五路片选端 第六路片选端 第七路片选端 74LS138

8.5 题图

解:第一块芯片的地址为 8000H87FFH; 第二块芯片的地址为8800H8FFFH; 第三块芯片的地址为9000H97FFH; 第四块芯片的地址为 A000HA3FFH; 第五块芯片的地址为 A400HA7FFH; 第六块芯片的地址为 A800HABFFH; 第七块芯片的地址为 AC00HAFFFH;

8.6 何谓地址重叠?设用 3~8译码器 74LS138解决 8片 1K×8位存储器芯片的片选问题,试 结合 8.6

题图所示的两种接法阐明地址重叠的概念。

解:存储空间的地址不是唯一的,称为地址重叠。

49

8.6 题图

本题左图不存在地址重叠的问题,译码器各输出端选通的存储器芯片的地址是唯一的,从上到

下分别为: 2000H23FFH , 2400H27FFH 、2800H2BFFH 、2C00H2FFFH 、3000H33FFH 、

3400H37FFH 、3800H3BFFH 、3C00H3FFFH

。右图则存在地址重叠问题,例如 Y0 输出端选中的

http://www.wkfxw.com 文库分享网

存储器的地址范围可以是 0000H03FFH, 也可以是 2000H23FFH, 或 4000H43FFH 等等,总之,随

着 A15、A14、A13 这三位的变化可以有 2 3 =8 种地址范围,同理,Y1、Y2、Y3、??等输出端各自选

中的存储器芯片其地址范围也都重叠有8 种。

8.7 题图是 4 片 8K×8 位存储器芯片的连接图,请确定每片存储器芯片的地址范围。 8.7 题图

解:第一片芯片的地址范围是:0000H1FFFH 第二片芯片的地址范围是:2000H3FFFH 第三片芯片的地址范围是:4000H5FFFH 第四片芯片的地址范围是:6000H7FFFH

8.8 画出用 2 片 2716 和 2 片 6116 并用片选法扩展片外 ROM/RAM 的电路图,说明每片存储器芯

片的地址范围。 解:每一片 IC 芯片的地址不唯一。将未连接的 P2.3、P2.4、P2.5 三位的地址信息看作 0,则各片

的地址范围为: IC1:C000HC7FFH IC2:8000H87FFH IC3:4000H47FFH IC4:0000H07FFH

50

8 RD 8 8 IC5 8031 8 8 WR 8 8 P0.00.7 8 ALE OE OE CE 1A 1B 1Y0 CE 1Y3 WE 1Y2

http://www.wkfxw.com 文库分享网

1Y1 O07 I/O07WE I/O07 2716 G P2.6 O07 IC6 74LS373 2716 OE

A8 A9 A10 A8 A9 A10 IC4 A8 A9 A10 CE A07 IC3 74HC139 A07 IC1 A8 A9 A10 P2.7 CE OE A07 IC2 6116 A07 OE 6116 1D8D 1Q8Q PSEN P2.0 P2.1 P2.2 EA

8.7 题图

51

第 9 章 MCS51 扩展 I/O 接口的设计

9.1 设 8255A控制字寄存器地址为 4003H,P A、P B、P C口全部用作输入,且 工作方式 0。试 对 8255A

http://www.wkfxw.com 文库分享网

初始化编程。

解:首先根据题意确定 8255A 的方式控制字。按 8255A 方式控制字格式,本题的方式控制字为

10011011B,则初始化程序如下:

MOV DPTR,#4003H ;控制字寄存器地址 MOV A,#9BH ;方式控制字 MOVX @DPTR,A ;写入 8255A

如果全部输出,则方式控制字为 10000000B=80H。8255A 上电复位后所有口为输出`状态。 9.2 已知 8255A PA 口输出,工作方式 1,PB 口输入,工作方式 0,8255A 的控制字地址 7FFFH,

试初始化编程。

解:由于 PA 口工作在方式 1,因此 PC 口的部分信号自动作为 PA 口的控制信息。在控制字中

PC 口的其他管脚定义为输出,则控制字为 10100010B=A2H。另外允许中断,即 PC6 置“1”,则 PC

口置位控制字 00001101B=0DH。初始化程序如下:

9.3 8031 单片机与并行接口芯片 8255A 的接口电路如 9.3 题图所示,端口 A 接一组指示灯,显示

的内容由 A 口输出至指示灯;端口 B 接一组开关,将开关的内容由 B 口输入,并将此开关状态通

过 A 口由指示灯显示出来。要求:

(1) 写出 8255A 的 A 口、B 口、C 口和控制口的地址,并写出控制字。 (2) 编写实现题目要求的程序。

+5V 8031 D7 +5V D0 K7 K0

· · · · · · · · ·

· · ·

P0 ALE P2.7

EA

RD

WR CS

RD

WR G OE

http://www.wkfxw.com 文库分享网

D8 D1

D0 D7

· · ·

Q2 Q1 A1 A0 PA PB

74LS 373

8255A

Q8 Q1

9.3 题图 解:(1) 8255A 的 A 口、B 口、C 口和控制字的地址分别为 7F00H、7F01H、7F02H 和 7F03H。 由于开关和指示灯通过 8255A 和 8031 进行数据传送,不需联络信号,因此可让 A 口和 B 口均

52

工作在方式 0。A 口作数据输出口,B 口作数据输入口。此时,8255A 的方式控制字为 82H。 (2) 程序如下: ORG 1000H

START:MOV DPTR , #7F03H MOV A ,#82H MOVX @DPTR ,A MOV DPTR ,#7F01H MOVX A ,@DPTR DEC DPTR

MOVX @DPTR ,A SJMP START

9.4 如 9.4 题图所示,由 PA 口输出点亮七段数码管,PC 口接 8 个开关用作输入信号。当某开关合

上时显示相应的开关号,即 K1 合显示“1”,K2 合显示“2”,依此类推。试编程实现。 解:首先确定方式控制字,PA 口应该工作在方式 0 且输出,PB 口没有用任意,PC 口输入,则

方式控制字是10001001B。由 9.4题图不难确定8255A的4个地址分别为( 无关位取1):PA 口7CFFH,

PB 口 7DFFH,PC 口 7EFFH,控制字寄存器地址 7FFFH。 应用子程序如下:

EX8255: MOV DPTR,#7FFFH ;8255A 初始化 MOV A,#89H MOVX @DPTR,A

http://www.wkfxw.com 文库分享网

MOV DPTR,#7EFFH ;取开关信号 MOVX A,@DPTR

MOV R3,#0 ;开关号单元清 0 MOV R2,#8 ;8 个键

EX82_1: RRC A ;移出一位信号 JC EX82_2 ;判断开关断转跳 INC R3 ;键号+1

MOV A,R3 ;显示值转换显示码

MOV DPTR,#DIRTAB ;七段数码管显示段码表首地址 MOVC A,@A+DPTR ;查表

MOV DPTR,#7CFFH ;送 PA 口显示 MOVX @DPTR,A RET

53

EX82_2: INC R3 ;键号+1 DJNZ R2,EX82_1 ;8 个键判完? RET

DIRTAB: DB 0C0H,0F9H,0A4H,0B0H ;定义段码 0,1,2,3 DB 99H,92H,82H,0F8H ;4,5,6,7 DB 80H,98H,88H,83H ;8,9,A,B DB 0C6H,0A1H,86H,8EH ;C,D,E,F 9.4 题图

9.5 试设计一个 8031单片机与并行接口芯片 8155的接口电路,并 对 8155进行初始化编程:让 8155

的 PA 口、PB 口工作在基本输入/输出方式,其中,A 口为输出,B 口为输入,对输入脉冲进行 32

分频,定时器作为脉冲发生器,输出连续脉冲。

解:8031 单片机与并行接口芯片 8155 的接口电路如9.5 题图所示: EA

P0.0P0.7

8051

WR RD CE 8155 WR RD

RESET RESET ALE AD0AD7 Vss PC.0PC. 7

PB.0PB.

http://www.wkfxw.com 文库分享网

7

PA.0PA. 7 ALE

P2.0 IO/ M P2.7 9.5 题图

对 8155I/O 口地址分配如下:

54

命令/状态寄存器的地址:7F00H PA 口的地址:7F01H PB 口的地址:7F02H PC 口的地址:7F03H

定时器低8 位的地址:7F04H 定时器高8 位的地址:7F05H 8155 初始化参考程序如下: MOV DPTR, #7F04H

MOV A, #20H ?对计数器的低8 位赋初值 MOVX @DPTR, A INC DPTR

MOV A , #C0H ?设定定时器为连续脉冲输出 MOVX @DPTR, A ;装入定时器高 8 位 MOV DPTR, #7F00H

MOV A , #0C1H ;设定命令控制字,并启动定时器 MOVX @DPTR, A

9.6 用 74LS373 输入(P2.0 片选),74LS377 输出(P2.1 片选),它们与 8051 的连接电路如 9.6 题图

示。写出图示电路中 74LS373 与 74LS377 的端口地址,并编制完成下列要求的程序:从 74LS373

依次读入 8 个数据,取反后,从 74LS377 输出。

EA

P2.1 P2.0 8051

OE

74LS377 D0D7 CLK Q0Q7

3 1 OE

74LS373 D0D7

WR Q0Q7 RD

输出

http://www.wkfxw.com 文库分享网

信号 输入 信号 P0

9.6 题图

解:74LS373 与 74LS377 的端口地址分别为 FEFFH 和 FDFFH 编程如下:

RDWR: MOV DPTR, #0FDFFH ;置 74LS377 口地址 MOV 31H,DPH ;暂存

MOV DPTR,#0FEFFH ;置 74LS373 口地址 MOV 30H,DPH ;暂存

55

MOV R2,#8 ;置数据长度

LOOP: MOVX A,@ DPTR ;读一个数据 CPL A ;取反

MOV DPH,31H ;置74LS377 口高 8 位地址 MOVX @DPTR,A ;输出一个数据

MOV DPH,30H ;置74LS373 口高 8 位地址

DJNZ R2,LOOP ;判 8 个数据操作完否?未完继续 SJMP $

9.7 9.7 题图示为单片机扩展了 8 个按键输入接口及 8 个发光二极管输出接口的原理简图。图中

74LS244 作为输入接口,由RD 及 A14 组合信号控制,74LS273 作为输出接口由WR 及 A15 组合信号

控制,P0 口作为数据总线与 I/0 的数据线连接。图中的地址分别是 74LS244 的地址为 BFFFH(P2.6

=0)、74LS273 地址为 7FFFH (P2.7=0)。要求当某开关合上时相对应的 LED 点亮,开关断时相

应的 LED 暗,试编写控制程序。 解:控制程序如下: M1:MOV DPTR,#0BFFFH MOVX A ,@DPTR MOV DPTR ,#7FFFH MOVX @ DPTR,A SJMP M1

9.7 题图 单片机与 I/O 接口原理图

56

9.8 试编程将内部 RAM 30H、31H 的内容由 9.8 题图输出,30H 单元先送 。 解:采用串行口移位输出 MOV R2,#2

MOV R0,#30H ;R0 地址指针 LOOP: MOV SBUF,@R0 ;串口输出 JNB TI,$ ;等待输出结束 CLR TI ;清除标志

http://www.wkfxw.com 文库分享网

INC R0 ;地址指针+1 DJNZ R2,LOOP; SJMP $

9.8 题图 单片机串行口扩展输出接口

57

第 10 章 MCS51

与键盘、显示器、打印机的接口设计

10.1 显示器和键盘在单片机应用系统中的作用是什么? 解:具有人机对话功能。实现人对应用系统的状态干预和数据输入以及应用系统向人报告运行和运 行结果。

10.2 在单片机系统中, 常用的显示器有那几种?

解:发光二极管显示器,简称 LED(Light Emitting Diode); 液晶显示器,简称 LCD(Liquid Crystal Display); 荧光管显示器,简称 CRT。

10.3 LED 显示器的显示字符条件是什么?

解:要使 LED 显示器显示出字符,必须提供段码和位选码。

段码(即字码):可以用硬件译码的方法获得,也可以用软件的方法获得。 位选码:静态显示和动态显示。

10.4 LED 动态显示子程序设计要点是什么?

解:(1)建立显示数据缓冲区:存放待显示数字、字符在字型编码表中的序号; (2)软件译码:利用查表方法获得字型编码(段码); (3)位扫描输出:采用移位方法逐位点亮 LED 显示器; (4)延时子程序:控制点亮时间和时间间隔。

10.5 LED 静态显示方式与动态显示方式有何区别?各有什么优缺点?

解:( 1)静态显示方式:静态显示方式是指当显示器显示某一字符时,发光二极管的位选始终被选

中。在这种显示方式下,每一个 LED 数码管显示器都需要一个 8 位的输出口进行控制。由于单片机

本身提供的 I/O 口有限,实际使用中,通常通过扩展I/O 口的形式解决输出口数量不足的问题。

静态显示主要的优点是显示稳定,在发光二极管导通电流一定的情况下显示器的亮度大,系统

运行过程中,在需要更新显示内容时,CPU 才去执行显示更新子程序,这样既节约了 CPU 的时间,

又提高了 CPU 的工作效率。其不足之处是占用硬件资源较多,每个 LED 数码管需要独占 8 条输出

线。随着显示器位数的增加,需要的 I/O 口线也将增加。

(2)动态显示方式:动态显示方式是指一位一位地轮流点亮每位显示器(称为扫描),即每个数码

管的位选被轮流选中,多个数码管公用一组段选,段选数据仅对位选选中的数码管有效。对于每一

http://www.wkfxw.com 文库分享网

位显示器来说,每隔一段时间点亮一次。显示器的亮度既与导通电流有关,也与点亮时间和间隔时

间的比例有关。通过调整电流和时间参数,可以既保证亮度,又保证显示。若显示器的位数不大于

8 位,则显示器的公共端只需一个 8 位 I/O 口进行动态扫描(称为扫描口),控制每位显示器所显示

的字形也需一个 8 位口(称为段码输出)。

58

10.6 为什么有消除按键的机械抖动?消除按键抖动的方法有几种?

解:通常的按键所用开关为机械弹性开关。由于机械触电的弹性作用,按键在闭合及断开的瞬间均

伴随有一连串的抖动。键抖动会引起一次按键被误读多次。为了确保 CPU 对键的一次闭合仅作一次

处理,必须去除抖动。

消除抖动的方法有硬件和软件两种方法。硬件方法常用 RS 触发器电路。软件方法是当检测出

键闭合后执行一个 10ms~20ms 的延时程序,再一次检测键的状态,如仍保持闭合状态,则确认真正 有键按下。

10.7 简述液晶显示器 LCD 的特点,画出 80C51 与液晶显示模块 LCM 的基本接口电路,并编写初 始化程序。

解:液晶显示器简称 LCD(Liquid Crystal Diodes),是一种被动式的显示器,即液晶本身并不发光,

利用液晶经过处理后能够改变光线传输方向的特性,达到显示字符或者图形的目的。

LCD 显示器有笔段式和点阵式两种,点阵式又可分为字符型和图像型。笔段式 LCD 显示器类

似于 LED 数码管显示器。每个显示器的段电极包括七个笔划(段)和一个背电极 BP(或 COM)。

可以显示数字和简单的字符,每个数字和字符与其字形码(段码)对应。

点阵式 LCD 显示器的段电极与背电极呈正交带状分布,液晶位于正交的带状电极间。点阵式

LCD 的控制一般采用行扫描方式,通过两个移位寄存器控制所扫描的点。 80C51 与液晶显示模块 LCM 的基本接口电路如图 10.7 所示。 图 10.7 80C51 与液晶显示模块 LCM 的基本接口电路 液晶显示模块初始化子程序(将系统设置成显示 2 行字符,5×7 点阵,开显示,显示光标,字

符闪烁,清屏,光标为移动方式,自动地址为增量方式。):

电源打开后,在电源上升到 4.5V 并维持 15ms 后,写入功能设置控制字,选择数据接口位数等;

等待 5ms 后,检查忙标志,在不忙的情况下,再进行其他的功能设置;检查忙标志,在不忙的情况

下,关显示;检查忙标志,在不忙的情况下,清屏;检查忙标志,在不忙的情况下,设定输入方式,

http://www.wkfxw.com 文库分享网

初始化结束。程序如下:

LCD: MOV A, #38H ? 8 位数据,2 行显示,5×7 点阵

59

MOV DPTR, #8000H ? LCD 的口地址 MOVX @DPTR, A LCALL BUSY

MOV A, #01H ? 清屏 MOV DPTR, #8000H MOVX @DPTR, A LCALL BUSY

MOV A, #07H ? AC 自动加 1,整体显示移动 MOV DPTR, #8000H MOVX @DPTR, A LCALL BUSY

MOV A, #0FH ? 开显示,开光标,字符闪烁 MOV DPTR, #8000H MOVX @DPTR, A RET

BUSY: PUSH DPH ? 保护现场 PUSH DPL PUSH PSW PUSH ACC

LOOP: MOV DPTR, #8001H ? 读 BH 及 AC MOVX A, @DPTR

JB ACC.7, LOOP ? 忙,继续等待 POP ACC ? 不忙,恢复现场返回 POP PSW POP DPL POP DPH RET

10.8 矩阵式键盘的编程要点是什么?

60

解:(1)判断键盘上有无键按下:列输出全0,读行输入状态,若状态为全1,则说明键盘无键按

下;若不全为1,则说明键盘有按下。

(2)消除按键抖动的影响:在判断有键按下后,用软件延时的方法,再判断键盘状态,如果仍

为有键按下状态,则认为有一个确定的键按下,否则当作按键抖动处理。

(3)求按键位置,计算键号:用扫描的方法识别闭合键 N 所在的行号X 和列号Y,并根据:以

下公式计算闭合键的键号 N =X 行首键号+列号Y。

(4)键闭合一次仅进行一次按键处理:方法是等待按键释放之后,再进行按键功能的处理操作。

10.9 设计一个 8051 外扩键盘和显示器电路,要求扩展 8 个键,4 位 LED 显示器。

http://www.wkfxw.com 文库分享网

解:硬件电路连接图如图 10.9 所示。 10.9 题图 LED 显示器/键盘电路图

61

第 11 章 MCS51

单片机与 D/A 转换器、A/D 转换器的接口

11.1 设某个数据采集系统中 A/D 转换器与单片机的连接如 11.1 题图所示,采用中断方式分别

对 8 路模拟量输入信号检测,并将采集的数据存入片内数据存储器 30H~37H 单元。

RD P2.7 WR P0~P7 ALE INT1 MCS-51 地址 锁存器

1 1

OE START ALE

A2 A1

ADDA ADDB ADDC D0~D7 EOC CLOCK 1

分频

IN0 IN1 IN2 IN3 IN4 IN5 IN6 IN7 ADC0809