单片机原理与应用赵德安习题答案

单片机原理与应用赵德安习题答案
单片机原理与应用赵德安习题答案

第一章习题

2. 根据程序存储器的差别,单片机可以分为哪几种类型?

答:MCS-51 系列单片机按片内不同程序存储器的配置来分,可以分为以下

3 种类型:

①片内带Mask ROM(掩膜ROM)型:8051 、80C51 、8052 、80C52 。此类芯片是由半导体厂家在芯片生产过程中,将用户的应用程序代码通过掩膜工艺制作到ROM 中。其应用程序只能委托半导体厂家“写入” ,一旦写入后不能修改。此类单片机适合大批量使用。

②片内带EPROM 型:8751、87C51 、8752 。此类芯片带有透明窗口,可通过紫外线擦除存储器中的程序代码,应用程序可通过专门的编程器写入到单片机中,需要更改时可擦除重新写入。此类单片机价格较贵,不宜于大批量使用。

③片内无ROM(ROMLess)型:8031、80C31 、8032 。此类芯片的片内没有程序存储器,使用时必须在外部并行扩展程序存储器存储芯片。此类单片机由于必须在外部并行扩展程序存储器存储芯片,造成系统电路复杂,目前较少使用。

3. 单片机的主要特点是什么?它适宜构成通用微机系统还是专用微机系统?为什么?

答:单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据

处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O 口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D 转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。其主要特点如下:

1、价格便宜。10 元以内计算机。

2、功能不大。只能专用在适用的领域。但在适用的领域中,性价比却是最

佳。

3、可靠性高,抗干扰能力强。

4 、功耗比较低。对电源要求低。适用面广。

5、外围扩展能力强。可以应用到不同的控制系统中。根据其特点可知,单片机功能不

大,适宜构成专用微机系统。

4、研制微机应用系统时,应如何选择单片机的型号?

答:在单片机应用研究系统开发中,单片机是整个设计的核心。设计者需要为单片机安排合适的外部器件,同时还需要设计整个控制软件,因此选择合适的单片机型号很重要。目前,市场上的单片机种类繁多,在进行正式的单片机应用研究系统开发之前,需要根据不同单片机的特性,从中作出合理的选择。所以在单片机选型时,主要需要注意以下几点:

1. 仔细调查市场,尽量选用主流的、货源充足的单片机型号,这些器件使用比较广泛,有许多设计资料供学习或参考。

2. 尽量选择所需硬件集成在单片机

内部的型号,例如ADC 、DAC 、I2C 、SPI 和USB 等。这样便于整个控制系统的软件管理,减少外部硬件的投入,缩小整体电路板的面积,从而减少总体投资等。

3. 对于手持设备,移动设备或者其他需要低功耗的设备,尽量选择低电压、低功耗的单片机型号,这样可以减少能量的消耗,延长设备的使用寿命。

4. 在资金等条件允许的情况下,尽量选择功能丰富,扩展能力强的单片机,这样便于以后的功能升级和扩展。

5. 对于体积有限制的产品,尽量选择贴片封装的单片机型号,这样可以减少电路板面积,从而降低硬件成本,同时也有助于电磁兼容设计。

第二章

1、分别写出一个MCS-51 中ROM 、EPROM 、无ROM 型单片机的型号和内部资源。其中哪个产品内部具有固化的软件?该软件能否被所有用户所使用?怎样使用该种产

品?

答:①片内带Mask ROM(掩膜ROM)型:8051、80C51、8052、80C52。此类芯片是由半导体厂家在芯片生产过程中,将用户的应用程序代码通过掩膜工艺制作到ROM 中。其应用程序只能委托半导体厂家“写入” ,一旦写入后不能修改。

②片内带EPROM 型:8751、87C51、8752。此类芯片带有透明窗口,可通过紫外线擦除存储器中的程序代码,应用程序可通过专门的编程器写入到单片机中,需要更改时可擦除重新写入。

③片内无 ROM(ROMLess)型:8031、80C31、8032。此类芯片的片内没有程

序存储器,使用时必须在外部并行扩展程序存储器存储芯片

MCS-51系列单片机分类表

用户所使用,应用程序只能委托半导体厂家 “写入

3.什么是堆栈? 8032的堆栈区可以设在什么地方? 一般应设在什么区域

?如

何实现?试举例说明。

答:堆栈是在片内 RAM 中专门开辟出来的一个区域,数据的存取是以 ”后

进先出”的结构方式处理的。实质上,堆栈就是一个按照 "后进先出"原则组织的

