当前位置:首页 > 单片机教案 - 图文
C51单片机教案
【例29】设标号TABP指向程序存储器地址1354H单元。当程序执行到PC=1000H处时,执行如下指令: LJMP TABP 执行结果为:将目标地址1354H装入PC中,程序立即无条件转向指定的目标地址去执行。 (2)绝对转移指令。 AJMP addr11;PC←PC+2 AJMP指令因是双字节指令,且转移范围为2KB,所以只要2KB范围够用,则AJMP可代替LJMP,从而可减少指令字节数。 (3)短转移指令。 SJMP rel;PC←PC+2,PC←PC+rel 这条指令为无条件相对转移指令,也是双字节指令,转移的目的地址为:转移范围为256B,即PC-126~PC+129。 (4)间接转移指令。 JMP @A+DPTR;PC←A+DPTR 这条指令为一字节无条件转移指令,转移的地址由累加器A的内容和数据指针DPTR内容之和来决定,两者都是无符号数。一般是以DPTR的内容为基址的,而由A的值来决定具体的转移地址。这条指令的特点是转移地址可以在程序运行中加以改变。例如,当DPTR为确定的值时,根据A值的不同来控制程序转向不同的程序段,因此有时也称为散转指令。 例:如果累加器A中存放待处理命令编号(0~7),程序存储器中存放着标号为PMTB的转移表首址,则执行下面的程序,将根据A中命令的编号转向相应的命令处理程序。 PM: MOV R1,A RL A ADD A,R1 MOV DPTR,#PMTB JMP @A+DPTR PMTB:LJMP PM0 LJMP PM1 LJMP PM2 LJMP PM3 LJMP PM4 LJMP PM5 LJMP PM6 LJMP PM7 2.条件转移指令(7条) (1)判0转移指令。 累加器为0转移指令: JZ rel;PC←PC+2;若A=0,则PC←PC+rel转移,若A≠0,则程序顺序执行 累加器为非0转移指令: 49
C51单片机教案
JNZ rel;PC←PC+2;若A≠0,则PC←PC+rel转移,若A=0,则程序顺序执行 【例3-31】编程实现:若A=0则A的内容加1,否则A的内容减1。 解:编程如下: JZ LOOP1 DEC A SJMP$ LOOP1:INC A SJMP$ 或者: JNZ LOOP INC A SJMP$ LOOP:DEC A SJMP$ (2)判位变量转移指令。 直接寻址位为1转移指令: JB bit,rel;PC←PC+3;若(bit)=1,则PC←PC+rel转移;若(bit)=0,则程序顺序执行 直接寻址位为0转移指令: JNB bit,rel;PC←PC+3;若(bit)=0,则PC←PC+rel转移;若(bit)=1,则程序顺序执行 【例3-32】设P1端口上的数据为11001010B,A的内容为56H(01010110B),执行下列指令: JB P1.2,LOOP1;P1.2=0,不满足条件顺序执行 JBN ACC.3,LOOP2;ACC.3=0,满足条件转移到LOOP2 执行结果:程序转移到LOOP2去执行。 (3)判位变量并清零转移指令。 直接寻址位为1转移并清零该位指令: JBC bit,rel;PC←PC+3;若(bit)=1,则(bit)←0,PC←PC+rel转移;若(bit)=0,则程序顺序执行 【例3-33】设A的值为56H(01010110B),执行下列指令: JBC ACC.3,LOOP1;ACC.3=0,不满足条件顺序执行 JBC ACC.2,LOOP2;ACC.2=1,满足条件转移到LOOP2,且ACC.2←0 结果:程序转向LOOP2去执行,且使A=01010010B=52H。 (4)布尔累加器C转移指令。 进位Cy为1转移指令: JC rel;PC←PC+2;若Cy=1,则PC←PC+rel转移;若Cy=0,则程序顺序执行进位Cy为0转移指令: JNC rel;PC←PC+2;若Cy=0,则PC←PC+rel转移;若Cy=1,则程序顺序执行 3.比较转移指令 50
共分享92篇相关文档