单片机原理及应用(赵晓安)课后习题.docx_第1页
单片机原理及应用(赵晓安)课后习题.docx_第2页
单片机原理及应用(赵晓安)课后习题.docx_第3页
单片机原理及应用(赵晓安)课后习题.docx_第4页
单片机原理及应用(赵晓安)课后习题.docx_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机原理及应用第二章 课后题2-3 8051单片机的存储器分哪几个空间?通过什么信号来区别不同空间的寻址? 答:有四个物理上相互独立的存储空间:片内ROM地址为0000H-0FFFH此时/EA=1;片外ROM地址为0000H-0FFFFH此时/EA=0。片内数据存储器地址为00H-0FFH;片外数据存储器地址为0000H-0FFFFH;区分片内片外数据存储器通过指令MOV与MOVX。2-5在程序存储器中,0000H,0003H,000BH,0013H,001BH,0023H这六个单元有什么特定的含义?答:0000H 复位后,PC=0000H,开始执行程序的地址 0003H 外部中断0 (INT0)入口地址 000BH 定时器0中断(TF0)入口地址 0013H 外部中断1(INT1) 入口地址 001BH 定时器1中断( TF1)入口地址 0023H 串行口中断TI/RI入口地址2-6 内部RAM低128单元划分为哪三个主要部分?各部分主要功能是什么? 答:分为三部分:工作寄存器去,位寻址区,用户RAM区(堆栈、数据缓冲)。 (1)工作寄存器区(00H-1FH):32个RAM单元共分四组,每组8个寄存单元(R0-R7)。寄存器常用于存放操作数及中间结果等。(2)位寻址区(20H-2FH):此部分16个单元的每一位都有一个8位表示的位地址,位寻址取得每一个单元既可作为一般RAM单元使用,进行字节操作,也可以对单元中的每一位进行位操作。(3)用户RAM区:也是数据缓冲区,一般用于存放用户数据及作堆栈区使用。2-7 MCS-51单片机EA信号有何功能?在使用8031时EA信号引脚如何处理?答:EA是访问外部程序存储器的控制信号,当EA=0时,8051片内ROM不起作用,CPU只能从片外ROM取指令,地址可以从0000H开始编址,当EA=1时,PC在0000H0FFFH范围内,CPU从片内ROM取指令; 而当PC0FFFH后,则自动转向片外ROM去取指令。在使用8031时EA常接地,因为它无内部程序存储器。2-10 开机复位后,CPU使用哪一组工作寄存器?他们的地址是什么?如何改变当前工作寄存器组?答:使用第0组工作寄存器,它们的地址是00H-07H,想改变当前工作寄存器组可以通过对RS0,RS1进行相关复位、置位,如:SETB RS0,CLR RS1。2-11 SP表示什么?有几位?作用是什么?复位后sp的内容是什么?答:Sp表示堆栈指针,为8位专用寄存器,作用是为了指示栈顶地址,它的内容是堆栈栈顶的存储单元地址。复位后sp在RAM低128位字节中开辟栈区,并初始化为07H,当实际进栈出栈时,存储数据前会自动加1,所以堆栈实在08H单元开始。2-18 试说明8051的振荡周期、机器周期、指令周期是如何分配的。当振荡脉冲频率为6MHz时,机器周期是多少?答:8051单片机每条指令的执行时间(即指令周期)为14个机器周期,有单字节单周期指令、两字节单周期指令、单字节两周期指令、两字节两周期指令、三字节两周期指令以及单字节四周期指令。一个机器周期有6个状态:S1S6每个状态又包含两个振荡周期,分为两拍:P1和P2。因此,一个机器周期包含12个振荡周期,表示为:S1P1、S1P2、S2P1、?S6P1、S6P2。当FOSC=6MHz时,机器周期为:(1/6)12=2(s)第三章3-1 简述MCS-51有哪几种寻址方式?各有什么特点?答:MCS-51有以下七种寻址方式:(1) 直接寻址:指令中直接给出操作数所在的单元地址或位地址;(2) 立即寻址:在指令中紧跟在操作码之后的字节是操作数;(3) 寄存器寻址:操作数在指令中给出的寄存器中;(4) 寄存器间接寻址:寄存器中存放的是操作数所在的单元地址;(5) 变址寻址:基址加变址形成的16位地址是操作数地址;(6) 相对寻址:指令中给出相对偏移量,转移指令都为相对寻址;(7) 位寻址:指令中给出的位地址或位寄存器中存放的是位操作数。3-2 MCS-51指令按功能分为哪几类?每类指令的作用是什么?答:MCS-51指令按功能分为五类,分别为:(1) 数据传送类指令:主要用于数据的传送、交换与堆栈操作;(2) 算术运算类指令:主要用来完成加减乘除运算及二十进制调整;(3) 逻辑运算类指令:主要完成与、或、异或及移位运算;(4) 位操作指令:主要用来做与、或、清除、置位、求反等布尔运算;(5) 控制转移指令:控制程序执行的走向,有转移、调用及返回操作。3-3 变址寻址和相对寻址中的偏移量有何异同?答:变址寻址:A+DPTR、A+PC,其中DPTR、PC为基址寄存器,A为变址寄存器,其中A为8位无符号的二进制数,其范围为0到255;相对寻址中偏移量为8位带符号的二进制数,范围为-128-12723-4指出下列每条指令的寻址方式,30H在不同的指令中代表什么含义?(1) MOV A ,#30H ;寄存器寻址,立即寻址,30H为立即数(2) MOV 30H ,R1 ;直接寻址,寄存器间接寻址,30H为字节地址(3) MOV C ,30H ;寄存器寻址,直接寻址,30H为位地址(4) MOV 30H ,R5 ;直接寻址,寄存器寻址,30H为字节地址(5) MOVX A ,DPTR ;寄存器寻址,寄存器间接寻址(6) MOVC A ,APC ;寄存器寻址,基址加变址的寄存器间接寻址,(7)JC LAB1 ;相对寻址(8)SJMP LAB2 ;相对寻址3-5写出下列指令的机器码,并指出执行下列程序段后各单元内容变为什么?累加器A及PSW中的内容变为什么?(1) MOV A ,#2 ; (A)=02HMOV R1 ,#30H; (R1)=30HMOV R1 ,A ; (30H)=02HMOV 35H ,R1 ; (35H)=30HXCH A ,R1 ; (A)=30H,(R1)=02H(2) MOV A ,#0F5H ; (A)=0F5HMOV 30H ,#9BH ; (30H)=9BH MOV R0 ,30H ; (R0)=9BHADD A ,#28H ; (A)=1DH Cy=1 AC=0 0V=0ADDC A ,R0 ; (A)=0B9H Cy=0 AC=1 0V=0 CLRC ; (C)=0MOV40H ,#7AH; (40H)=7AHMOVA ,#92H ;(A)=92H MOVR0 ,#40H;(R0)=40HSUBBA ,R0;(A)=18H CY=0 AC=1 OV=1 MOVA ,#79H ;(A)=79HMOV30H ,#89H ;(30H)=89HADDA ,30H ;(A)=02H CY=1 AC=1 OV=0DAA ;(A)=68H CY=1 SWAPA ;(A)=86H CY=13-6写出能完成下列数据传送的指令1 R1内容传送到R0MOV A, R1MOV R0, A2 内部RAM 25H单元中内容送35H单元MOV 35H, 25H3 内部RAM 25H单元中内容送P1口MOV P1, 25H4 内部RAM 40H单元中内容送外部RAM 2005H单元MOV A, 40HMOV DPTR, #2005HMOVX DPTR, A5 外部RAM 3000H单元中内容送外部RAM 25H单元MOV DPTR , #3000HMOVX A, DPTRMOV 25H, A6 外部ROM 1000H单元中内容送内部RAM 35H单元MOV DPTR, #1000HCLR AMOVC A, A+DPTRMOV 35H, A7 外部ROM 4000H单元中内容送外部RAM 4000H单元MOV DPTR, #1000HCLR AMOVC A, A+DPTRMOVX DPTR, A8 外部RAM 1000H单元中内容送SP堆栈指针MOV DPTR , #1000HMOVX A, DPTRMOV SP, A3-8写出下段程序中每一步A、B中的结果:MOVA ,#22H ;(A)=22H MOVB ,#05H ;(B)=05H MOVR0 ,#08H ;(R0)=08H MULAB ;(B)=00H (A)=0AAHMOVB ,R0 ;(B)=08HDIVAB ;(A)=15H (B)=02H3-9试写出完成如下操作的程序:1 把RAM 1000H单元中的低4位变“0”,其余位不变MOV DPTR , #1000HMOVX A, DPTRANL A, #0F0HMOVX DPTR, A2 使内部RAM 50H单元中的低4位变“1”,其余位不变ORL 50H, #0FH3 使内部RAM 50H单元中的高3位变反,其余位不变XRL 50H, #0E0H4 使内部RAM 50H单元中的高4位变“1”,低4位变“0”MOV 50H,#0F0H5 使内部RAM 50H单元中的所有位变反。XRL 50H,#0FFH 3-10试编写程序完成以内部RAM 30H为首地址的20个数据传送,目的地址为外部RAM 以3000H为首地址的区域。ORG 0000HMOV R0,#30HMOV DPTR,#3000HMOV R7,#20LOOP: MOV A,R0 MOVX DPTR,A INC R0 INC DPTR DJNZ R7,LOOPSJMP $END3-11试编写条件转移程序,当寄存器R3的内容分别满足下列条件时能转移到LOOP处执行程序,条件不满足时则停机。(1) (R3)15 (R3)15 (R3)15 (R3)15(1) (R3)15cjne R3,#15,NEQsjmp L1NEQ:jnc L1sjmp $L1:loop(R3)15cjne R3,#15,NEQsjmp StopNEQ: jc L1Stop:sjmp $L1:loop(R3)15cjne R3,#15,NEQsjmp L1NEQ:jc L1Stop:sjmp $L1:loop(R3)15cjne R3,#15,NEQsjmp stopNEQ:jnc L1stop:sjmp $L1:loop3-12已知:(SP)53H,(PC)37FEH,执行ACALL 3A00H后堆栈指针SP、堆栈中内容以及程序记数器PC中的内容是什么?答:(PC)37FEH=0011 0111 1111 1110B执行ACALL 3A00H (3A00H=0011 1010 0000 0000)PC高5位,3A00H低11位为:0011 0010 0000 0000=3200H执行ACALL 3A00H后堆栈指针SP、堆栈中内容以及程序记数器PC中的内容分别为:(PC)=3200H (SP)=55H (54H)=00H (55H)=32H第四章4-1 从20H单元开始存放一组带符号数,其数目已存在1FH单元。要求统计出大于0、小于0和等于0的个数并存于ONE、TWO、THREE 三个单元。编程思路:首先判断一下1FH单元内容是否为0,如果为0,什么都不做;如果1FH单元内容不为零,初始化ONE、TWO、THREE,通过JZ判断是否为0,通过判断ACC最高位是否为1,来判断数是正是负,若最高位符号位为1说明是负数,否则为正数。答案不唯一,参考程序如下:ORG 0000HONE DATA 10H ; 大于0的个数TWO DATA 11H ;小于0的个数TH REE DATA 12H ; 等于0的个数MAIN: CJNE 1FH ,#00H, STARTSJMP STOPSTART : MOV R0, #20H MOV R7 , 1FH MOV ONE ,#00 MOV TWO,#00 MOV THREE , #0LOOP: MOV A,R0 JZ ZERO JB ACC.7, NEQ INC ONE SJMP NEXTNEQ: INC TWO SJMP NETXZERO: INC THREENEXT: INC R0 DJNZ R7,LOOPSTOP: SJMP $ ENDXX50Y =5X50X202XX204-2 设:自变量X为一无符号数,存放在内部RAM的VAX单元,计算出的函数值Y存放在FUNC单元,请编出满足如下关系的程序。编程思路:答案不唯一,参考程序如下:ORG 0000HVAX DATA 30H FUNC DATA 31H MAIN: MOV A, VAXCJNE A,#50,NO50SJMP NEXTNO50: JNC NEXTTCJNE A,#20, NO20 SJMP Y EQU5XNO20: JC YEQU2XYEQU5X: MOV B,#05 MUL AB SJMP NEXTYEQU2X: RL A NEXT: MOV FUNC , ASTOP: SJMP $ END4-3 外部RAM从2000H到2100H有一数据块,请编出将它们传送到外部RAM3000H到3100H区域的程序。编程思路:2000H到2100H共有101H即257个数,将循环次数设成0,可以进行256次循环,2100H到3100H单独做一次即可。答案不唯一,参考程序如下:ORG 0000HMAIN: MOV DPTR, #2000H MOV P2, #30H MOV R0, #00H MOV R7, #00HLOOP: MOVX A, DPTRMOVX R0, AINC R0INC DPTR DJNZ R7, LOOP INC P2 MOVX A, DPTR MOVX R0, A SJMP $ END4-4 在内部RAM中,有一个以BLOCK为始址的数据块,块长在LEN单元。请用查表指令编一程序,先检查它们若是16进制中的AF,则把它们变为ASCII;若不是,则把它们变为00H。编程思路:首先判断一下LEN单元的内容是否为0,如果块长为0,一次都不做,如果不做判断而块长为0的话,则多做256次循环。既然用查表程序,我觉得可以把表做的巧妙一些,省的复杂的判断,提高程序的运行效率。可以先判断一下,内容是否大于F,如果大于F也变0,所以可以把数取出来,做个与运算,与上0F0H,如果结果不为零,就说明高四位上有数,则应该变零,如果高四位上没数,只是低4位有数,则数的范围为0-F,所以做表的时候可以将0-9对应的表都设置成0,A-F对应其ASCII。答案不唯一,参考程序如下:ORG 0000HBLOCK DATA 30HLEN DATA 2FHMOV R0,#BLOCKMOV A, LENJZ STOPSTART : MOV R7,A MOV DPTR, #TAB LOOP: MOV A,R0 PUSH ACC ANL A,#0F0H JZ NEXT MOV A,#0 SJMP NETX1NEXT: POP ACCNEXT1: MOVC A,A+DPTR MOV R0,A INC R0 DJNZ R7,LOOPSTOP: SJMP $TAB: DB 00H,00H, 00H,00H, 00H,00H, 00H,00H, 00H,00H,A, B, C, D, E, F END第六章6-18051单片机内部有四个8位并行I/O口,命名为P0、P1、P2、P3。这4个并行I/O口都可以作准双向通用I/O口,即先执行一条指令MOVP1,#0FFH。P0、P2和P3口还有复用的第二功能。每个口都包含一个(8位)锁存器(即特殊功能寄存器P0P3),一个输出驱动器,和两个三态缓冲器。P0口功能:可作通用I/O口,是漏级开路的。因此必须外接上拉电阻,以保证1信号正常输出。也可作为分时作为地址/数据总线使用。P1口功能:可作通用I/O口,也是一个准双向口,作输入口时要先将输出驱动管截止。p2口功能:可用作通用I/O口,与P1口类似,也可用作高8位地址总线。P3口功能:可用作通用I/O口,另外,还有其第二功能。6-2读锁存器指令是P0P3作目的操作数的指令,能实现读修改写口锁存器的操作。读引脚指令的特点是:P0P3作为源操作数出现在指令中,但在读引脚数据之前,必须对所读的口或口位的D锁存器写入1。要正确读引脚数据,必须先写一条MOVPX,#0FFH指令或能对所读的口或口位的D锁存器写入1的指令,而后紧接着写指令。6-3在单片机实时应用系统中,定时器/计数器有定时和对外部事件计数的功能,可用于定时控制、延时、对外部事件检测和计数等场合.定时是对周期已知的脉冲信号计数。计数是对外部发生事件进行计数,对周期未知的外来脉冲信号计数。采用可编程的定时器/计数器可以方便灵活地修改定时或计数的参数或方式,与CPU并行工作,大大提高了CPU的工作效率。6-4MCS-51单片机内部有2个16位的可编程的定时器/计数器:定时器/计数器0(T/C0),定时器/计数器1(T/C1)。定时方式下,T/C计数8051内部机器周期信号的个数,由计数个数可以计算出定时时间。每个机器周期使T/C的计数器增加1,直至计满回零后自动产生溢出中断请求,表示定时时间到。计数方式下,T/C计数来自引脚T0(P3.4)和T1(P3.5)的外部脉冲信号的个数。输入脉冲由1变0的下降沿时,计数器的值增加1直到回零产生溢出中断,表示计数已达预期个数。6-5MCS-51单片机的定时器/计数器共有四种工作方式:方式0、1、2、3。方式0是高8位和低5位的一个13位计数器的运行方式。当TL1的低5位溢出时,向TH1进位,而TH1溢出(回零)时向TF1标志进位(硬件置位TF1),并申请中断。还可以通过查询TF1是否置位来判断TH1是否回零溢出。方式1是一个16为定时器/计数器,结构几乎与方式0完全一样,唯一的差别是方式1中的TH1(TH0)和TL1(TL0)均是8位的,构成16位计数器。方式2中,T/C被拆成一个8位的寄存器TH1(TH0)和一个8位计数器TL1(TL0),两者构成可以自动重装载的8位T/C。每当它计满回零时,一方面向CPU发出溢出中断请求,另一方面从TH1(或TH0)中重新获得初值并启动计数;也就是CPU自动将TH1(或TH0)中存放的初值重新装回到TL1(或TL0),并在此初值的基础上对TL1(或TL0)开始新一

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论