《单片机原理与应用》习题答案主编苏珊 高如新 谭兴国 电子科技出版社.docx
《《单片机原理与应用》习题答案主编苏珊 高如新 谭兴国 电子科技出版社.docx》由会员分享,可在线阅读,更多相关《《单片机原理与应用》习题答案主编苏珊 高如新 谭兴国 电子科技出版社.docx(36页珍藏版)》请在冰豆网上搜索。
《单片机原理与应用》习题答案主编苏珊高如新谭兴国电子科技出版社
《单片机原理与应用》电子科技出版社主编:
苏珊高如新谭兴国
第一章习题答案
1.什么叫单片机?
它有哪些主要特点?
单片机就是将中央处理器(CPU)、随机存储器(RAM)、只读存储器(ROM)、中断系统、定时/计数器、I/O口等主要计算机部件集成在一片集成电路芯片上的单片微型计算机(SingleChipMicrocomputer)的简称。
具有体积小、功耗低、价格便宜、控制功能强等特点。
2.请简述单片机的技术发展历史,单片机的主要技术发展方向就是什么?
单片机技术发展经历了单芯片微机形成阶段、性能完善提高阶段与微控制器化阶段三个主要阶段。
目前单片机主要技术发展方向就是:
大容量高性能化、小容量低价格化、外围电路内装化、多品种化以及I/O接口功能的增强、功耗降低等。
3、单片机主要用在哪些方面?
由于单片机体积小、功耗低、价格便宜,广泛应用于仪器仪表、家用电器、医用设备、航空航天专用设备的智能化管理及过程控制等领域;又由于单片机具有较强的实时数据处理能力与控制功能,可以使系统保持在最佳工作状态,提高系统的工作效率与产品质量,所以在工业控测控、航空航天、尖端武器等各种实时控制系统中,都作为控制器件使用。
第二章习题参考答案
1.单片机系统复位后,PC值为(0000H)。
2.MCS-51单片机中,一个机器周期=(6)状态周期=(12)振荡周期。
当主频为12MHz时,一个机器周期为(1µs)
3.PSW中RS1RS0=01时,寄存器R2的地址为(10H)PSW中RS1RS0=10时,寄存器R2的地址为(12H)
4.MCS-51单片机的
=0,程序存储器访问的就是(片外ROM)
5.MCS-51单片机上有(4)个独立的存储空间。
6.MCS-51系列单片机在片内集成了哪些主要逻辑功能部件?
答:
有微处理器CPU、程序存储器、数据存储器、定时/计数器、中断源、并行I/O端口等功能部件组成。
7.程序计数器(PC)作为不可寻址寄存器,它有哪些特点?
数据地址指针DPTR有哪些特点?
答:
PC就是一个16位的特殊功能寄存器,又称程序指针,它具有自动加1的功能,始终指向下一条指令的首地址,以保证程序按顺序执行;DPTR就是一个16位的专用地址指针寄存器。
作间址寄存器使用,用来存储外接64KB的数据存储器与I/O端口,DPTR也可以拆成两个独立8位的寄存器,即DPH(高8位字节)与DPL(低8位字节),分别占据83H与82H两个地址。
8.MCS-51单片机片内256B的数据存储器可分为几个区?
分别作什么用?
答:
00H~1FH共32个单元通常作为工作寄存器区,20H~2FH可用位寻址区,可直接进行位操作,30H~7FH共80个单元为用户RAM区,作堆栈或数据缓冲器用,80H~FFH为特殊功能寄存器区。
9.开机复位后,CPU使用的就是哪组工作寄存器?
它们的地址就是什么?
CPU如何确定与改变当前工作寄存器组?
答:
开机复位后,由于PSW复位值就是00H,CPU使用的就是0区的工作寄存器R0~R7,它们的地址就是00~07H,可以通过改变PSW的RS1RS0两个位的值确定与改变当前工作寄存器组。
10.堆栈有哪些功能?
堆栈指针(SP)的作用就是什么?
在程序设计时,为什么还要对SP重新赋值
答:
堆栈就是一个特殊的存储区,用来暂存数据与地址。
堆栈指针SP就是用来管理堆栈的它指示出堆栈顶部在片内RAM中的位置。
系统复位后,SP初始化为07H,使得堆栈实际上从08H单元开始。
由于08H~1FH单元分属于工作寄存器1~3区,20H~2FH为位寻址区,若程序中要用到这些区,应把SP值改为30H或更大的值。
11.MCS-51的SFR占用了什么空间?
其寻址方式如何?
答:
MCS-51的SFR占用了片内数据存储器的空间,地址范围为80H~FFH。
其寻址方式为直接寻址。
12.程序状态寄存器PSW的作用就是什么?
常用状态位有哪些?
它们的作用各就是什么?
答:
PSW就是一个8位的特殊功能寄存器。
用于存放程序运行中的各种状态信息。
常用状态位及其作用:
(1)进位标志位Cy。
在进行加或减运算时,如果操作结果最高位有进位或借位,Cy由硬件置“1”,否则清“0”。
(2)辅助进位标志位Ac。
在进行加或减运算时,如果低四位数向高位有进位或借位,硬件会自动将Ac置“l”,否则清“0”。
(3)工作寄存器区指针RSlRS0。
用于选择CPU当前工作寄存器的工作区。
可由用户用软件来改变RSlRS0的组合,以切换当前选用的寄存器的工作区。
(4)溢出标志位OV。
当进行算术运算时,如果产生溢出,则由硬件将OV位置“l”,否则清“0”。
(5)奇偶标志位P。
该位始终跟踪累加器A中含“1”个数的奇偶性。
如果A中有奇数个“1”,则P置“l”,否则置“0”。
13.MCS-51单片机复位条件就是什么?
常用复位电路有哪些?
答:
复位条件就是在单片机的RST引脚输入持续至少两个机器周期高电平。
MCS-51单片机通常采用上电复位与上电+按钮电平复位两种方式。
第三章习题参考答案
1、选择题:
(1)可以实现片外数据存储器访问的指令就是(A)。
A.MOVXB、MOVC、NOPD、DIV
(2)下列指令中,可以实现将累加器A的第0位置1(其它位不变)的指令就是(B)。
A.MOVA,#01HB、SETB ACC、0C、ANLA,#0FFHD、SETBACC
(3)MOVXA@DPTR指令中,源操作数的寻址方式就是(B)
A.寄存器寻址B、寄存器间接寻址C、直接寻址D、立即寻址
(4)LCALL指令操作码地址就是2000H,执行完子程序返回指令后,PC=(D)。
A.2000HB、2001HC、2002HD、2003H
(5)对程序存储器的读操作,只能使用(B)
A.MOVXB、MOVCC、PUSHD、MOV
(6)执行下面指令后,30H内容就是(C)
MOV R1,#30H
MOV 40H,#0E0H
MOV @R1,40H
A.40HB、30HC、0E0HD、FFH
(7)下列指令格式正确的就是(D)。
A.DEL:
XCHA,30HB、MOV:
INCA
C、2AB:
MOVA,#20HD、ABC:
MOV23H,A
(8)当执行指令(A)后,累加器A的内容为00H。
A.ANLA,#00HB、ORLA,#00H
C、XRLA,#00HD、以上都不对
2.比较下面各组指令,并在指令后添加注释
(1)MOVA,20H;20H内容送累加器A
MOVC,20H;位地址20H内容送位累加器C
(2)MOVA,20H;20H内容送累加器A
MOVR1,#20H;20H送累加器A
MOVA,@R1;20H指向地址的内容累加器A
(3)CJNEA,@R1,L1;比较A与R1指向地址的内容,若相等程序顺序运行,不相等则转L1处
DJNZR2,L1;R2内容减1,不等于0转L1处,等于0则顺序运行
3.判断下列指令就是否正确,并改正错误
(1)、SUBB30H,#12H
该指令错误,带进位减法指令目的操作数必须就是A,要将立即数12H与30H内容相加,可改为:
MOVA,30H
SUBBA,#12H
(2)、MOVA,2000H
该指令错误,MOV为内部数据传送指令,范围只就是在内部数据存储器与累加器传送,地址不超过FFH。
要将外部2000H送累加器可改为
MOVDPTR,2000H
MOVXA,@DPTR
(3)、ADDR0,0A3H
该指令错误,要将A3H内容与R0内容相加,
可改为:
MOVA,R0
ADDA,0A3H
(4)、CJNE20H,#20H,L1
该指令错误,CJNE第一操作数可以就是A、寄存器Rn或@Ri
可改为:
MOVR1,20H
CJNER1,#20H,L1
(5)、RLCA
该指令正确
4.设R0的内容为32H,A的内容为48H,而片内RAM32H单元的内容为80H,40H单元的内容为08H。
请指出在执行下列程序段后,上述各单元的内容变化。
MOVA,@R0;R0指向地址32H内容送A,即(A)=80H
MOV@R0,40H;32H←(40H),即(32H)=(40H)=08H
MOV40H,A;40H←(A),即(40H)=(A)=80H
MOVR0,#35H;R0←35H,,(R0)=35H
5.根据要求要求写出相应的指令。
1)、将R0的内容送R1
MOVA,R0
MOVR1,A
2)将30H内容送20H。
MOV20H,30H
3)将立即数30H送R0H
MOVR0,#30H
5)将R0的内容送以R1中内容为地址的存储单元。
MOVA,R0
MOV@R1,A
6)将内部RAM30H内容送外部20H单元。
MOVA,30
MOVR1,#20H
MOVX@R1,A
7)将外部RAM3000H内容送内部30H单元。
MOVDPTR,#3000H
MOVXA,@DPTR
MOV30H,A
8)将ROM2000H内容送R1。
MOVDPTR,#3000H
MOVCA,@A+DPTR
MOVR1,A
9)将ROM2000H内容送内部30H单元。
MOVDPTR,#2000H
MOVCA,@A+DPTR
MOV20H,A
10)将ROM2000H内容送外部20H单元。
MOVDPTR,#2000H
MOVCA,@A+DPTR
MOVR1,#20H
MOVX@R1,A
6.编程将片外数据存储器地址为40H~60H区域的数据块,全部搬移到片内RAM的同地址区域,并将原数据区全部填为FFH。
MOVR0,#40H
MOVR1,#33
LOOP:
MOVXA,@R0
MOV@R0,A
MOVA,#0FFH
MOVX@R0,A
INCR0
DJNZR1,LOOP
RET
7.编程找出片外2000H~200FH数据区中的最小值,结果存放于R2中。
MOVDPTR,#2000H
MOVR7,#0FH
MOVXA,@DPTR
MOVB,A
LOOP:
INCDPTR
MOVXA,@DPTR
CJNEA,B,LOOP1
LOOP1:
JNCLOOP2
MOVB,A
LOOP2:
DJNZR7,LOOP
MOVR7,B
RET
第四章习题参考答案
1、就是在外部RAM中的xdata区定义了无符号字符型的字变量OUTX2,它的地址就是(1002H)。
2、
(1)编程容易 ;
(2)容易实现复杂的数值计算;(3)容易阅读、调试、维护程序;
(4)容易实现模块化开发;(5)程序可移植性好。
3、bit,data,idata,pdata,code,xdata,sbit,sfr,sfr16
4、bit与sbit都就是C51扩展的变量类型。
bit就是位变量,编译器在编译过程中分配地址。
除非指定,否则这个地址就是随机分配的。
这个地址就是整个可寻址空间,也就就是内部RAM、外扩RAM与ROM。
sbit就是对应可位寻址空间的一个位,包括可位寻址区:
20H~2FH与特殊功能寄存器区。
一旦用了形如sbixxx=REGE^6的定义,这个sbit量就确定地址了。
bit与sbit的最大区别在于,bit就是定义一个变量;sbit经常用在寄存器中的,方便对寄存器的某位进行操作。
5、
(1)使用C51运行库中的预定义宏;
(2)通过指针访问;(3)使用C51扩展关键字_at_。
6、
(1)中断函数不能进行参数传递,如果中断函数中包含任何参数声明都将导致编译出错。
(2)中断函数没有返回值,如果企图定义一个返回值将得不到正确的结果,建议在定义中断函数时将其定义为void类型,以明确说明没有返回值。
(3)在任何情况下都不能直接调用中断函数,否则会产生编译错误。
因为中断函数的返回就是由8051单片机的RETI指令完成的,RETI指令影响8051单片机的硬件中断系统。
如果在没有实际中断情况下直接调用中断函数,RETI指令的操作结果会产生一个致命的错误。
(4)如果在中断函数中调用了其它函数,则被调用函数所使用的寄存器必须与中断函数相同。
否则会产生不正确的结果。
(5)C51编译器对中断函数编译时会自动在程序开始与结束处加上相应的内容,具体如下:
在程序开始处对ACC、B、DPH、DPL与PSW入栈,结束时出栈。
中断函数未加usingm修饰符的,开始时还要将R0~R1入栈,结束时出栈。
如中断函数加usingm修饰符,则在开始将PSW入栈后还要修改PSW中的工作寄存器组选择位。
(6)C51编译器从绝对地址8n+3处产生一个中断向量,其中n为中断号,也即interrupt后面的数字。
该向量包含一个到中断函数入口地址的绝对跳转。
(7)中断函数最好写在文件的尾部,并且禁止使用extern存储类型说明。
防止其它程序调用。
7、有small,compact与large三种存储器模式。
Small存储器模式参数及局部变量放入可直接寻址的内部存储器(最大128B,默认存储器类型为data)
compact存储器模式参数及局部变量放入分页外部数据存储器(最大256B,默认存储器类型为pdata)
large存储器模式参数及局部变量直接放入外部数据存储器(最大64KB,默认存储器类型为xdata)
8、#include
main()
{
inti;
unsignedcharxdata*p=0x2000;/*指针指向2000H单元*/
for(i=0;i<256;i++)/*清零2000H-20FFH单元*/
{*p=0;p++;}
}
9.
(1)unsignedcharcodedis_code[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
(2)unsignedchardataTL0_L_at_0x30;
unsignedchardataTH0_H_at_0x31;
(3)unsignedcharidatadata_buf[20];
(4)unsignedcharxdatadata_array[100];
(5)unsignedcharbdatastatus;
sbitflag_lamp1=status^0;
sbitflag_lamp2=status^1;
sbitflag_machine1=status^2;
sbitflag_machine2=status^3;
sbitflag_port1=status^4;
sbitflag_port2=status^5;
sbitflag_calcu1=status^6;
sbitflag_calcu2=status^7;
第五章习题参考答案
1、MCS-51单片机有5个中断源,2个中断优先级。
优先级由软件填写特殊功能寄存器IP加以选择。
2、外部中断请求标志位就是IE0与IE1。
3、8051单片机响应中断后,产生长调用指令LCALL,执行该指令的过程包括:
首先把当前PC的内容压入堆栈,对断点保护,然后把长调用指令的16位地址送PC,使程序转向执行中断入口地址区。
4、8051单片机的IP寄存器功能就是设置中断优先级
5、用指令完成下列要求。
⑴.INT1、T0开中断,其余禁止中断;
MOVIE,#86H
⑵.全部开中断
MOVIE,#FFH
⑶.INT0、T0开中断,其余保持不变;
SETBEA
SETBEX0
SETBET0
⑷.INT1、串行口为高优先级,其余为低优先级;
MOVIP,#85H
5、子程序与中断程序有何异同,为什么子程序返回指令RET与中断返回指令RETI不能相互替代?
答:
中断类似于子程序设计中的调用子程序,但它们有着本质的区别。
调用子程序就是程序员事先安排好的,而中断就是由一些特殊事件触发的,就是随机的。
RET功能就是恢复堆栈中PC的值,从调用指令的下一条指令开始运行程序,不影响标志位。
RETI除了具有RET指令功能外,还清除内部相应的中断状态触发器,因此中断服务程序必须以RETI为指令结束。
CPU执行RETI指令后至少再执行一条指令,才能响应新的中断请求,因此不能互换。
1.外部中断有几种中断触发方式?
对跳变触发与电平触发信号有什么要求?
如何设置?
答:
外部中断有低电平触发与边沿触发两种触发方式。
低电平触发时,施加在相应引脚上的低电平在中断返回前必须撤消,否则将再次申请中断造成出错。
即施加在
引脚上的低电平持续时间应大于一个机器周期,且小于中断服务程序的执行时间。
在边沿触发方式中,为了保证CPU在两个机器周期内能够检测到由高至低跳变的电平,输入的高电平与低电平的持续时间至少要保持12个振荡周期(即一个机器周期的时间)。
通过TCON寄存器的IT1与IT0来设置。
ITi设置为“0”时,相应的外部中断为低电平触发方式;设置为“1”时,相应的外部中断为边沿触发方式,
7、为何要在程序的首地址安排一条跳转到主程序的指令?
在响应中断的过程中为什么要保护现场?
应如何保护?
答:
因为程序的首地址与外中断0的入口地址之间只相差3各单元,放不下完整的主程序,一般将主程序放到0030H以后的单元,故要安排一条跳转到主程序的指令。
主程序中通常用到PSW、工作寄存器与特殊功能寄存器等。
如果在中断服务程序中要用这些寄存器,会造成这些现场寄存器中数据的混乱,在中断服务前应将它们的内容保护起来称保护现场。
通常利用堆栈操作来保护现场。
8、利用
做一个计数器。
当
有脉冲时,A的内容加1。
并且当A的内容大于或等于100时将P1、0置位。
ORG0000H
LJMPMIN0
ORG0003H
LJMPINTB0
ORG0030H
MIN0:
MOVSP,#30H;主程序
SETBIT0
SETBEX0
SETBEA
MOVA,#00
MIN1:
NOP
LJMPMIN1
ORG0100H
INTB0:
PUSHPSW;
的中断服务程序
ADDA,#01
CJNEA,#100,INTB1
LJMPINTB2
INTB1:
JCINTB3
INTB2:
SETBP1、0
INTB3:
POPPSW
RETI
END
第六章习题答案
1.当定时器T0工作在方式3时,要占用定时器T1的TF1与TR1两个控制位。
2.在定时器工作在方式1下,计数器的计数器的宽度为16位,若fosc=12MHz,最大定时时间为1μs,若fosc=6MHz,则最大定时时间为2μs。
3.定时时间与定时器的工作方式、计数初值及晶振频率有关。
4.MCS-51的定时器/计数器作计数器使用时,计数脉冲由外部信号通过引脚P3、4与P3、5提供。
5.MCS-51的定时器/计数器T0门控信号GATE设置为1时,只有INT0引脚为高电平且由软件使TR0置1时,才能启动定时器工作。
6.MCS-51系列单片机内部设有几个定时器/计数器?
它们就是由哪些专用寄存器组成?
有哪几种工作方式?
简述各种工作方式的功能特点。
MCS-51单片机内部设有两个16位定时器/计数器T0与T1。
分别有的8位计数器TH0、TL0与TH1、TL1组成,各有4种工作方式。
方式0就是一个13位的定时器/计数器。
只用了16位寄存器中的高8位(THi)与低5位(TLi的D4~D0位),TLi的高3位未用。
方式1为16位定时器/计数器方式,由THi的8位与TLi的8位构成16位加1计数器,,当16位计数满溢出时,溢出标志位TFi置“1”。
方式2为8位自动重装计数器。
仅TLi作为计数器,而THi的值在计数中不变。
TLi溢出时,THi中的值自动装入TLi中。
方式3只适用定时器/计数器T0。
T0在该方式下被拆成两个独立的8位计数器TH0与TL0,TL0可作8位的定时器或计数器用,而TH0借用T1的控制位与溢出标志位TR1与TF1,只可用作简单的定时器使用。
该方式下T1可用作串行口波特率发生器。
7.MCS-51系列单片机定时器/计数器作定时器或计数器使用时,其计数脉冲分别由谁提供?
作定时器使用时,其实质就是在单片机内部对机器周期进行计数,计数脉冲输入信号由内部时钟提供,每一个机器周期计数器自动加1。
作计数器使用时,其实质就是对外部事件进行计数,计数脉冲来自相应的外部输入引脚T1或T0,当外部输入脉冲信号由1至0的跳变时,计数器自动加1。
8.采用程序查询方式,由T1产生一个50Hz的方波,从P1、1输出,fosc=12MHz。
解:
方波周期T=1/50=0、02s=20ms,用T1定时10ms,计数初值为:
216-10×10-3×12×106/12=65536-10000=55536=D8F0H
源程序如下:
ORG0000H
LJMPT1BUS
ORG0030H
T1BUS:
MOVTMOD,#10H;T1方式1,定时模式
SETBTRl;启动T1
LOOP:
MOVTH1,#0D8H;送T1计数初值
MOVTL1,#0F0H
LOOP1:
JNBTF1,LOOP1;T1没有溢出等待
CLRTF1;产生溢出清标志位
CPLP1、1;P1、1取反输出
SJMPLOOP;循环
END
第七章习题答案
1、选择题
(1)MCS-5l系列单片机的串行口就是(B)。
A、单工B、全双工C、半双工D、并行口
(2)表示串行数据传输速率的指标就是(D)。
A、USARTB、UARTC、字符帧D、波特率
(3)串行口的控制寄存器就是(C)。
A、PCONB、SMODC、SCOND、SBUF
(4)当设置串行口工作于方式2时,采用(A)指令。
A、MOVSCON,#80HB、MOVSCON,#10H
C、MOVPCON,#80HD、MOVPCON,#10H
(5)当串行口工作于方式0时,其波特率(C)。
A、取决于定时器1的溢出率B、取决于PCON的SMOD
C、取决于时钟频率D、取决于PCON的SMOD与定时器1的溢出率
(6)当串行口工作于方式1时,其波特率(D)。
A、取决于定时器1的溢出率B、取决于PCON的SMOD
C、取决于时钟频率D、取决于PCON的SMOD与定时器1的溢出率
(7)串行口的发送数据与接收数据端为(A)。
A、TXD与RXDB、TI与RIC、TB8与RB8D、REN
(8)串行口就是单片机的(A)。
A、内部资源B、外部资源C、输入设备D、输出设备
简答题