《单片机原理及应用》课后习题 答案

发布时间 : 星期二 文章《单片机原理及应用》课后习题 答案更新完毕开始阅读

MOV 31H,#0FFH ;31H=0FFH 3-4 设(A)=40H,(R1)=23H,(40H)=05H。执行下列两条指令后,累加器A和R1以及内部RAM中40H单元的内容各为何值?

XCH A,R1 ;A=23H R1=40H XCHD A,@R1 ;A=25H 40H=03H 3-5 两个四位BCD码数相加,被加数和加数分别存于50H,51H和52H,53H单元中(千位、百位在低地址中,十位、个位在高地址中),和存放在54H,55H和56H中(56H用来存放最高位的进位),试编写加法程序。

ORG 0000H LJMP START ORG 0100H START: MOV A,53H ADD A,51H DA A

MOV 55H,A MOV A,52H ADDC A,50H DA A MOV 56H,C SJMP $ END

3-6 设(A)=01010101B,(R5)=10101010B,分别写出执行下列指令后结果。

ANL A , R5 ; 00000000B ORL A , R5 ; 11111111B XRL A , R5 ; 11111111B

3-7指令SJMP rel中,设rel=60H,并假设该指令存放在2114H和2115H单元中。当该条指令执行后,程序将跳转到何地址?

答: 2116H+60H=2176H

3-8 简述转移指令AJMP addr11、SJMP rel、 LJMP addr16及JMP @A+DPTR的应用场合。

答:AJMP addr11 为2K字节范围内的无条件转跳指令,把程序的执行转移到指定的地址。SJMP rel是无条件转跳指令,执行时在PC加2后,把指令中补码形式的偏移量值加到PC上,并计算出转向目标地址。转向的目标地址可以在这条指令前128字节到后127字节之间。

LJMP addr16执行这条指令时把指令的第二和第三字节分别装入PC的高位和低位字节中,无条件地转向指定地址。转移的目标地址可以在64K程序存储器地址空间的任何地方,不影响任何标志。

JMP @A+DPTR 指令的功能是把累加器中8位无符号数与数据指针DPTR中的16位数相加,将结果作为下条指令地址送入PC,利用这条指令能实现程序的散转。

3-9 试分析下列程序段,当程序执行后,位地址00H,01H中的内容将为何值?P1口的8条I/O线为何状态?

CLR C ;CY=0

13

MOV A,#66H ;A=66H JC LOOP1

CPL C ;CY=1 SETB 01H ;20H.1=1 LOOP1: ORL C, ACC.0 ;CY=1 JB ACC.2,LOOP2 ; CLR 00H

LOOP2: MOV P1,A ;P1=01100110B SJMP $

20H.0=0 20H.1=1 P1=66H

3-10 查指令表,写出下列两条指令的机器码,并比较一下机器码中操作数排列次序的特点。

MOV 58H,80H

85(80)(58) 直接寻址字节送直接寻址字节: 汇编时源操作数在目标操作数之前。

MOV 58H,#80H

75(58)(80) 立即数送直接寻址字节: 汇编时目标操作数在原操作数之前。

第4章

4-1 什么是单片机的程序设计语言。

答:单片机的程序设计语言是指计算机能理解和执行的语言,人与CPU、MCU交流的语言。MCS-51系列单片机的程序设计语言,按照语言的结构及其功能可以分为三种:机器语言、汇编语言、高级语言。 4-2 单片机的程序设计包括哪几个步骤。 答:程序设计步骤如下:

(1) 分析问题。即仔细分析任务书中要实现的功能和性能指标。 (2) 确定算法。即找到解决问题思路、方法。

(3) 分配内存单元。即确定数据结构。这一步往往与算法同时考虑。 (4) 根据算法和数据结构,画出程序流程图。

(5) 根据流程图编写汇编语言源程序。编辑录入,保存为*.ASM文件。 (6) 汇编。排除语法错误。 (7) 调试(DEBUG)。找出错误并更正,再调试,直至通过。 (8) 编写相关说明文档。

4-3 画出单片机的三种基本程序结构。 答:

14

A B 是 条件成立吗? 否 条件成立吗? 是 否 A B A

顺序结构流程图 分支结构流程图 循环结构流程图

4-4 单片机的分支结构程序指令有哪几条?

答:分支结构程序指令有JB、JNB、JC、JNC、JZ、JNZ、CJNE、JBC 4-5 什么是单片机的程序嵌套?生活中有哪些现象与单片机的嵌套类似? 答:一个程序中还会调用别的程序,这称为程序嵌套。

生活例子:在学习,有电话了,去接电话,水开了,放下电话去关掉电水壶,接着打电话,打完电话,接着学习。

4-6 能否从一个子程序内部使用转移指令直接跳转到另一个子程序执行?

答:可以,为了保证正确地从子程序2返回子程序1,再从1返回主程序,每次调用子程序时必须将下条指令地址保存起来,返回时按后进先出原则依次取出旧PC值。

4-7 能否使用转移指令从主程序跳到子程序?

答:不可以,当主程序需要执行某子程序的功能时,只需执行一条调用指令。而并非使用转移指令

4-8 能否使用转移指令从子程序跳到主程序?

答:不可以,子程序的最后一条指令应该是返回指令RET或RETI,以确保子程序能够正确返回主程序。执行RET指令时单片机将原来存在堆栈中的断点地址弹出给PC,保证子程序返回主程序中调用子程序的地方继续执行主程序。 子程序从子程序的标号开始,到RET或RETI指令结束。 RET指令是一般子程序的返回指令。

RETI指令是中断服务子程序的返回指令。 4-9 画出主程序的一般流程图。 答:主程序流程图

15

上电/复位 初始化模块 人机接口(键盘显示)模块 输入模块 运算模块 输出模块

4-10 画出子程序的一般流程图。 答:子程序流程图

4-11 子程序的规范化设计包括那几个部分? 答:子程序的规范化设计包括:

(1) 子程序名称。给子程序起名字,起名的原则是子程序名能够反映子程序功能,该名字就是子程序的入口地址标识符。

(2) 子程序功能,对子程序的功能给予简要的描述。

(3) 入口参数,子程序所要运算或处理的数据(加工前的原料),在调用子程序之前,主程序要先准备好入口参数。 (4)出口参数,子程序运算或处理的结果(加工完成的数据),子程序结束之前,最终结果(出口参数)存放在约定的RAM单元,供主程序取用。 (5) 资源占用情况,指出该子程序运行时所使用的片内工作寄存器(R0~R7)、SFR(特殊功能寄存器)、片内RAM单元及片外RAM单元,以便在主程序调用该子程序之前,考虑将这些资源中的哪些字节保护入栈。

4-12 在片内RAM地址40H到4FH的存储单元中存有16个无符号数,找出其中的最大值,放入50H单元,请用“循环结构”和“分支结构”编程。 答:流程图:

开始

初始化: R2=15赋判断次

数,R0指针指向40H单元

指针加1

B @R0+1 判断A>B? N 16

联系客服:779662525#qq.com(#替换为@)