《单片机原理及应用》课后习题

更新时间:2024-05-27 15:08:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

习题1

1.单片机的基本含义和主要特点是什么? 答:基本含义

单片机是将计算机的四个基本部件,即运算器、控制器、存储器和输入输出(Input/Output)接口微型化并集成在一块芯片上的微型计算机。单片机的全称为单片微型计算机(Single Chip Microcomputer),又称为微控制器(Microcontroller Unit,MCU)。

主要特点 1)有优异的性能价格比。 由于单片机的应用不断向高级应用和复杂应用扩展,因此,其性能越来越高,如速度越来越快,内存越来越大,处理字长越来越长等。而大批量的生产和使用也使单片机的价格越来越低。

2)集成度高、体积小、有很高的可靠性。单片机把各功能部件集成在一块芯片上,内部采用总线结构,减少了各芯片之间的连线,大大提高了单片机的可靠性与抗干扰能力。另外,其体积小,对于强磁场环境易于采取屏蔽措施,适合在恶劣环境下工作。

3)控制功能强。为了满足工业控制的要求,一般单片机的指令系统中均有极丰富的转移指令、I/O口的逻辑操作以及位处理功能。单片机的逻辑控制功能及运行速度均高于同一档次的微机。

4)低功耗、低电压,便于生产便携式产品,如手机等。现在的单片机在功耗上已达到了极高的水平,不少芯片的功耗已达到微安级,在一粒纽扣电池供电的情况下就可长期运行。

2

5)外部总线增加了IC(Inter-Integrated Circuit)及SPI(Serial Peripheral Interface)等串行总线方式,进一步缩小了体积,简化了结构。

6)单片机的系统扩展和系统配置较典型、规范,容易构成各种规模的应用系统。

2.简述单片机的基本组成及各部分功能。

答:单片机芯片内部结构包括中央处理器CPU (Central Processing Unit)、程序存储器ROM(Read-Only Memory)、随机存储器RAM(Random Access Memory)、I/O口(Input/Output口)、定时/计数器(T/C)、中断系统以及将这些部分连接起来的总线,它们都分布在总线的两旁,并和它连通。一切指令、数据、控制信号都可经内部总线传送。

1) 中央处理器CPU——单片机的核心单元,由运算器和控制器组成,控制整个单片机

系统协调工作,决定了单片机的运算能力和处理速度。

2) 程序存储器ROM——用于存放用户程序,只允许读操作,ROM的信息可在断电后长

期保存。

3) 随机存储器RAM——用于存放程序运行时一些需要临时保存的工作变量和数据, 所

以有时直接称之为数据存储器。RAM存放的信息可随机“读出”或“写入”,其中存放的内容是易失性的,掉电后会丢失。

4) 并行I/O口——单片机的重要资源,用于并行通信,负责实现CPU与并行设备的联

系。它可以使单片机和存储器或外设之间并行的传送数据。

5) 串行I/O口——用于串行通信,负责实现CPU与串行设备或其他单片机的联系。它

可以把单片机内部的并行数据一位一位向外传送,也可以一位一位地接收外部送来的数据并把它们变成并行数据送给CPU处理。

6) 定时器/计数器——用于单片机内部精确定时或对外部事件进行计数。并可用定时、

计数结果对单片机以及系统进行控制。

1

7) 系统时钟——相当于PC微机中的主频。通常采用外接石英晶体或其他振荡源提供

时钟信号输入,也可用内部RC振荡器。时钟电路为单片机产生时钟脉冲序列,作为单片机工作的时间基准,典型的晶体振荡频率为12MHZ。 8) 总线——各种数据信息的公共通道,包括内部总线和外部总线。CPU通过总线与内

设以及I/O接口电路交换信息。

3.单片机的分类及主要指标是什么? 答:

一、目前单片机品种很多,至少有五十多个系列、三百多个品种,可按以下方式进行分类。 (1)按适用范围分

专用型——是为过程控制、参数监测、信号处理等方面的特殊需要而专门设计的单片机,是专门针对某些产品的特定用途而制作的。

通用型——通用型单片机是一种基本芯片,可把开发资源全部提供给应用者的微型控制器,它内部资源比较丰富,性能全面且适用性强,能覆盖多种应用需求 (2)按制造工艺分 分HMOS工艺,CHMOS工艺 (3)按字长分 可分为4位机(如NEC公司的μPD75XX系列)、8位机(Intel公司的MCS-51系列)、16位机(Intel公司的MCS-96/98系列)和32位机(Motorola公司的MC683XX系列)等,字长越长其运算处理的速度越快,功能越强大。 二、指标

(1)速度

CPU处理速度,常用单位是MIPS(Million instruction Per Second),目前最快的单片机可达200MIPS。单片机的速度与系统时钟相联系,但并不是频率越高处理速度就越快,对于同一型号的单片机来说,采用频率高的时钟一般比频率低的速度快。 (2)位数

单片机一次处理数据的宽度。它与微处理器内部寄存器以及CPU内部数据总线宽度是一致的。按位数分类,单片机可以分成8位机、16位机、32位机、64位机等。位数越多,所表示的数据精度就越高。在完成同样精度的运算时,位数较多的单片机比位数较少的单片机运算速度快。 (3)功耗

为了满足广泛使用于便携式系统的要求,目前许多单片机内的工作电压仅为1.8~3.6V,而工作电流仅为数百毫安,一些低功耗的单片机的静态电流甚至可以达到μA或nA级。 (4)I/O口

不同类型的单片机其输入/输出接口有很大差别。一般从几个到几十个。例如,MCS-51系列单片机有4个接口,使用上很方便。在片内接口不够时,可考虑进行接口扩展。 (5)存储器

包括数据存储器和程序存储器。数据存储器字节数通常在几十字节到几百字节之间。程序存储器空间较大,从几KB到几十KB。 (6)工作电压

几乎所有的单片机都有WAIT、STOP等省电运行方式。允许使用的电压范围越来越宽,一般在3~6V范围内工作。低电压供电的单片机电源下限已可达1~2V。目前0.8V供电的单片机已经问世。

2

7.将下列二进制数转化成相应的十进制数、十六进制数。 (1)(101100)B =44=2CH (2)(11100111)B=231=E7H (3)(11.011)B =3.375=3.6H (4)(1.1001)B=1.5625=1.9H

9.设机器字长为8 位,求下列数的原码、反码和补码。 (1)+56 [原码]=[反码]=[补码]=38H (2)+117 [原码]=[反码]=[补码]=75H (3)-63 [原码]=1011 1111=BFH [反码]=1100 0000=C0H [补码]=1100 0001=C1H (4)-89 [原码]=1101 1001=D9H [反码]=1010 0110=A6H [补码]=1010 0111=A7H

10.已知下列补码,求真值。

(1)+56 [原码]=[反码]=[补码]=38H (2)+117 [原码]=[反码]=[补码]=75H (3)-63 [补码]=1011 1111=BFH [反码]=1011 1110=BEH [原码]=1100 0001=C1H (4)-89 [补码]=1101 1001=D9H

[反码]=1101 1000=D8H

[原码]=1010 0111=A7H

12.写出下列十进制数的8421BCD 码。 (1)56 =(0101 0110)BCD

(2)117 =(0001 0001 0111)BCD

(3)65.125 =(0110 0101.0001 0010 0101)BCD (4)99.675=(1001 1001.0110 0111 0101)BCD

3

习题2

2.简述MCS-51单片机的物理存储空间?按编址方式划分,其存储器可分为哪几个空间、相应编址范围?

答:

MCS-51单片机的存储器结构可以分为2个不同的存储空间,分别是: 1) 程序存储空间地址范围64KB(ROM),包括片内程序存储器(4KB)和片外程序存

储器(64KB)。

2) 数据存储空间地址范围64KB(RAM),包括片内数据存储器(共256B,21个特殊

功能寄存器与128B内部RAM)和片外部数据存储器(64KB)。MCS-51单片机没有独立的I/O空间,而是将I/O空间与片外数据存储器空间共用64KB地址空间范围(即共同编址)。

FFFFH外ROM(60KB)1000H0FFFH内ROM(4KB)0FFFH外ROM(4KB)EA=10000H0000HEA=0(MOVC指令访问区域)程序地址空间(ROM)

按编址划分:

1)ROM,低4KB范围(0000H~0FFFH)可划分为片内与片外两部分,通过/EA区分选取片内外ROM;其余部分都为片外ROM,地址范围:1000H~FFFFH。 2)RAM,通过不同指令可分为片内外RAM,其中片外RAM地址范围为:0000H~FFFFH,采用MOVX访问;片内只有256B(00H~FFH),其中高128B(80H~FFH)为特殊功能寄存器区(SFR),目前只使用21B,低128B又可分为3个区即,工作寄存器区(00H~1FH),位寻址区(20H~2FH),数据缓冲区(30H~7FH)。

3.MCS-51单片机的片内数据存储器分为哪几个地址空间?各部分的主要功能是什么? 答:

1)工作寄存器区

00H~1FH共32个字节单元属于工作寄存器区。工作寄存器分为4个组:0区、1区、2区、3区。每区有8个寄存器,用R0~R7命名,R0~R7称为工作寄存器。工作寄存器是MCS-51单片机的重要寄存器,指令系统中有专用于工作寄存器操作的指令,读写速度比一般内RAM要快。