一段内存区域。

8032的堆栈区原则上可以设在内部 RAM 中的00H-FFH 的任意区域内,一

般应设在30H-7FH 的范围内。通过赋值的方式实现,如:

MOV SP ,#60H 。

4.8031的内部RAM 中,哪些可以作为数据缓冲区?

在8031内部RAM 中 工作寄存器区 00H ?1FH 和位寻址区 20H ?2FH 可

以作为数据

其中8051、80C51、8052、80C52等产品具有固化软件,该软件不能被所有

缓冲区。

6. MCS-51单片机构成系统时,程序存储器的容量最大是多少?

答:MCS-51单片机构成系统时,程序存储器的容量最大是64KB

5. 当单片机系统的程序存储器的容量为8KB

时,程序存储器的开始地址为

多少?

答:单片机内部无ROM时,(EA/=0时,只访问外部ROM)ROM为外部

ROM,开始地址为0000H-仆FFH, (8KB=2 13=8192D=2000H,故,地址为2000H-仁

1FFFH。)

单片机内部有ROM, 一般为4KB,地址范围为0000H-OFFFH,外部ROM的开

始地址为1000H-1FFFH 。(EA/=1 时)

4.8032当单片机系统外部数据存储器的容量为8KB时,数据存储器的开始地址一定要是0000H吗?

答:不一定,只有是间隔仆FFH个字节,都可以.

第三章

7?指出下列指令中划线操作数的寻址方式和指令的操作功能

MOV A, #78H ;立即寻址,将立即数送入累加器A

MOV A, 78H ;直接寻址,将内部RAM 78H单元内容送累加器

MOV A, R6 ;寄存器寻址,将R6内容送累加器A

INC @R0 ;寄存器间接寻址,将指针R0指向的内部RAM单元内容加1 PUSH ACC ;寄存器寻址,将累加器A的内容入栈

RL A ;寄存器寻址,将累加器A的内容左移1位

CPL 30H ;位寻址,将位变量30H的内容取反

SJMP $ ;相对寻址,死循环指令

MOVC A, @A+PC ;基寄存器加变址寄存器间接寻址,程序存储器PC和累加器A中内容相加,

送到累加器A

8.指出下列指令中哪些是非法的?

DEC DPTR DEC DPL

MOV A, @R2 MOV A, @R1

MOV P1.1, C 或者 MOV C, 30H

MOV #30H, A MOV A, #30H

MOV R1, @R0

MOV A, @R0

MOV P1.1, 30H

MOV OV, 30H MOV PSW.7 , C

MOV A, @A+DPTR MOVC A, @A+DPTR

RRC 30H RRC A所有的移位指令均是对累积器A进行的。

RL B RL A

XRL C, 30H 错,因为位操作指令中,没有位的异或运算

6. 如何将1个立即数30H送入内部RAM 90H 单元?如何将立即数送特殊功能

寄存器P1 ?

⑴ MOV R0, #90H

MOV @R0, #30H 能不能直接MOV 90H, #30H?不能,因为内部RAM

的高128字节只能用寄存器间接寻址。

⑵ MOV P1, #30H

7. 执行下列一段程序后,试分析有关单元内容

MOV PSW, #0 ;PSW=00H

MOV R0, #30H ;(R0)=30H

MOV 30H, #40H (30H)=40H

MOV 40H, #50 (40H)=50H

MOV A, @R0 (A)=40H

ADDC A, #0CEH (A)=40H+0CEH+0=0EH PSW=10000101B=85H

INC R0 (R0)=31H

执行结果:(R0)=31H, (30H)=40H, (40H)=50, (A)=0EH, (PSW)=85H

PSW7 PSW.6 PSW.5PSW.4IPSW.3 PSVZ2 PSW J PSW.O Cy AC F0RSI RSO OV —p

这里特别注意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。

8. 试编写一段程序,内部RAM 40H 、41H 单元内容传送到外部RAM 2000H 、2001H 单元中。

MOV DPTR, #2000H

MOV R0, #40H

MOV A, @R0

MOVX @DPTR, A

INC R0

INC DPTR

MOV A, @R0

MOVX @DPTR, A

9. 试编写一段程序,根据累加器A 的内容,到程序存储器1000H 起始的表格中取一双字

节数,送内部RAM 50H 、51H 单元。

MOV DPTR, #1000H

PUSH ACC

MOVC A, @A+DPTR

MOV 50H, A

POP ACC

INC DPTR

