资源描述
实验二 分支程序,查表程序编写实验一、实验目的1掌握跳转指令2掌握子程序调用指令3掌握查表程序运用二、实验设备单片机IDE集成开发软件三、实验要求验证“实验原理”一节中给出的实例程序,熟悉各种跳转指令、子程序调用指令,以及查表程序编写方法。四、实验原理作为软件实验,可以在没有硬件及仿真仪的情况下,利用集成开发环境进行。1跳转指令控制转移的指令包括无条件转移指令和有条件跳转指令。(1)长跳转指令LJMP addr16长跳转,把16位(2个字节)的地址送入PC中。2绝对转移指令AJMP addr11在存储空间2kB内转移。与PC当前值高5位共同组成16位目标地址。(3)短跳转指令SJMP rel8位补码表示的地址。可以在-128到127之间跳转。(4)间接跳转指令JMP A+DPTR这是一条很有用的散转指令。跳转地址在程序运行时动态决定。(5)累加器判零转移指令JZ rel,JNZ rel,JZ rel,累加器为0转移,JNZ rel,累加器不为0转移。(6)比较转移指令,CJNE ,rel。CJNE A,#data,relCJNE A,direct,relCJNE Ri,#data,relCJNE Rn,#data,rel(8)循环转移指令DJNZ Rn,rel。首先Rn减1,然后判断是否是零,不是则跳转。DJNZ direct , rel。首先直接地址中的数据减1,然后判断是否是零,不是则跳转。(9)位控制转移指令JC rel,若Cy=1,则(PC)-(PC)+2+rel 若Cy=0,则(PC)-(PC)+2JNC rel若Cy=0,则(PC)-(PC)+2+rel 若Cy=1,则(PC)-(PC)+2JB bit,rel; 若(bit)=1,则(PC)-(PC)+3+rel 若(bit)=0,则(PC)-(PC)+3JNB bit,rel若(bit)=0,则(PC)-(PC)+3+rel 若(bit)=1,则(PC)-(PC)+3JBC bit,rel; 若(bit)=1,则(PC)-(PC)+3 若(bit)=0,则(PC)0 y = 0 X=0 -1 X(A) CJNE A,#0,L1 ;(A)与0比较,不等则转移 MOV R3,#0 ;若相等,0(R1) SJMP L3 L1: JB ACC.7,L2 ;自变量0,1+(R1) SJMP L3 L2; MOV R3,#0FFH ;自变量0,1(R1) L3; SJMP $ END 先赋值后分支。先把X调入累加器A,并判断它是否为零。若X=0,则A中内容送R3;若X0,则先给R0赋值(=-1)。然后判断A0。若A0,则把R0修改为1后送R3,程序流程如图27-1(b)所示。程序如下: ORG 0000H MOV A,R2 ;取X到A JZ L2 ;X=0则转移 MOV R0,#0FFH JB ACC.7,L1 ;若X0,(R0)=1 L1: MOV A,R0 L2: MOV R3,A ; 存结果 SJMP $ END 开始(A)X(A)=0?(A)0?(A)=-1存结果(A)=1结果YYNN开始(A)X(A)=0?(A)0?(R0)=-1存结果(R0)=-1结果(a)NN(b)Y 图2-1 流程图2)查表程序设计查表程序是根据查表算法设计的。该方法把事先计算或实验数据按一定顺序编成表格,存于程序存储器内,然后根据输入参数值,从表中取得结果。查表程序可完成数据补偿、计算和转换等功能。采用MCS-51汇编语言查表非常方便。它有两条专门的查表指令:MOVC A,A+DPTR,MOVC A,A+PC第一条查表指令采用DPTR存放数据表格的地址,查表过程比较简单。查表前需要把数据表格表头地址存人DPTR,然后把所要查得的数在表中相对表头地址的偏移量送入累加器A,最后使用“MOVC A,A+DPTR”完成查表。采用“MOV A,A+PC”指令查表,所需操作有所不同,可分为三步:用传送指令把所查数据的项数送人累加器A;使用“ADD A,#data指令对累加器A进行修正,data值由PC当前值+data=数据表头地址。确定,实际上data值等于查表指令和数据表格之间的字节数;用指令“MOVC A,A十PC”完成查表。查表程序主要用于代码转换、代码显示、实时值查表计算和按命令号实现转移等。范例:求函数y=X!(X=0,7)的值。设自变量存放在ABC单元,表头的地址为TABL,y值为双字节存放在寄存器R2R3中,R3存放y值低字节,写出查表程序。 程序如下: ORG 0000H ABC EQU 30H L1: MOV A,ABC ;取X ADD A,ABC ;X乘2与双字节Y相对应 MOV R3,A ;保存指针 ADD A,#07H ;计算偏移量 MOVC A,A+PC ;查低字节 XCH A,R3 ADD A,#04H ;计算偏移量 MOVC A,A+PC ;查高字节 MOV R2,A SJMP $ TABLE: DB 01,00,01,00,02,00,06,00 DB 24H,00,20H,01,20H,07,40H,50H END五、实验步骤1、分别编写简单分支程序,及子程序调用程序,然后在开发环境中编译运行。2、编写查表程序。然后在开发环境中编译运行。六、实验报告1、给出各个程序的清单,要求有注释。2、MCS-51系列单片机有那些跳转指令?列出这些指令,并说明其功能。3、MCS-51系列单片机有哪些子程序调用和返回指令?列出这些指令,并说明其功能。4、MCS-51系列单片机有哪些查表指令?列出这些指令,并说明其功能。
展开阅读全文