1、单片机原理及应用课后习题参考答案16章第一章计算机基础知识1-1微型计算机主要由哪几部分组成?各部分有何功能?答:一台微型计算机由中央处理单元(CPU、存储器、I/O接口及I/O设备 等组成,相互之间通过三组总线(Bus):即地址总线AB数据总线DB和控制总 线CB来连接。CPU由运算器和控制器组成,运算器能够完成各种算术运算和逻辑运算操作, 控制器用于控制计算机进行各种操作。存储器是计算机系统中的“记忆”装置,其功能是存放程序和数据。按其功 能可分为RAM和ROM输入/输出(I/O、接口是CPU与外部设备进行信息交换的部件。总线是将CPU存储器和I/O接口等相对独立的功能部件连接起来,并传送
2、 信息的公共通道。1-3什么叫单片机?其主要由哪几部分组成?答:单片机(Single Chip Microcomputer 、是指把 CPU RAM ROM 定时 器/计数器以及I/O接口电路等主要部件集成在一块半导体芯片上的微型计算 机。1-4在各种系列的单片机中,片内ROM勺配置有几种形式?用户应根据什么 原则来选用?答:单片机片内ROM勺配置状态可分四种:(1、片内掩膜(Mask ROM单片机(如8051),适合于定型大批量应用产 品的生产;(2、片内EPROI型单片机(如8751),适合于研制产品样机;(3) 片内无ROMS单片机(如8031),需外接EPROM单片机扩展灵活,适 用于
3、研制新产品;(4) EEPROM或 Flash ROM)型单片机(如89C51),内部程序存储器电可擦除,使用更方便。1-5写出下列各数的另两种数制的表达形式(二、十、十六进制)11000101001110 111111,1110110198200395851623629149562H4E47H249H3F6CH1D5D71-6写出下列各数的BCD参与:59: 01011001,1996: 000,:第二章MCS-51单片机的硬件结构2-1 8052单片机片内包含哪些主要逻辑功能部件?答:8052单片机片内包括:18位中央处理器CPU一个2片内振荡器及时钟电路3256B数据存储器RAM48KB
4、片内程序存储空间ROM521个特殊功能寄存器SFR64个8位并行I/O端口( 32条线)71个可编程全双工串行口8可寻址64KB的外部程序存储空间和外部数据存储空间93个16位的定时器/计数器106个中断源、2个优先级嵌套中断结构2-2 8052的存储器分哪几个空间?如何区别不同空间的寻址?答:8052的存储器分为6个编址空间:1片内ROM勺容量为8KB 其地址为OOOOH1FFFH2可扩展片外 ROM勺容量为64KB 其地址为OOOOHFFFFH片内RAM勺容量为256B,其地址为OOHFFH分为二块:地址 OOH7FH共 128B为片内RAM低区,另128B为片内RAM高区,其地址空间为
5、8OHFFH其 地址空间与SFR功能寄存器地址重叠;5可扩展片外 RAM勺容量为64KB 其地址为OOOOH1FFFH6特殊功能寄存器SFR的空间为128B,其地址为8OHFFH但实际只定义了 26B单元,这26B单元分散在8OHFOH程序存储器和数据存储器在逻辑上是完全分开的。CPU通过指令MOV访问程序存储器。当8O52第31脚EA接高电平时,CPU 将从片内程序存储器OOOOH单元开始执行,当PC值超出片内程序存储空间,即 大于1FFFH时,会自动转向片外程序存储空间。当 EA接低电平时,CPU将从片 外程序存储器ROM勺OOOOH单元开始执行。CPU!过MOV旨令访问片内数据存储空间
6、RAM低区128B地址空间OOH7FH 中地址为OOH1FH这32个单元分为4个工作寄存器组,分别用 ROR7表示,通 过工作寄存器指令进行访问。片内RAM中的2OH2FH单元除可作为一般字节寻址 单元使用外,这16个单元共128位中的每一位又可单独作为软件触发器使用, 具有位寻址功能,其位地址范围为 OOH7FH;对片内高区128B寻址只能用寄存 器间接寻址,而对特殊功能寄存器建起必须使用直接寻址。CPU通过指令MOVX访问片外数据存储器。2-3 DPTR的作用是什么?它由哪几个寄存器组成?答:相对于地址指针,DPTR被称为数据指针,但实际上 DPTF中存放的是一 个16位的地址,作为访问程
7、序存储器和外部数据存储器的地址指针。当对 64KB外部数据存储器空间寻址时,作为间址寄存器使用,而在访问程序存储器时,作 为基址寄存器使用。DPTR1 一个16位的特殊功能寄存器,由两个8位寄存器DPH DPL组成,使用SFR中的82H和83H单元。2-4简述布尔处理存储器的空间分配。答:在单片机中位处理又称布尔处理,允许按位处理的存储器称为布尔处理 存储器。其地址空间由二部分构成:一部分是片内 RAM中字节地址为20H2FH的16字节的128个位,这些位编址为00H7FH另一部分在特殊寄存器中,其 地址码能被8整除的12个特殊功能寄存器可以按位寻址,但其中 4个未定义, 一共有92位可按位寻
8、址。这二部分结合起来形成一个具有 220位的位寻址空间。2-5 8052单片机设置4组工作寄存器,如何选择确定和改变当前工作寄存 器?答: 8052片内数据存储器的00H仆H这32个单元分为4级作为4个工作寄 存器第0组地址00H07H,第一组08H0FH第二组10H17H第3组18H1FH 每个工作寄存器都有8个单元,分别用R0R7表示。4组寄存器中每一组都可能 被选为CPU勺工作寄存器,这是通过程序状态字PSW勺(RS0)和(RS1)两位的状态 来选择决定的。见下表:(RS1)(RS0)当前使用的工作寄存器组 R0R7000 组(00H07H)011 组(08H0FH102 组(10H17
9、H)113 组(18H 1FH通过程序改变RS1和RS0的状态,就可方便地更换工作寄存器组。2-6程序状态字寄存器 PSW勺作用是什么?常用的状态标志位有哪些位?作用分别是什么?答:PSWI一个8位的特殊功能寄存器,由一些标志位组成,用于存放程序 运行中的各种状态信息。它可以进行位寻址。各位的作用如下:Cy:进位标志位。在进行加(或减)法运算时,若操作结果的最高位( D7 位)有进位(或借位)时,Cy由硬件置1,否则Cy清0。在进行位操作时,Cy 又是位累加器,指令助记符用 C表示。AC辅助进位标志位。在进行加(或减)运算时,若操作结果的低半字节(D3位)向高半字节产生进位(或借位)时, AC
10、位将由硬件自动置1,否则AC位清0。F0:用户标志位。用户根据需要对 F0置位或复位,作为软件标志。RS1和RS0工作寄存器组选择控制位。由用户用软件改变 RS1和RS0的状态,以选择内RAM中的哪组工作寄存器为当前工作寄存器组。OV溢出标志位。当进行补码运算时,运算结果超出 128+ 127范围时, 产生溢出,则ov自动置1,否则ov青0。:保留位。8051中未定义。P:奇偶校验标志位。每条指令执行完后,该位始终跟踪累加器 A中1的数目的奇偶性。如果A中有奇数个1,则P= 1;否则P= 0。2-7 8052单片机的EA引脚有何功能?在使用 8032时,EA引脚就如何处 理?答:8052单片机
11、的31脚为EA , EA为访问外部或内部程序存储器控制信号。 当EA引脚接高电平且PC值小于 仆FFH时,CPU访问内部程序存储器读取指令, 当EA引脚接低电平时,CPU只访问外部等量齐观存储器读取指令。在8032芯片中没有内部程序存储器,因此,8032芯片的31脚EA只能接地。2-8 8052内部RAM中低128 B单元划分为哪几个主要部分?各部分主要功 能是什么?答:8052内部数据存储器RAM中低128B单元地址空间00H7FH被划分为三 个部分。第一部分地址为00H1FH这32个单元分为4个工作寄存器组,分别用 R0R7表示,通过工作寄存器指令进行访问。片内 RAM中的第二部分20H2
12、FH单 元除可作为一般字节寻址单元使用外,这 16个单元共128位中的每一位又可单独作为软件触发器使用,具有位寻址功能,其位地址范围为 00H7FH;第三部分地址30H7FH这部分存储区域可作为8位数据缓冲区使用,一般地,用户把堆 栈就设置在这部分区域。2-9 8052内部RAM中高128B单元与特殊功能寄存器区地址空间重叠,使用 中是如何区分这两个空间的?答:对8052片内高区(80H0FFH 128B只能 采用寄存器间接寻址,而对 特殊功能寄存器SFR建起必须采用直接寻址。2-10什么叫堆栈?堆栈指针SP的作用是什么?答:堆栈是按照“先进后出,后进先出”的原则来存取数据的一个内部 RAM区
13、域,这个存储器区域的一端是固定的(栈底),另一端是活动的(栈顶),每个 存储单元是不能按字节任意访问的。堆栈指针SP始终指向栈顶单元,栈顶随着数据入栈和出栈上下浮动2-12 什么是时钟周期、机器周期和指令周期? 答:(1)时钟周期(又称为振荡周期)是指振荡器产生一个振荡脉冲信号所 用的时间,是振荡频率的倒数,称为拍节。(2)机器周期是指CPU完成某一个规定操作所需的时间,8051单片机的一 个机器周期包含6个状态,并依次表示为S1S6,每个状态分为2个节拍。因 此一个机器周期包含 12 个时钟周期(振荡周期) ,依次表示为: S1P1、S1P2、 S2P1 、S6P1、 S6P2(3)指令周期
14、是指CPU执行一条指令所需要的时间称为指令周期。 MCS-51 单片机指令周期根据指令的不同,可包含有 1 或2或4个机器周期。3-1 指出下列每一条指令的寻址方式及其完成的操作。MOV 2FH,#40HMOV A,2FH第三章 MCS-51 单片机指令系统;立即寻址,将40H移入片内2FH单元;直接寻址,将片内2FH单元的数移入累加器AMOV R1,#2FHMOV A,R1累加器 A;立即寻址,将2FH移入当前寄存器组的R1单元; 寄存器间接寻址,将寄存器 R1 中所存地址中的值移入;隐含寻址,将累加器A中的值移入片内2FH单元MOV 2FH,A3-2内部RAM勺4FH单元,可用哪几种寻址方
15、式?分别举例说明。 答:直接寻址: MOV R1 4FH间接寻址: MOV R,1 #4FH寄存器间接寻址: MOV A, R13-3指出下列各条指令中,45H代表什么?MOV A,#45HMOV A,45H答:PSW的各位为,即 Cy=1,AC=1,F0=1,RS1=1,RS0=0,0V=0,P=0(1)SUBB A,30H结果:( A) =D4H, CY=1, AC=0, 0V=1, P=0( 2) SUBB A,#30H结果:( A) =49H, CY=0, AC=0, 0V=0, P=1(3)ADD A,R0结果:(A) =AAH CY=Q AC=0 OV=1,P=0( 4) ADD
16、A 30H结果:( A) =1FH CY=1,AC=0 OV=0,P=1( 5) ADD A,#30H结果:( A) =AAH CY=0 AC=0 OV=1,P=0( 6) ADDC A 30H结果:(A) =20H, CY=1,AC=1,OV=0,P=1(7)SWAP A结果:( A) =A7H 对标志位无影响(8) XCHD A,R0结果:( A) =75H (30H) =AAH(R0) =AAH P=1( 9) XCH A 30H结果:( A) =0A5H( 30H) =7AH P=0( 10) XCH A,R0结果:( A) =30H ( R0) =7AH P=0(11) MOV A,
17、R0结果:( A) =0A5H P=0( 12) XCH A,R0结果:( A) =0A5H (30H)=7AH P=03-5 试分析以下程序段的执行结果:MOV SP,#3AHMOV A,#20HMOV B,#30HPUSH ACCPUSH BPOP ACCPOP B结果:( SP) =3AH ( A) =30H ( B) =20H ( 3BH) =20H ( 3CH) =30H3-6 指出下列指令的执行结果 并写出每条指令的机器码。MOV 30H,#52H; (30H)=52H01110101(753052H)MOV A,#70H; (A)=70H01110100(7470H)MOV A,
18、30H; (A)=52H(E530H)MOV R0,#30H; (R0)=30H(7830H)MOV A,R0 ; A=52H (E6H)3-7 分析下列指令的执行结果,并写出每条指令的机器码。M0V A,#70H ;(A)=70HM0V DPTR,#2030H;(DPTR)=2030H01110100(74H)(90H)3-8设RO的内容为32H, A的内容为48H,内部RAM勺32H单元内容为80H, 40单元内容为08H,指出在执行下列程序段后上述各单元内容的变化MOV A,R0MOV R0,40HMOV 40H,AMOV R0,#35H结果: (R0)=35H,(A)=80,(32H)
19、=08H,(40H)=80H3-9已知:(A)=81H,(R0)=20H,(20H)=35H,指出执行完下列程序段后 A的 内容。3-10 用指令实现下述数据传送(1)内部RAM20I单元送内部RAM40I单元。答: MOV 40H,20H外部RAM20I单元送R0寄存器。答: MOV R1,#20H MOVX A,R1 MOV R0,A外部RAM20I单元送内部RAM20I单元答: MOV R1,#20H MOVX A,R1 MOV 20H,A 外部RAM1000I单元送内部RAM20!单元答: MOV DPTR,#1000H MOVX A,DPTR MOV 20H,A 外部R0M1000单
20、元送内部RAM20!单元。答: MOV DPTR,#1000H MOV A,#00H MOVC A,A+DPTR MOV 20H,A(6)外部R0M1000单元送外部RAM20I单元。答:MOV DPTR,#1000H MOV A,#00H MOVC A,A+DPTR MOV R1,#20H MOVX R1,A3-11已知16位二进制数的高8位和低8位分别存放在20H和21H单元, 请编写将其右移一们的程序。CLR CMOV A,20HRRC AMOV 20H,AMOV A,21HRRC AMOV 21H,A3-12编程实现内部RAM R0R7勺内容传递到20H27H单元。3-13试编程进行两
21、个16位数的减法,6F5DH-13B4H结果存入内部RAM的 30H和31H单元,30H存放差的低8位。CLR CMOV A,#5DHSUBB A,#B4HMOV 30H,AMOV A,#6FHSUBB A,13HMOV 31H,A3-14编写程序,若累加器 A的内容分别满足下列条件时,程序则至 LABEL存储单元,设A中存放的是无符号数。 A=10 A0CJNE A,#10H,LAB JNZ LABELLAB:JNC LABELLABEL:3-15 已知(SP =25H,(PC)=2345H,(24H)=12H,(25H)=34H,(26H)=56H.问此 时执行“ RET指令后,(SP)=
22、?,(PC)=?答: (SP)=23H,(PC)=3412H执行 RET时,PCH-(SP),SP JSP-1,PCL(SP),SP JSP-13-16若(sp) =25H,(PC)=2345H,标号LABEL所在的地址为3456H,问执行 调用指令“ LCALL LABEL后,堆栈指针和堆栈内容发生什么变化? ( PC)的值 等于什么?答:最后堆栈指针SP=27H堆栈指针SP=26H处SP内容为45H,指针SP=27H 处内容为23Ho最后程序计数器指针PC=3456H执行 LCALL后, PC-PC+3 SPSP+1,(SP) PCL,SP-SP+1, (SF) PCH,PC J addr
23、16。3-17试编写程序,查找在内部 RAM的20H50H单元中是否有OAAH这一数 据。若有,则将51H单元置01H,若未找到,则将51H单元置00HMOV 51H,#00HMOV R0,#20HLOOP: MOV A,R0CJNE A,#0AAH,NEXTINC 51HSJMP EEENEXT: INC R0CJNE R0,#51H,LOOPEEE: SJMP $; 先设没找到; 起始地址; 取出数字; 不相等就跳转; 相等将 51 单元置 1; 找到转去结束; 下一个地址; 地址没找完就继续; 暂停3-18 试编写程序,统计在外部并将统计结果丰收入内部RAM 50H单元MOV R0,#0
24、0HMOV DPTR,#2000H MOV R1,#60HLOOP: MOVX A,DPTRJNZ NEXTINC R0NEXT: INC DPTRDJNZ R1,LOOPMOV 50H,R0SJMP $RAM 2000H205F单元中出现00H的次数,;RO设为计数器,初始为0;置片外RAM起始地址; 置传送数据个数;外部RAM单元内容送A; 传送数据不为 0 跳转; 传送数据为 0,计数器加 1; 下一个地址; 地址没找完就继续;统计结果存入50H单元; 暂停3-19已知R3和R4中存有一个16位的二进制数,高位在 R3中代位在R4中。请编程将其求补,并存回原处。答:首先假设R3 R4中是
25、原码,根据原码求补的方法当最高位(R3的D7 位)为 0 时表示为正数,那么补码与原码相同,当最高位为 1 时,表明是负数,负数的补码是最高位不变,其余位取反加 1.MOV A,R3 MOV R4,AJB ,NEG MOV A,R3SJMP $ CPL AADDC A,#00HSETBNEG: MOV A,R4CLR CCPL AMOV R3,AADD A,#01H SJMP $3-20编写一个程序,把片外 RAM从2000H开始存放的10个数传送到片内RAM 301开始单元。START:MOV R0,#30H INC R0MOV R1,#10H INC DPTRMOV DPTR,#2000H
26、 DJNZ R1,LOOPLOOP: MOVX A,DPTR SJMP $MOV R0,A3-21试编程将内部RAM的30H至4FH单元的内容分别传送到外部 RAM的2040H205FH单元。INC DPTRINC R0DJNZ R1,LOOPSTART:MOV R0,#30HMOV R1,#20HMOV DPTR,#2040HLOOP: MOV A,R0 SJMP $MOVX DPTR,A3-22若外部RAM的(2000H) =X,( 2001H =丫,编程实现Z=3X+2丫结果存入 内部RAM的20H单元,设Z=255oADD A,R0MOV R0,A MOV 20H,A3-23试对内部R
27、AM 20H单元的内容进行判断,若为正数,转向 2100H若为负数,转向2200H;若为0,转向2300HSTART:MOV A,20HJB ,NEG ; 为负数;为0JNB , POSILJMP #2100HSJMP EEENEG:LJMP #2200HSJMP EEEPOSI:LJMP #2300HSJMP EEEEEE:SJMP $3-24已知30H 31H中存有一个16位二进制数,高位在前低位在后。试编 程将它们乘 2,再存回原单位中。START:MOV A,31HADD A,31HMOV 31H,AMOV A,30H3-25已知从外部RAM 2000H开始的单元中有20个带符号的补码
28、数,试编程把正数和0取出来存放到内部RAM20开始的存储单元中(负数为作处理); 需处理的数的个数; 需处理数的起始地址; 用于存储的目标地址START:MOV R0,#20H MOV DPTR,#2000H MOV R1,#20HLOOP: MOVX A,DPTRJB ,NEG ; 负数不需处理MOV R1,AINC R1NEG: INC DPTRDJNZ R0,LOOPSJMP $第四章 汇编语言程序设计4-1 什么叫伪指令?伪指令与指令有什么区别?答:伪指令不属于单片机指令集中的指令, 在汇编时不产生目标代码, 不影 响程序的执行,仅指明在汇编时执行一些特定的操作。 如为程序指定一个存储
29、区、 将一些数据、表格常数存放在指定的存储单元、对地址赋用户名等。指令是计算机所能执行的一种基本操作的描述,是计算机软件的基本单元。51 单片机单片机的指令有二种表达方式:机器码指令和汇编语言指令。4-2 循环程序由哪几部分组成?答:由初始化部分、循环处理部分、循环控制部分、循环结束部分这四部分组成4-3 什么是子程序?对于子程序设计有什么要求?答:一段具有某一特定功能, 能被其它程序所调用, 调用结束后能自动返回 到调用处的程序块就称为子程序。对子程序设计的要求:4-4 试对下列程序进行人工汇编,并说明此程序的功能。地址指令码ORG 1000HJACDL: MOV R0,#25H;1000H
30、7825MOV R1,#2BH;1002H792bMOV R2,#06H;1004H7A06CLR C;1006HC3CLR A;1007HE4LOOP: MOV A,R0;1008HE6ADDC A,R1;1009H37DEC R0;100AH18DEC R1;100BH19DJNZ R2,LOOP;100CHDAFASJMP $;100EH80FEENDJ1008H-100EH=-06 H其补码为()2 0FAH功能:将25H单及前5个数与2BH单元及前5个数分6组相加,结果丢弃4-5从内部RAM勺20H单元开始,有15个数据。试编一程序,把其中的正 数、负数分别送到 41H 和 61H 开始的存储单元,并分别将正数、负
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1