单片机原理与应用赵德安习题答案Word格式.docx
《单片机原理与应用赵德安习题答案Word格式.docx》由会员分享,可在线阅读,更多相关《单片机原理与应用赵德安习题答案Word格式.docx(9页珍藏版)》请在冰豆网上搜索。
![单片机原理与应用赵德安习题答案Word格式.docx](https://file1.bdocx.com/fileroot1/2023-1/30/fc091974-b86c-4307-a033-667a35cab118/fc091974-b86c-4307-a033-667a35cab1181.gif)
10元以内计算机。
2、功能不大。
只能专用在适用的领域。
但在适用的领域中,性价比却是最佳。
3、可靠性高,抗干扰能力强。
4、功耗比较低。
对电源要求低。
适用面广。
5、外围扩展能力强。
可以应用到不同的控制系统中。
根据其特点可知,单片机功能不大,适宜构成专用微机系统。
4.研制微机应用系统时,应如何选择单片机的型号?
在单片机应用研究系统开发中,单片机是整个设计的核心。
设计者需要为单片机安排合适的外部器件,同时还需要设计整个控制软件,因此选择合适的单片机型号很重要。
目前,市场上的单片机种类繁多,在进行正式的单片机应用研究系统开发之前,需要根据不同单片机的特性,从中作出合理的选择。
所以在单片机选型时,主要需要注意以下几点:
1.仔细调查市场,尽量选用主流的、货源充足的单片机型号,这些器件使用比较广泛,有许多设计资料供学习或参考。
2.尽量选择所需硬件集成在单片机内部的型号,例如ADC、DAC、I2C、SPI和USB等。
这样便于整个控制系统的软件管理,减少外部硬件的投入,缩小整体电路板的面积,从而减少总体投资等。
3.对于手持设备,移动设备或者其他需要低功耗的设备,尽量选择低电压、低功耗的单片机型号,这样可以减少能量的消耗,延长设备的使用寿命。
4.在资金等条件允许的情况下,尽量选择功能丰富,扩展能力强的单片机,这样便于以后的功能升级和扩展。
5.对于体积有限制的产品,尽量选择贴片封装的单片机型号,这样可以减少电路板面积,从而降低硬件成本,同时也有助于电磁兼容设计。
第二章
1、分别写出一个MCS-51中ROM、EPROM、无ROM型单片机的型号和内部资源。
其中哪个产品内部具有固化的软件?
该软件能否被所有用户所使用?
怎样使用该种产品?
其中8051、80C51、8052、80C52等产品具有固化软件,该软件不能被所有用户所使用,应用程序只能委托半导体厂家"
3.什么是堆栈?
8032的堆栈区可以设在什么地方?
一般应设在什么区域?
如何实现?
试举例说明。
堆栈是在片内RAM中专门开辟出来的一个区域,数据的存取是以"
后进先出"
的结构方式处理的。
实质上,堆栈就是一个按照"
原则组织的一段内存区域。
8032的堆栈区原则上可以设在内部RAM中的00H-FFH的任意区域内,一般应设在30H-7FH的范围内。
通过赋值的方式实现,如:
MOVSP,#60H。
4.8031的内部RAM中,哪些可以作为数据缓冲区?
在8031内部RAM中工作寄存器区00H~1FH和位寻址区20H~2FH可以作为数据缓冲区。
6.MCS-51单片机构成系统时,程序存储器的容量最大是多少?
MCS-51单片机构成系统时,程序存储器的容量最大是64KB。
7.当单片机系统的程序存储器的容量为8KB时,程序存储器的开始地址为多少?
单片机内部无ROM时,〔EA/=0时,只访问外部ROMROM为外部ROM,开始地址为0000H-1FFFH,〔8KB=213=8192D=2000H,故,地址为2000H-1=1FFFH。
>
单片机内部有ROM,一般为4KB,地址范围为0000H-0FFFH,外部ROM的开始地址为1000H-1FFFH。
〔EA/=1时
9.当单片机系统外部数据存储器的容量为8KB时,数据存储器的开始地址一定要是0000H吗?
不一定,只有是间隔1FFFH个字节,都可以.
第三章
1.指出下列指令中划线操作数的寻址方式和指令的操作功能
MOVA,#78H;
立即寻址,将立即数送入累加器A
MOVA,78H;
直接寻址,将内部RAM78H单元内容送累加器A
MOVA,R6;
寄存器寻址,将R6内容送累加器A
INCR0;
寄存器间接寻址,将指针R0指向的内部RAM单元内容加1
PUSHACC;
寄存器寻址,将累加器A的内容入栈
RLA;
寄存器寻址,将累加器A的内容左移1位
CPL30H;
位寻址,将位变量30H的内容取反
SJMP$;
相对寻址,死循环指令
MOVCA,A+PC;
基寄存器加变址寄存器间接寻址,程序存储器PC和累加器A中内容相加,
送到累加器A
2.指出下列指令中哪些是非法的?
DECDPTRDECDPL
MOVA,R2MOVA,R1
MOVR1,R0MOVA,R0
MOVP1.1,30HMOVP1.1,C或者MOVC,30H
MOV#30H,AMOVA,#30H
MOVOV,30HMOVPSW.7,C
MOVA,A+DPTRMOVCA,A+DPTR
RRC30HRRCA所有的移位指令均是对累积器A进行的。
RLBRLA
XRLC,30H错,因为位操作指令中,没有位的异或运算
3.如何将1个立即数30H送入内部RAM90H单元?
如何将立即数送特殊功能寄存器P1?
<
1>
MOVR0,#90H
MOVR0,#30H能不能直接MOV90H,#30H?
不能,因为内部RAM的高128字节只能用寄存器间接寻址。
2>
MOVP1,#30H
4.执行下列一段程序后,试分析有关单元内容。
MOVPSW,#0;
PSW=00H
MOVR0,#30H;
<
R0>
=30H
MOV30H,#40H<
30H>
=40H
MOV40H,#50<
40H>
=50H
MOVA,R0<
A>
ADDCA,#0CEH<
=40H+0CEH+0=0EHPSW=10000101B=85H
INCR0<
=31H
执行结果:
=31H,<
=40H,<
=50,<
=0EH,<
PSW>
=85H
这里特别注意OV的值。
在带符号数的加减运算中,OV=1表示加减运算超出了累积器A所能表示的有符号数范围〔-128-+127,即产生了溢出,因此运算结果是错误的;
反之,OV=0表示运算结果正确,即无溢出产生。
OV=CY和CY1的异或。
其中CY1为第六位向第七位是否有进位或借位,有,为CY1=1,没有,CY1=0。
执行加法ADD时,当位6向位7进位,而位7不向C进位时,OV=1。
或者位6不向位7进位,而位7向C进位时,同样OV=1。
5.试编写一段程序,内部RAM40H、41H单元内容传送到外部RAM2000H、2001H单
元中。
MOVDPTR,#2000H
MOVR0,#40H
MOVA,R0
MOVXDPTR,A
INCR0
INCDPTR
6.试编写一段程序,根据累加器A的内容,到程序存储器1000H起始的表格中取一双字
节数,送内部RAM50H、51H单元。
MOVDPTR,#1000H
PUSHACC
MOVCA,A+DPTR
MOV50H,A
POPACC
INCDPTR
MOV51H,A
7.试编写一段程序,进行两个16位数的相减运算:
6483H-56E2H。
结果高8位存在内部
RAM40H,低8位存41H。
CLRC
MOVA,#83H
SUBBA,#0E2H
MOV41H,A
MOVA,#64H
SUBBA,#56H
MOV40H,A
8.试编写一段程序,将30H、31H单元中存放的BCD数,压缩成一个字节〔原30H单元
内容为高位,并放入30H单元。
MOVA,30H
SWAPA
ORLA,31H
9.试编写一段程序,将30H~32H单元中的压缩BCD拆成6个单字节BCD数,并放入
33H~38H单元。
MOVSP,#60H
MOVR0,#33H
ACALLH2ASC
MOVA,31H
ACALLH2ASC
MOVA,32H
SJMP$
H2ASC:
MOVB,A
ANLA,#0FH
MOVR0,A
INCR0
MOVA,B
SWAPA
ANLA,#0FH
RET
10.设晶振频率为6MHz,试编写一个延时1ms的子程序,并利用该子程序,编写一段主程序,在P1.0引脚上输出高电平宽2ms、低电平宽1ms的方波信号。
MOVSP,#60H
LOOP:
SETBP1.0
ACALLDELAY
CLRP1.0
ACALLDELAY
SJMPLOOP
DELAY:
MOVR0,#248;
1T
DJNZR0,$;
2T
NOP;
RET2T延时计算:
1T+248*2T+1T+2T=500T=1ms
第四章
5.晶振为12MHz,用T0产生1ms的定时,可以选择哪几种方式?
分别写出定时器的方式字和计数初值。
如需要1s的定时,应如何实现?
由于定时器工作在方式2和方式3下时的最大定时时间只有0.256ms,因此要想获得1ms的定时时间,定时器必须工作在方式0或方式1。
机器周期为T计数=12×
1/12×
10-6s=1μs
若采用方式0,定时器的方式字TMOD为:
00H,根据公式可得定时器的计数初值为:
TC=M-T/T计数=213-1*103/1=7192=1C18H
即:
TH0应装#0E0H;
TL0应装#18H〔高三位为0
若采用方式1,定时器的方式字TMOD为:
01H,根据公式可得定时器的计数初值为:
TC=M-T/T计数=216-1*103/1=64536=FC18H
即:
TH0应装#0FCH;
TL0应装#18H
如需要1s的定时,可以采用循环定时,增加循环次数。
第五章
1.若晶振为6MHz,试编写一个2ms延时子程序。
MOVR0,#498;
1T+498*2T+1T+2T=1000T=2ms
6.试设计一个n字节的无符号十进制数加法子程序,其功能为将〔R0和〔R1指出的
内部RAM中两个n字节压缩BCD码无符号十进制数相加,结果存放于被加数单元中。
子程序入口时,R0,R1分别指向被加数和加数的低位字节,字节数n存于R2,出口时R0指向和的最高位字节,CY为进位位。
LENEQU30
ORG0000H
AJMPMAIN
ORG0030H
MAIN:
MOVSP.#60H
MOVR2,#LEN
ACALLADD_NBYTE
SJMP$
ADD_NBYTE:
CLRC
MOVA,R0
ADDCA,R1
DAA
INCR1
DJNZR2,LOOP
END
11.试设计一个子程序,其功能为将〔R0指出的内部RAM中6个单字节正整数按从小到
大的次序重新排列。
S_2_L:
MOVR4,#5
CLRF0
PUSH00H;
R0入栈
POP01H;
出栈赋给R1
LOOP0:
MOVA,R4
MOVR5,A
LOOP1:
MOVA,R0
MOVA,R1
CJNEA,B,NEXT
SJMPNOCH
NEXT:
JNCNOCH
SETBF0
MOVR0,A
XCHA,B
MOVR1,A
NOCH:
INCR0
INCR1
DJNZR5,LOOP1
JNBF0,HALT
DJNZR4,LOOP0
HALT: