收藏 分享(赏)

单片微型计算机原理与接口技术_髙锋版_课后答案全集.doc

上传人:dreamzhangning 文档编号:4034003 上传时间:2018-12-05 格式:DOC 页数:31 大小:284KB
下载 相关 举报
单片微型计算机原理与接口技术_髙锋版_课后答案全集.doc_第1页
第1页 / 共31页
单片微型计算机原理与接口技术_髙锋版_课后答案全集.doc_第2页
第2页 / 共31页
单片微型计算机原理与接口技术_髙锋版_课后答案全集.doc_第3页
第3页 / 共31页
单片微型计算机原理与接口技术_髙锋版_课后答案全集.doc_第4页
第4页 / 共31页
单片微型计算机原理与接口技术_髙锋版_课后答案全集.doc_第5页
第5页 / 共31页
点击查看更多>>
资源描述

1、单片微型计算机原理与接口技术_髙锋版课后答案第三章 【单片机的指令系统】 思考与练习题解析【31】什么是指令及指令系统?【答】控制单片机进行某种操作的命令称为“指令” 。单片机就是根据指令来指挥和控制单片机各部分协调工作。指令由二进制代码表示,指令通常包括操作码和操作数两部分:操作码规定操作的类型,操作数给出参加操作的数或存放数的地址。所有指令的集合称为“指令系统” 。80C51 单片机的指令系统专用于 80C51 系列单片机,是一个具有 255 种操作码(OOHFFH,除 A5H 外)的集合。【32】80C51 单片机的指令系统具有哪些特点?【答】80C51 单片机的指令系统容易理解和阅读。

2、只要熟记代表 33 种功能的 42 种助记即可。有的功能如数据传送,可以有几种助记符,如 MOV、MOVc、MOVX。而指令功能助记符与操作数各种寻址方式的结合,共构造出 111 种指令,而同一种指令所对应的操作码可以多至 8 种(如指令中 Rn 对应寄存器 R0R7)。80C51 单片机的指令系统具有较强的控制操作类指令,容易实现“面向控制”的功能;具有位操作类指令,有较强的布尔变量处理能力。【33】简述 80C51 指令的分类和格式。【答】80C51 的指令系统共有 111 条指令,按其功能可分为 5 大类:数据传送类指令(28 条)、算术运算类指令(24 条)、逻辑运算类指令(25 条)

3、、控制转移类指令(17 条)和布尔操作(位)类指令(17 条)。指令的表示方法称之为“指令格式” ,其内容包括指令的长度和指令内部信息的安排等。在 80C51 系列的指令系统中,有单字节、双字节和三字节等不同长度的指令。单字节指令:指令只有一个字节,操作码和操作数同在一个字节中。双字节指令:包括两个字节。其中一个字节为操作码,另一个字节是操作数。三字节指令:操作码占一个字节,操作数占两个字节。其中操作数既可能是数据,也可能是地址。【34】简述 80C51 的指令寻址方式,并举例说明。【答】执行任何一条指令都需要使用操作数,寻址方式就是在指令中给出的寻找操作数或操作数所在地址的方法。80C5l

4、系列单片机的指令系统中共有以下 7 种寻址方式。立即寻址。在指令中直接给出操作数。出现在指令中的操作数称为“立即数” ,为了与直接寻址指令中的直接地址相区别,在立即数前面必须加上前缀“#” 。例如:MOV DPTR,#1234H ;1234H 为立即数,直接送 DPTR直接寻址。在指令中直接给出操作数单元的地址。例如: MOV A,55H ;55H 是操作数单元的地址,55H 单元内的数据才是操作数,取出后送累加器 A寄存器寻址。在指令中将指定寄存器的内容作为操作数。因此,指定了寄存器就能得到操作数。寄存器寻址方式中,用符号名称来表示寄存器。例如: INC R7 ;R7 的内容为操作数,加 1

5、 后再送回 R7寄存器间接寻址。在指令中给出的寄存器内容是操作数的地址,从该地址中取出的才是操作数。可以看出,在寄存器寻址方式中,寄存器中存放的是操作数;而在寄存器间接寻址方式中,寄存器中存放的则是操作数的地址。寄存器间接寻址须以寄存器符号名称的形式表示。为了区别寄存器寻址和寄存器间接寻址,在寄存器间接寻址中,应在寄存器的名称前面加前缀“” 。例如: ORL ARo; 当 R0 寄存器的内容是 60H 时,该指令功能是以 RO 寄存器的内容 60H 为地址,将 60H 地址单元的内容与累加器 A 中的数相“或” ,其结果仍存放在 A 中。相对寻址。在指令中给出的操作数为程序转移的偏移量。相对寻

