第一章
1.单片机内部至少包含哪些部件?
答:中央处理器CPU、I/O口、随机存储器RAM、只读存储器ROM。 2. 根据程序存储器的差别,单片机可以分为哪几种类型?
答:MCS-51系列单片机按片内不同程序存储器的配置来分,可以分为以下3种类型: 1、片内带Mask ROM(掩膜ROM)型:例如8051、80C51、8052、80C52。此类芯片是由半导体厂家在芯片生产过程中,将用户的应用程序代码通过掩膜工艺制作到ROM中。其应用程序只能委托半导体厂家“写入”,一旦写入后不能修改。此类单片机适合大批量使用。
2、片内带EPROM型:例如8751、87C51、8752。此类芯片带有透明窗口,可通过紫外线擦除存储器中的程序代码,应用程序可通过专门的编程器写入到单片机中,需要更改时可擦除重新写入。此类单片机价格较贵,不宜于大批量使用。
3、片内带EEPROM(电可擦可编程只读存储器)型:例如8951、89C51、8952。此类芯片可以在电脑上或专用设备上擦除已有信息,重新编程。此类单片机目前应用很广。
4、片内无ROM(ROMLess)型:例如8031、80C31、8032。此类芯片的片内没有程序存储器,使用时必须在外部并行扩展程序存储器存储芯片。此类单片机由于必须在外部并行扩展程序存储器存储芯片,造成系统电路复杂,目前较少使用。
3.单片机的主要特点是什么?它适宜构成通用微机系统还是专用微机系统?为什么? 答:单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。其主要特点如下:
1、价格便宜。
2、功能不大。只能专用在适用的领域,但在适用的领域中,性价比却是最佳。 3、可靠性高,抗干扰能力强。
4、功耗比较低。对电源要求低,适用面广。
5、外围扩展能力强。可以应用到不同的控制系统中。
根据其特点可知,单片机功能不大,不适宜构成通用微机系统,只适宜构成专用微机系统。
4. 研制微机应用系统时,应如何选择单片机的型号?
答:在单片机应用研究系统开发中,单片机是整个设计的核心。在进行正式的单片机应用研究系统开发之前,需要根据不同单片机的特性,从中作出合理的选择。
1.仔细调查市场,尽量选用主流的、货源充足的单片机型号,这些器件使用比较广泛,有许多设计资料供学习或参考。
2.尽量选择所需硬件集成在单片机内部的型号,例如ADC、DAC、I2C、SPI和USB等。这样便于整个控制系统的软件管理,减少外部硬件的投入,缩小整体电路板的面积,从而减少总体投资等。
3.对于手持设备,移动设备或者其他需要低功耗的设备,尽量选择低电压、低功耗的单片机型号,这样可以减少能量的消耗,延长设备的使用寿命。
4.在资金等条件允许的情况下,尽量选择功能丰富,扩展能力强的单片机,这样便于以
后的功能升级和扩展。
5.对于体积有限制的产品,尽量选择贴片封装的单片机型号,这样可以减少电路板面积,从而降低硬件成本,同时也有助于电磁兼容设计。
第二章
1.分别写出一个MCS-51中ROM、EPROM、无ROM型单片机的型号和内部资源。其中哪个产品内部具有固化的软件?该软件能否被所有用户所使用?怎样使用该种产品? 答:1、8051、80C51、8052、80C52。此类芯片带有4K字节的掩膜ROM,由半导体厂家在芯片生产过程中,将用户的应用程序代码通过掩膜工艺制作到ROM中。其应用程序只能委托半导体厂家“写入”,一旦写入后不能修改。
2、8751、87C51、8752。此类芯片带有4K字节的EPROM,带有透明窗口,可通过紫外线擦除存储器中的程序代码,应用程序可通过专门的编程器写入到单片机中,需要更改时可擦除重新写入。
3、8031、80C31、8032。此类芯片片内无ROM,使用时必须在外部并行扩展程序存储器芯片。
其中8051、80C51、8052、80C52等产品具有固化软件,该软件不能被所有用户所使用,应用程序只能委托半导体厂家“写入”。
2.MCS-51中无ROM型单片机在应用中P2口和P0口能否直接作为输入/输出口连接开关、指示灯之类的外围设备?为什么?
答:不能。因为无ROM型单片机在应用中必须扩展程序存储器,P0口必须作为地址总线的低8位及数据总线复用, P2口必须作为高8位地址总线送出高8位地址,因此P2口和P0口的输出信号都是不稳定的,不能直接作为输入/输出口连接开关、指示灯之类的外围设备。
3. 什么是堆栈?8032的堆栈区可以设在什么地方?一般应设在什么区域?如何实现?试举例说明。
答:堆栈是在片内RAM中专门开辟出来的一个区域,数据的存取是以\后进先出\的结构方式处理的。实质上,堆栈就是一个按照\后进先出\原则组织的一段内存区域。
堆栈操作指令PUSH direct、POP direct只能采用直接寻址方式,8032的片内RAM中只有低128字节可以采用直接寻址方式访问,因此,尽管8032片内RAM的地址范围是00H-0FFH,但堆栈区只可以设在内部RAM中的00H-7FH的区域内,一般应设在30H-7FH的范围内。
可以通过赋值的方式设置堆栈区,如:MOV SP,#60H。
4. 8031的内部RAM中,哪些可以作为数据缓冲区?
答:8031内部RAM的128字节均可以作为数据缓冲区,但00H~1FH通常作为工作寄存器区使用,20H~2FH通常作为位寻址区使用。
5.对于8052单片机,地址为90H的物理单元有哪些?
答:一个是P1口,P1口的物理地址就是90H,使用直接寻址方式访问;还有一个是RAM单元,必须使用寄存器间接寻址方式访问。
6. MCS-51单片机构成系统时,程序存储器的容量最大是多少? 答:MCS-51单片机构成系统时,程序存储器的容量最大是64KB。
7. 当单片机系统的程序存储器的容量为8KB时,程序存储器的开始地址为多少? 答: 因为单片机复位时,PC=0000H,程序都是从0000H开始执行,所以无论何种情况,程序存储器的开始地址都必须是0000H。
8.MCS-51单片机构成系统时,外部数据存储器的容量最大是多少? 答:MCS-51单片机构成系统时,外部存储器的容量最大是64KB。
9. 当单片机系统外部数据存储器的容量为8KB时,数据存储器的开始地址一定要是0000H吗?
答:不一定。
10.什么是单片机的的节电方式?
答:MCS-51系列运行时耗电小,还提供两种节电工作方式——空闲方式和掉电方式。在单片机空闲时程序停止运行,进入待机状态,在接收到一个中断时退出空闲方式,处理完后继续进入空闲方式,就这样断断续续的工作以达到节电目的。
11.CHMOS型单片机,进入掉电方式时,单片机的振荡器是否工作?采用什么办法能使单片机退出掉电方式?
答:不工作。在掉电方式中,振荡器停止工作,单片机内部所以功能部件停止工作。在掉电方式期间,内部RAM和寄存器的内容维持不变。
退出掉电方式的唯一方法是硬件复位。 12. CHMOS型单片机,进入空闲方式时,单片机的振荡器是否工作?采用什么办法能使单片机退出空闲方式?
答:工作。进入空闲方式中,中断、串行口和定时器继续工作。CPU现场、内部RAM和其他特殊功能寄存器内容维持不变。
有两种方法退出空闲方式,一是采用被允许的中断源请求中断;二是硬件复位,因为空闲方式中,振荡器在工作,所以仅需两个机器周期便完成复位。
第三章
1. 指出下列指令中划线操作数的寻址方式和指令的操作功能。
答:MOV A, #78H; 立即寻址,将立即数送入累加器A
MOV A, 78H; 直接寻址,将内部RAM 78H单元内容送累加器A
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中内
容相加形成ROM地址,取数送到累加器A。
2.指出下列指令中哪些是非法的?
INC @R1
DEC DPTR MOV A, @R2 MOV R1, @R0 MOV P1.1, 30H MOV #30H, A MOV 20H,21H MOV OV, 30H MOV A, @A+DPTR RRC 30H RL B
ANL 20H,#30H XRL C, 30H
答:DEC DPTR DEC DPL
MOV A, @R2 MOV A, @R1 MOV R1, @R0 MOV A, @R0
MOV P1.1, 30H MOV C, 30H和MOV P1.1, C MOV #30H, A MOV A, #30H
MOV OV, 30H MOV C, 30H和MOV OV,C MOV A, @A+DPTR MOVC A, @A+DPTR
RRC 30H RRC A 因为所有的移位指令均是对累积器A进行的 RL B RL A
XRL C, 30H 错,因为位操作指令中,没有位的异或运算
3.如何将1个立即数30H送入内部RAM 90H单元?如何将立即数送特殊功能寄存器P1? 答:(1) MOV R0, #90H MOV @R0, #30H
(2)MOV P1, #30H
4.执行下列一段程序后,试分析有关单元内容。
答:MOV PSW, #0; (PSW)=00H
MOV R0, #30H; (R0)=30H MOV 30H, #40H (30H)=40H MOV 40H, #50 (40H)=32H MOV A, @R0 (A)=40H
ADDC A, #0CEH (A)=40H+0CEH+0=0EH PSW=10000001B=81H INC R0 (R0)=31H
最后的执行结果:(R0)=31H, (30H)=40H, (40H)=32H, (A)=0EH, (PSW)=81H
5.试编写一段程序,将内部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
6.试编写一段程序,根据累加器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
7.试编写一段程序,进行两个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
8.试编写一段程序,将30H、31H单元中存放的BCD数,压缩成一个字节(原30H单元内容为高位),并放入30H单元。
答:MOV A, 30H
SWAP A ORL A, 31H MOV 30H, A
9.试编写一段程序,将30H~32H单元中的压缩BCD拆成6个单字节BCD数,并放入33H到38H单元。