最新单片机原理与应用习题参考答案高惠芳版精编版.docx
- 文档编号:11461671
- 上传时间:2023-03-01
- 格式:DOCX
- 页数:30
- 大小:65.38KB
最新单片机原理与应用习题参考答案高惠芳版精编版.docx
《最新单片机原理与应用习题参考答案高惠芳版精编版.docx》由会员分享,可在线阅读,更多相关《最新单片机原理与应用习题参考答案高惠芳版精编版.docx(30页珍藏版)》请在冰豆网上搜索。
最新单片机原理与应用习题参考答案高惠芳版精编版
《单片机原理与应用技术》(高惠芳版)习题参考答案:
第二章(p38)
习题
第
(1)题:
MCS-51单片机芯片包含哪些主要功能部件?
8051单片机是个完整的单片微型计算机。
芯片内部包括下列主要功能部件:
1)8位CPU;
2)4KB的片内程序存储器ROM。
可寻址64KB程序存储器和64KB外部数据存储器;
3)128B内部RAM;
4)21个SFR;
5)4个8位并行I/O口(共32位I/O线);
6)一个全双工的异步串行口;
7)两个16位定时器/计数器;
8)5个中断源,两个中断优先级;
9)内部时钟发生器。
第(4)题:
MCS-51单片机的四个I/O口在使用上各有什么功能和特点?
1)P0口:
8位双向三态端口,外接上拉电阻时可作为通用I/O口线,也可在总线外扩时用作数据总线及低8位地址总线。
2)P1口:
8位准双向I/O端口,作为通用I/O口。
3)P2口:
8位准双向I/O端口,可作为通用I/O口,也可在总线外扩时用作高8位地址总线。
3)P3口:
8位准双向I/O端口,可作为通用I/O口,除此之外,每个端口还有第二功能,比如有的端口用作串行通信口,有的端口用作外部中断信号输入口,有的端口用作计数脉冲输入引脚,有的端口用作读/写控制线。
实际应用中常使用P3口的第二功能。
第(5)题:
MCS-51单片机的存储器分那几个空间?
作用是啥?
8051存储器包括程序存储器和数据存储器,从逻辑结构上看,可以分为三个不同的空间:
1)64KB片内片外统一编址的程序存储器地址空间,地址范围:
0000H~FFFFH,对于8051单片机,其中地址0000H~0FFFH范围为4KB的片内ROM地址空间,1000H~FFFFH为片外ROM地址空间;
2)256B的内部数据存储器地址空间,地址范围为00H~FFH,对于8051单片机,内部RAM分为两部分,其中地址范围00H~7FH(共128B单元)为内部静态RAM的地址空间,80H~FFH为特殊功能寄存器的地址空间,21个特殊功能寄存器离散地分布在这个区域;对于8052系列单片机还有地址范围为80H~FFH的高128B的静态RAM。
3)64KB的外部数据存储器地址空间:
地址范围为0000H~FFFFH,包括扩展I/O端口地址空间。
第(6)题:
RAM内包含哪些可位寻址单元?
片内RAM中,20H~2FH是位寻址区,共16个单元,每个单元的每一位都有地址,位地址范围是00H~7FH,共128位可寻址位。
第(7)题:
堆栈?
SP的作用?
为何要对SP重新赋值?
1)堆栈是一种数据结构,是只允许数据在其一端进出的一段存储空间;为程序调用和中断操作而设立,用作现场保护和断点保护。
2)堆栈指针SP用来存放堆栈的栈顶地址。
3)复位后,SP的初值为07H,由于片内RAM的07H单元的后继区域分别为工作寄存器区和位寻址区,通常这两个区域在程序中有其它重要用途,所以用户在设计程序时,一般都将堆栈设在内部RAM的30H~7FH地址空间的高端区域,而不设在工作寄存器区和位寻址区。
第(10)题:
振荡周期、时钟周期、机器周期、指令周期?
1)振荡周期是指为单片机提供脉冲信号的振荡源的周期,是单片机最基本的时间单位。
通常由外接晶振与内部电路来提供振荡脉冲信号,其频率记为
,此频率的倒数即是振荡周期。
2)振荡脉冲经过二分频后就是单片机的时钟信号,时钟信号的周期称为时钟周期,又定义为状态,用S表示。
时钟周期是振荡周期的二倍。
3)机器周期是指令执行过程中完成某一个基本操作所需的时间。
一个机器周期等于12个振荡周期。
即
。
4)指令周期是指执行一条指令所需要的时间,根据指令不同,可包含1、2、4个机器周期。
第(13)题:
开机复位后,单片机使用的是哪组工作寄存器?
其地址是啥?
如何改变当前工作寄存器组?
开机复位后,单片机使用的是第0组工作寄存器。
它们的地址范围是00H~07H。
对PSW寄存器的RS0、RS1两位的置位或复位即可改变单片机当前使用的工作寄存器组。
第三章(p66)
2、MCS-51单片机有哪几种寻址方式?
各有什么特点?
寻址范围是什么?
MCS-51单片机有7种寻址方式。
(1)立即寻址。
操作数直接在指令中给出,它可以是二进制、十进制、十六进制数,也可以是带单引号的字符,通常把这种操作数称为立即数,它的寻址范围就是指令本身所在的程序存储单元。
(2)直接寻址。
在指令中直接给出存放操作数的内存单元的地址。
寻址范围为:
内部RAM低128字节单元,特殊功能寄存器。
(3)寄存器寻址。
指令中给出的是操作数所在的寄存器。
寻址范围为:
4组工作寄存器(R0~R7),部分特殊功能寄存器,如A、B、DPTR。
(4)寄存器间接寻址。
存放操作数的内存单元的地址放在寄存器中,指令只给出寄存器(包括Ri和DPTR),寄存器名称前加“@”前缀标志。
寻址范围:
地址范围从00~FFH的全部内部RAM单元,包括堆栈区,但不包括特殊功能寄存器,以及地址范围从0000~FFFFH的全部片外RAM。
(5)变址寻址。
将基址寄存器与变址寄存器的内容相加,结果作为操作数的地址。
变址寻址主要用于查表操作。
寻址范围:
64KB的程序存储空间。
(6)相对寻址。
指令中给出的操作数是程序相对转移的偏移量。
偏移量是一个带符号的单字节数,范围为-128~+127。
(7)位寻址。
操作数是位地址。
寻址范围:
内部RAM位寻址区共128位(位地址:
00~7FH),11个特殊功能寄存器中的可寻址位(对于8051,有83位)。
3、对片内RAM可以用哪几种寻址方式?
对片外RAM可以用哪几种寻址方式?
对片内RAM的工作寄存器区(00~1FH)可以用直接寻址、寄存器寻址和寄存器间接寻址;位寻址区(20~2FH)可以用直接寻址、寄存器间接寻址和位寻址;用户RAM区(30~7FH)可以用直接寻址、寄存器间接寻址;内部RAM的高128B(80~FFH)只能用寄存器间接寻址;内部RAM的特殊功能寄存器区(80~FFH)用直接寻址。
对于片外RAM,可以通过寄存器Ri进行256B的分页间接寻址或通过DPTR进行64KB范围的寄存器间接寻址。
4、对片外RAM单元的寻址中,用Ri间接寻址与用DPTR间接寻址有啥区别/
对片外RAM单元寻址时,可用Ri进行分页间接寻址,亦即只能在当前页面内间接寻址,页面大小为256个字节,页面地址由特殊功能寄存器P2决定;也可用DPTR进行间接寻址,寻址范围为64K字节,即256个页面内的任一单元均可寻址。
5、指出下列指令操作数的寻址方式?
①立即寻址MOVA,#00H
②直接寻址MOVA,50H
③寄存器间接寻址MOVA,@R0
④寄存器寻址MOVA,R5
⑤变址寻址MOVA,@A+DPTR
⑥相对寻址SJMP70H
⑦直接寻址或寄存器寻址CLRA
11、①ANLA,#0FCH累加器A的低2位清零,其余位不变;
②ORLA,#0C0H累加器A的高2位置1,其余位不变;
③XRLA,#0F0H累加器A的高4位取反,其余位不变;
④XRLA,#55H累加器A的第0、2、4、6位取反,其余位不变;
12、已知A=78,R1=78H,B=04H,CY=1,片内RAM78H=0DDH,80H=6CH,试分别写下列指令执行后单元的结果和相应标志位的值。
①(A)=55H,CY=1,ADDA,@R1
②(A)=0,CY=0,SUBBA,#77H
③(B)=01H,(A)=0E0H,CY=0MULAB
④(A)=1EH,(B)=0,CY=0,DIVAB
⑤(78H)=58H,CY=1,ANL78H,#78H
⑥(A)=7FH,CY=1,ORLA,#0FH
⑦(80H)=14H,CY=1,XRL80H,A
13、写出下列指令的执行成果。
MOVA,#7FH
CPLA
RRA
SWAPA
(A)=4或4H或04H
18、编程:
在外部数据存储器首地址为TABLE的数据表中存有10B的数据,编程将每个字节的最高位置1,并返回原来的单元
ORG0000H
LJMPMAIN
ORG0100H
MAIN:
MOVDPTR,#TABLE
MOVR0,#10
LOOP:
MOVXA,@DPTR
ORLA,#80H或SETBACC.7
MOVX@DPTR,A
INCDPTR
DJNZR0,LOOP
SJMP$
END
第四章(p95)
第
(2)题编程:
设内部RAM5AH单元中有一个变量X,轻编写计算下属函数式的程序,结果存入5BH单元。
Y=X2+8
X2-1
41
ORG0000H
LJMPSTART
ORG0100H
START:
CLRC
MOVA,5AH
SUBBA,#10
JCLOWER10
CLRC
MOVA,5AH
CJNEA,#15,IFL15
BE1015:
MOVA,5AH
MOVB,A
MULAB
ADDA,#8
AJMPSAVE
IFL15:
JNCLARGE15
SJMPBE1015
LOWER10:
MOVA,5AH
MOVB,A
MULAB
DECA
AJMPSAVE
LARGE15:
MOVA,#41
SAVE:
MOV5BH,A
SJMP$
END
第(10)题编程在以2000H为首地址的存储区中,存放着20个用ASCII吗表示的0-9的数。
试编程将他们转化为BCD吗,并以压所BCD吗的形式存放在3009H单元中。
ORG0000H
LJMPSTART
ORG0100H
START:
MOVDPTR,#2000H
MOVR2,#10
MOVR0,#00H
MOVP2,#30H
LOOP:
MOVXA,@DPTR
SUBBA,#30H
MOVR3,A
INCDPTR
MOVXA,@DPTR
SUBBA,#30H
SWAPA
ADDA,R3
MOVX@R0,A
INCDPTR
INCR0
DJNZR2,LOOP
SJMP$
END
第6章(p195)
第
(1)题
参考答案:
①什么是中断?
单片机正常工作时,按用户程序逐条执行指令,如果系统中出现某些急需处理的事件,CPU暂时终止当前的程序,转而去执行服务程序,以对发生的更紧迫的事件进行处理,待服务程序结束后,CPU自动返回原来的程序继续执行,这个过程就称为中断。
②有几个中断源?
MCS-51单片机有5个中断源:
外部中断0、定时/计数器T0的溢出中断、外部中断1、定时/计数器T1的溢出中断、串行口收发中断,对应的中断请求标志为IE0、TF0、IE1、TF1、TI/RI。
③如何提出中断?
中断源产生中断信号后,中断系统把相应的中断标志置位,在中断允许的前提下,由中断标志触发中断请求。
④单片机如何进行中断响应?
中断响应过程:
第一步,对于外部中断,需要由CPU采样外部中断请求信号,若采样到后,把相就的中断请求标志置位;第二步,查询各个中断标志位;第三步,进行中断响应,由硬件自动生成一条长调用指令“LCALL #addr16”进行断点保护后转向中断服务程序。
第
(2)题MCS51的中断源中,哪些中断请求信号在中断响应是可自动清除?
那些不能?
不能的如何处理?
参考答案:
在中断响应时,可以自动清除的中断请求信号有:
①定时/计数器的溢出标志TF0/TF1;②脉冲方式的外部中断请求IE0/IE1;
在中断响应时,不能自动清除的中断请求信号有:
①电平方式的外部中断请求,处理方法:
中断响应后通过软硬件结合的方法把输入端的低电平强制改成高电平,再软件清IE0/IE1。
②串行中断,处理方法:
中断响应后,在中断服务程序中查询RI/TI,以确定是接收中断还是发送中断,查询以后由指令(即软件方法)对RI/TI清零。
第(3)题8051中断优先级有几级?
在形成中断嵌套时各级有何规定?
参考答案:
8051单片机的中断优先级有高低两个优先级。
在形成中断嵌套时,低优先级中断请求不能打断高优先级的中断服务。
高优先级中断请求可以打断低优先级的中断服务,从而实现中断嵌套。
如果一个中断请求已被响应,则同级的中断请求将被禁止,即同级中断不能嵌套。
如果同级的多个中断请求同时出现,则由单片机内部硬件查询,按自然响应顺序确定响应哪个中断请求。
各个中断源自然响应的先后顺序为:
外部中断0,定时/计数器T0,外部中断1,定时/计数器T1中断,串行口中断。
第(4)题MCS51响应中断后,各中断入口地址是啥?
参考答案:
外部中断0入口地址:
0003H
定时/计数器T0中断入口地址:
000BH
外部中断1入口地址:
0013H
定时/计数器T1中断入口地址:
001BH
串行口中断入口地址:
0023H
第(7)题定时计数器的四中工作方式各自的技术范围?
如果要计10个单位不同方式的初值是啥?
参考答案:
定时/计数器四种工作方式各自的计数范围为:
方式0213
方式1216
方式2、328
如果要计10个单位,计数器的初值为:
方式0:
X=213-10=8182=1FF6H
THx=FFH
TLx=16H
(x为0或1,对应T0或T1,下同)
方式1:
X=216-10=65526=FFF6H
THx=FFH
TLx=F6H
方式2:
X=28-10=246=F6H
THx=F6H
TLx=F6H
方式3:
X=28-10=246=F6H
只对T0有效
TH0=F6H
TL0=F6H
第(9)题已知振荡频率12MHZ,用定时计数器T0,实现从P2.0产生周期为100ms的方波,用汇编和C语言编程
参考答案1:
用中断方式实现
//从P2.0引脚输出周期为100ms的方波
//由定时器T0产生50ms的定时
//T0工作于方式1可以实现50ms的定时
//X=65536-50/0.001=15536=3CB0H
#include
sbitp2_0=P2^0;
voidmain(void)
{
TMOD=0X01;
EA=1;
ET0=1;
TH0=(65536-50000)/256;
//TH0=0x3C;
TL0=(65536-50000)%256;
//TL0=0xB0;
TR0=1;
while
(1);
}
voidtimer0(void)interrupt1using1
{
TH0=(65536-50000)/256;
//TH0=0x3C;
TL0=(65536-50000)%256;
//TL0=0xB0;
p2_0=!
p2_0;
}
参考答案2:
不用中断方式,用查询方式实现
//从P2.0引脚输出周期为100ms的方波
//由定时器T0产生50ms的定时
//T0工作于方式1可以实现50ms的定时
//X=65536-50/0.001=15536=3CB0H
#include
sbitp2_0=P2^0;
voidmain(void)
{
TMOD=0X01;
TH0=(65536-50000)/256;
//TH0=0x3C;
TL0=(65536-50000)%256;
//TL0=0xB0;
TR0=1;
while
(1)
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
while(!
TF0);
p2_0=!
p2_0;
}
}
参考答案3:
;中断方式
ORG0000H
LJMPMAIN
ORG000BH
AJMPSER_T0
ORG0100H
MAIN:
MOVTMOD,#01H
MOVTH0,#3CH
MOVTL0,#0B0H
SETBEA
SETBET0
SETBTR0
SJMP$
SER_T0:
MOVTH0,#3CH
MOVTL0,#0B0H
CPLP2.0
RETI
END
参考答案4:
;查询方式
ORG0000H
LJMPMAIN
ORG0100H
MAIN:
MOVTMOD,#01H
MOVTH0,#3CH
MOVTL0,#0B0H
SETBTR0
LOOP:
JBCTF0,NEXT
SJMPLOOP
NEXT:
MOVTH0,#3CH
MOVTL0,#0B0H
CPLP2.0
SJMPLOOP
END
第(13)题编程利用单片机内部定时计数器T1产生定时时钟,由P1口输出信号控制8个LED指示灯,试编程使8个指示灯依次轮流点亮,每个指示灯点亮时间100ms。
参考答案
(1)
//C语言程序
//P1口接8只LED,编写程序轮流点亮各个LED////
#include
//定义流水灯的花样
unsignedcharcodedesign[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsignedchari=0,j=0;
voidinit_timer1(void);
voidmain(void)
{
init_timer1();
while
(1);
}
voidinit_timer1(void)
{
TMOD=0x10;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
ET1=1;
EA=1;
TR1=1;
P1=design[0];
}
/*晶振为12MHz
voidserv_t1(void)interrupt3using1
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
i++;
if(i==2)
{
i=0;
j=(j+1)%8;
P1=design[j];
}
}
//*/
//*晶振为6MHz
voidserv_t1(void)interrupt3using1
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
j=(j+1)%8;
P1=design[j];
}
//*/
参考答案
(2)
//P1口接8只LED,编写程序轮流点亮各个LED////
#include
#include
unsignedchari=0,a=0xfe;
voidinit_timer1(void);
voidmain(void)
{
init_timer1();
while
(1);
}
voidinit_timer1(void)
{
TMOD=0x10;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
ET1=1;
EA=1;
TR1=1;
}
/*晶振为12MHz
voidserv_t1(void)interrupt3using1
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
i++;
if(i==2)
{
i=0;
a=_crol_(a,1);
P1=a;
}
}
//*/
//*晶振为6MHz
voidserv_t1(void)interrupt3using1
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
a=_crol_(a,1);
P1=a;
}
//*/
参考答案(3)
//P1口接8只LED,编写程序轮流点亮各个LED,查询方式////
#include
#include
unsignedchari=0,temp=0xfe;
voidmain(void)
{
TMOD=0x10;
P1=0xfe;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
TR1=1;
while
(1)
{
while(!
TF1);
P1=_crol_(temp,1);
TF1=0;
}
}
参考答案(4)
;汇编语言程序
;晶振频率为6MHZ
ORG0000H
AJMPMAIN
ORG001BH
AJMPSERV_T1
ORG0100H
MAIN:
MOVSP,#60H
CLRA
MOVR7,#0
MOVTMOD,#10H
MOVTH1,#3CH
MOVTL1,#0B0H
SETBET1
SETBEA
SETBTR1
MOVDPTR,#TABLE
MOVCA,@A+DPTR
MOVP1,A
SJMP$
TABLE:
DB0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FH
ORG0200H
SERV_T1:
MOVTH1,#3CH
MOVTL1,#0B0H
INCR7
CJNER7,#8,OUTPUT
MOVR7,#0
OUTPUT:
MOVA,R7
MOVCA,@A+DPTR
MOVP1,A
RETI
END
参考答案(5)
;晶振频率为6MHZ
ORG0000H
AJMPMAIN
ORG001BH
AJMPSERV_T1
ORG0100H
MAIN:
MOVSP,#60H
MOVTMOD,#10H
MOVTH1,#3CH
MOVTL1,#0B0H
SETBET1
SETBEA
SETBTR1
MOVA,#0FEH
MOVP1,A
SJMP$
ORG0200H
SERV_T1:
MOVTH1,#3CH
MOVTL1,#0B0H
RLA
MOVP1,A
RETI
END
第16题MCS51串口有几种工作放是,特点是啥?
参考答案:
MCS-51单片机的串行口是全双工串口,有4种工作方式:
(1)工作方式0:
通常串行口外接同步移位寄存器,用于扩展I/O端口。
波特率固定为
。
(2)工作方式1:
串行口作为波特率可变的10
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 单片机 原理 应用 习题 参考答案 高惠芳版 精编