2)位寻址区

地址为20H~2FH共16个字节单元可分为16×8=128个二进制位进行位寻址。每一位均有一个位地址,编址为00H~7FH,位寻址区的主要用途是存放各种标志位信息和位数据。

4

3)数据缓冲区

地址30H~7FH的80个字节单元为数据缓冲区,属一般内RAM,只能进行字节寻址,用作数据缓冲区以及堆栈区,供用户存放各种数据和中间结果。 4)特殊功能寄存器区

CPU对各种功能部件的控制通过特殊功能寄存器采用集中控制方式,即利用特殊功能寄存器控制单片机的I/O口、定时/计数器、串行口、中断系统等。特殊功能寄存器SFR共21个,离散地分布在高128B片内RAM80H~FFH区域中。

4.MCS-51单片机特殊功能寄存器有多少个?其分布地址范围?某特殊功能寄存器地址为98H,它可以按位寻址吗? 答:

特殊功能寄存器SFR共21个

分布在高128B片内RAM80H~FFH区域中

某特殊功能寄存器地址为98H,因其字节地址可被8整除,故可进行位寻址。

5.MCS-51单片机复位条件?复位后,CPU从00H单元开始执行程序,SP= 07H ,第一个压入堆栈的数据将位于片内RAM的 08H 单元地址。

6.MCS-51单片机EA引脚作用是什么?在下列情况EA引脚应接何种电平? (1)只有片内ROM,EA=1

(2)只有片外ROM,EA=0

(3)有片内、片外ROM,EA=1 (4)有片内ROM但不用,而用片外ROM,EA=0

8.12根地址线可选多少个存储单元?32KB存储单元需要多少根地址线? 答:12根地址线可选4K个存储单元, 32KB存储单元需要15根地址线

9.若PSW的内容为18H,则工作寄存器R0的地址是什么?

PSWD7 D6 D5 D4 D3 D2 D1 D0CyAcF0RS1RS0OV-PD0H

18H 0 0 0 1 1 0 0 0

故,选用的是工作寄存器3组,R0地址为18H 0组 00H-07H 1 08H-0FH 2 10H-17H 3 18H-1FH

5

解:

#include %unsigned char i=0x01; void main() {

EX1=1; EA=1; for(;;) {

P1=i; } }

void int1() interrupt 2 {

if(i<0x80) i=i*2; else i=0x01; }

习题6

2.MCS-51定时/计数器的定时功能和计数功能有什么不同?分别应用在什么场合下? 答:

定时器主要完成系统运行过程中的定时功能,而计数器主要用于对外部事件的计数。此外,定时器/计数器还可作为串行通信中波特率发生器。

3.简述MCS-51单片机定时/计数器四种工作方式的特点、如何选择和设定? 答:四种工作方式的选择是通过设定工作方式寄存器TMOD中的M1M0两位来完成的。 1) 当MlM0=00时,定时/计数器工作于方式0,构成一个13位定时器/计数器。 2) 当M1M0=01时,定时/计数器工作于方式1,构成一个16位定时器/计数器。方

式1与方式0的区别在于方式0是13位计数器

3) 当M1M0=10时,定时/计数器工作于方式2,在方式2情况下,定时/计数器为

8位,能自动恢复定时/计数器初值。在方式0、方式1时,定时/计数器的初值不能自动恢复,计满后若要恢复原来的初值.须在程序指令中重新给TH0、TL0赋值,这不仅导致编程麻烦,而且影响定时时间精度。但方式2时与方式0、方式1不同,方式2具有初值自动装入功能。

4) 当M1M2=11时,定时/计数器处于工作方式3,但方式3 仅适用于T0,T1无方式

3。方式3时,定时器T0被分解成两个独立的8位计数器TL0和TH0。

11

5.定时/计数器初始化包括哪些步骤? 答:初始化步骤如下:

(1) 根据设计要求先给工作方式寄存器TMOD送一个方式控制字,以设定定时/计数器相应的工作方式。

(2) 根据实际需要给定时/计数器选送定时器初值或计数器初值,以确定需要定时的时间和需要计数的初值。

(3) 根据需要给中断允许寄存器IE选送中断控制字,并给中断优先级寄存器IP选送中断优先级字,以开放相应中断并设定中断优先级。

(4) 给控制寄存器TCON送命令字,以便启动或禁止定时器/计数器的运行。

6.已知单片机时钟频率fosc=12MHz,当要求定时时间为2ms或5ms,定时器分别工作在方式0、方式1和方式2时,定时器计数初值各是多少?