6、址方式是为实现程序的相对转移而设立的,为相对转移指令所采用。在相对转移指令中,给出地址偏移量(在 80C51 系列单片机的指令系统中,以“rel”表示,为 8 位带符号数),把 PC 的当前值加上偏移量就构成了程序转移的目的地址。而 PC 的当前值是指执行完转移指令后的 PC 值,即转移指令的 PC 值加上转移指令的字节数。转移的目的地址可用如下公式表示:目的地址=(转移指令所在地址+转移指令字节数)+rel例如:SJMP 80H ;80H 为程序转移的偏移量,即一 128。当前 PC 值减去 128 后即为转移地址变址寻址。以 DPTR 或 PC 作基址寄存器,累加器 A 作变址寄存器,以两

7、者内容相加形成的 16 位程序存储器地址作为操作数地址。又称“基址寄存器+变址寄存器间接寻址” 。变址寻址方式只能对程序存储器进行寻址。例如: MOVC A,A+DPTR ;功能是把 DPTR 和 A 的内容相加,所得到的程序存储器地址单元的内容送 A位寻址。80C51 系列单片机有位处理功能,可以对数据位进行操作,因此,就有相应的位寻址方式。位寻址的寻址范围:片内 RAM 中的位寻址区。可位寻址的特殊功能寄存器位。例如:MOV c,80H ;功能是把位寻址区的 80H 位(即 P00)状态送累加位 C【35】访问特殊功能寄存器 SFR,可使用哪些寻址方式?【答】访问特殊功能寄存器 SFR 的

8、惟一寻址方式是直接寻址方式。这时除了可以单元地址形式(如 90H)给出外,还可以寄存器符号形式(如 P1)给出。虽然特殊功能寄存器可以使用寄存器符号标志,但在指令代码中还是按地址进行编码的。【36】若访问外部 RAM 单元,可使用哪些寻址方式?【答】访问外部 RAM 单元的惟一寻址方式是寄存器间接寻址方式。片外 RAM 的 64 KB 单元,使用 DPTR 作为间址寄存器,其形式为DPTR,例如“MOVX A,DPTR”的功能是把 DPTR 指定的片外 RAM 单元的内容送累加器 A。片外 RAM 低 256 个单元,除了可使用 DPTR 作为间址寄存器外,也可使用:R0 或 R1 作间址寄存

9、器。例如“MOVX A,R0即把 R0 指定的片外 RAM 单元的内容送累加器 A。【37】若访问内部 RAM 单元,可使用哪些寻址方式?【答】片内 RAM 的低 128 单元可以使用寄存器间接寻址方式,但只能采用 R0 或 R1 为间址寄存器,其形式为Ri(i=0,1)。片内 RAM 的低 128 单元可以使用直接寻址方式,在指令中直接以单元地址形式给出。片内 RAM 的低 128 单元中的 20H2FH 有 128 个可寻址位,还可以使用位寻址方式,对这 128 个位的寻址使用直接位地址表示。【38】若访问程序存储器,可使用哪些寻址方式?【答】访问程序存储器可使用的寻址方式有立即寻址方式、

