《单片机开发与应用技术》部分参考答案习题1-4:什么是单片机,它有哪些主要特点?单片机(SingleChipMicrocomputer,SCM)全称单片微型计算机,国际上统称为微控制器(MicroControllerUnit,MCU),它是在一块半导体芯片上集成了中央处理器CPU、只读存储器ROM、随机存取存储器RAM、定时/计数器和多种输入/输出(I/O)接口的一个完整的微型计算机。它是微型计算机发展过程中的一个重要分支,是计算机家族中的一个重要成员。其实质上就是一个以芯片形态表现的微型计算机,是集成了微型计算机核心技术的智能化集成电路芯片。r主要特点有:高性价比;高集成度、高可靠性;控制能力强;低功耗、低电压;体积小;丰富的总线接口;配置典型、应用灵活。习题1-7:ISP和IAP与传统编程器相比有哪些优势?ISP(In-SystemProgramming)是指在系统中编程,这种编程方式通过下载线将程序代码下载到单片机中后,由单片机内部的编程电路自行固化程序代码。设计时只要预留相应的引脚接口,甚至不用将单片机从系统中取下,就能实现重新编程。而IAP(In-ApplicationProgramming)是指在应用中编程,这种编程方式一般是通过串口先将程序代码下载到单片机,然后由单片机内部的监控程序自行将程序代码固化到存储器中。编程时系统无需断电停止工作,即在应用中就能实现程序代码的擦除和改写。相比传统方式,ISP和IAP省却了编程器,编程时芯片不用从电路板上取下,避免了芯片和电路板的损伤,也使得程序的升级和改动变得更加容易。此外IAP方式还可通过网络实现远程升级和维护。习题1-8:MCS-51单片机有哪几种代表类型,主要特性如何?MCS-51系列产品中有字母“C”的表示CMOS或CHMOS工艺,否则是HMOS工艺。该系列可分为51/31和52/32两个子系列,其中51子系列是基本型,而52子系列是加强型。其主要特性如表所示。系列型号片内ROM片内RAM定时/计数器I/O线串口中断源MCS-518031/80C31无128Byte2×16位32158032/80C32无256Byte3×16位32168051/80C514KByte128Byte2×16位32158052/80C528KBtye256Byte3×16位3216习题2-1:Intel80C51主要由哪几部分组成,各自功能如何?Intel80C51主要组成部分及其功能是:(1)8位CPU。负责执行指令,完成各种运算,以及管理、控制单片机中各部件,使它们能协调一致的工作。(2)内部时钟电路OSC。产生单片机执行过程中所需要的定时时钟信号。(3)时序和控制部分。负责产生单片机访问外部存储器时所需的逻辑控制信号,以及通过外部手段对单片机进行复位操作时的内部复位信号。(4)特殊功能寄存器SFR。用来对单片机内部资源进行操作控制。(5)片内RAM存储器。主要用来存储数据。(6)片内ROM存储器。主要用来存储程序和常量数据。(7)定时/计数器。用来产生定时信号和对外部脉冲进行计数,在串行通信中还可用作波特率发生器。(8)异步串行接口。可被用作和其它处理器或设备的通信。(9)并行I/O口。用作单片机与外部进行并行信息交换。(10)外中断接口。用于外设向单片机请求中断。习题2-2:Intel80C51内部的CPU寄存器有哪些,有何用途?(1)8位累加器A。是CPU中使用频率最高,工作最繁忙的一个寄存器。许多指令,比如像算术运算、逻辑运算等都要使用该寄存器来临时存放数据。(2)8位寄存器B。主要与累加器A组合用于乘除运算,也可作普通数据存储用。(3)8位程序状态字寄存器PSW。主要用于存放运算结果特征。(4)16位数据指针寄存器DPTR。用于存放有关操作数据在存储器中的地址。(5)8位堆栈寄存器SP。用于存放堆栈的栈顶地址。习题2-5:Intel80C51的存储器是如何组织的?引脚EA有何用途?Intel80C51的存储器空间物理上分为:片内ROM、片外ROM、片内RAM和片外RAM四个独立存储空间。逻辑上分为:统一编址的程序存储空间(0000H~FFFFH)、片内数据存储空间(00H~FFH)和片外数据存储空间(0000H~FFFFH)三部分。其片内数据存储空间又可分为:通用寄存器区(00H~1FH)、位寻址区(20H~2FH)、数据缓冲区(30H~7FH)、特殊功能寄存器区(80H~FFH)。引脚EA用来选择程序存储空间的低4KB(0000H~0FFFH)映射在片内还是片外。当EA=0时,映射在片外,而当EA=1时,映射在片内。习题2-10:什么叫寻址方式,MCS-51单片机的指令有几种寻址方式,各有何特点?寻址方式就是如何寻找操作数或其存放地址的方法形式,寻址方式越丰富,编程越灵活方便。(1)立即寻址。操作对象以常数形式在指令中给出,其作为机器指令编码的一部分,读取指令的同时也就得到操作对象。(2)寄存器寻址。操作对象存放在寄存器中,在指令中给出存放的寄存器名称。(3)直接寻址。操作对象存放在片内RAM或SFR中,在指令中直接给出存放的片内RAM单元或SFR地址,该地址作为机器指令编码的一部分。(4)寄存器间接寻址。操作对象存放在片内RAM或片外RAM中,在指令中间接给出存放操作对象的RAM单元地址,该地址可存放在R0、R1或DPTR寄存器中。(5)变址寻址。操作对象存放在ROM中,在指令中间接给出存放操作对象的ROM单元地址,该地址是A寄存器与PC或DPTR寄存器的和。(6)位寻址。操作对象存放在位单元中,在指令中直接给出存放的位单元地址,该地址作为机器指令编码的一部分。(7)转移地址寻址。为指令提供转移的目标地址,有相对寻址、绝对寻址、变址寻址3种。习题2-11:请用数据传送指令实现以下操作:(1)将R3寄存器的值传送到R4寄存器中。MOVA,R3MOVR4,A(2)交换R3和R4寄存器中的值。MOVA,R3XCHA,R4MOVR3,A(3)将片外RAM中1010H单元的值传送到片外0200H单元中。MOVDPTR,#1010HMOVXA,@DPTRMOVDPTR,#0200HMOVX@DPTR,A(4)交换片外RAM中1010H单元和0200H单元的值。MOVDPTR,#1010HMOVXA,@DPTRMOVB,AMOVDPTR,#0200HMOVXA,@DPTRXCHA,BMOVX@DPTR,AMOVA,BMOVDPTR,#1010HMOVX@DPTR,A(5)将B寄存器高4位和低4位交换。MOVA,BSWAPAMOVB,A习题2-16:将累加器A的高3位数据通过P1口的低3位输出。RLARLARLAANLP1,#F8HORLP1,A习题3-2:编程实现逻辑表达式:P1.4=0.1P∧P1.1∨2.1P⊕3.1P。上述逻辑表达式可改写为:P1.4=0.1P∧P1.1∨P1.2∧3.1P∨2.1P∧P1.3ORG0000HMOVC,P1.1ANLC,/P1.0MOVF0,CMOVC,P1.2ANLC,/P1.3ORLC,F0MOVF0,CMOVC,P1.3ANLC,/P1.2ORLC,F0MOVP1.4,CEND习题3-3:比较两个存放在R6和R7寄存器中的带符号数大小,将其中最大的一个存放到R5寄存器中。ORG0000HMOVA,R6CLRCSUBBA,R7JZL1MOVC,OVANLC,/ACC.7MOVF0,CMOVC,ACC.7ANLC,/OVORLC,F0JNCL1MOVA,R7JMPNEXTL1:MOVA,R6NEXT:MOVR5,AEND习题3-7:定义一个子程序将A中的数字字符“0”~“9”转换为对应的数字。SUBP:CLRCMOVB,ASUBBA,#30HJCRETURNCLRCMOVA,BSUBBA,#40HJNCRETURNCLRCMOVA,BSUBBA,#30HRETURN:RET习题4-3:按要求用C51定义下列变量。(1)一个存放在片内直接寻址区中的无符号字符型变量ch。unsigendchardatach;(2)一个存放在ROM中的字符数组string,其内容为字符串“MCS-51”。charcodestring[]=MCS-51;(3)一个存放在片内间接寻址区中的整型变量i,变量地址为95H。intidatai_at_0x95;(4)一个存放在片外RAM中的无符号整型常变量N,其值为10000。constunsignedintxdataN=10000;(5)一个存放在片外RAM中的易变量整型数组arr,数组首地址为0100H。volatileintxdataarr[10]_at_0x100;(6)一个指向片内直接寻址区的字符型存储器指针变量p1。chardata*p1;(7)一个存放在片内间接寻址区中的整型通用指针变量p2。int*idatap2;(8)一个指向片外RAM并存放在片内间接寻址区中的实型存储器指针变量p3。floatxdata*idatap3;(9)一个指向分页片外RAM的空指针变量p4。voidpdata*p4;(10)2个位变量a和b。bita,b;习题4-4:编程将P1口低4位的输入,输出到高4位。#includereg51.hmain(){unsignedn;P1|=0x0f;n=P1;n=4;P1&=0x0f;P1|=n;}习题4-6:编程将存放在片外RAM中地址0000H起始的100个8位无符号数中的最大数找出。#includereg51.hvolatileunsignedcharxdataarr[100]_at_0x0000;main(){unsignedchari,max;max=arr[0];for(i=1;i100;i++)if(maxarr[i])max=arr[i];}习题6-1:MCS-51单片机的4个输入/输出口各有何用途。MCS-51单片机有4个8位双向的并行输入/输出口P0、P1、P2和P3,这些口既可以整体8位输入/输出,也可以只对某个引脚单独输入/输出。此外在外扩存储器时,P0口被用作地址/数据线AD7~AD0,P2口被用作高8位地址线A15~A8;P1口在8051单片机中没有复用的第二功能;P3口引脚从低到高依次复用为RXD串行接收、TXD串行发送、0INT外中断0输入、1INT外中断1输入、T0定时/计数器0外部计数输入、T1定时/计数器1外部计数输入、WR片外RAM存储器写信号、RD片外RAM存储器读信号。习题6-3:什么是中断?中断响应的基本步骤如何?54中断(Interrupt)是指执行程序过程中,因某种事件发生,处理器于是暂停正被执行的程序,转而去为事件服务,服务完毕后又返回原来程序中被暂停处继续执行的过程。中断响应的基本步骤。(1)中断源提出中断请求,置位相应中断标志位;(2)对应中断源及总中断使能;(3)中断优先级判别;(4)处理器查询到中断请求,且当前指令执行完毕,或是没有同级或高级中断程序被执行,保护现场,处理器转到对应中断向量处执行中断程序;(5)中断程序执行完毕,恢复现场,中断返回。习题6-6:使用汇编语言编写MCS-51单片机的中断程序时需注意哪些问题?(1)设置中断向量。在中断向量处安排中断程序,或放置一条转移指令将流程转到中断程序处。(2)现场保护。执行中断程序前将重要寄存器如A、PSW,及其他有关数据保存到堆栈中。(3)恢复现场。在中断程序执行完后,将现场保护的数据按相反顺序从堆栈中恢复。(4)中断返回。最后执行IRET指令返回被中断程序。(5)此外对于硬件不能自动清除的中断请求标志位如RI、TI,需要在中断程序返回前用指令清除。习题6-5:80C51单片机的定时/计数器有几种工作方式,各有何特点?80C51单片机的定时/计数器有4种工作方式。方式0。13位计数,定时时的定时时间=(213-计数初值)×12/fOSC。方式1。16位计数,定时时的定时时间=(216-计数初值)×12/fOSC。方式2。8位自动重装计数,定时时的定时时间