解:因为单片机时钟频率fosc=12MHz,所以机器周期Tcy=12/fosc=1us,根据初值公式

Count=2n-Td/Tcy 得

1)Td=2ms=2000us时:

方式0时 Count=213-2000us/1us=8192-2000=6192

方式1时 Count=216-2000us/1us=65536-2000=63536=F830H,即TH0=F8H,TL0=30H TH0=-2000/256;TL0=-2000%6; 方式2时 ,单次溢出最长只能延时256us,因此可设定每次溢出延时200us,累计10次溢出即可得2ms,因此设定初值可设置为

Count=28-200us/1us=256-200=56=38H,即TH0=38H,TL0=38H 2)Td=5ms=5000us时:

方式0时 Count=213-5000us/1us=8192-5000=3192

方式1时 Count=216-5000us/1us=65536-5000=60536=EC78H,即TH0=ECH,TL0=78H TH0=-5000/256;TL0=-5000%6; 方式2时 ,单次溢出最长只能延时256us,因此可设定每次溢出延时200us,累计25次溢出即可得5ms,因此设定初值可设置为

Count=28-200us/1us=256-200=56=38H,即TH0=38H,TL0=38H

7.已知MCS-51单片机的fosc=6MHz,请利用中断技术和T0,从P1.0端输出高电平宽度为50?s、低电平宽度为200?s的矩形波。

解:

设定时长度为Td=50us,高电平延时1个Td,低电平延时4个Td 延时时间较短,可采用方式2,则初值计算为

Count=28-50us/2us=256-25=231=E7H T0工作于方式2,有TOMD.3=0 ,TMOD.2=0,TMOD.1=1,TOMD.0=0;

T1未使用,因此(TMOD)=02H #include sbit rect_wave=P1^0;

unsigned char Td1=1, Td4=4; void main(void){

12

TMOD=0x02; TL0=0xe7; TH0=0xe7; ET0=1; EA=1; TR0=1 ;

rect_wave=1;

for(;;) ; }

void int0 () interrupt 1 { Td1--;

Td4--; if(Td1==0) {

rect_wave=0; Td4=4; }

if(Td4==0) {

rect_wave=1; Td1=1;

} }

8.已知MCS-51单片机的fosc=6MHz,用Tl定时。试编程由P1.0和P1.1引脚分别输出周期为2ms和500?s的方波。

解:

周期为2ms的方波延时时间长度为1ms即1000us 周期为500us的方波延时时间长度为250us

设定时长度为Td=250us,延时时间较短,可采用方式2,则初值计算为 Count=28-250us/2us=256-125=131=83H P1.0需4个延时长度即4*250us=1000us才切换电平

P1.1只需要1个延时长度就要切换电平 T1工作于方式2,有TOMD.7=0 ,TMOD.6=0,TMOD.5=1,TOMD.4=0; T1未使用,因此(TMOD)=20H

#include sbit P10=P1^0; sbit P11=P1^1;

unsigned char Td4=4; void main(void){ TMOD=0x20; TL0=0x83; TH0=0x83; ET1=1; EA=1; TR1=1 ;

13

for(;;) ; }

void int0 () interrupt 3 { Td4--;

P11=!P11; if(Td4==0) {

P10=!P10; Td4=4; } }

11.设计一个8灯闪烁的控制电路,系统晶振为12MHz,编程实现8灯轮流闪烁其个每盏灯点亮时间为2s。

/************************************** 采用定时计数器T0 工作于方式1

1、因此:TMOD Gate C/T M1 M0 Gate C/T M1 M0 0 0 0 0 0 0 0 1 TMOD=0x01; 2、初值计算

周期为4s,则延时时间长度需2s 因为工作在方式1下,且机器周期为1us,最长延时时间长度为65536us,即65.536ms 因此我们可以让定时计数器每次延时50ms,并且让其溢出40次,则延时时间长度Td=50ms*40=2000ms=2s

因此初值为Count=2^16-50ms/1us=65536-50000us/1us=15536=0x3cb0 ***************************************/ #include #include unsigned char i=40,j=0; void main(void) {

TMOD=0x01; TH0=0x3c;

TL0=0xb0; //TH1=-50000/256; //TL1=-50000%6; TR0=1; EA=1;

ET0=1; // 1000 1000 0x88 for(;;); }

void timer0() interrupt 1 {

TH0=0x3c;

TL0=0xb0; //TH1=-50000/256; //TL1=-50000%6;

14

i--; if(i==0) { i=40;

P1=_crol_(0x01,j)

j++;

if(j==8) j=0; } }

15

本文来源:https://www.bwwdw.com/article/fug7.html

Top