10、变址寻址方式和相对寻址方式三种。立即寻址是指在指令中直接给出操作数。变址寻址方式只能对程序存储器进行寻址,或者说这是专门针对程序存储器的寻址方式。相对寻址方式是为实现程序的相对转移而设立的。这三种寻址方式所得到的操作数或操作数地址都在程序存储器中。【39】MOV、MOVC、MO(指令有什么区别?分别用于哪些场合?为什么?【答】MOV 指令用于对内部 RAM 的访问。MOVC 指令用于对程序存储器的访问,从程序存储器中读取数据(如表格、常数等)。MOVX 指令采用间接寻址方式访问外部数据存储器有 Ri 和 DPTR 两种间接寻址方式。执行 MOVX 指令时,在 P37 引脚上输出 RD 有效信号

11、或在 P36 引脚上输出 WR 有效信号,可以用做外部数据存储器或 IO 的读写选通信号,与单片机扩展电路有关。【310】说明“DA A”指令功能,并说明二一十进制调整的原理和方法。【答】 “DA A”指令的功能是对两个 BCD 码的加法结果进行调整。两个压缩型 BCD 码按二进制数相加之后,必须经过该指令的调整才能得到压缩型 BCD 码的和数。 “DA A”指令对两个 BCD 码的减法结果不能进行调整。BCD 码采用 4 位二进制数编码,并且只采用了其中的 10 个编码,即 00001001,分别代表 BCD 码09,而 10lO1111 为无效码。当两个 BCD 码相加结果大于 9 时,说

12、明已进入无效编码区;当两个 BCD码相加结果有进位时,说明已跳过无效编码区。若结果进入或跳过无效编码区,则结果是错误的,相加结果均比正确结果小 6(差 6 个无效编码)。十进制调整的修正方法为:当累加器低 4 位大于 9 或半进位标志 AC=1 时,进行低 4 位加 6 修正;当累加器高 4 位大于 9 或进位标志 CY=l 时,进行高 4 位加 6 修正。【3 一 11】说明 80C51 单片机的布尔处理机的构造及功能。【答】80C51 单片机内部有一个布尔(位)处理机,具有较强的布尔变量处理能力。布尔处理机实际上是一位微处理机,它包括硬件和软件。布尔处理机以进位标志 CY 作为位累加器,以

13、 80C51 单片机内部 RAM 的20H2FH 单元及部分特殊功能寄存器为位存储器,以 80C51 单片机的 PO、P1、P2 和 P3 为位 IO。对位地址空间具有丰富的位操作指令,包括布尔传送指令、布尔状态控制指令、位逻辑操作指令及位条件转移指令,为单片机的控制带来很大方便。【312】试分析以下程序段的执行结果。【答】结果如下:MOV SP,#60tt ;(SP)=60HNOV A,#88tt ;(A)=88HMOV B#0FFH ;(B)=FFHPUSH ACC ;(SP)=61H,(61H)=88HPUSH B ;(SP)=62H,(62H)=FFHPOP ACC ;(A)=FFH,

14、(SP)=61HPOP B ;(B)=88H,(SP)=60H程序段的执行结果:累加器 A 和寄存器 B 的内容通过堆栈进行了交换。注意:80C51 单片机的堆栈是按照先进后出的原则进行管理的。【3-1】已知(A)=7AH,(RO)=30H,(30H)=A5 H,(PSW)=80H。请填写各条指令单独执行后的结果。【答】结果如下:(1) XCH A,R0 ;(A)=30H,(R0):7AH(2) XCH A,30H ;(A)=A5H,(30H)=7AH,(PSW)=81H(3) XCH A,R0 ;(A)=R5H,(30H)=7AH,(PSW)=81H(4) XCHD A,R0 ;(A)=75

15、H,(30H)=AAH,(PSW)=81H(5) SWAP A ;(A)=A7H(6) ADD A,R0 ;(A)=AAH,(PSW)=04H(7) ADD A,30H ;(A)=1FH,(PSW)=81H(8) ADD A,#30H ;(A)=AAH,(PSW)=04H(9) ADDC A,30H ;(A)=20H,(PSW)=01H(10) SUBB A,30H ;(A)=D4H,(PSW)=84H(11) SUBB A,#30H ;(A)=49H,(PSW)=01H【314】已知(30H)=40H,(40H)=10 H,(10H)=00H,(P1)=CAH,请写出执行以下程序段后有关单元

16、的内容。【答】有关单元的内容如下:MOV R0,#30H ;(RO)=30HMOV A,R0 ;(A)=40HMOV Rl,A ;(R1)=40HMOV B,R1 ;(B)=1OHMOV R1,P1 ;(40H)=CAHMOV A,RO ;(A)=40HMOV 10H,#20H ;(10H)=20HMOV 30H,10H ;(30H)=20H执行以上程序段后,有关单元的内容分别为:(30H)=20H,(40H)=CAH,(10H)=20H,(P1)=CAH。【3-15】已知(R1)=20 H,(20 H)=AAH,请写出执行完下列程序段后 A 的内容。 【答】各指令的执行结果如下:MOV A,

17、#55H ;(A)=55HANL A,#0FFH ;(A)=55HORL 20H,A ;(20H)=FFHXRL A,R1 ;(A)=AAHCPL A ;(A)=55H执行完程序段后,A 的内容为 5 5 H。【3-16】阅读下列程序,说明其功能。【答】对程序注释如下:MOV R0,#30H ;(RO)=30HM0V A,R0 ;取数RL A ;(A)2MOV R1,ARL A ;(A)x 4RL A ;(A)8ADD A,R1 ;(A)X i0MOV R0,A ;存数功能:将 30 H 中的数乘以 10 以后再存回 30H 中。条件:30 H 中的数不能大于 25,2510=250 仍为一个

18、字节。若 30H 中的数大于 25,则应考虑进位。【317】已知两个十进制数分别在内部 RAM 中的 40 H 单元和 50H 单元开始存放(低位在前),其字节长度存放在内部 RAM 的 30 H 单元中。编程实现两个十进制数求和,求和结果存放在 40 H 开始的单元中。【答】程序如下:ORG 0000HSJMP MAINORG 0030HMAIN:MOV R0,#40H ;被加数首址又作两个十进制数和的首址MOV R1,#50H ;加数首址MOV R2,30H ;字节长度CLR CPP: MOV A,R1 ;取加数ADDC A,R0 ;带进位加DA A ;二一十进制数调整MOV R0,A ;

19、存和 INC R0 ;修正地址INC R1DJNZ R2,PP ;多字节循环加AJMP $END【318】编程实现把外部 RAM 中从 8000 H 开始的 100 个字节数据传送到 8100 开始的单元中。【答】程序如下:ORG 0000HSJMP MAINORG 0030HMAIN:MOV DPTR,#8000H ;字节数据源首地址MOV R1,#100 ;字节数据计数器MOV R2,#01HMOV R3,#00HPP: MOVX A,DPTR ;读数据MOV R4,A ;保存读出数据CLR CMOV A,DPL ;计算得到字节数据目的地址ADD A,R3MOV DPL,AMOV A,DP

20、HADDC A,R2MOV DPH,AMOV A,R4 ;恢复读出数据MOVX DPTR,A ;写数据至目的地址CLR C ;恢复源数据地址 MOV A,DPLSUBB A,R3MOV DPL,AMOV A,DPHSUBB A,R2MOV DPH,AINC DPTR ;地址加 1DJNZ R1,PP ;是否传送完?SJMP $注意:字节数据源地址和目的地址都在外部 RAM 中,地址指针都为 DPTR,所以要注意 DPTR 地址指针的保护和恢复。地址的保护和恢复的方法有多种,如通过堆栈或寄存器。【3-20】读下列程序,请: 写出程序功能,并以图示意。 对源程序加以注释。ORG 0000HMAIN

21、:MOV DPTR,#TABMOV R1,#06H LP: CLR AMOVC A,A+DPTRMOV P1,ALCALL DELAY O5 s 、INC DPTRDJNZ R1,LPAJMP MAINTAB:DB 01H,03H,02H,06H,04H,05HDEL AY05 s: RETEND【答】 程序功能:将 TAB 表中的 6 个参数依次从 P1 口中输出(每次输出延时 0.5 s),然后重复输出。P1 口输出波形如图 3-1 所示。这是步进电机三相六拍输出波形。图 3-l Pl 口输出波形 注释见源程序右边所述。ORG 0000HMAIN:MOV DPTR,#TAB ;P1 输出参

22、数表首地址MOV R1,#06H ;P1 输出参数有 6 个L,P: CLR AMOVC A,A+DPTR ;查表输出MOV P1,ALCALL DELAY 05 s ;软件延时 05 SINC DPTRDJNZ R1,LP ;输出参数已有 6 个 ?AJMP MAIN ;输出参数已有 6 个,则重复输出TAB:DB 01H,03H,02H,06H,04H,05H ;参数表DELAY05 s: ;延时 05 S 子程序RET【321】读下列程序,然后 画出 P IOP13 引脚上的波形图,并标出电压 V 一时间 t 坐标。 对源程序加以注释。ORG 0000HSTART: MOV SP,#20

23、HMOV 30H,#01HMOV P1,#01HMLP0: ACALT, D50msM07 A,30HCJNE A,#08H,MLPIMOV A,#01HMOV DPTR,#ITABMLP2: MOV 30H,AMOVC A,A+DPTRMOV P1,ASJMP Mr,p0 MLPl: INC ASJMP MLP2ITAB:DB 0,1,2,4,8 DB 8,4,2,1D50ms: 【答】 程序功能:P1OP13 引脚上的波形图如图 32 所示。图 32 P1OP13 引脚上的波形图 注释见源程序右边所述。ORG 0000HSTART: MOV SP,#20HMOV 30H,#01HMOV P

24、1,#01HMLP0: ACALL ,D50ms ;软件延时 50 msMOV A,30HCJNE A,#08H,MLPI ;判断表格中数据是否取完?MOV A,#01H ;取完,从表头开始取MOV DPTR,#ITAB ;表格首地址MLP2: MOV 30H,AMOVC A,A+DPTR ;取表格中数据MOV P1,ASJMP MLP0MLPI: INC A ;表格中数据未取完,准备取下一个SJMP MLP2ITAB:DB 0,1,2,4,8 ;表DB 8,4,2,1D50ms: ;软件延时 50 ms 子程序RET第四章 【单片机的程序设计】思考与练习题解析【41】简述下列基本概念:程序、

25、程序设计、机器语言、汇编语言及高级语言。【答】各基本概念如下。程序:为计算某一算式或完成某一工作的若干指令的有序集合。程序设计:单片机的全部工作概括起来,就是执行程序的过程。为单片机准备这一程 序,即编制程序的工作过程。 机器语言:用二进制代码表示的指令系统称为“机器语言系统” ,简称为“机器语言” 。汇编语言:用英文字符来代替机器语言,这些英文字符称为“助记符 。用这种助记符表示指令系统的语言称为“汇编语言”或“符号语言” 。高级语言:参照数学语言而设计的、近似于人们日常用语的语言。它是面向问题或者 面向过程的语言。这种语言不仅直观、易学、易懂,而且通用性强,易于移植到不同类型的机器中。【4

26、2】在单片机领域,目前最广泛使用的是哪几种语言?有哪些优越性?单片机能否直接执行这几种语言?【答】在单片机领域,目前最广泛使用的是汇编语言和高级语言。汇编语言编写的程序效率高,占用存储空间小,运行速度快,而且能反映单片机的实际运行情况。但编程比使用高级语言困难,通用性差。单片机不能直接执行汇编语言程序,必须通过人工(或机器)汇编把汇编语言程序转换为机器语言程序。高级语言不受具体机器的限制,而且使用了许多数学公式和习惯用语,从而简化了程序设计的过程,通用性强,易于移植到不同类型的单片机中。单片机不能直接识别和执行高级语言,需要将其转换为机器语言程序才能识别和执行。对于高级语言,这一转换工作通常称

27、为“编译”或者“解释” 。进行编译或者解释的专用程序称为“编译程序”或者“解释程序” 。【43】什么是结构化程序设计?它包含哪些基本结构程序?【答】 程序设计有时可能是一件很复杂的工作,但往往有些程序结构是很典型的。采用结 构化程序编程时,规律性极强,简单清晰,易读写,具有调试方便、生成周期短、可靠性高等特点。根据结构化程序设计的观点,功能复杂的程序结构一般采用三种基本控制结构,即顺序结构、分支结构和循环结构,再加上子程序结构及中断服务子程序结构,共包含五种基本程序结构。【44】顺序结构程序的特点是什么?试用顺序结构编写三字节无符号数的加法程序段,最高字节的进位存入用户标志 F0 中。【答】顺

28、序结构是按照逻辑操作顺序,从某一条指令开始逐条顺序执行,直至某一条指令为止。比如数据的传送与交换、简单的运算、查表等程序的设计。顺序结构是所有程序设计中 最基本、最单纯的程序结构形式,因而是一种最简单、应用最普遍的程序结构。在顺序结构程序中没有分支,也没有子程序,但它是组成复杂程序的基础和主干。例如:三字节无符号数的加法程序段,最高字节的进位存人用户标志 FO 中。假设加数存放在内存 20H、21H 和 22H 中,被加数存放在内存 3OH、31H 和 32H 中,和存放在内存40H、41H 和 42H 中。数据存放次序为低字节在前。MOV A,3 0H ;取被加数低字节数ADD A,20H

29、;求和M07 40H,A ;和存入 MOV A,31HADDC A,21H ;带进位求和MOV 41H,AMOV A,32H ADDC A,22H ;带进位求和 MOV 42HA ,MOV F0,C ;最高字节的进位存入用户标志 F0 中【45】80C51 单片机有哪些查表指令?它们有何本质区别?请编写按序号 i 值查找 Di(1 6 位长度)的方法。设值 i 存放在 R7 中,将查找到的数据存放于片内 RAM 的 30H、31H 单元中。请画出程序流程图,编写查表程序段,加上必要的伪指令,并对源程序加以注释。【答】80c51 有两种查表指令,即近程查表指令“MOVC A,A+PC”和远程查表

30、指令 “MOVC A,AA+ DPTR“ 这两条指令的功能均是从程序存储器中读取数据(如表格、常数等),执行过程相同,其差别是基址不同,因此,适用范围也不同。累加器 A 为变址寄存器,而 PC、DPTR 为基址寄存器。DPTR 为基址寄存器时,允许数表存放在程序存储器的任意单元,称为“远程查表” ,编程比较直观;而 PC 为基址寄存器时,数表只能放在该指令单元往下的 256 个单元中,称为“近程查表” 。编程时需要计算累加器 A 中的值与数表首址的偏移量。例如,按序号 i 值查找 Di(1 6 位长度)的源程序如下所示:ORG XXXXHMOV DPTR,#TABLE 指向表首址MOV A,R

31、7 ;取值 iRL A ;Di 为二个字节MOV R7,A ;i x 2MOVC A,A+DPTR ;查表获得 Di 的高字节MOV 30HAMOV A,R7INC A 指向表的下一个地址MOVC A,A+DPTR ;表获得 Di 的低字节MOV 31H, ATABLE: Dw ;表(Dw 为双字节,高字节在前)RET查表程序流程图如图 4-1 所示。【46】根据运算结果给出的数据到指定的数据表中查找对应的数据字。运算结果给出的数据在片内 RAM 的 40H 单元中,给出的数据大小在 000FH 之间,数据表存放在 20H 开始的片内存储器中。查表所得数据字为双字节(高字节在后),高字节存于

32、42H、低字节存于 41H 单元。其对应关系为:给出数据: 00 H 0 1 H 0 2 H 0DH 0EH 0FH对应数据:00 A0 H 7DC2 H FF09 H 3456H 89ABH 5678 H请编制查表程序段,加上必要的伪指令,并加以注释。【答】程序如下:ORG 0000HAJMP MAIN ,0RG 0020HTAB:DB OAOH,OOH,0C2H ,7DH,09H,OFFH,.,56H ,34H,0ABH,89H,DB 78H,56H; 数据字表ORG 0050HMAIN: MOV A,40H ;运算结果给出的数据放在 40H 中MOV DPTR,#TAB ;指向数据字表首

33、地址RL A ;由于是双字节,所以 A 左移 1 位(乘 2)MOV 40H,A ;结果放在 40H MOVC A,A+DPTR ;查表,找出对应的值MOV 41H,A ;查找出的数据值低字节放入 41HMOV A40HADD A,#01H ;查找数据的高位字节MOV DPTR,#TABMOVC A,A+DPTRMOV 42H,A 。 ;查找出的数据值高字节放入 42HSJMP$注意:数据表存放在 20 H 开始的片内存储器中,该存储器应为内部程序存储器,因为查表指令 MOVC的功能是从程序存储器中读数据。【47】什么是分支结构程序?8OC 1 的哪些指令可用于分支结构程序编程?有哪些多分支转

34、移指令?由累加器 A 中的动态运行结果值进行选择分支程序,分支转移指令选用 LJMP,请编写散转程序段和画出程序流程图,加上必要的伪指令,并加以注释。【答】分支结构程序的主要特点是程序执行流程中必然包含有条件判断指令。符合条件要求和不符合条件要求的有不同的处理路径。编程的主要方法和技术是合理选用具有逻辑判断功能的指令。在程序设计时,往往借助程序框图(判断框)来指明程序的走向。一般情况下,每个分支均需要单独执行一段程序,对分支程序的起始地址赋予一个地址标号,以便当条件满足时转向指定地址单元去执行程序,条件不满足时仍顺序往下执行程序。80C51 的条件判跳指令极其丰富,功能极强,特别是位处理判跳指

35、令,对复杂问题的编程提供了极大方便。程序中每增加一条条件判跳指令,就应增加一条分支。分支结构程序的形式有单分支结构和多分支结构两种。在 80C51 指令系统中可实现单分支程序转移的指令有位条件转移指令,如 JC、JNC、JB、JNB 和 JBC 等,还有一些条件转移指令,如 JZ、JNZ 和 DJNZ 等。 80C51 设有两条多分支选择指令。(a)散转指令:JMP A+DPTR散转指令由数据指针 DPTR 决定多分支转移程序的首地址,由累加器 A 中内容动态地选择对应的分支程序。因此,可以从多达 256 个分支中选择一个分支散转。(b)比较指令:CJNE A,direct,rel (共有 4

36、 条)比较两个数的大小,必然存在大于、等于、小于三种情况,这时就需要从三个分支中选择一 个分支执行程序。例如:由累加器 A 中的动态运行结果值进行选择分支程序,分支转移指令选用 LJMP。ORG XXXXHMOV DPTR,#JPTAB ;分支转移表首地址CLR C MOV B, ARLC AJNC TABINC DPTRTAB: ADD A,B ;(A)* 3JNC TABLEINC DPTRTABLE: JMPA+DPTR ;多分支转移JPTAB:LTMP LOOPl ;长转移指令为 3 个字节LJMP LOOP2注意:长转移指令为 3 字节,因此,A 中内容应乘以 3。若大于一个字节,则

37、 DPH 要加 1。分支程序流程图如图 4-2 所示。【4-8】循环结构程序有何特点?80C51 的循环转移指令有什么特点?何谓循环嵌套?编程时应注意什么?【答】循环是强制 CPU 重复多次地执行一串指令的基本程序结构。从本质上看,循环程序结构只是分支程序中的一个特殊形式。循环程序由 4 个部分构成,即循环初始化、循环体、循环控制和结束部分。循环次数已知情况下,采用计数循环程序,其特点是必须在初始化部分设定计数的初值,循环控制部分依据计数器的值决定循环次数。根据控制循环结束的条件,决定是否继续循环程序的执行。所谓的结束条件可以是搜索 到某个关键字(比如回车符 CR),也可以是发生的某种变化(如

38、故障引起电路电平变化)等,什 么时候结束循环是不可预知的。80C5 1 设有功能强的循环转移指令:DJNZ Rn,rel ;以工作寄存器作为控制计数器DJNZ direct,rel ;以直接寻址单元作为控制计数器CJNE A,direct,rel ;比较不相等转移这几条基本指令可派生出很多条不同控制计数器的循环转移指令,大大扩充了应用范围 和多重循环层次。循环嵌套就是在循环内套用循环的结构形式,也称“多重循环” 。循环的执行过程是从内向外逐层展开的。内层执行完全部循环后,外层则完成一次循环, 逐次类推。层次必须分明,层次之间不能有交叉,否则将产生错误。编程时要注意循环的正确退出,要防止出现“死

39、循环” 。【4-9】什么是子程序?它的结构特点是什么?什么是子程序嵌套?【答】在编制应用程序时,往往将需要多次应用但完成的运算或操作相同的程序段,编制 成一个子程序,并尽量使其标准化,存放于某存储区域。调用子程序的程序称为“主程序”或 “调用程序” 。子程序是由专门的子程序调用指令 CALL 调用,而以子程序返回指令 RET 结束的程序段。子程序的第一条指令地址,通常称为“子程序首地址”或“人口地址” ,往往采用标号(可用助记符)加以表示,调用(转子)指令的下一条指令地址,通常称为“返回地址”或“断点” 。在子程序中调用子程序的现象通常称为子程序嵌套。【4-11】手工汇编下列程序:KEY EQ

40、U 2 0HORG 2000HMOV RO,#30H ;数据区首址MOV Rl,#1 6 ;数据区长度MOV 20H,#KEY ;关键字送 20H 单元CLR F0 ;清用户标志位MOV 21H,#0l ;序号置 lLP: MOV A,R0 ;取数CJNE A,20H,LP1 SJMP HERE ;找到关键字,结束LPI: INC 21H ;序号加 1INC R0 ;数据区地址指针加 1DJNZ R1,LP ;继续SETB F0 ;未搜索到关键字,则置位用户标志HERE:SJMP HERE【答】根据指令查指令表得到机器码,手工汇编结果如下:KEY EQU 20HORG 2000H2000 78

41、30 MOV R0,#30H ;数据区首址2002 7910 MOV R1,#1 6 ;数据区长度2004 752020 MOV 20H,#KEY ;关键字送 20H 单元2007 C2D5 CLR F0 ;清用户标志位2009 752101 MOV 21H,#01 ;序号置 1200C E6 LP: MOV A,R0 ;取数200D B52002 CJNE A,20H,LPI2010 8007 SJMP HERE ;找到关键字,结束2012 0521 LPI:INC 21H ;序号加 12014 08 INC R0 ;数据区地址指针加 12015 D9F5 DJNZ R1,LP ;继续201

42、7 D2D5 SETB F0 ;未搜索到关键字,则置位用户标志2019 80FE HERE:SJMP HERE【4-10把长度为 10 H 的字符串从内部 RAM 的输入缓冲区 INBUF 向设在外部 RAM 的输出缓冲区 OUTBUF 进行传送,一直进行到遇见字符“CR“时停止。若字符串中无字符“CR” ,则整个字符串全部传送。加上必要的伪指令,并对源程序加以注释。【答】程序如下:ORG 0000HAJMP MAINORG 0030HMAIN: MOV R7,#10H ;数据长度MOV R0,#INBUF ;源数据首地址MOV DPTR,#OUTBUF ;目的数据首地址LOOP: MOV A

43、,R0 ;把源数据的值赋给 ACJNE A,#0DH,LOOPl ;判断是否为“CR”(ASCII 码值为 0DH)SJMP ENDl ;是“CR“,则结束传送LOOPl: MOVX DPTR,A ;把 A 的值赋给目的数据INC R0 ;源数据下一个地址值INC DPTR ;目的数据下一个地址值DJNZ R7,L00P ;判断数据传送是否完毕ENDI: SJMP ENDIEND 【4-11】内部 RAM 从 2OH 单元开始存放一个正数表,表中之数为无序排列,并以“-1”作为结束标志。编程实现在表中找出最小正数,存入 10H。加上必要的伪指令,并对源程序加以注释。【答】程序如下:ORG 00

44、00HAJMP MAINORG 0030H MAIN: MOV R0,#20H ;正数表首址MOV 1 0H,#7FH ;初始值设为正数最大值LOOP: MOV A,R0CJNE A, “-1,CHK ;比较结束标志“-1”SJMP END1 ;是“-l“,结束比较CHK: CJNE A,10H,CHKI ;比较两个数大小SJMP LOOP1 ;两个数相等,不交换CHKI: JNC LOOP1 ;A 较大,不交换MOV 10H,A ;A 较小,交换LOOP1 INC R0SJMP LOOP END1: SJMP END1END例如:已知(20H)=22 H,(21H)=23H,(22H)=0C

45、H,(23H)=20H,(24H)=16H, (25H)=-1。 执行结果:(10H)=0CH【4-12】比较两个 ASCII 码字符串是否相等。字符串的长度在内部 RAM 的 2 H 单元,第一个字符串的首地址在 30H 中,第二个字符串的首地址在 50H 中。如果两个字符串相等,则置用户标志 FO 为 0;否则,置用户标志 FO 为 1。加上必要的伪指令,并对源程序加以注释(每个 ASCII 码字符为一个字节,如 ASCII码“A”表示为 41H)。LOOPl: MOVX DPTR,A ;把 A 的值赋给目的数据INC R0 ;源数据下一个地址值INC DPTR ;目的数据下一个地址值DJ

46、NZ R7,L00P ;判断数据传送是否完毕ENDI: SJMP ENDIEND 【答】字符串中每一个字符都可以用一个 ASCII 码表示。只要有一个字符不相同,就可以判断字符串不相等。ORG 0000H AJMP MAIN ORG 0030HMAIN: MOV R0,#30H 第一个字符串的首地址MOV R1 ,#5 0H 第二个字符串的首地址LOOP: MOV A,R0 第一个字符串的字符值赋给 AMOV B,R1 ;第二个字符串的字符值赋给 BCJNE A,B,NEXT ;两个字符值比较INC R0 字符值相等,则继续比较INC R1DJNZ 20H,LOOP ;判断字符串是否比较完CL

47、R F0 字符串相等,则 F0 位清 0SJMP $NEXT: SETB F0 字符串不等,则 F0 位置 1SJMP $END例如:(2OH)=03H,(3OH)=41H,(31H)=42H,(32H)=43H,(5OH)=41H,(51H)=42H,(52H)=43H。两个字符串均为“ABC“。执行结果:F0=0【413】已知经 AD 转换后的温度值存在 4 0 H 中,设定温度值存在 4 1 H 中。要求编写控制程序,当测量的温度值大于(设定温度值+2)时,从 P 1.0 引脚上输出低电平;当测量的温度值小于(设定温度值一 2)时,从 P 1.0 引脚上输出高电平;其他情况下,P 1.0 引脚输出电平不变(假设运算中 C 中的标志不会被置 1)。加上必要的伪指令,并对源程序加以注释。【答】程序如下:ORG 0000HAJMP MAINORG 0020HMAIN: MOV B,41H ;设定的温度值MOV ABADD A,#02HMOV B,A ;设定温度值+2MOV A,40H ;测量的温度值CLR CSUBB A,BJNC LOWER ;测量的温度值(设定温度值+2),转 LOWER 子程序,使 P10 引脚上输出低电平MOV B,41H ;设定的温度值 MOV A,BDEC

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > 计算机原理

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报