MOVC A, @A+DPTR

MOV 51H, A

10. 试编写一段程序,进行两个16 位数的相减运算:6483H-56E2H 。结果高8 位存在内部RAM 40H ,低8 位存41H 。

CLR C

MOV A, #83H

SUBB A, #0E2H

MOV 41H, A

MOV A, #64H

SUBB A, #56H

MOV 40H, A

11. 试编写一段程序,将30H 、31H 单元中存放的BCD 数,压缩成一个字节(原30H 单元内容为高位),并放入30H 单元。

MOV A, 30H

SWAP A

ORL A, 31H

12. 试编写一段程序,将30H~32H 单元中的压缩BCD 拆成6 个单字节BCD 数,并放入33H~38H 单元。

MOV SP, #60H

MOV A, 30H

MOV R0, #33H

ACALL H2ASC

MOV A, 31H

ACALL H2ASC

MOV A, 32H

ACALL H2ASC

SJMP $

H2ASC : MOV B, A

ANL A, #0FH

MOV A, B SWAP A ANL A, #0FH

RET

13. 设晶振

频率为6MHz ,试编写一个延时1ms的子程序,并利用该子程序,编写一段主程序,在P1.0引脚上输出高电平宽2ms、低电平宽1ms的方波信号。

MOV SP, #60H

LOOP: SETB P1.0

ACALL DELAY

ACALL DELAY

CLR P1.0

ACALL DELAY

SJMPLOOP

DELAY: MOV R0,#248; 1T

DJNZ R0,$; 2T

NOP;1T

RET2T 延时计算:1T+248*2T+1T+2T=500T=1ms

第四章

4.8033晶振为12MHz,用T0产生1ms的定时,可以选择哪几种方式?分别写出定

时器的方式字和计数初值。如需要1s的定时,应如何实现?

答:由于定时器工作在方式2和方式3下时的最大定时时间只有0.256ms,因此要想获得1ms的定时时间,定时器必须工作在方式0或方式1。

机器周期为T -6s=1 s

计数=12

X 1/12 X 10

若采用方式0,定时器的方式字TMOD为:00H,根据公式可得定时器的计

数初值为:

13 TC= M—T/ T计数=2

3/1= 7192=1C18H -1*10

即:TH0应装# 0E0H ; TL0应装#18H (高三位为0)

若采用方式1,定时器的方式字TMOD为:01H,根据公式可得定时器的计数初值为:

TC= M计数= 216-

-T/ T

1*103/1=64536=FC18H

16 -

1*103/1=64536=FC18H

即:THO 应装# OFCH ; TLO 应装#18H

如需要1s 的定时,可以采用循环定时,增加循环次数

第五章

1 4.若晶振为6MHz ,试编写一个2ms 延时子程序。

DELAY: MOV R0,#498; 1T

DJNZ R0,$; 2T

1T

NOP;

RET2T 延时计算:1T+498*2T+1T+2T=1000T=2ms

4.8034试设计一个n字节的无符号十进制数加法子程序,其功能为将(R0 )和(R1)指出的

内部RAM 中两个n 字节压缩BCD 码无符号十进制数相加,结果存放于被加数单元中。子程序入口时,R0,R1 分别指向被加数和加数的低位字节,字节数n 存于R2,出口时R0指向和的最高位字节,CY为进位位。

LEN EQU 30

ORG 0000H

AJMP MAIN

ORG 0030H

MAIN :MOV SP. #60H

MOV R2, #LEN

ACALL ADD_NBYTE

SJMP $

ADD_NBYTE : CLR C

LOOP:

MOV A, @R0

ADDC A, @R1 DA A

MOV @R0, A

INC R0

INC R1

DJNZ R2, LOOP

RET

END

15.试设计一个子程序,其功能为将(R0)指出的内部RAM中6个单字节正整数按从小到

大的次序重新排列。

S_2_L:MOV R4, #5

CLR F0

PUSH 00H ;R0 入栈

POP 01H ;出栈赋给R1

INC R1

LOOP0 :MOV A, R4

MOV R5, A

LOOP1 :

MOV A, @R0

MOV B, A

MOV A, @R1

CJNE A, B, NEXT

SJMP NOCH

NEXT :JNC NOCH

SETB F0

MOV @R0, A

XCH A, B

MOV @R1, A

NOCH :INC R0

INC R1

DJNZ R5, LOOP1

JNB F0, HALT

DJNZ R4, LOOP0

HALT : RET

相关主题
相关文档
最新文档