单片机课后习题答案 下载本文

习 题 答 案

习题0

1.单片机是把组成微型计算机的各功能部件即(微处理器(CPU))、(存储器(ROM和RAM))、(总线)、(定时器/计数器)、(输入/输出接口(I/O口))及(中断系统)等部件集成在一块芯片上的微型计算机。 2.什么叫单片机?其主要特点有哪些?

将微处理器(CPU)、存储器(存放程序或数据的ROM和RAM)、总线、定时器/计数器、输入/输出接口(I/O口)、中断系统和其他多种功能器件集成在一块芯片上的微型计机,称为单片微型计算机,简称单片机。

单片机的特点:可靠性高、便于扩展、控制功能强、具有丰富的控制指令、低电压、低功耗、片内存储容量较小、集成度高、体积小、性价比高、应用广泛、易于产品化等。 3. 单片机有哪几个发展阶段?

(1)第一阶段(1974—1976年):制造工艺落后,集成度低,而且采用了双片形式。典型的代表产品有Fairchild公司的F8系列。其特点是:片内只包括了8位CPU,64B的RAM和两个并行口,需要外加一块3851芯片(内部具有1KB的ROM、定时器/计数器和两个并行口)才能组成一台完整的单片机。

(2)第二阶段(1977—1978年):在单片芯片内集成CPU、并行口、定时器/计数器、RAM和ROM等功能部件,但性能低,品种少,应用范围也不是很广。典型的产品有Intel公司的MCS-48系列。其特点是,片内集成有8位的CPU,1KB或2KB的ROM,64B或128B的RAM,只有并行接口,无串行接口,有1个8位的定时器/计数器,中断源有2个。片外寻址范围为4KB,芯片引脚为40个。

(3)第三阶段(1979—1982年): 8位单片机成熟的阶段。其存储容量和寻址范围增大,而且中断源、并行I/O口和定时器/计数器个数都有了不同程度的增加,并且集成有全双工串行通信接口。在指令系统方面增设了乘除法、位操作和比较指令。其特点是,片内包括了8位的CPU,4KB或8KB的ROM,128B或256B的RAM,具有串/并行接口,2个或3个16位的定时器/计数器,有5~7个中断源。片外寻址范围可达64KB,芯片引脚为40个。代表产品有Intel公司的MCS-51系列,Motorola公司的MC6805系列,TI公司的TMS7000系列,Zilog公司的Z8系列等。

(4)第四阶段(1983年至今): 16位单片机和8位高性能单片机并行发展的时代。16位机的工艺先进,集成度高,内部功能强,运算速度快,而且允许用户采用面向工业控制的专用语言,其特点是,片内包括了16位的CPU,8KB的ROM,232B 的RAM,具有串/并行接口,4个16位的定时器/计数器,有8个中断源,具有看门狗(Watchdog),总线控制部件,增加了D/A和A/D转换电路,片外寻址范围可达64KB。代表产品有Intel公司的MCS-96系列,Motorola公司的MC68HC16系列,TI公司的TMS9900系列,NEC公司的783××系列和NS公司的HPC16040等。然而,由于16位单片机价格比较贵,销售量不大,大量应用领域需要的是高性能、大容量和多功能的新型8位单片机。

近年来出现的32位单片机,是单片机的顶级产品,具有较高的运算速度。代表产品有Motorola公司的M68300系列和Hitachi(日立)公司的SH系列、ARM等。 4.在实际应用中,如何选择单片机的类型?

选择原则:主要从指令结构、运行速度、程序存储方式和功能等几个方面选择单片机。 MCS-51为主流产品。

Motorola是世界上最大的单片机厂商。品种全、选择余地大、新产品多。其特点是噪声低,抗干扰能力强,比较适合于工控领域及恶劣的环境。

Microchip单片机是市场份额增长较快的单片机。它的主要产品是PIC系列8位单片机。其特点是运行速度快,低价位,适用于量大、档次低、价格敏感的产品。 美国德州仪器(TI)公司生产的MSP430系列单片机是一种特低功耗的Flash微控制器。主要用于三表及超低功耗场合。

1

在嵌入式系统低端的单片机领域,Intel公司的MCS-51形成了既具有经典性又不乏生命力的一个单片机系列。许多半导体厂家、电器公司以MCS-51系列中的8051为基核,推出了许多兼容性的CHMOS单片机----80C51系列。

此外,还有Zilog、EM78、Senix、NEC、Epson、NS、三星、富士通、华邦、Philips、ARM等单片机。

5.试比较MCS-51, MSP430, EM78, PIC, M6800及AVR等系列单片机的特点。 MCS-51为主流产品。

MSP430的功能较强。是一种特低功耗的Flash微控制器。主要用于三表及超低功耗场合。

EM78系列单片机采用高速CMOS工艺制造,低功耗设计为低功耗产品,价格较低。具有三个中断源、R-OPTION功能、I/O唤醒功能、多功能I/O口等。具有优越的数据处理性能,采用RISC结构设计。

PIC系列8位单片机是Microchip公司的产品。CPU采用RISC结构,运行速度快,价格低适于用量大、档次低、价格敏感的产品。

Motorola是世界上最大的单片机生产厂家之一,品种全、选择余地大、新产品多。其特点是噪声低,抗干扰能力强,比较适合于工控领域及恶劣的环境。 AVR是增强RISC内载Flash的单片机,单片机内部32个寄存器全部与ALU直接连接,突破瓶颈限制,每1MHz可实现1MIPS的处理能力,为高速、低功耗产品。端口有较强的负载能力,可以直接驱动LED。支持ISP、IAP,I/O口驱动能力较强。 6.举例说明生活中应用单片机的例子。

生活中单片机无处不在:如洗衣机的控制主板、太阳能的温度控制器,电动车的控制器,电磁炉、(高级)电冰箱的控制系统、手机、电视遥控器、空调、洗衣机、微波炉、冰箱、热水器、电子称、电子表、计算器、汽车钥匙、可视门禁、公交车报站器、公交车刷卡器、红绿灯控制器等等。欧美日等国家,一个家庭中所拥有的单片机数量平均到100-120颗。

单片机有着广泛的应用领域 :

(1) 单片机在智能仪器仪表中的应用; (2) 单片机在工业测控中的应用;

(3) 单片机在计算机网络和通讯技术中的应用; (4) 单片机在日常生活及家电中的应用; (5) 单片机在办公自动化方面。

目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录象机、摄象机、全自动洗衣机的控制,以及程控玩具、电子宠物、自动控制领域的机器人、智能仪表、医疗器械等等。

1.MCS51单片机是基于(Harvard(哈佛))结构的,其特点是(程序存储器和数据存储器是分开的)。

2. CPU由(运算器)和(控制器)组成。

3. 若不使用MCS-51片内程序存储器,引脚(EA)必须接地.。

4. 在MCS-51单片机中,如果采用6MHz晶振,一个机器周期为(2us)。 5. 8051内部RAM位寻址区的单元地址范围为(20H~2FH),其位地址范围为(00H~7FH)。 6. 8051芯片的引脚可以分为三类:(电源线)、(端口线)和(控制线)。 7. 若A中的内容为63H,那么,P标志位的值为(0)。

2

8. 8031单片机复位后,R4所对应的存储单元的地址为(04H),因上电时PSW=(00H)。这时当前的工作寄存器区是(0)组工作寄存器区。 9. 8051型单片机内部有( A )的ROM。

A:4KB B:6KB C:256B D:8KB

10. MCS-51上电复位后,SP的内容应是( B )。

A:00H B:07H C:60H D:70H

11. PC用来存放( C )。

A:指令 B:上一条的指令地址 C:下一条的指令地址 D:正在执行的指令地址

12. 采用 8031单片机必须扩展( B )。

A:数据存储器 B:程序存储器 C:I/O接口 D:显示接口

13. PSW=18H时,则当前工作寄存器是( D )。

A:0组 B:1组 C:2组 D:3组

14.MCS-51系列单片机在片内集成了哪些主要逻辑功能部件?各个逻辑部件的主要功能是什么?

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

CPU是整个单片机的核心部件,由运算器和控制器组成。运算器可以完成算术运算和逻辑运算,其操作顺序在控制器控制下进行。控制器是由程序计数器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提出,哪些中断源的中断请求被禁止;IP用于控制5个中断源的中断请求的优先权级别。

I/O接口是MCS-51单片机对外部实现控制和信息交换的必经之路,用于信息传送过程中的速度匹配和增加它的负载能力。可分为串行和并行I/O接口。

中断系统用于处理中断过程。

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

80C51单片机有4个I/O端口,每个端口都是8位双向口,共占32根引脚。每个端口都包括一个锁存器(即专用寄存器P0~P3)、一个输入驱动器和输入缓冲器。通常把4个端口称为P0~P3。在无片外扩展的存储器的系统中,这4个端口的每一位都可以作为双向通用I/O端口使用。在具有片外扩展存储器的系统中,P2口作为高8位地址线,P0口分时作为低8位地址线和双向数据总线。对外可寻址空间为64KB。 16. 8051单片机的控制总线信号有哪些?各有何作用?

控制线一共有6条:

(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还是使

3

用片外ROM。若EA=0,则允许使用片内ROM;若EA=1则允许使用片外ROM。 (3)片外ROM选通线,在执行访问片外ROM的指令MOVC时,8051自动在PSENPSEN:上产生一个负脉冲,用于为片外ROM芯片的选通。其他情况下PSEN线均为高电平封锁状态。

(4)RST/VPD:复位/备用电源线,可以使8051处于复位工作状态。 17. 什么是指令?什么是程序?简述程序在单片机中的执行过程。

指令:人为输入计算机,由计算机识别并执行一步步操作的命令的形式称为指令。 程序:一系列指令的有序集合称为程序。 程序在计算机中是按序执行的,CPU通过程序计数器PC控制程序的执行顺序,一般情况下程序是按序执行的,当执行转移、调用、返回等指令时,程序转移到相应的目的地址处执行。CPU根据程序计数器PC中的地址将欲执行指令的指令码从存储器中取出,存放在IR中,ID对IR中的指令码进行译码,定时控制逻辑在OSC配合下对ID译码后的信号进行分时,产生执行本条指令所需的全部信号,完成本条指令的执行。

18. 8051单片机的存储器组织采用何种结构?存储器地址空间如何划分?各地址空间的地址范围和容量如何?在使用上有何特点? (1)80C51在结构上的特点

80C51采用将程序存储器和数据存储器截然分开,分别寻址的结构,称为Harvard结构。 (2)在物理和逻辑上的地址空间

存储器上设有4个存储器空间:片内程序存储器、片外程序存储器、片内数据存储器、片外数据存储器。

在逻辑上有3个存储器地址空间:片内、片外统一的64KB程序存储器地址空间,片内256B数据存储器地址空间,片外64KB的数据存储器地址空间。 (3)访问格式

访问片内RAM采用MOV格式 访问片外RAM采用MOVX格式

19. 8051片内RAM低128单元划分为哪三个主要部分?各部分主要功能是什么?

片内RAM低128单元划分及主要功能如下: (1)工作寄存器组(00H—1FH)

这是一个用寄存器直接寻址的区域,内部数据RAM区的0—31,共32个单元。它是4个通用工作寄存器组,每个组包含8个8位寄存器,编号为R0—R7。

(2)位寻址区(20H—2FH)

16个字节单元,共包含128位,这16个字节单元既可以进行字节寻址,又可以实现位寻址。主要用于位寻址。

(3)堆栈与数据缓冲区(30H—7FH) 用于设置堆栈、存储数据。

20. 8051单片机的片内、片外存储器如何选择?

程序存储器通过EA/Vpp引脚选择。若EA=0,则允许使用片内ROM;若EA=1则允许使用片外ROM。

数据存储器通过指令区分:访问片内RAM采用MOV指令,访问片外RAM采用MOVX指令。

21. 何为堆栈指针?堆栈操作有何规定?

堆栈是一个特殊的存储区。主要功能是暂时存放数据和地址,通常用来保护断点和现场。它的特点是按照“先进后出”的存取数据。堆栈指针SP是一个8位寄存器,是用于指示堆栈的栈顶地址的寄存器,它决定了堆栈在内部RAM中的物理位置。

22. 8051单片机有多少个特殊功能寄存器?这些特殊功能寄存器能够完成什么功能?特殊功能寄存器中的哪些寄存器可以进行位寻址?

8051有21个特殊功能寄存器(PC除外),它们被离散地分布在内部RAM的80H~FFH地址单元中,共占据了128个存储单元,其中有83位可以位寻址。特殊功能寄存器SFR的分布和功能见下表。

4

特殊功能寄存器 B A(ACC) PSW IP P3 IE P2 SBUF SCON P1 TH1 TH0 TL1 TL0 TMOD TCON PCON DPH DPL SP P0 寄存器B 累加器 功 能 名 称 物 理 地 址 F0H E0H D0H B8H B0H A8H A0H 99H 98H 90H 8DH 8CH 8BH 8AH 89H 88H 87H 83H 82H 81H 80H 可否位寻址 可以 可以 可以 可以 可以 可以 可以 不可以 可以 可以 不可以 不可以 不可以 不可以 不可以 可以 不可以 不可以 不可以 不可以 可以 程序状态字(标志寄存器) 中断优先级控制寄存器 P3口数据寄存器 中断允许控制寄存器 P2口数据寄存器 串行口发送/接收数据缓冲寄存器 串行口控制寄存器 P1口数据寄存器 T1计数器高8位寄存器 T0计数器高8位寄存器 T1计数器低8位寄存器 T0计数器低8位寄存器 定时器/计数器方式控制寄存器 定时器控制寄存器 电源控制寄存器 数据指针寄存器高8位 数据指针寄存器低8位 堆栈指针寄存器 P0口数据寄存器

23. DPTR是什么寄存器?它的作用是什么?

数据指针DPTR是16位的专用寄存器,它由两个8位的寄存器DPH(高8位)和DPL(低8位)组成。专门用来寄存片外RAM及扩展I/O口进行数据存取时的地址。编程时,既可以按16位寄存器来使用,也可以按两个8位寄存器来使用(即高位字节寄存器DPH和低位字节寄存器DPL)。

DPTR主要是用来保存16位地址,当对64KB外部数据存储器寻址时,可作为间址寄存器使用,

24. 8051单片机的PSW寄存器各位标志的意义如何?

程序状态字PSW是8位寄存器,用于存放程序运行的状态信息,PSW中各位状态通常是在指令执行的过程中自动形成的,但也可以由用户根据需要采用传送指令加以改变。各个标志位的意义如下:

PSW.7(Cy):进位标志位。 PSW.6(AC):辅助进位标志位,又称为半进位标志位。 PSW.5(F0):用户标志位。 PSW.4、PSW.3(RS1和 RS0):寄存器组选择位。 PSW.2(OV):溢出标志位。 PSW.1(空缺位):此位未定义。 PSW.0(P):奇偶校验位。

25. 开机复位后,CPU使用的是哪组工作寄存器(R0-Rn)?它们的地址是什么?CPU如何确定和改变当前工作寄存器组(R0-Rn)?

开机复位后,CPU使用的是第0组工作寄存器。它们的地址是00H-07H。CPU通过对程序状态字PSW中RS1和RS0的设置来确定和改变当前工作寄存器组。 26. 8051单片机的片内、片外存储器如何选择?

程序存储器通过EA/Vpp引脚选择。若EA=0,则允许使用片内ROM;若EA=1则允许使用片外ROM。

数据存储器通过指令区分:访问片内RAM采用MOV指令,访问片外RAM采用MOVX指令。

27. MCS-51单片机的时钟周期、机器周期、指令周期是如何定义的?当主频为12MHz的时

5

候,一个机器周期是多长时间?执行一条最长的指令需要多长时间?

时钟周期又称为振荡周期,由单片机内部振荡电路OSC产生,定义为OSC时钟频率的倒数。时钟周期又称为节拍(用P表示)。时钟周期是时序中的最小单位。一个状态有两个节拍,

机器周期定义为实现特定功能所需的时间。MCS-51的机器周期由12个时钟周期构成。 执行一条指令所需要的时间称为指令周期,指令周期是时序中的最大单位。由于机器执行不同指令所需的时间不同,因此不同指令所包含的机器周期数也不尽相同。MCS-51的指令可能包括1~4个不等的机器周期。

当MCS-51的主频为12MHz时,一个机器周期为1?s。执行一条指令需要的最长时间为4?s。

28. 8051单片机复位后,各寄存器的初始状态如何?复位方法有几种?

8051单片机复位后机器的初始状态,即各寄存器的状态:PC之外,复位操作还对其它一些特殊功能寄存器有影响,它们的复位状态如下:

寄存器 PC ACC B PSW SP DPTR P0—P3 TMOD 复位时内容 0000H 00H 00H 00H 07H 0000H FFH ××000000B 寄存器 TCON TL0 TH0 TH1 TH1 SCON SBUF PCON 复位时内容 0×000000B 00H 00H 00H 00H 00H 不确定 0×××0000B 单片机复位方法有:上电自动复位,按键电平复位和外部

脉冲三种方式。

1. 指令格式是由(操作码)和(操作数)所组成,也可能仅由(操作码)组成。

2. 在MCS-51中,PC和DPTR都用于提供地址,但PC是为访问(程序)存储器提供地址,而DPTR是为访问(数据)存储器提供地址。

3. 在变址寻址方式中,以( A )作变址寄存器,以( DPTR )或( PC )作基址寄存器。

4. 假定累加器A中的内容为30H,执行指令1000H:MOVC A,@A+PC后,把程序存储器( 1031H )单元的内容送入累加器A中。

5. 8051执行完MOV A,#08H后,PSW的( D )位被置位。

A:C B:F0 C:OV D:P

6. 指出下列指令中的源操作数的寻址方式

(1)MOV R0,#30H 立即寻址 (2)MOV A,30H 直接寻址

(3)MOV A,@R0 寄存器间接寻址 (4)MOVX A,@DPTR 寄存器间接寻址 (5)MOVC A,@A+DPTR 变址寻址 (6)MOV P1,P2 直接寻址 (7)MOV C,30H 位寻址 (8)MUL AB 寄存器寻址 (9)MOV DPTR,#1234H 立即寻址

(10)POP ACC 寄存器间接寻址

7. 指出下列各指令在程序存储器中所占的字节数

(1)MOV DPTR,#1234H 3字节 (2)MOVX A, @DPTR 1字节

6

(3)LJMP LOOP 3字节 (4)MOV R0,A 1字节 (5)AJMP LOOP 2字节 (6)MOV A,30H 2字节 (7)SJMP LOOP 2字节 (8)MOV B,#30H 2字节

8.8051单片机指令系统按功能可分为几类?具有几种寻址方式?它们的寻址范围如何?

MCS-51单片机指令系统按功能可分为5类: (1)数据传送指令 (2)算术运算指令

(3)逻辑运算和移位指令 (4)控制转移指令

(5)位操作指令

MCS-51单片机的指令系统提供了七种寻址方式,其对应的寻址范围如下表: 寻址方式 立即寻址 直接寻址 寄存器寻址 寄存器间接寻址 变址寻址 相对寻址 位寻址 使用的变量 R0~R7;A、B、DPTR、C @R0、@R1、SP @R0、@R1、@DPTR @A+PC、@A+DPTR PC+偏移量 寻址范围 立即数 程序存储器ROM; 内部RAM低128个字节;特殊功能寄存器SFR 位地址空间 四组通用寄存器,A、B、DPTR、C 内部RAM 外部RAM 程序存储器 程序存储器 内部RAM低128B位寻址区 可位寻址的特殊功能寄存器SFR位 9.访问特殊功能寄存器和外部数据存储器应采用哪种寻址方式? 访问特殊功能寄存器,应采用直接寻址、位寻址方式。 访问外部数据存储器,应采用寄存器间接寻址方式。 在0~255B范围内,可用寄存器R0、R1间接寻址:

MOVX A,@R0 或 MOVX A,@R1 MOVX @R0,A 或 MOVX @R1,A

在0~64KB范围内,可用16位寄存器DPTR间接寻址:

MOVX A,@DPTR MOVX @DPTR,A

10.“DA A”指令的作用是什么?怎样使用?

这条指令是在进行BCD码加法运算时,跟在“ADD”和“ADDC”指令之后,用来对BCD码的加法运算结果自动进行修正的,使其仍为BCD码表达形式。

在计算机中,遇到十进制调整指令时,中间结果的修正是由ALU硬件中的十进制修正电路自动进行的。用户不必考虑何时该加“6”,使用时只需在上述加法指令后面紧跟一条“DA A”指令即可。

11.片内RAM 20H~2FH单元中的128个位地址与直接地址00H~7FH形式完全相同,如何在指令中区分出位寻址操作和直接寻址操作?

位寻址是直接寻址方式的一种。虽然内部RAM位寻址区的位地址范围00H~7FH与低128个单元的单元地址范围00H~7FH形式完全相同,但是在应用中可以通过以下的方法区分:

1. 通过指令操作码(指令的类型)区分:

位操作只有17条指令,位寻址的操作只适用于下列位指令,而直接寻址操作对这些指令是无效的。

MOV C,bit CPL bit (C) JB bit,rel

7

MOV bit,C ORL C,bit (/bit) JNB bit,rel CLR bit (C) ANL C,bit (/bit) JC rel SETB bit (C) JBC bit,rel JNC rel

位操作只有MOV、 CLR 、SETB、 CPL 、ORL、 ANL 、JB 、JNB、 JBC、 JC、 JNC几种操作码,其中:JB、JNB、JBC、JC、JNC是位寻址特有的。

2. 当指令操作码一样时,可通过操作数的表现形式来区分。直接位地址的表示方法有: (1)直接使用位地址形式。如:MOV 00H, C

(2)字节地址加位序号的形式。如:MOV 20H.0, C (3)位的符号地址(位名称)的形式。如:ANL C, P

(4)字节符号地址(字节名称)加位序号的形式。如:CPL PSW.6 3. 可通过指令中的累加器区分:

位操作中的累加器为C,单元操作中的累加器为A。 12.SJMP, AJMP 和LJMP指令在功能上有何不同?

指令的转移范围不同。

SJMP是256B范围内的相对转移指令,AJMP是2KB范围内的无条件短跳转指令,LJMP是64KB范围内的无条件长跳转指令。

13.在“MOVC A, @A+DPTR”和“MOVC A, @A+PC”中,分别使用了DPTR和PC作基址,请问这两个基址代表什么地址? 使用中有何不同?

使用@A+DPTR基址变址寻址时,DPTR为常数且是表格的首地址,A为从表格首址到被访问字节地址的偏移量。

使用@A+PC基址变址寻址时,PC仍是下条指令首地址,而A则是从下条指令首地址到常数表格中的被访问字节的偏移量。

14.设片内RAM中的(40H)=50H,写出当执行下列程序段后寄存器A和R0,以及片内RAM中50H和51H单元的内容为何值?

MOV A, 40H MOV R0, A MOV A, #00 MOV @R0, A MOV A, #30H

MOV 51H, A

结果为:(A)=30H (R0)=50H (50H)=00H (51H)=30H 15.设堆栈指针(SP)=60H,片内RAM中的(30H)=24H,(31H)=10H。执行下列程序段后,61H, 62H, 30H, 31H, DPTR及SP中的内容将有何变化?

PUSH 30H PUSH 31H POP DPL POP DPH MOV 30H, #00H MOV 31H, #0FFH

解:

结果为: 61H、62H单元为堆栈单元,其内容已被弹出栈。 (30H)=00H (31H)=0FFH (DPTR)=2410H (SP)=60H 16.在8051的片内RAM中,已知(20H)=30H,(30H)=40H,(40H)=50H,(50H)=55H。分析下面各条指令,说明源操作数的寻址方式,分析按顺序执行各条指令后的结果。

MOV A, 40H MOV R0, A MOV P1, #0F0H MOV @R0, 20H MOV 50H, R0 MOV A, @R0 MOV P2, P1

8

解:

指令 源操作数的寻址方式 执行指令后的结果

MOV A,40H 直接寻址 (A)=50H MOV R0,A 寄存器寻址 (R0)=50H MOV P1,#80H 立即寻址 (P1)=80H MOV @R0,20H 寄存器间接寻址 (50H)=30H MOV DPTR,#2000H 立即寻址 (DPTR)=2000H MOV 40H,30H 直接寻址 (40H)=40H MOV R0,30H 直接寻址 (R0)=40H MOV D0H,R0 直接寻址 (D0H)=40H MOV 10H,#10H 立即寻址 (10H)=10H MOV A,@R0 寄存器间接寻址 MOV P2,P1 直接寻址 17.完成以下的数据传送过程

(1)R1的内容传送到R0。

(2)片外RAM 20H单元的内容送R0。

(3)片外 RAM 20H单元的内容送片内RAM 20H单元。 (4)片外RAM 1000H单元的内容送片内 RAM 20H单元。 (5)ROM 2000H单元的内容送R0。

(6)ROM 2000H单元的内容送片内RAM 20H单元。 (7)ROM 2000H单元的内容送片外RAM 20H单元。 解:

(1)R1的内容传送到R0 ; MOV A, R1 MOV R0, A

(2)片外RAM 20H单元内容送R0 ; MOV R1, #20H MOVX A, @R1 MOV R0, A

(3)片外 RAM 20H单元的内容送片内RAM 20H单元; MOV R0, #20H MOVX A, @R0 MOV 20H, A

(4)片外RAM 1000H单元的内容送片内 RAM 20H 单元; MOV DPTR, #1000H MOVX A, @DPTR MOV 20H, A (5)ROM 2000H单元的内容送R0单元; CLR A

MOV DPTR, #2000H MOVC A, @A+DPTR MOV R0, A

(6)ROM 2000H 单元的内容送片内RAM 20H单元; CLR A

MOV DPTR, #2000H MOVC A, @A+DPTR

MOV 20H, A

(7)ROM 2000H单元的内容送片外RAM 20H单元。 CLR A

MOV DPTR, #2000H MOVC A, @A+DPTR MOV R0, #20H MOVX @R0, A

(A)=50H (P2)=80H

9

18.设有两个4位BCD码,分别存放在片内RAM的23H, 22H单元和33H, 32H单元中,求它们的和,并送入43H, 42H单元中去。(以上均为低位在低字节,高位在高字节)。 解: ORG 0000H

LJMP START ORG 0030H START: MOV A,22H ADD A,32H DA A MOV 42H,A MOV A,23H ADDC A,33H DA A MOV 43H,A SJMP $

END

19.编程将片内RAM的40H~60H单元中内容送到片外RAM以3000H开始的单元中。并将原片内RAM数据块区域全部清0。 解: ORG 0000H MOVX @DPTR,A

LJMP MAIN CLR A ORG 0030H MOV @R1,A

INC R1 MAIN: MOV SP, #60H

INC DPTR MOV R7,#21H

DJNZ R7,LOOP MOV R1,#40H

SJMP $ MOV DPTR,#3000H

END

LOOP: MOV A,@R1

20.编程计算片内RAM区30H~37H 的8个单元中数的算术平均值,结果存放在3AH单元中。

解: ORG 0000H DJNZ R3,LP2

LJMP MAIN MOV R3,#03H ORG 0030H CLR C MAIN: MOV R0,#30H LP3:MOV A,R1 MOV R1,#00H RRC A MOV R2,#00H MOV R1,A MOV R3,#08H MOV A,R2

RRC A LP2: MOV A,@R0

MOV R2,A ADD A,R2

DJNZ R3,LP3 MOV R2,A

MOV 3AH,R2 JNC LP1

INC R1 SJMP $

END LP1: INC R0

21.编写计算下式的程序,设乘积的结果均小于255。A, B值分别存放在片外RAM的2001H和2002H单元中,结果存于2000H单元中。 (A+B)×(A+B)+10 若(A+B)×(A+B)<10

Y= (A+B)×(A+B) 若(A+B)×(A+B)=10

(A+B)×(A+B)-10 若(A+B)×(A+B)>10

解:

ORG 0000H MOV DPTR,#2002H

LJMP START MOVX A,@DPTR ORG 0030H ADD A,30H START: MOV DPTR,#2001H MOV B,A MOVX A,@DPTR MUL AB MOV 30H,A MOV R1,A

10

CJNE A,#10,NET1 MOVX @DPTR,A

SJMP NET3 MOV DPTR,#2000H

NET2: MOV A,R1 MOVX @DPTR,A

ADD A,#10 SJMP NET3

NET1: JNC NET2 MOV DPTR,#2000H CLR C MOVX @DPTR,A MOV A,R1 NET3: SJMP $ SUBB A,#10 END MOV DPTR,#2000H

22.设有两个长度均为15的数组,分别存放在片外RAM以2000H和2100H开始的存储区中,试编程求其对应项之和,结果存放在以2200H为首地址的存储区中。

INC DPTR 解: ORG 0000H

INC R1 LJMP MAIN

DJNZ R2,LOOP ORG 0030h

MOV R1,#30H MAIN: MOV DPTR,#2000H

MOV DPTR,#2100H MOV A,#OFFH

MOV R2,#15 MOVX @DPTR,A

MOV R0,#40H MOV DPTR,#2100H

LOOP1: MOV A,#34H

MOVX A,@DPTR MOVX @DPTR,A

CLR C MOV DPTR,#2008H

ADDC A,@R1 MOV A,#33H

MOV @R0,A MOVX @DPTR,A

INC DPTR MOV DPTR,#2108H

INC R1 MOV A,#44H

INC R0 MOVX @DPTR,A

DJNZ R2,LOOP1 MOV DPTR,#200EH

MOV DPTR,#2200H MOV A,#0EEH

MOV R2,#15 MOVX @DPTR,A

MOV R0,#40H MOV DPTR,#210EH

LOOP2: MOV A,@R0 MOV A,#32H

MOVX @DPTR,A MOVX @DPTR,A

INC R0 MOV DPTR,#2000H

INC DPTR MOV R1,#30H

DJNZ R2,LOOP2 MOV R2,#15

SJMP $ LOOP: MOVX A,@DPTR

END MOV @R1,A

23.设有100个有符号数,连续存放在片外RAM以2000H为首地址的存储区中,试编程统计其中正数、负数、零的个数。

SJMP NET3 解: ORG 0000H

NET1: JB ACC.7 NET2 LJMP MAIN

ORG 0030H INC R4

SJMP NET3 MAIN: MOV R2,#100

NET2: INC R5 MOV R3,#00H

NET3: INC DPTR MOV R4,#00H

DJNZ R2,LOOP MOV R5,#00H

SJMP $ MOV DPTR,#2000H

END LOOP: MOVX A,@DPTR

CJNE A,#00H,NET1 INC R3

24.试编一查表程序,从外部RAM首地址为2000H、长度为9FH的数据块中找出第一个ASCII码A,将其地址送到20A0H和20A1H单元中。

ORG 0030H 解: ORG 0000H

MAIN: MOV SP, #60H LJMP MAIN

11

MOV DPTR,#2000H INC DPTR

MOV R7,#9FH MOV A, R3 LP0: MOVX A,@DPTR MOVX @DPTR,A CJNE A, #41H, LP1 SJMP LP2 MOV R2,DPL LP1: INC DPTR MOV R3,DPH DJNZ R7, LP0

MOV DPTR,#20A0H LP2: RET

MOV A, R2

END

MOVX @DPTR,A

25.编程把片外RAM中以2040H为首地址的连续50个单元中的无符号数按降序排列,存放到以3000H为首地址的存储区中。 解: ORG 0000H CJNE A,21H,LOOP

LJMP MAIN LOOP: JNC LOOP1 ORG 0100H MOV A,20H MAIN: MOV DPTR,#2040H MOVX @DPTR,A MOV R2,#50 DEC DPTR CLR 7FH MOV A,21H DEC R2 MOVX @DPTR,A LS: MOVX A,@DPTR INC DPTR MOV 20H,A SETB 7FH INC DPTR LOOP1: DJNZ R2,LS MOVX A,@DPTR JB 7FH,MAIN MOV 21H,A SJMP $ MOV A,20H END

26.在片外RAM以2000H为首地址的存储区中,存放着20个用ASCII码表示的0~9之间的数,试编程将它们转换成BCD码,并以压缩BCD码(即一个单元存放两位BCD码)的形式存放在以3000H开始的单元中。 解: ORG 0000H MOV A,41H

LJMP MAIN XCHD A,@R1 ORG 0030H MOV @R1,A MAIN: MOV R2,#0AH INC R1 MOV R1,#30H INC DPTR MOV DPTR,#2000H DJNZ R2,TT TT: MOVX A,@DPTR MOV DPTR,#3000H CLR C MOV R1,#30H SUBB A,#30H MOV R2,#0AH SWAP A TT1: MOV A,@R1 MOV 41H,A MOVX @DPTR,A INC DPTR INC R1 MOVX A,@DPTR INC DPTR CLR C DJNZ R2,TT1 SUBB A,#30H SJMP $ MOV @R1,A END

27.编程实现将片外RAM中2400H~2450H单元中的数传送到2500H~2550H单元中。

MOVX @DPTR,A 解: ORG 0000H

MOV 30H,#24H LJMP MAIN

MOV 31H,#00H ORG 0030H

MOV 32H,#25H MAIN:

MOV 33H,#00H MOV DPTR,#2400H

MOV R2,#51H MOV A,#07H

LOOP: MOVX @DPTR,A

MOV DPH,30H MOV DPTR,@2450H

MOV DPL,31H MOV A,#06H

12

MOVX A,@DPTR INC 33H MOV DPH,32H DJNZ R2,LOOP MOV DPL,33H AJMP $ MOVX @DPTR,A END INC 31H

28.在片外RAM的2030H和2031H单元中各有一个小于16的数,编程求这两个数的平方和,结果存放在2040H单元。要求用调用子程序方法实现。 解:

ORG 0000H MOVX A,@DPTR LJMP MAIN LCALL SQR ORG 0030H ADD A,R1

MOV DPTR,#2040H MAIN: MOV DPTR,#2030H

MOVX @DPTR,A MOV A,#03H

AJMP $ MOVX @DPTR,A

SQR: INC A MOV DPTR,#2031H

MOVC A,@A+PC MOV A,#05H

RET MOVX @DPTR,A

TAB: DB 0,1,4,9,16,25 MOV DPTR,#2030H

DB 36,49,64,81,100 MOVX A,@DPTR

DB LCALL SQR

121,144,169,196,225 MOV R1,A

END MOV DPTR,#2031H

习题3

1. MCS-51的P0口作为输出端口时,每位能驱动( 8 )个SL型TTL负载。

2. MCS-51有( 4 )个并行I/O口,在作为通用I/O口使用时P0~P3是准双向口,所以由输出转输入时必须先写入 ( 1 )。

3. MCS-51有( 5 )个中断源,有( 2 )个中断优先级,优先级由软件填写特殊功能寄存器 ( IP )加以选择。

4. 外部中断1所对应的中断入口地址为( 0013H )H。

5. 当定时器T0工作在方式( 3 )时,要占定时器T1的TR1和TF1两个控制位。 6. 设(TMOD)=0A5H,则定时器T0的状态是( 方式1计数),定时器T1的状态是( 方式2 定时)。

7. 定时器T0溢出标志位是( TF0 ),定时器T1溢出标志位是( TF1 )。 8. 在数据通信中,有数据传送方式有( 单工 )、( 半双工 )、( 全双工 )、( 多工 )四种方式。

9. 设置串行口为10位UART,则其工作方式应选用为(工作方式1 )。

10. 单片机串行通信时,若要发送数据,就必须将要发送的数据送至( SBUF )寄存器,若要接收数据也要到该寄存器取数。 11. 异步串行数据通信的桢格式由( 起始位 )位,( 数据位 )位,( 奇偶较验 )位和 ( 停止位 )位组成。

12. 在中断服务程序中,至少应有一条( D )。

A:传送指令 B:转移指令 C:加法指法 D:中断返回指令

13. 8031单片机中断查询确认后,在下列各种运行情况中,能立即进行响应的是( D )。

A:当前正在执行高优先级中断处理 B:当前正在执行RETI指令

C:当前指令是DIV指令,且正处于取指令的机器周期 D:当前指令是MOV A, R3

14. 要使MCS-51能够响应定时器T1中断、串行接口中断,它的中断允许寄存器IE的内容应是( A )

13

A:98H B:84H C:42 D:22H

15. 使用定时器T1时,有几种工作模式( D )

A:1种 B:2种 C:3种 D:4种

16. 当定时器工作在方式 1,系统采用 6MHz 晶振时,若要定时器定时0.5ms ,则定时器的初始值为( A )。

A:FF06H B:F006H C:0006H D:06FFH

17. 定时器 T1的溢出标志为TF1,采用中断方式,当定时器溢出时,若CPU响应中断后,该标志( B )。

A:由软件清零 B:由硬件清零 C:随机状态 D:AB都可以

18. 在异步通信中每个字符由9位组成,串行口每分钟传25000个字符,则对应的波特率为( D )b/s。

A:2500 B:2750 C:3000 D:3750

19. 控制串行接口工作方式的寄存器是( C )。

A:TCON B:PCON C:SCON D:TMOD

20.什么是中断和中断系统?其主要功能是什么? 解:

所谓“中断”,是指CPU执行正常程序时,系统中出现特殊请求,CPU暂时中止当前的程序,转去处理更紧急的事件(执行中断服务程序),处理完毕(中断服务完成)后,CPU自动返回原程序的过程

采用中断技术可以提高CPU效率、解决速度矛盾、实现并行工作、分时操作、实时处理、故障处理、应付突发事件,可使多项任务共享一个资源(CPU)。

中断系统:能够实现中断功能的硬件电路和软件程序。

中断系统的功能:能够实现中断优先权排队、中断嵌套、自动响应中断和中断返回等功能。

21.什么是中断优先级?中断优先处理的原则是什么? 解:

中断优先级是CPU响应中断的先后顺序。中断优先处理的原则是:

(1)先响应优先级高的中断请求,再响应优先级低的中断请求。

(2)如果一个中断请求己被响应,同级的其他中断请求将被禁止。

(3)如果同级的多个中断请求同时出现,CPU则按单片机内部的自然优先级顺序响应

各中断请求。

单片机内部自然优先级顺序(由高到低)为:

外部中断0→定时器0中断→外部中断l→定时器1中断→串行接口中断。 22.8051有哪些中断源?如何对各中断请求进行控制? 解:

(1)80C51有以下中断源:

① 外部中断0(INT0)请求,低电平有效。 ② 外部中断1(INT1)请求,低电平有效。 ③ T0:定时器/计数器0溢出中断请求。 ④ T1:定时器/计数器1溢出中断请求。 ⑤ TI/RI:串行接口中断请求。

(2)通过对特殊功能寄存器TCON、SCON、IE、IP的各位进行置位或复位等操作,可实现对各种中断的控制功能。 23.简述中断系统的初始化步骤。 解:

中断系统的初始化步骤如下: (1)开相应中断源的中断允许; (2)设定所用中断源的中断优先级;

(3)若为外部中断,则应规定中断触发方式(低电平或负边沿触发)。

14

24.简述MCS-51单片机的中断响应过程。 解:

单片机一旦响应中断请求, 就由硬件完成以下功能:

(1) 根据响应的中断源的中断优先级, 使相应的优先级状态触发器置1;

(2) 执行硬件中断服务子程序调用, 并把当前程序计数器PC的内容压入堆栈,保护断点,寻找中断源;

(3) 清除相应的中断请求标志位(串行口中断请求标志RI和TI除外);

(4) 把被响应的中断源所对应的中断服务程序的入口地址(中断矢量)送入PC, 从而转入相应的中断服务程序。

(5)中断返回,程序返回断点处继续执行。

25.8051单片机怎样管理中断?怎样开放和禁止中断?怎样设置优先级? 解:

(1)由中断源提出中断请求,由中断控制允许控制决定是否响应中断,如果允许响应中断,则CPU按设定好的优先级的顺序响应中断。如果是同一优先级的中断,则按单片机内部的自然优先级顺序(外部中断0→定时器0中断→外部中断l→定时器1中断→串行接口中断)响应中断。

CPU响应中断请求后,就立即转入执行中断服务程序。保护断点、寻找中断源、中断处理、中断返回,程序返回断点处继续执行。

(2)由中断允许寄存器IE控制开放和禁止中断。欲开放某一中断,则应先开放总中断允许(EA置1),然后开放相应中断的中断允许(相应位置1);若要要禁止中断,则EA置O即可。

(3)由中断优先级控制寄存器IP控制中断优先级,相应位置1,则设为高级中断,置0则为低级。其中:PS为串行中断优先级,PTl(0)为定时中断1(0)优先级,PXl(0)外部中断1(0)优先级。

26.8051在什么条件下可响应中断? 解:

(1)有中断源发出中断请求。

(2)中断总允许控制位EA=l, CPU开放总中断。

(3)申请中断的中断源的中断允许位为1,即该中断没有被屏蔽。 (4)无同级或更高级中断正在服务。 (5)当前指令周期已经结束。

(6)若现行指令为RETI或访问IE或IP指令时,读指令以及紧接着的另一条指令已执行完毕。

满足以上条件,则CPU响应响应中断元的中断请求。 27.请写出INT1为低电平触发的中断系统初始化程序。 解:

INT1为低电平触发的中断系统初始化程序如下:

ORG 0000H LJMP MAIN ORG 0013H LJMP INTN1 ORG 0100H MAIN: MOV SP,#60H

SETB EA

SETB EX1 ; 开INT1中断 CLR PX1 ; 令INT1为低优先级 CLR IT1 ; 令INT1为电平触发 SJMP $ END

28.说明MCS-51单片机响应中断后,中断服务的入口地址。 解:

15

中断服务程序的入口地址如下表: 中断源 中断矢量 0003H 外部中断0(INT0) 定时器T0中断 外部中断1(INT1) 001BH 定时器T1中断 0023H 串行口中断 29.在执行某一中断源的中断服务程序时,如果有新的中断请求出现,试问在什么情况下可响应新的中断请求?在什么情况下不能响应新的中断请求? 解:

(1)符合以下6个条件可响应新的中断请求:

① 有中断源发出中断请求。

② 中断总允许控制位EA=l, CPU开放总中断。

③ 申请中断的中断源的中断允许位为1,即中断没有被屏蔽。 ④ 无同级或更高级中断正在被服务。 ⑤ 当前的指令周期已结束。

⑥ 若现行指令为RETI或访问IE或lP指令时,该指令以及紧接着的另一条指令已执

行完。

(2)如果新的中断请求\优先级\低于正在执行的中断请求或与其同级,则不能被响应。 30.8051单片机外部中断源有几种触发中断请求的方法?如何实现中断请求?

解:

有两种方式:电平触发和边沿触发。

(1)电平触发方式:CPU在每个机器周期的S5P2期间采样外部中断引脚的输人电平。若为低电平,便置IEl(IEO)为“1” ,申请中断;若外部中断引脚为高电平,则IEl(IEO)清零。

(2)边沿触发方式:CPU在每个机器周期的S5P2期间采样外部中断请求引脚的输人电平。如果在相继的两个机器周期采样过程中,一个机器周期采样到外部中断请求为高电平,接着下一个机器周期采样到外部中断请求为低电平,则使IEl(IEO)置1,申请中断;否则,IEl(1E0)置0。

31.MCS-51的中断服务程序能否存放在64KB程序存储器的任意区域?如何实现? 解:

可以。在相应的中断源的中断程序入口地址处,用一条长跳转指令(LJMP Add16),转到相应64K程序存储器的任意地址(Add16)处,执行相应的中断程序。

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

80C51单片机片内设有2个定时器/计数器:定时器/计数器T0和定时器/计数器T1,T0由TH0、TL0组成,T1由TH1、TLl组成。T0、T1由特殊功能寄存器TMOD、TCON控制。

33.8051单片机定时器/计数器作定时和计数使用时,其计数脉冲分别由谁提供? 解:

作定时器用时,计数脉冲来自单片机内部,其频率为振荡频率的1/12。作计数器用时,计数脉冲来自单片机的外部,即P3.4(T0)和P3.5(T1)两个引脚的输入脉冲。

34.定时器/计数器作定时器使用时,其定时时间与哪些因素有关?作计数器时,对外界计数频率有何限制? 解:

作定时器用时,其定时时间与定时器的工作模式、定时器的定时初值以及单片机的晶振频率有关。作计数器用时,外界计数脉冲的频率不能高于振荡脉冲频率的1/24。 35.定时器/计数器的4种工作方式各有何特点?如何选择、设定? 解:

16

000BH 0013H

(1) 工作方式O: 13位定时器/计数器工作方式。

工作方式0由TH0的全部8位和TL0的低5位构成13位加1计数器,此时TL0的高3位未用。在计数过程中,当TL0的低5位溢出时,都会向TH0进位,而全部13位计数器溢出时,则计数器溢出标志位TF0置位。

(2) 工作方式l: 16位的定时器/计数器方式。

工作方式1由TH0作为高8位,TL0为低8位,在计数过程中,当全部16位计数器溢出时,则计数器溢出标志位TF0置位。

(3) 工作方式2: 自动重新装入计数初值的8位定时器/计数器工作方式。

工作方式2的16位定时器/计数器被拆成两个8位寄存器TH0和TL0,CPU在对它们初始化时必须装入相同的定时器/计数器初值。定时器/计数器启动后,TL0按8位加1计数器计数,当TL0计数溢出时,置位TF0的同时又从预置寄存器TH0中重新获得计数初值并启动计数。如此反复。适合于需要重复计数的应用场合,也可以当做串行数据通信的波特率发生器使用。

(4) 工作方式3: 两个8位定时器/计数器(仅适用于T0)。

在工作方式3时,定时器/计数器0被拆成两个独立的8位计数器TL0和TH0。其中,TL0既可以作计数器使用,也可以作为定时器使用,定时器/计数器0的各控制位和引脚信号全归它使用。其功能和操作与方式0或方式1完全相同。TH0只能作为简单的定时器使用,只能借用定时器/计数器1的控制位TR1和TF1,也就是以计数溢出去置位TF1,TR1则负责控制TH0定时的启动和停止。

一般情况下,只有在T1以工作方式2运行(当波特率发生器用)时,才允许T0工作于方式3。

TMOD用于控制定时器/计数器T0和T1的工作方式,M1M0为工作方式选择位。 M1M0=00 方式0,13位定时器/计数器; M1M0=01 方式1,16位定时器/计数器;

M1M0=10 方式2,自动重新装入计数初值的8位定时器/计数器; M1M0=11 方式3,两个8位定时器/计数器(仅适用于T0)。

C/T为定时方式/计数方式选择位。若设定C/T=0,则选择定时器工作方式;若设定C/T=1,则选择计数器工作方式。一个定时器/计数器同一时刻或者作定时用,或者作计数

用,不能同时既作定时又作计数用。

GATE:门控位。它的状态决定了定时器/计数器启/停控制取决于TR0还是取决于TR0和INT0引脚两个条件的组合。若GATE=0,则只由TCON中的启/停控制位TR0控制定时器/计

数器的启/停。此时,只要TR0=1,则接通模拟开关,使计数器进行加法计数,定时器/计数器启动工作。而如果TR0=0,则断开模拟开关,定时器/计数器停止工作。若GATE=1,由外部中断请求信号INT0和TCON中的启/停控制位TR0组合状态控制定时器/计数器的启/停。只有TR0=1,且INT0引脚也是高电平,才能启动定时器/计数器工作,否则,定时器/计数器停止工作。

定时器/计数器的定时器/计数器范围为:

工作方式0:13位定时器/计数器方式,因此,最多可以计到213,也就是8 192次。 工作方式1:16位定时器/计数器方式,因此,最多可以计到216,也就是65 536次。 工作方式2和工作方式3:都是8位的定时器/计数器方式,因此,最多可以计到28,也说是256次。

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

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

17

37.利用定时器输出周期为2 ms的方波, 设单片机晶振频率为 6 MHz。试编程实现之。 解:

选用定时器/计数器T0 作定时器, 工作在方式1,输出为P1.0 引脚, 2 ms 的方波可由 1 ms的高低电平相间隔而成, 因而只要每隔1 ms对 P1.0 取反一次即可得到这个方波。

初值的计算如下:ST0=12/(6×106)= 2×106S

--

TC=M-T/T0=216-1×103/2×106=65536-500=65036=FE0CH 当定时器/计数器采用方式0时,初值为:

TC=M-T/T0=213-1×103/2×106=8192-500=7692=1E0CH,

则真正的16位计数初值为:F00CH(高8位,低5位)

程序如下:

ORG 0000H LJMP START ORG 000BH LJMP T0INT ; T0中断入口 ORG 0030H

START: MOV SP, #60H ; 初始化程序 MOV TL0, #0CH ; T0赋初值 MOV TH0, #0FEH MOV TMOD, #01H ; 定时器/计数器0工作于方式1 SETB TR0 ; 启动T0 SETB ET0 ; 开T0中断 SETB EA ; 开总允许中断 SJMP $ T0INT: PUSH ACC PUSH PSW

CPL P1.0

MOV TL0, #0CH MOV TH0, #0FEH SETB TR0 ; 启动T0 POP PSW POP ACC RETI

END 当采用查询方式时: 兰色字部分应该为:

LP1: JBC TF0, LP2

SJMP LP1

LP2: CPL P1.0

MOV TL0, #0CH MOV TH0, #0FEH

SETB TR0 SJMP LP1 END

38.已知8051单片机系统时钟频率为6MHz,请利用定时器T0和P1.2输出占空比为1:8的矩形脉冲,其波形如图3.1所示,试编程实现之。

18

图3.1 习题3.39的波形图

解:

程序如下:

ORG 0000H LJMP START ORG 0100H

START:MOV SP,#60H

MOV TMOD,#02H MOV TH0,#0E7H MOV TL0,#0E7H CLR P1.2 SETB TR0 HIGH0:SETB P1.2

HIGH1:JBC TF0,LOW0 ;50μs到清TF0,转LOW0 AJMP HIGH1 ;50μs未到,转HIGH1等待 LOW0:MOV R7,#7 ;350μs=7×50μs CLR P1.2 ;P1.2=0输出350μs低电平

LOW1:JBC TF0,LOW2 ;50μs到清TF0,LOW2

AJMP LOW1

LOW2:DJNZ R7,LOW1 ;7次未到转LOW1

AJMP HIGH0 ;7次到转HIGH0 END

39.在8051单片机中,已知时钟频率为12MHz,请编程使P1.0和P1.1分别输出周期为2ms

和500?s的方波。 解:

选择T0工作于方式1定时500μs

fosc=12MHz机器周期T?1212?6??1?10s?1?s 6fosc12?10(216-X)×1μS=500μs X=65036=0FE0CH 程序如下:

ORG 1000H

MOV TMOD,#01H MOV TH0,#0FEH MOV TL0,#0CH SETB TR0 DEL:MOV R7,#4 ;2ms=4×500μs D500:JBC TF0,D2 ;500μs到清TF0,转移

AJMP D500 ;50μs未到,等待 D2:CPL P1.0

MOV TH0,#0FEH ;重装初值 MOV TL0,#0CH

DJNZ R7,D500 ;4次未到,转D500

CPL P1.1

AJMP DEL ;4次到,转DEL SJMP $

END

40.利用8051单片机定时器/计数器测量某正脉冲宽度,已知此脉冲宽度小于10ms,主机频率为12MHz。编程测量脉冲宽度,并把结果转换为BCD码,顺序存放在以片内50H单元为首地址的内存单元中(50H单元存个位)。 解:

程序如下:

19

ORG 0000H LJMP START ORG 0030H MOV SP,#60H MOV TMOD,#09H ;设T0为方式1,GATE=1

MOV TL0,#00H MOV TH0,#00H MOV R0,#4EH JB P3.2,$ ;等待P3.2变低 SETB TR0 ;启动T0工作 JNB P3.2,$ ;等待P3.2变高 JB P3.2,$ ;等待P3.2再次变低 CLR TR9 ;停止计数 MOV @R0,TL0 ;存放计数的二进制数低字节入4EH INC R0 MOV @R0,TH0 ;存放计数的二进制数高字节入4EH MOV R1,#50H ;BCD码首址 MOV R5,#3 ;BCD码字节数 CLR A LOOP1: MOV @R1,A ;清存BCD码单元 INC R1 DJNZ R5,LOOP1 MOV R7,#10H ;二进制数位数 LOOP2: MOV R0,#4EH ;二进制数首址 MOV R6,#2 ;二进制数字节数 CLR C LOOP3: MOV A,@R0 RLC A MOV @R0,A INC R0 DJNZ R6,LOOP3 ;2字节二进制数左移1位 MOV R5,#3 ;BCD码字节数 MOV R1,#50H LOOP4: MOV A,@R1 ADDC A,@R1 ;BCD码乘2加C运算 DA A MOV @R1,A INC R1 DJNZ R5,LOOP4 DJNZ R7,LOOP2 SJMP $ END

41.波特率、比特率和数据传送速率的含义是什么? 解:

为了衡量串行通信的速度,应该有一个测量单位,在数据通信中,描述数据传送速度的方式有3种: 波特率定义为每秒传送信号的数量,单位为波特(Baud)。比特率定义为每秒传送二进制数的信号数(或每秒传送二进制码元的个数),单位是bps(bit per second)或写成b/s(位/秒)。数据传送速率(或字符传送速率)定义为每秒传送多少个字符(或单位时间内平均数据传移速率,单位是字符/秒。

在串行通信中,传送的信号可能是二进制、八进制或十进制等。只有在传送的信号是二进制信号时,波特率才与比特率数值上相等。而在采用调制技术进行串行通信时,波特率是

START:

20

描述载波信号每秒钟变化为信号的数量(又称为调制速率)。在这种情况下,波特率与比特率在数值上可能不相等。

42.什么是串行异步通信?它有哪些特征?

解:

异步通信中,接收器和发送器有各自的时钟,数据常以字符为单位组成字符帧传送,用一帧来表示一个字符,其字符帧的数据格式为:在一帧格式中,先是一个起始位“0”(低电平),然后是5~8个数据位,规定低位在前,高位在后,接下来是1位奇偶校验位(可以省略),最后是1~2位的停止位“1”(高电平)。 异步通信的优点是不需要传送同步脉冲,可靠性高,所需设备简单;缺点是字符帧中因包含有起始位和停止位而降低了有效数据的传输速率。

43.单片机的串行接口由哪些功能部件组成?各有什么作用? 解:

MCS-51单片机的串行接口由发送缓冲器SBUF、发送控制器、接收缓冲器SBUF、输入移位寄存器、接收控制器、波特率发生器等部件组成。

发送缓冲器SBUF用于存放将要发送的数据,接收缓冲器SBUF用于存放接收的数据,输入位移寄存器用于接收缓冲并实现串/并转换,发送/接收控制寄存器用于控制串行口的工作,波特率发生器用于控制串行口发送/接收数据的速度。 44.简述串行接口接收和发送数据的过程。 解:

串行接口的接收和发送是对同一地址(99H)两个物理空间的特殊功能寄存器SBUF进行读或写的。当向SBUF发\写\命令时(执行\,A\指令),即向发送缓冲器SBUF装载并开始由TXD引脚向外发送一帧数据,发送完使发送中断标志位TI=1。在满足串行接口接收中断标志位RI(SCON.O)=0的条件下,置允许接收位REN(SCON.4)=1,就会接收一帧数据进入移位寄存器,并装载到接收SBUF中,同时使R1=1。当发读SBUF命令时(执行\A,SBUF\指令),便从接收缓冲器SBUF读取信息通过80C5l内部总线送CPU。

45.8051串行接口有几种工作方式?有几种帧格式?各工作方式的波特率如何确定? 解:

串行口有四种工作方式:方式0(8位同步移位寄存器),方式1(10位异步收发),方式2(11位异步收发),方式3(11位异步收发)。

字符帧的数据格式为:在一帧格式中,先是一个起始位“0”(低电平),然后是5~8个数据位,规定低位在前,高位在后,接下来是1位奇偶校验位(可以省略),最后是1~2位的停止位“1”。两个字符帧之间可以有空闲位,也可以无空闲位。

在8051串行口的四种工作方式中,方式0和2的波特率是固定的,而方式1和3的波特率是可变的,由定时器T1的溢出率(T1溢出信号的频率)控制。各种方式的通信波特率如下:

① 方式0的波特率固定为系统晶振频率的1/12,其值为fosc/12。 其中:fosc——系统主机晶振频率

② 方式2的波特率由PCON中的选择位SMOD来决定,可由下式表示:

波特率=(2SMOD/64)×fosc

即:当SMOD=1时,波特率为fosc/32,当SMOD=0时,波特率为fosc/64

③ 方式1和方式3的波特率由定时器T1的溢出率控制。因而波特率是可变的。 定时器T1作为波特率发生器,相应公式如下:

波特率=(2SMOD/32)×定时器T1溢出率 T1溢出率=T1计数率/产生溢出所需的周期数

=(fosc/12)/(2K?TC)

式中:K——定时器T1的位数

TC——定时器T1的预置初值 46.简述单片机多机通信的原理。 解:

21

当一片80C51(主机)与多片80C51(从机)通信时,

① 主机的SM2位置0,所有从机的SM2位置1,处于接收地址帧状态。

② 主机发送一地址帧,其中,8位是地址,第9位为地址/数据的区分标志,该位置1表示该帧为地址帧。

③ 所有从机收到地址帧后,都将接收的地址与本机的地址比较。对于地址相符的从机,使自己的SM2位置0(以接收主机随后发来的数据帧),并把本站地址发回主机作为应答;对于地址不符的从机,仍保持SM2=1,对主机随后发来的数据帧不予理睬。

④ 从机发送数据结束后,要发送一帧校验和,并置第9位(TB8)为1,作为从机数据传送结束的标志。

⑤ 主机接收数据时先判断数据接收标志(RB8),若接收帧的RB8=0,则存储数据到缓冲区,并准备接收下帧信息。若RB8=1,表示数据传送结束,并比较此帧校验和,若正确则回送正确信号00H,此信号命令该从机复位(即重新等待地址帧);若校验和出错,则发送0FFH,命令该从机重发数据。

⑥ 主机收到从机应答地址后,确认地址是否相符,如果地址不符,发复位信号(数据帧中TB8=1);如果地址相符,则清TB8,开始发送数据。 ⑦ 从机收到复位命令后回到监听地址状态(SM2=1)。否则开始接收数据和命令。 47.在微机与单片机构成的测控网络中,提高通信的可靠性要注意哪些问题?

解:

在微机与单片机构成的测控网络信中,对于串行口数据传输接口的抗干扰能力,在不超过接口标准指定的适用范围时,都具有一定的抗干扰能力,以保证信号传输的可靠性。但在一些工业测控系统中,通信环境往往十分恶劣,就必须充分考虑通信的抗干扰能力,以保证通信的可靠性。

(1)选择合适的通信标准。例如:长距离传输采用RS-485标准能有效抑制功模干扰,采用20Ma电流环可以降低信号对各种电器噪声的敏感程度。

(2)在高噪声环境下使用光纤传输介质在高噪声环境下可以有效减少噪声干扰。 (3)采用光电隔离技术可以提高系统的安全性和可靠性

(4)在发送器输出接口采用限流电路或在发送器输出端外接电容器,可以有效抑制数据传输过程中的串扰。

(5)采取降低发送端数据速率的方法可以减少接收端接收数据益处的错误。

48.某异步通信接口按方式3传送,已知其每分钟传送3600个字符,计算其传送波特率。 解:11(位)×3600(字符/分钟)=39600b/分钟=660b/s (方式3为每个字符11位)。 49.利用8051串行口控制8位发光二极管工作,要求发光二极管每1s交替地亮、灭,画出电路图并编写程序。 解:

主程序框图如下:

22

串口初始化 FFH送SBUF 设 标 志 调延时程序 标志位取反 标志为1 FF送SBUF 标志为零 标志为零 OOH送SBUF 程序如下:

ORG 0040H

MOV SCON,#00H MOV SBUF,#0FFH SETB C

MOV 00H,C AA: ACALL DELAY

CPL 00H MOV C,00H JC BB

MOV SBUF,#00H SJMP CC

BB:MOV SBUF,#0FFH CC:AJMP AA DELAY: MOV R7,#8

D1:MOV R6,#250 D2:MOV R5,#250 D3:DJNZ R5,D3 DJNZ R6,D2 DJNZ R7,D1 RET END

50.试编写一串行通信的数据发送程序,发送片内RAM的20H~2FH单元的16字节数据,串行接口方式设定为方式2,采用偶校验方式。设晶振频率为6MHz。 解:

采用查询方式编写发送程序如下:

ORG 0000H LJMP START ORG 0030H START:MOV SP,#60H

MOV SCON,#80H

;设定方式2发送

23

MOV PCON,#80H ;波特率为fOSC/32 MOV R0,#20H ;给待发送数据块地址指针R0置初值 MOV R7,#16 ;给数据块长度计数器R7置初值 CLR TI ;清TI标志位

LS: MOV A,@R0 ;取一字节数据送A MOV C,P ; A中有奇数个“1”时,P置“1” MOV TB8,C ; P→TB8,作为奇偶校验位 MOV SBUF,A ;启动发送 JNB TI,$ ;查询发送标志,等待一字节发送完 CLR TI ;清TI标志位 INC R0 DJNZ R7,LS RET END

51.试编写一串行通信的数据接收程序,将接收到的16字节数据送入片内RAM 30H~3FH单元中。串行接口设定为方式3,波特率为1200bps,晶振频率为6MHz。 解:

程序如下:

START:

否则有错

PN: RIG:

PER:

ORG 0000H LJMP START ORG 0100H MOV SP,#60H MOV TMOD,#20H MOV TH1,#0F3H MOV TL1,#0F3H SETB TR1

MOV SCON,#0D0H MOV R0,#30H MOV R7,#16 JNB RI,$ CLR RI

MOV A,SUBF JN BP,PN JNB LJMP JB MOV

RB8,PER RIG

RB8,PER @R0,A

;设定T1为模式2定时 ;送时间常数

;启动定时器T1

;串行接口设定为方式3,并允许接收

;查询等待接收

;从串行接口中读取数据

;对该字节进行查错处理若P=RB8无错,;若P=1,RB8=0,有错,转出错处理 ;若P=1,RB8=1,无错,转保存数据 ;若P=0,RB8=1,有错,转出错处理 ;若P=0,RB8=0,无错,保存接收到的数

;16字节未接收完,则继续

;正确接收完16位数据,清出错标志位7F ;校验有错,置位7F

INC R0

DJNZ R7,LOOP CLR 7F SJMP $ SETB 7F SJMP $ END

习题4

1.三态缓冲寄存器输出端的“三态”是指( 低电平 )态、( 高电平 )态和( 高阻 )态。

24

2. 扩展外围芯片时,片选信号的三种产生方法为:( 线选法 )、( 全地址译码法 )、( 部分地址译码法 )。

3. MCS-51单片机访问片外存储器时,利用( ALE )信号锁存来自( P0 )口的低8位地址信号。

4. 74LS138是具有3个输入的译码器芯片,其输出作为片选信号时,最多可以选中( 8 )块芯片。

5. MCS-51外扩ROM,RAM和I/O口时,它的数据总线是( A )。

A:P0口 B:P1口 C:P2口 D:P3口

6. 使用8255可以扩展出的I/O口线是( C )。

A:16根 B:22根 C:24根 D:32根

7. 当8031外出扩程序存储器8KB时,需使用EPROM 2716( C )。

A:2片 B:3片 C:4片 D:5片

8. 访问外部数据存储器时,不起作用的信号是( D )。 A:RD B:WR C:ALE D:PSEN 9. 扩展外部存储器时要加锁存器74LS373,其作用是( A )。

A:锁存寻址单元的低八位地址 B:锁存寻址单元的数据

C:锁存寻址单元的高八位地址 D:锁存相关的控制和选择信号

10. 若某存储器芯片地址线为12根,那么它的存储容量为( C )。

A:1KB B:2KB C:4KB D:8KB

11. 解释三总线的概念。 解:

MCS-51系列单片机具有很强的外部扩展功能。其外部引脚可构成三总线结构,即地址总线、数据总线和控制总线。单片机所有的外部扩展都是通过三总线进行的。

(1)地址总线(AB)

地址总线用于传送单片机输出的地址信号,宽度为16位,可寻址的地址范围为216=64KB。地址总线是单向的,只能由单片机向外发出。P0口提供低8位地址,P2口提供高8位地址。由于P0口既做地址线又做数据线,分时复用,所以,P0口提供的低8位地址是由P0口经锁存器提供的。锁存信号是由CPU的ALE引脚提供的。

(2)数据总线(DB)

数据总线是由P0口提供的,宽度为8位。P0口是双向三态口,是单片机应用系统中使用最频繁的通道。P0口提供的数据总线上要连接多个扩展的外围芯片,而某一时刻只能有一个有效的数据传输通道。具体哪一个芯片的数据通道有效,是由各个芯片的片选信号控制选择的。欲使CPU与某个外部芯片交换数据,则CPU必须先通过地址总线发出该芯片的地址,使该芯片的片选信号有效,则此时P0口数据总线上的数据只能在CPU和该芯片之间进行传送。

(3)控制总线(CB)

控制总线实际上是CPU输出的一组控制信号。每条控制信号都是单向的,但是由多条不同的控制信号组合而成的控制总线则是双向的。MCS-51系列单片机中用于系统扩展的控制信号有RD,WR,PSEN, ALE和EA。 12.I/O接口的作用是什么? 解:

接口(也称为I/O接口)是指连接CPU与外部输入/输出设备之间的部件,这些部件是CPU与外设之间进行信息传送的媒介。

在信息传送过程中,接口起着数据锁存、数据缓冲、输入/输出、联络、数据转换、中断管理、时序控制、可编程、电器特征匹配等作用。 13.I/O接口数据有几种传送方式?各有什么特点? 解:

CPU与外设之间传输数据的控制方式通常有三种:程序方式、中断方式和DMA方式。 程序方式:指用输入/输出指令,来控制信息传输的方式,是一种软件控制方式,根据程序控制的方法不同,又可以分为无条件传送方式和条件传送方式。

25

无条件传送方式接口简单,适用于那些能随时读写的设备。条件传送方式(查询方式) 的特点是接口电路简单,CPU利用率低(程序循环等待),接口需向CPU提供查询状态。适用于CPU不太忙,传送速度要求不高的场合。要求各种外设不能同时工作,外设处于被动状态。

中断方式:当外设准备好时,由外设通过接口电路向CPU发出中断请求信号,CPU在允许的情况下,暂停执行当前正在执行的程序,响应外设中断,转入执行相应的中断服务子程序,与外设进行一次数据传送,数据传送结束后,CPU返回继续执行原来被中断的程序。其特点是CPU的利用率高,外设具有申请CPU中断的主动权, CPU和外设之间处于并行工作状态。但中断服务需要保护断点和恢复断点(占用存储空间,降低速度), CPU和外设之间需要中断控制器。适用于CPU的任务较忙、传送速度要求不高的场合,尤其适合实时控制中的紧急事件处理。

存储器直接存取方式(DMA):外设利用专用的接口(DMA控制器)直接与存储器进行高速数据传送,并不经过CPU(CPU不参与数据传送工作),总线控制权不在CPU处,而由DMA 控制器控制。其特点是接口电路复杂,硬件开销大。大批量数据传送速度极快。适用于存储器与存储器之间、存储器与外设之间的大批量数据传送的场合。 14.外设端口有几种编址方法?各有什么特点? 解:

在计算机系统中,凡需要进行读写操作的部件都存在编址的问题。存储器的每个单元均有自己的地址,对于I/O接口,则需要对接口中的每个端口进行编址。通常采取两种编址方法:一种是独立编址,另一种是统一编址。

统一编址又称“存储器映射方式”。在这种编址方式下 ,I/O端口地址置于存储器空间中,在整个存储空间中划出一部分空间给外设端口 ,端口和存储单元统一编址。其优点是无需专门的I/O指令,对端口操作的指令类型多,从而简化了指令系统的设计。缺点是端口占用存储器的地址空间,使存储器容量更加紧张,同时端口指令的长度增加,执行时间较长,端口地址译码器较复杂。

独立编址又称“I/O映射方式”。这种方式的端口单独编址构成一个I/O空间,不占用存储器地址空间。其优点是端口所需的地址线较少,地址译码器较简单,采用专用的I/O指令,端口操作指令执行时间少,指令长度短。缺点是输入输出指令类别少,一般只能进行传送操作。

MCS-51单片机采用了统一编址方式,即I/O端口地址与外部数据存储单元地址共同使用0000H~FFFFH(64KB)。因此,MCS-51单片机应用系统扩展较多外部设备和I/O接口时,要占去大量的数据存储器的地址。

15.什么是全地址译码?什么是地址部分译码?各有什么特点? 解:

所谓的全地址译码法是利用译码器对系统地址总线中未被外扩芯片用到的高位地址线进行译码,以译码器的输出作为外围芯片的片选信号。全地址译码法芯片的地址范围确定方法是:以外部扩展的全部芯片未用到的地址线作为地址译码器的输入,译码器的输出作为片选信号接到外部扩展芯片上。

全地址译码法优点是存储器的每个存储单元只有惟一的一个系统空间地址,不存在地址重叠现象;对存储空间的使用是连续的,能有效地利用系统的存储空间;利用同样的高位地址线,全地址译码法编址产生的选片线比线选法多,为系统扩展提供了更多的冗余条件。其缺点是所需地址译码电路较多,尤其在单片机寻址能力较大和所采用的存储器容量较小时更为严重。全地址译码法是单片机应用系统设计中经常采用的方法。

部分地址译码法是指单片机的未被外扩芯片用到的高位地址线中,只有一部分参与地址译码,其余部分是悬空的。在部分地址译码方式下,无论CPU使悬空的高位地址线上的电平如何变化,都不会影响它对外部存储单元的选址,故存储器每个存储单元的地址不是惟一的,存在地址重叠现象。因此,采用部分地址译码法时必须把程序和数据存放在基本地址范围内(即悬空的高位地址线全为低电平时存储芯片的地址范围),以避免因地址重叠引起程序运行的错误。部分地址译码法的优点是可以减少所用地址译码器的数量。

16. MCS-51单片机系统中,片外程序存储器和片外数据存储器共用16位地址线和8位数据线,为何不会产生冲突?

26

解:

程序存储器和数据存储器虽然共用16位地址线和8位数据线,但由于数据存储器的读和写由RD和WR信号控制,而程序存储器由读选通信号PSEN控制,这些信号在逻辑上时序上不会产生冲突,因此,两者虽然共处于同一地址空间,但由于控制信号不同,所以不会发生总线冲突。

17.某一单片机应用系统,需扩展4KB的EPROM和2KB的RAM,还需外扩一片8255并行接口芯片,采用线选法,画出硬件连接图,并指出各芯片的地址范围。 解:

硬件连接图如下图所示。

图 4.17题硬件连接电路图

注:8255的复位线RESET应与MCS-51的RESET线连上。复位、晶振电路应画上。 各芯片的地址范围为:

2732:E000H~EFFFH 6116:D800H~DFFFH 8255:BFFCH~BFFFH

18.某单片机应用系统,需扩展2片8KB的EPROM和2片8KB的RAM,采用地址译码法,画出硬件连接图,并指出各芯片的地址范围。

解:

硬件连接电路图如图4.18所示。各芯片的地址范围为: 2764(1#):0000H~1FFFH 2764(2#):2000H~3FFFH

6264(1#):4000H~5FFFH 6264(2#):6000H~7FFFH

图4.18 4.18题硬件连接电路图

19.I/O接口扩展方法有哪几种?

27

解:

(1)并行总线扩展的方法 (2)串行口扩展方法

(3)I/O端口模拟串行方法

(4)通过单片机内I/O的扩展方法 20.8255A有几种工作方式?如何选择工作方式?A口和B口的工作方式是否完全相同?解:

8255A有3种工作方式:方式0、方式1和方式2。 ① 方式0(基本输入/输出方式)。这种方式不需要任何选通信号,适合于无条件传输数据的设备,数据输出有锁存功能,数据输入有缓冲(无锁存)功能。

② 方式1(选通输入/输出方式)。这种工作方式下,A组包括A口和C口的高四位(PC7~PC4),A口可由程序设定为输入口或输出口,C口的高四位则用来作为输入/输出操作的控制和同步信号;B组包括B口和C口的低四位(PC3~PC0),功能和A组相同。

③ 方式2(双向I/O口方式)。仅A口有这种工作方式,B口无此工作方式。此方式下,A口为8位双向I/O口,C口的PC7~PC3用来作为输入输出的控制和同步信号。此时,B口可以工作在方式0或方式1。

21.8255A的端口地址为7F00H~7F03H,试编程对8255A初始化,使A口按方式0输入,B口按方式1输出。 解:

程序如下:

MOV DPTR,#7F03H MOV A,#10010100B MOV @DPTR,A

22.8255A的方式控制字和C口按位置位/复位控制字均写入8255A的控制寄存器,8255A是如何来区分这两个控制字的? 解:

写入控制端口的控制字的最高位为1则为方式控制字,否则为C口置位/复位控制字。 23.试编程对8155初始化,使A口为选通方式输出,B口为基本输入,C口作为控制联络信号,启动/计数器,按方式1工作,输出方波,频率为50Hz,输入时钟频率为500kHz。 解:

8155输入时钟的周期=1/500×103=2×10-6 (s),8155计数器的初值为: 20×10-3/2×10-6=10000=2170H。

由于/计数器按方式1工作,所以写入定时器/计数器的初值为6170H。程序如下: ORG 0000H LJMP START ORG 0100H

START: MOV SP,#60H

MOV DPTR,#7F04H ;计数器的初值 MOV A,#70H MOVX @DPTR,A INC DPTR MOV A,#61H MOVX @DPTR,A

MOV DPTR,#7F00H ;写命令字,启动定时器/计数器工作 MOV A,#0C5H MOVX @DPTR,A SJMP $ END

24.假设8155的TIMER IN引脚输入的脉冲频率为1MHz,编写程序在8155的TIMER OUT引脚输出周期为10ms的方波。

28

解:

设8155有关寄存器端口地址为: 20H 命令寄存器 24H 定时器低字节 25H 定时器高字节

8155输入时钟的周期=1/1×106=1×10-6 (s),8155定时器/计数器的初值=10×10-3/1×10-6=10000=2710H。由于定时器/计数器按方式1工作,所以写入定时器/计数器的初值为6710H。

在8155的TIMEROUT引脚上输出10mS方波的程序如下:

ORG 1000H

MOV R0,#25H MOV A,#10H MOVX @R0,A DEC R0

MOV A,#67H MOVX @R0,A MOV R0,#20H MOV A,#0F0H MOVX @R0,A SJMP $

25.使用8255A或者8155的B端口驱动红色和绿色发光二极管各4只,且红、绿发光二极管轮流发光各1s,不断循环,试画出包括地址译码器、8255A或8155与发光管部分的接口电路图,并编写控制程序。 解:

电路连接图如图4.25所示。

图4.25 4.25题硬件连接电路图

其中,PB0~PB3接红色发光二极管,PB4~PB7接绿色发光二极管。设MCS-51单片机主频为12MHz。

程序如下:

ORG 0000H LJMP START ORG 0030H

START:MOV SP, #60H

MOV DPTR, #7FFFH ; 数据指针指向8255A控制口

MOV A, #80H MOVX @DPTR, A ; 工作方式字送8255A控制口 MOV DPTR, #7FFDH ; 数据指针指向8255A 的B口

MOV A, #0FH ; 置红色发光二极管亮 LP1: MOVX @DPTR, A ; 置红色发光二极管亮 LCALL DELAY ; 调用1S延时子程序

29

CPL A ; 置发光二极管亮反色 LJMP LP1 ; 循环执行

DELAY: MOV R7,#8 ; 1S延时子程序

D1:MOV R6,#250 D2:MOV R5,#250 D3:DJNZ R5,D3

DJNZ R6,D2 DJNZ R7,D1 RET END

采用定时器T0方式1中断实现1S定时。 1S=50mS×20次。

T0方式1实现50mS定时,初值=216-50mS/1μS=15536=3CB0H

(1S=20mS×50次,初值=216-20mS/1μS=45536=B1E0H)

ORG 0000H LJMP START ORG 000BH LJMP TT0 ORG 1000 H

START:MOV SP, #60H

MOV DPTR, #7FFFH ; 数据指针指向8255A控制口

MOV A, #80H MOVX @DPTR, A ; 工作方式字送8255A控制口 MOV DPTR, #7FFDH ; 数据指针指向8255A 的B口

MOV A, #0FH ; 置红色发光二极管亮 MOV R2, A

MOVX @DPTR, A ; 置红色发光二极管亮 MOV 30H, #00H ; 次数计数单元初值

MOV TL0, #0B0H ; T0赋初值 MOV TH0, #3CH MOV TMOD, #01H ; 定时器/计数器0工作于方式1 SETB TR0 ; 启动T0 SETB ET0 ; 开T0中断 SETB EA ; 开总允许中断

LP1:SJMP LP1 ; 等待定时器中断 TT0:PUSH ACC PUSH PSW INC 30H MOV A, 30H

CJNE A, #20, LP2 MOV A, R2 CPL A

MOV R2, A

MOVX @DPTR, A MOV 30H, #00H

LP2: MOV TL0, #0B0H ; T0赋初值 MOV TH0, #3CH POP PSW POP ACC SETB TR0

RETI END

26.简述RS-232C, RS-422A及RS-485串行通信接口的特点,画出在双机通信情况下,3个串行通信接口的接口电路。

30

解:

RS-232C采取不平衡传输方式,是为点对点(即只用一对收、发设备)通信而设计的,采用负逻辑,其驱动器负载为3k?~7k?。由于RS-232C发送电平与接收电平的差仅为2~3V,所以其共模抑制能力差,再加上双绞线上的分布电容,因此,RS-232C适用于传送距离不大于15m,速度不高于20kb/s的本地设备之间通信的场合。

RS-422由RS-232发展而来,RS-422定义了一种平衡通信接口,将传输速率提高到10Mb/s,传输距离延长到1220m(速率低于100kb/s时),并允许在一条平衡总线上最多连接10个接收器。RS-422是一种单机发送、多机接收的单向、平衡的通信总线标准。

RS-485是在RS-422的基础上制定的标准,增加了多点、双向通信能力,通常在要求通信距离为几十米至上千米时,广泛采用RS-485总线标准。它采用平衡发送和差分接收,即在发送端,驱动器将TTL电平信号转换成差分信号输出;在接收端,接收器将差分信号变成TTL电平。具有较高的灵敏度,能检测低至200mV的电压,具有抑制共模干扰的能力,数据传输可达千米以上。

RS-232的双机通信接口电路如图4.26-1所示。

图4.26-1 4.26题硬件连接电路图

RS-422和RS-485的双机通信接口电路如图4.26-2所示。

图4.26-2 4.26题硬件连接电路图 27.叙述单片机外扩CPLD/FPGA的方法。

为保证系统可靠性,单片机与CPLD/FPGA两部分之间功能应设计为相对独立。单片机与CPLD/FPGA的扩展接口方式一般有两种,即总线方式与独立方式:

(1)总线方式。所谓总线方式,是指MCS-51单片机按外部总线时序与CPLD/FPGA进行数据与控制信息通信,其特点是:

① 速度快。

② 节省CPLD芯片的I/O口线。

③ 相对于非总线方式,总线方式连接具有单片机编程简捷,控制可靠等特点。 ④ 在CPLD/FPGA中通过逻辑切换,单片机易于扩展SRAM或ROM。

这种方式有许多实用之处,如利用类似于微处理器系统的DMA的工作方式,首先由CPLD/FPGA与接口的高速A/D等器件进行高速数据采样,并将数据暂存于SRAM中,采样结束后,通过切换,使单片机与SRAM以总线方式进行数据传送,以便发挥单片机强大的数据处理能力。

(2)独立方式。所谓独立方式,是指MCS-51单片机与CPLD/FPGA之间不需要按外部总线时序进行通信,而是各自相对独立地完成自己的通信功能。与总线接口方式不同,几

31

乎所有单片机都能以独立接口方式与CPLD/FPGA进行通信,其通信的时序方式可由所设计的软件自由决定,形式灵活多样。其最大的优点是CPLD/FPGA中的接口逻辑无须遵循单片机内固定总线方式的读/写时序。CPLD/FPGA的逻辑设计与接口和单片机程序设计可以分先后相对独立地完成。事实上,目前许多流行的单片机已无总线工作方式,如89C2051、97C2051、Z84系列、PICI 6C5X系列等。

28. 简述PSD器件的特点,画出8051外扩PSD器件的电路图。

主要特点:

(1)19个可调配置的I/O引脚:PA(PA0~PA7)、PB(PB0~PB7)、PC(PC0~PC2)。可作为单片机I/O端口扩展,锁存地址输出;,漏极开路或CMOS输出。

(2)PSD3xx的数据总线AD0~AD15为16位,通过对PADA、PADB的配置,既可与8位单片机相连工作于8位数据方式,也可与16位单片机相连工作于16位数据方式。

(3)两个可编程阵列PADA和PADB采用可重复编程的COMSEPROM技术制造,用户可编程可擦除,共有40个乘积项和多达16个输入及24个输出。

(4)256k位的UVEPRPM,可配置为32k×8或16k×16两种方式,可为优化地址译码而划分为8个相等的可映射存储块;存储块结构为4k×8或2k×16两种方式;存储块的选择由PADA的输出来决定。90ns的EPROM访问时间(包括输入锁存和PAD地址译码时间)。

(5)16k位的SRAM,可配置为2k×8或1k×1两种方式6;90ns的SRAM访问时间(包括输入锁存和PAD地址译码时间)。

(6)可实现配置加密和PAD译码加密,从而克服了传统电路的缺点,使得电路和程序无法破译。

(7)由PC机上运行PSDsoft软件实现对PSD系列芯片的配置、编程等软件设计。 除此之外,PSD4xxx系列在基本性能增加的基础上,还增加了4MB闪存、2个组合PLD、微控制器总线接口、JTAG接口、ISP、IAP、页寄存器、电源管理单元等。

8051外扩PSD器件的电路:

MCS-51单片机与PSD的接口电路如图4.3.17所示。8051用对外部程序存储器访问信号PSEN访问PSD311中的程序存器,用WR、RD与PSD311的读写端对应相连,ALE信号与PSD311的ALE信号对应相连。8051是8位数据/地址复用方式,其数据/地址线可接与PSD311的AD0~AD7相连,此时PA口作I/O端口。因为地址译码空间为64K,所以PC口用作I/O端口,而不作A16~A18地址的输入,时把PSD311的复位信号设为高有效。

图4.28 单片机与PSD的接口电路图

29. 指出DS12C887具有的功能及内部RAM单元的用途。 解:

DS12C887是美国Dallas公司生产的实时日历时钟芯片,采用CMOS技术,与

MC146818B和DS1287管脚兼容,可直接替换。内含一个锂电池,在断电情况下运行十年以上不丢失数据。具有秒、分、时、星期、日、月、年计数功能,对于一天内的时间记录,有12小时制和24小时制两种模式。在12小时制模式中,用AM和PM区分上午和下午,可实现闰年调整。时间的表示方法有两种,二进制数和BCD码表示方法。内部有128字节RAM,其数据具有掉电保护功能。可以选择Motorola和Intel总线时序。用户可对DS12C887进行编程以实现多种方波输出,并可对其内部的三路中断通过软件进行屏蔽。工作电压为

32

4.5~5.5V,工作电流为7~15mA。DS12C887具有功耗低、外围接口简单、精度高、工作稳定可靠等优点,可广泛用于各种需要较高精度的实时时钟场合中。

DS12C887内部有128B的存储器,系统占用15B,用户可用113B,具体分布情况如下表所示。

地 址 00H 01H 02H 03H 04H 05H 06H 07H 08H 09H 0AH 0BH 0CH 0DH 32H 0EH~31H, 33H~7FH 功 能 秒 秒报警 分 分报警 时,12小时模式 时,24小时模式 时报警,12小时模式 时报警,24小时模式 星期,星期日=1 日 月 年 控制寄存器A 控制寄存器B 控制寄存器C 控制寄存器D 世纪 用户数据区 取 值 范 围 二进制 00~3BH 00~3BH 00~3BH 00~3BH 0~0CH AM,81~8CH PM 00~17H 0~0CH AM,81~8CH PM 00~17H 01~07H 01~1FH 01~0CH 00~63H 13H,14H 十进制 00~59 00~59 00~59 00~59 01-12 AM, 81-92 PM 00~23 01-12 AM, 81-92 PM 00~23 01~07 01~31 1~12 00~99 19, 20

30.简述系统监控芯片MAX692A的功能。 解:

MAX692A是美国Maxim公司的系统监控芯片产品,具有后备电池切换、电压监视器、 “看门狗”监控等功能。

31.何谓“看门狗”?它如何实现对系统程序的监控? 解:

“看门狗(WDT)”,也称为程序监视定时器。WDT的作用是通过不断监视程序每周期的运行事件是否超过正常状态下所需要的时间,从而判断程序是否进入了“死循环”,并对进入“死循环”的程序作出系统复位处理。

在程序中设置适当的指令,清WDT,就可监视微处理器的工作。例如在主程序开始时,将WDT置位,如果主程序执行过程中产生死循环,就无法清WDT,超过WDT的定时时间时,WDT就会对微处理器发出复位信号。从而实现对系统程序的监控。 32.说明I2C总线的特点以及在单片机中实现该总线的方法。 解:

I2C总线是由串行数据线SDA和串行时钟线SCL构成的,可发送和接收数据。它允许若干兼容器件共享总线。所有挂接在I2C总线上的器件和接口电路都应具有I2C总线接口,且所有的SDA/SCL同名端相连。总线上所有器件要依靠SDA发送的地址信号寻址,不需要片选线。

I2C总线最主要的优点是其简单性和有效性。占用的空间小,降低了互连成本。总线的长度可高达7.6m,并且能够以10kbps的最大传输速率支持40个组件。支持多主控器件,其中,任何能够进行发送和接收的设备都可以成为主器件。主控能够控制信号的传输和时钟频率。当然,在某时刻只能有一个主控器件。

在单片机控制系统中,广泛使用I2C器件。如果单片机自带I2C总线接口,则所有I2C

33

器件对应连接到该总线上即可;若无I2C总线接口,则可以使用I/O口模拟I2C总线。 使用单片机I/O口模拟I2C总线时,硬件连接非常简单,只需两条I/O口线即可,在软件中分别定义成SCL和SDA。MCS-51单片机实现I2C总线接口电路如图4.32所示。

电路中单片机的P1.0引脚作为串行时钟线SCL,P1.1引脚作为串行数据线SDA,通过程序模拟I2C串行总线的

通信方式。I2C总线适用于通信速度要求不高而体积要求

较高的应用系统。 图4.32 4.32题硬件连接电路图

习题5

1. A/D转换器的作用是将( 模拟量 )量转为( 数字量 )量;D/A转换器的作用是将( 数字量 )量转为( 模拟量 )量。

2. A/D转换器的四个最重要指标是( 分辨率 )、( 转换精度 )、( 线性误差 )和(转换时间 )。 3. 若某8位D/A转换器的输出满刻度电压为+5V,则该D/A转换器的分辨率为( 5/2 )V。

4. 当单片机启动ADC0809进行模/数转换时,应采用( B )指令。

A:MOV A,20 B:MOVX @DPTR,A C:MOVC A,@A+DPTR D:MOVX A,@DPTR

5. 读取AD转换的结果,使用( C )指令。

A:MOV A,@Ri B:MOVX @DPTR,A C:MOVX A,@DPTR D:MOVC A,@DPT

6. 当DAC 0832 D/A转换器的CS接8031的P2.0时,程序中0832的地址指针DPDR寄存器应置为( D )。

A:0832H B;FE00H C:FEF8H D;以上三种都可以

7. 传感器的主要作用是什么? 解:

传感器是将电量或非电量转换为可测量的电量的检测装置,是由敏感元件和转换元件组成的。国际电工委员会IEC将传感器定义为:传感器是测量系统中的一种前端部件,它将各种输入变量转换成可供测量的信号。 8.输入通道和输出通道的特点是什么? 解:

(1)输入通道的特点:

① 输入通道要靠近拾取对象采集信息,以减少传输损耗,防止干扰; ② 输入通道工作环境因素严重影响通道的方案设计,没有选择的余地;

③ 传感器的输出往往是模拟信号、微弱信号输出,转换成计算机要求的信号电平时,需要使用一些模拟电路技术,因此输入通道通常是模拟、数字等混杂电路;

④ 传感器、变送器的选择和环境因素决定了输入通道电路设计的繁简,因为在输入通道中必须将传感器、变送器的输出信号转换成能满足计算机输入要求的TTL电平,输入通道中传感器、变送器输出信号与计算机逻辑电平的相近程度影响着输入通道的繁简程度;

⑤ 传感器输出信号一般比较微弱,为便于计算机拾取,常需要放大电路,这也是计算机系统中最容易引入干扰的渠道,所以输入通道中的抗干扰设计是非常重要的。 (2)输出通道的特点:

① 小信号输出,大功率控制;

② 输出伺服驱动控制信号,在伺服驱动系统中的状态反馈信号,作为检测信号输

34

8

入至输入通道;

③ 输出通道接近被控对象,环境复杂恶劣,电磁和机械干扰较为严重。

9.什么是D/A转换器? 解:

D/A转换器(Digit to Analog Converter)是将数字量转换成模拟量的器件,通常用DAC表示,它将数字量转换成与之成正比的电量,广泛应用于过程控制中。 10.简述D/A转换器的主要技术指标。 解:

D/A转换器的主要性能指标有:

(1)分辨率:单位数字量所对应模拟量增量,即相邻两个二进制码对应的输出电压之差称为D/A转换器的分辨率。它确定了D/A产生的最小模拟量变化,也可用最低位(LSB)表示。

(2)精度:精度是指D/A转换器的实际输出与理论值之间的误差,它是以满量程VFS的百分数或最低有效位(LSB)的分数形式表示。

(3)线性误差:D/A转换器的实际转换特性(各数字输入值所对应的各模拟输出值之间的连线)与理想的转换特性(始、终点连线)之间是有偏差的,这个偏差就是D/A的线性误差。即两个相邻的数字码所对应的模拟输出值(之差)与一个LSB所对应的模拟值之差。常以LSB的分数形式表示。

(4)转换时间TS(建立时间):从D/A转换器输入的数字量发生变化开始,到其输出模拟量达到相应的稳定值所需要的时间称为转换时间。 11.简述D/A转换芯片的主要结构特性。 解:

D/A转换芯片的主要结构特性为: (1)数字输入特性

数字输入特性包括接收数的码制、数据格式以及逻辑电平等。目前批量生产的D/A转换芯片一般都只能接收自然二进制数字代码。

(2)模拟输出特性

目前多数D/A转换器件均属电流输出器件,手册上通常给出的输入参考电压及参考电阻之下的满码(全l)输出电流I0。另外还给出最大输出短路电流以及输出电压允许范围。 (3)锁存特性及转换控制

D/A转换器对数字量输出是否具有锁存功能将直接影响与CPU的接口设计。如果D/A转换器没有输入锁存器,通过CPU数据总线传送数字量时,必须外加锁存器,否则只能通过具有输出锁存功能的I/O给D/A送入数字量

(4)参考电源

D/A转换中,参考电压源是唯一影响输出结果的模拟参量,是D/A转换接口中的重要电路,对接口电路的工作性能、电路的结构有很大影响。 12.DAC0832主要特性参数有哪些?

解:

① 8位并行D/A转换;

② 片内二级数据锁存,提供数据输入双缓冲、单缓冲、直通三种工作方式;

③ 电流输出型芯片,电流稳定时间1us。通过外接一个运算放大器,可以很方便地提供电压输出;

④ DIP20封装、单电源(+5 V~+15 V,典型值+5 V); ⑤ 只需在满量程下调整其线性度; ⑥ 单一电源供电(十5V~+15V), ⑦ 低功耗,200mW。 ⑧ 与MCS-51连接方便。

13.DAC0832与80C51单片机连接时有哪些控制信号?其作用是什么? 解:

CS:片选输入线,低电平有效。

35

ILE:数据锁存允许输入,高电平有效。

WR1:写1信号输入,低电平有效。当CS,ILE,WR1=010时,数据写入DAC0832的第一级锁存。

WR2:写2信号输入,低电平有效。

XFER:数据传输信号输入,当WR2,XFER=00时,数据由第一级锁存进入第二级锁存,并开始进行D/A转换。

14.简述逐次逼近式A/D转换器的工作原理。 解:

逐次逼近式A/D转换器的转换原理即“逐位比较”,如图5.9所市,它由N位寄存器、D/A转换器、比较器和控制逻辑等部分组成,N位寄存器代表N位二进制数码。

VN 模拟量输入 VX 时钟 启动 时序与控制 逻辑电路 N位寄存器 DONE OE 比较器 D/A转换器 N位数字量输出 输出缓冲器 图5.14 逐次逼近式A/D转换器原理图

当模拟量Vx送入比较器后,启动信号通过控制逻辑电路启动A/D开始转换。首先,置N位寄存器最高位(Dn-1)为“1”,其余位清“0”;N位寄存器的内容经D/A转换后得到整个量程一半的模拟电压VN,与输入电压Vx比较。若Vx≥VN时,则保留Dn-1=1;若Vx

逐次逼近型的A/D转换器DAC0809 、DAC0816 双积分型A/D转换器 MC14433 、ICL7035 16.如何确定A/D转换器的位数? 解:

A/D转换器位数的确定与整个测量控制系统所要测量控制的范围和精度有关,计算时应比总精度要求的最低分辨率高一位。实际选取的A/D转换器的位数应与其它环节所能达到的精度相适应。只要不低于它们就行,选得太高既没有意义,而且价格还要高得多。 17.如何确定A/D转换器的转换速率? 解:

(1)积分型、电荷平衡型和跟踪比较型A/D转换器转换速度较慢,转换时间从几毫秒到几十毫秒不等,只能构成低速A/D转换器,一般运用于对温度、压力、流量等缓变参量的检测和控制。

(2)逐次比较型的A/D转换器的转换时间可从几μS到100μS左右,属于中速A/D转换器,常用于工业多通道单片机控制系统和声频数字转换系统等。

(3)高速A/D转换器适用于雷达、数字通讯、实时光谱分析、实时瞬态记录、视频数字转换系统等。

18.A/D转换器ADC0809的编程要点是什么? 解:

在软件编写时,应根据硬件连接电路计算被选择的模拟通道的地址;执行一条输出指令,启动A/D转换;转换结束后,执行一条输入指令,读取A/D转换结果。

可以采用延时、查询和中断的方法判别A/D转换结束 。

36

19.在什么情况下要使用D/A转换器的双缓冲方式?试以DAC0832为例画出双缓冲方式的接口电路。 解:

(1)应设置D/A转换器的双缓冲方式的情况

有些D/A转换器(如DAC0832)的内部具有两极缓冲结构,即芯片内有一个8位输入寄存器和一个8位DAC寄存器。

这样的双缓冲结构,可以使DAC转换输出前一个数据的同时,将下一个数据传送到8位输入寄存器,以提高D/A转换的速度。更重要的是,能够使多个D/A转换器在分时输入数据后,同时输出模拟电压。

(2)D/A转换器DAC0832的双缓冲方式的接口电路如图5.19所示。

图5.19 DAC0832双缓冲连接电路图

20.用单片机控制外部系统时,为什么要进行A/D和D/A转换? 解:

单片机只能处理数字形式的信息,但是在实际工程中大量遇到的是连续变化的物理量,如温度、压力、流量、光通量、位移量以及连续变化的电压、电流等。对于非电信号的物理量,必须先由传感器进行检测,并且转换为电信号,然后经过放大器放大为OV~5V电平的模拟量。所以必须加接模拟通道接口,以实现模拟量和数字量之间的转换。A/D(模/数)转换就是把输入的模拟量变为数字量,供单片机处理;而D/A(数/模)转换就是将单片机处理后的数字量转换为模拟量输出。

21.A/D转换芯片采样保持电路的作用是什么?省略采样保持电路的前提条件是什么? 解:

A/D转换芯片中采样保持电路的作用是把一个时间连续的信号变换为时间离散的信号,并将采样信号保持一段时间。当外接模拟信号的变化速度相对于A/D转换速度来说足够慢,在转换期间内可视为直流信号的情况下,可以省略采样保持电路。

22.具有8位分辨率的A/D转换器,当输入0~5V电压时,其最大量化误差是多少? 解:

对于8位A/D转换器,实际满量程电压为5V,则其量化单位1LSB=5V/256=0.0196V,考虑到A/D转换时会进行四舍五入处理,所以最大量化误差为(1/2)LSB,即0.0098V。 23.在一个80C51单片机与一片DAC0832组成的应用系统中,DAC0832的地址为7FFFH,输出电压为0~5V。试画出有关逻辑电路图,并编写产生矩形波,其波形占空比为1:4,高电平为2.5V,低电平为1.25V的转换程序。 解:

硬件电路连接图如图5.23所示。

37

图5.23 5.23题逻辑电路图

当VO=2.5V时,D=80H;VO=1.25V时,D=40H。 程序如下:

ORG 0000H

LJMP MAIN ORG 0100H MAIN: MOV DPTR,#7FFFH NEXT: MOV A,#80H MOVX @DPTR,A ACALL DELAY MOV R4,#03H MOV A,#40H MOVX @DPTR,A LOOP: ACALL DELAY DJNZ R4,LOOP AJMP NEXT DELAY: …… RET

END

24.在一个80C51与一片ADC0809组成的数据采集系统中,ADC0809的地址为7FF8H~7FFFH。试画出逻辑电路图,并编写程序,每隔1分钟轮流采集一次8个通道数据,8个通道总共采集100次,其采样值存入以片外RAM 3000H开始的存储单元中。 解:硬件电路连接图如图5.24所示。

图5.24 5.24题逻辑电路图

设80C51的时钟频率为12MHz,程序如下:

ORG 0000H LJMP MAIN ORG 001BH LJMP T1_1 ORG 0100H MAIN: MOV SP,#60H ;设堆栈指针

38

LOOP:

T1_1:

LOOP1:

RETI_0:

MOV R7,#100 MOV R1,#30H MOV R0,#00H MOV R2,#20 MOV R3,#60

MOV TOMD,#10H MOV TH1,#3CH MOV TL1,#0B0H SETB EA SETB ET1 SETB TR1 SJMP LOOP

DJNZ R7,LOOP SJMP $

ORG 0200H

MOV TH1,#3CH MOV TL1,#0B0H DJNZ R2,RETI_0 MOV R2,#20 DJNZ R3,RETI_0 MOV R3,#60 MOV R6,#8

MOV DPTR,#7FF8H MOVX @DPTR,A JB P1.0,$ MOVX A,@DPTR PUSH DPH PUSH DPL

MOV DPH,R1 MOV DPL,R0 MOVX @DPTR,A INC DPTR MOV R1,DPH MOV R0,DPL POP DPL POP DPH

INC DPTR DJNZ R6,LOOP1 RETI END

;置采集次数

;片外RAM地址高位 ;片外RAM地址低位 ;置入初值20(计1 s) ;置入初值60(计1 min) ;定时器T1工作于模式1 ;计数器初值

;开中断

;定时器T1允许中断 ;启动定时器T1 ;等待中断

;是否到100次?

;中断服务程序,重新赋计数器初值

;1 s未到,返回

;重新置“100 s”计数器初值 ;1 min未到,返回

;8个通道计数器初值 ;IN0地址

;启动A/D转换 ;判转换是否结束 ;读取转换结果

;将通道地址压入堆栈

;将片外RAM地址送DPTR

;将转换结果存入片外RAM ;片外RAM地址增1 ;保存片外RAM地址

;恢复通道地址 ;8个通道是否采集结束 ;中断返回

习题6

1. LED数码显示有( 静态 )和( 动态 )两种显示形式。

2. 消除键盘抖动既可以采用( 硬件 )方法,也可采用( 软件 )方法。 3. 矩阵式键盘常用的扫描方法为( 行反转法 )法和( 动态扫描法 )法。 4、LED数码管显示若用动态显示,须( B )。

A:将各位数码管的位选线并联 B:将各位数码管的段选线并联 C:将位选线用一个8位输出口控制 D:输出口加驱动电路

5.显示器和键盘在单片机应用系统中的作用是什么?

39

解:

具有人机对话功能。实现人对应用系统的状态干预和数据输入以及应用系统向人报告运行和运行结果。

6.在单片机系统中,常用的显示器有哪几种? 解:

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

7.LED显示器的显示字符条件是什么? 解:

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

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

8.LED动态显示子程序设计要点是什么? 解:

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

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

(1)静态显示方式:静态显示方式是指当显示器显示某一字符时,发光二极管的位选始终被选中。在这种显示方式下,每一个LED数码管显示器都需要一个8位的输出口进行控制。由于单片机本身提供的I/O口有限,实际使用中,通常通过扩展I/O口的形式解决输出口数量不足的问题。

静态显示主要的优点是显示稳定,在发光二极管导通电流一定的情况下显示器的亮度大,系统运行过程中,在需要更新显示内容时,CPU才去执行显示更新子程序,这样既节约了CPU的时间,又提高了CPU的工作效率。其不足之处是占用硬件资源较多,每个LED数码管需要独占8条输出线。随着显示器位数的增加,需要的I/O口线也将增加。

(2)动态显示方式:动态显示方式是指一位一位地轮流点亮每位显示器(称为扫描),即每个数码管的位选被轮流选中,多个数码管公用一组段选,段选数据仅对位选选中的数码管有效。对于每一位显示器来说,每隔一段时间点亮一次。显示器的亮度既与导通电流有关,也与点亮时间和间隔时间的比例有关。通过调整电流和时间参数,可以既保证亮度,又保证显示。若显示器的位数不大于8位,则显示器的公共端只需一个8位I/O口进行动态扫描(称为扫描口),控制每位显示器所显示的字形也需一个8位口(称为段码输出)。 10.为什么要消除按键的机械抖动?消除按键抖动的方法有几种?

解:

通常的按键所用开关为机械弹性开关。由于机械触电的弹性作用,按键在闭合及断开的瞬间均伴随有一连串的抖动。键抖动会引起一次按键被误读多次。为了确保CPU对键的一次闭合仅作一次处理,必须去除抖动。 消除抖动的方法有硬件和软件两种方法。硬件方法常用RS触发器电路。软件方法是当检测出键闭合后执行一个10ms~20ms的延时程序,再一次检测键的状态,如仍保持闭合状态,则确认真正有键按下。

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

液晶显示器简称LCD(Liquid Crystal Diodes),是一种被动式的显示器,即液晶本身并不发光,利用液晶经过处理后能够改变光线传输方向的特性,达到显示字符或者图形的目的。

LCD显示器有笔段式和点阵式两种,点阵式又可分为字符型和图像型。笔段式LCD显示器类似于LED数码管显示器。每个显示器的段电极包括七个笔划(段)和一个背电极BP

40

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

点阵式LCD显示器的段电极与背电极呈正交带状分布,液晶位于正交的带状电极间。点阵式LCD的控制一般采用行扫描方式,通过两个移位寄存器控制所扫描的点。

80C51与液晶显示模块LCM的基本接口电路如图6.11所示。

图6.11 80C51与液晶显示模块LCM的基本接口电路

液晶显示模块初始化子程序(将系统设置成显示2行字符,5×7点阵,开显示,显示光标,字符闪烁,清屏,光标为移动方式,自动地址为增量方式。):

电源打开后,在电源上升到4.5V并维持15ms后,写入功能设置控制字,选择数据接口位数等;等待5ms后,检查忙标志,在不忙的情况下,再进行其他的功能设置;检查忙标志,在不忙的情况下,关显示;检查忙标志,在不忙的情况下,清屏;检查忙标志,在不忙的情况下,设定输入方式,初始化结束。程序如下:

LCD: MOV A, #38H ; 8位数据,2行显示,5×7点阵 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:

LOOP:

PUSH DPH

PUSH DPL PUSH PSW PUSH ACC

MOV DPTR, #8001H MOVX A, @DPTR

JB ACC.7, LOOP POP ACC POP PSW POP DPL POP DPH RET

; 保护现场

; 读BH及AC ; 忙,继续等待

; 不忙,恢复现场返回

41

12.矩阵式键盘的编程要点是什么? 解:

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

(2)消除按键抖动的影响:在判断有键按下后,用软件延时的方法,再判断键盘状态,如果仍为有键按下状态,则认为有一个确定的键按下,否则当作按键抖动处理。

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

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

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

硬件电路连接图如图6.13所示。

图6.13 6.13题LED显示器/键盘电路图

14.使用8255的PC口设计一个4行4列键盘矩阵的接口电路,并编写出与之对应的键盘识别程序。 解:

硬件连接电路图如图6.14所示。

图6.14 6.14题扩展键盘电路图 程序如下:

ORG 1000H

START:MOV DPTR, #7FFFH ; 8255初始化

MOV A, #81H

42

MOVX @DPTR, A KEY: ACALL KEY1 JNZ LKEY1 ACALL DELAY1 AJMP KEY LKEY1: ACALL DELAY1 ACALL DELAY1 ACALL KEY1 JNZ LKEY2 ACALL DELAY1 AJMP KEY LKEY2: MOV R2, #0EFH MOV R4, #00H LKEY4: MOV DPTR, #7FFEH MOV A, R2 MOVX @DPTR, A MOV A, @DPTR JB ACC.0, LONE MOV A, #00H AJMP LKEYP LONE: JB ACC.1, LTWO MOV A, #04H AJMP LKEYP LTWO: JB ACC.2, LTHR MOV A, #08H AJMP LKEYP

LTHR: JB ACC.3, NEXT MOV A, #0CH LKEYP: ADD A, R4 PUSH ACC LKEY3: ACALL DELAY1 ACALL KEY1 JNZ LKEY3 POP ACC RET

NEXT: INC R4 MOV A, R2

JNB ACC.7, KND RL A MOV R2, A

AJMP LKEY4 KND: AJMP KEY KEY1: MOV DPTR, #7FFEH 描线

MOV A, #00H MOVX @DPTR, A MOVX A, @DPTR CPL A ANL A, #0F0H RET DELAY1: MOV R7,#4

; 检查有键闭合否 ; A非0说明有键按下 ; 执行一次延时子程序(延时6 ms) ; 有键闭合延时2×6ms=12ms以去抖动 ; 延时以后再检查是否有键闭合 ; 有键闭合,转LKEY2 ; 无键闭合,说明是干扰信号,不作处理 ; 延时6ms后转KEY继续等待键入 ; 扫描初值送R2,设定PC4为当前扫描线 ; 回送初值送R4 ; 指向PC口

; 扫描初值送PC口

; 取回送线状态 ; ACC.0=1,第0行无键闭合,转LONE

; 装第0行行值 ; 转计算键码 ; ACC.1=1,第1行无键闭合,转LTWO ; 装第1行行值 ; 转计算键码

; ACC.2=1,第2行无键闭合,转LTHR ; 装第2行行值 ; ACC.3=1,第3行无键闭合,转NEXT

; 装第3行行值 ; 计算键码 ; 保存键码 ; 延时6ms ; 判断键是否继续闭合,若闭合再延时 ; 若键释放,则键码送A ; 列号加1 ; 第7位为0,以扫描到最高列,转KND ; 循环左移一位 ; 进行下一列扫描 ; 扫描完毕,开始新的一轮 ; 将PC口地址送DPTR,PC口高四位作为扫; 所有扫描线均为低电平 ; PC口向列线输出00H ; 取回送线状态 ; 行线状态取反 ; 屏蔽A的高四位 ; 返回

; 延时6mS延时子程序

43

D1:MOV R6,#220 D2: DJNZ R6,D2

DJNZ R6,D2 DJNZ R7,D1 RET END

15.利用单片机串行口,一片74LS164扩展3×8键盘矩阵,P1.0~P1.2作为键盘输入口,试画出该部分接口逻辑电路图,并编写与之对应的按键识别程序。 解:

硬件连接电路图如图6.15所示。

图6.15 6.15题扩展键盘电路图 程序如下:

ORG 1000H

SERKEY: MOV SCON, #00H ; 设置串行口 MOV A, #00H ; 键盘初始化,送00H到列线上 LCALL VARTO ; 发送数据

CHK: JNB P1.0, CHK0 ; 检查是否有键按下 JNB P1.1, CHK0 ; 检查是否有键按下 JNB P1.2, CHK0 ; 检查是否有键按下

AJMP CHK ; 无键按下,继续查找 CHK0: LCALL DLY1 ; 调用10ms延时子程序,去抖

JNB P1.0, CHEN ; 确实有键按下,转CHEN JNB P1.1, CHEN JNB P12, CHEN AJMP CHK ; 无键按下,继续查找 CHEN: MOV R2, #0FEH ; 首列扫描字送R2,查键号,最低位为0

MOV R4, #00H ; 首列偏移值送R4 CHKN: MOV A, R2 ; 发送列扫描字

LCALL VARTO JB P1.0, CH1 ; 检查P1.0有无键按下;若无,转CH1 MOV A, #0 ; 第一行首列值送A,00H+(R4) AJMP CKEY ; 转求键号 CH1: JB P1.1, CH2 ; 检查P1.1有无键按下;若无,转NEXT

MOV A, #8 ; 第二行首列值送A CH2: JB P1.1, NEXT ; 检查P1.1有无键按下;若无,转NEXT

MOV A, #16 ; 第三行首列值送A AJMP CKEY ; 转求键号 CKEY: ADD A, R4 ; 求键号,并入栈保护 RET

NEXT: INC R4 ; 指向下一列

MOV A, R2 ; 取出原扫描字 JNB ACC.7,KEND ; 是否已检查完8列? RL A ; 8列未完,指向下一列

44

MOV R2, A ; 列扫描字送R2 AJMP CHKN ; 8列未完,检查下一列 KEND: AJMP SERKEY ; 8列查完,未查到有键按下,等待 VARTO: MOV SBUF, A ; 发送A中数据

JNB TI, $ ; 发送等待 CLR TI ; 清除 RET DLY1: …… ; 延时10ms子程序(略) END ; 结束 16.设计一个含8位动态显示和2×8键阵的硬件电路,并编写程序,实现将按键内容显示在LED数码管上的功能。 解:

硬件连接电路图如图6.16所示。

图6.16 6.16题扩展键盘显示器电路图

程序如下:

ORG 1000H

KD1:

MOV A, #0000 0011B ; 8155初始化,PA,PB基本输出方式,PC输入方式 MOV DPTR, #7F00H MOVX @DPTR, A KEY1:

ACALL KS1 ; 调用判断是否有键闭合子程序 JNZ LK1 ; 有键闭合转LK1 ACALL DSP8155 ; 调用8155动态显示子程序,延时6ms AJMP KEY1 LK1:

ACALL DSP8155 ACALL DSP8155 ; 调用两次显示,延时12ms ACALL KS1 JNZ LK2

ACALL DSP8155 ; 调用8155动态显示子程序,延时6ms AJMP KEY1 LK2: MOV

R2, #0FEH

45

MOV R4, #00H LK3: MOV DPTR, #7F01H

MOV A, R2 MOVX @DPTR, A INC DPTR INC DPTR MOVX A, @DPTR JB ACC.0, LONE MOV A, #00H AJMP LKP LONE: JB ACC.1, LTWO

MOV A, #08H AJMP LKP LKP: ADD A, R4

PUSH ACC LK4: ACALL DSP8155

ACALL KS1 JNZ LK4 POP ACC NEXT: INC R4

MOV A, R2 JNB ACC.7, KND RL A MOV R2, A AJMP LK3 KND: AJMP KEY1 KS1: MOV DPTR, #7F01H

MOV A, #00H MOVX @DPTR, A INC DPTR INC DPTR MOVX A, @DPTR CPL A ANL A, #0FH RET

DSP8155: MOV DPTR, #7F00H MOV A, #00000011B

MOVX @DPTR, A DISP1: MOV R0, #7EH MOV A, #80H LOOP: MOV R2, A

MOV DPTR, #7F01H MOVX @DPTR, A MOV A, @R0 MOV DPTR, #PTRN MOVC A, @A+DPTR MOV DPTR, #7F02H MOVX @DPTR, A CALL D1MS DEC R0 MOV A, R2 CLR C RRC A JC PASS AJMP LOOP PASS: RET D1MS: MOV R7, #02H DMS: MOV R6, #0FFH

46

; 指向8155命令寄存器

; 设定PA口、PB口为基本输出方式; 输出命令字

; 指向缓冲区末地址

; 扫描字,PA7为1,从左至右扫描 ; 暂存扫描字 ; 指向8155的PA ; 输出位选码

; 读显示缓冲区一字符 ; 指向段数据表首地址 ; 查表,得段数据 ; 指向8155的PB ; 输出段数据 ; 延时1ms ; 调整指针 ; 读回扫描 ; 清进位标志 ; 扫描字右移 ; 结束

; 继续显示 ; 返回

; 延时1ms子程序

PTRN:

DJNZ DJNZ RET DB DB DB …… END

R6, $

R7, DMS

0C0H, 0F9H, 0A4H, 0B0H, 99H …… ……

; 段数据表

17.设计一个用8155控制32个按键的键盘接口电路。编写程序实现以下功能:用8155定时器定时,每隔2s读一次键盘,并将读出的键值存入8155片内RAM以20H开始的单元中。 解:

硬件连接电路如图6.17所示。8155控制口的口地址为:7F00H;PA口地址:7F01H;PB口地址:7F02H;PC口地址:7F03H。片内RAM地址:7E00H~7EFFH。定时器低位地址:7F04H;定时器高位地址:7F05H。

图6.17 6.17题扩展键盘电路图

程序如下:

ORG 0000H LJMP MAIN ORG 0013H LJMP IEX1 ORG 0030H

MAIN: MOV SP,#60H

MOV R5,#200

MOV DPTR,#7FF8H MOV A,#11000001 MOVX @DPTR,A MOV DPTR,#7FFCH MOV A,#52H MOVX @DPTR,A INC DPTR MOV A,#27H MOVX @DPTR,A MOV DPTR,#7E40H SETB EX1 SETB EA SJMP $ ORG 0200H

IEX1: DJNZ R5,RETI_0

LCALL KEY1

MOVX @DPTR,A INC DPTR

RETI_0: RETI

;中断次数计数值

;8155初始化

;写定时器初值

;8155片内RAM地址

;调用键盘扫描及求键值子程序 ;存键值 ;修改地址 ;中断返回

47

AJMP KEY1 ;无键按下返回

LK1: ACALL T12MS ;调延时12 ms子程序

ACALL KS1 ;查有无键按下,若有则为键确实按下 JNZ LK2 ;键按下,(A)≠0,转逐列扫描 AJMP KEY1 ;不是键按下返回

LK2: MOV R4,#00H ;首列号入R4

MOV R2,#0FEH ;首列扫描字送R2

LK3: MOV A,R2 ;第一次列扫描

MOV DPTR,#7FF9H ;列扫描字送至8155PA口 MOVX @DPTR,A ;使第0列线为0 INC DPTR ;指向8155PC口 INC DPTR MOVX A,@DPTR ;8155PC口读入行状态 JB ACC.0,LONE ;第0行无键按下,转查第1行 MOV A,#00H ;第0行有键按下,该行首键号#00→A AJMP LKP ;转求键号

LONE: JB ACC.1,LTWO ;第1行无键按下,转查第2行

MOV A,#08H ;第1行有键按下,该行首键号#08→A AJMP LKP

LTWO: JB ACC.2,LTHR ;第2行无键按下,转查第3行

MOV A,#10H ;第2行有键按下,该行首键号#10H→A LJMP LKP

LTHR: JB ACC.3,LOOP ;第3行无键按下,转查下一列

MOV A,#18H ;第3行有键按下,该行首键号#18H→A

LKP: ADD A,R4 ;键号=行首建号+列号

PUSH ACC ;键号进栈保护

LK4: ACALL KS1 ;等待键释放

JNZ LK4 ;未释放,等待 POP ACC ;键释放,键号→A RET ;键扫描结束,出口状态:(A)=键号

LOOP: INC R4 ;指向下一列,列号加1

MOV A,R2 ;判断8列扫描完没有 JNB ACC.7,KND ;8列扫描完,返回 RL A ;扫描字左移一位,转变为下一列扫描字 MOV R2,A ;扫描字入R2 AJMP LK3 ;转下一列扫描

KND: AJMP KEY1 KS1: MOV DPTR,#7FF9H ;指向PA口

MOV A,#00H ;全扫描字#00H=00000000B MOVX @DPTR,A ;全扫描字入PA口 INC DPTR ;指向PC口 INC DPTR MOVX A,@DPTR ;读入PC口行状态

CPL A

ANL A,#0FH RET ;出口状态:(A)≠0时有键按下 T12MS: MOV R7,#18H T12MS1: MOV R6,#0FFH

DJNZ R6,$ DJNZ R7,T12MS1

RET

END

ORG 0100H

KEY1: ACALL KS1

JNZ LK1

;调用判断有无键按下子程序 ;有键按下时,(A)≠0,转消抖动延

18.设计一个TPμP-40A的打印机接口,将打印缓冲区中从30H开始的10字节数据传输到打印机,编写程序。

48

解:打印机接口电路如图6.18所示。 程序如下:

0000H START 0100H R0,#30H R6,#10

DPTR,#7FFFH A,@DPTR ACC.7,LOOP ORG

LJMP ORG START: MOV MOV MOV LOOP: MOVX JB

图6.18 打印机接口电路

MOV A,@R0 MOVX @DPTR,A INC R0

DJNZ R6,LOOP RET END

习题7

1.简述单片机应用系统设计的一般方法及步骤。

解:

单片机应用系统设计的一般方法及步骤如图7.1所示。 (1)明确设计任务 (2)器件选择 (3)总体设计

49

图7.1 单片机应用系统设计过程流程图

2.简述单片机应用系统设计中软、硬件设计的原则。 解:

(1)硬件电路设计

在硬件设计时,要尽量应用最新单片机,采用新技术。要注意通用性的问题,尽可能选择典型电路,并符合单片机常规用法,为硬件系统的标准化、模块化打下良好的基础。系统扩展与外围设备的配置水平应充分满足应用系统的功能要求,并留有适当余地,以便进行二次开发。硬件系统设计应尽量朝“单片”(片上系统SOC)方向发展,以提高系统的稳定性。工艺设计时要考虑安装、调试、维修的方便。扩展接口的开发尽可能采用PSD等器件开发。

(2)软件设计

软件设计随单片机应用系统的不同而不同。图7.2给出了单片机软件设计的流程图。一般可分为以下几个方面。

① 总体规划

② 程序设计技术: 模块程序设计、自顶向下的程序设计。

③ 程序设计:建立数学模型、绘制程序流程图、程

图7.2 软件设计的流程图

50