首页
基础教程 | 单片机设计实例 | 常用芯片 | 电子基础
当前位置:单片机教程 >> 单片机设计实例 >> 浏览文章 今天是:
单片机设计实例

程序控制指令

作者:    来源:本站原创    点击数:   更新时间:2007年09月20日   
 

表 3-6 程序控制指令

1. 程序控制指令的一般性说明

* 程序控制指令又分“无条件转移”、“调用与返回”和“条件转移”等三类。

* 对程序控制指令应掌握:转移地址如何生成及其转移范围。

* 注意!MCS-51条件转移指令的运用与计算并无特别的联系。

* 位值判别转移使程序设计更为灵活,是MCS-51指令系统的特色。

* 应特别注意变址转移指令JMP与比较转移指令CJNE的用法。

操作码

操作数

条 件

转 移 地 址

说 明

AJMP

addr11

无条件

(PC)←(PC)+2

(PC)0-10←addr11

短转移,只改变PC的低11位,转移范围2K。

LJMP

addr16

无条件

(PC)←addr16

长转移,转移范围全64K空间

SJMP

rel

无条件

(PC)←(PC)+2+rel

相对转移 ,范围-126~+129。

JMP

@A+DPTR

无条件

(PC)←(A)+(DPTR)

散转指令,根据A值变址转移

ACALL

addr11

无条件

(PC)←(PC)+ 2

(PC)L、(PC)H压栈

(PC)0-10←addr11

短调用,只改变PC的低11位,转移范围2K。

LCALL

addr16

无条件

(PC)←(PC)+ 3

(PC)L、(PC)H压栈

(PC)←addr16

长调用,调用范围全64K空间

RET

隐含

((SP))

无条件

(PC)H←((SP))

(PC)L←((SP)-1))

子程序返回。

RETI

中断返回。

JZ

rel

(A)= 0

(PC)←(PC)+2+rel

根据A的值条件转移。

JNZ

(A)≠0

JC

rel

(C)= 0

(PC)←(PC)+2+rel

根据C的值条件转移。

JNC

(C)= 1

JNB

bit, rel

(bit)=0

(PC)←(PC)+3+rel

位值判别转移。(负逻辑)

JB

(bit)=1

位值判别转移。(正逻辑)

JBC

(bit)=1

同 JB ,加(bit)清零功能。

DJNZ

Rn, rel

(Rn)-1≠0

(PC)←(PC)+2+rel

循环指令。循环计数器自动

减1,归0则退出循环。

dir, rel

(dir)-1≠0

(PC)←(PC)+3+rel

操作码

操作数

条 件

转 移 地 址

说 明

CJNE

A,dir,rel

A,#data,rel Rn,#data,rel

@Ri,#data,rel

(A)≠(direct)

(A)≠#data

(Rn)≠#data

((Ri))≠#data

(PC)←(PC)+3+rel

无符号数比较,两数不等则转移。若前一数小,C置1;若前一数不小于后一数,C清零。

NOP

(PC)←(PC)+1

空操作,顺序执行。

2. AJMP、LJMP及SJMP的转移范围

指令

转移地址

转移范围

说明

AJMP addr11

(PC)+2的高5位

+ addr11

(PC)+2所在的2k页

2k页:X000H~X7FFH

X800H~XFFFH

LJMP addr16

addr16

全64k空间

SJMP rel

(PC)+2+rel

(PC)-126~(PC)+129

Rel是8位有符号数

注:①表中的(PC)是转移指令的地址。

②在实际使用时,地址一般用标号表示。

3. 变址转移指令JMP的使用

* JMP的转移地址 = 基址(DPTR)+变址偏移量(A)。

* 应用例:按照(A)= 0,1,2,分别转向三个不同的程序分支。

MOV DPTR,#GO ;设立散转入口地址

点此在新窗口浏览图片MOV B A, ;

RL A ; (A) ←(A)+3

ADD A,B ;

JMP @A+DPTR

GO: LJMP GO1 ;指令地址为GO

LJMP GO2 ;指令地址为GO+3

LJMP GO3 ;指令地址为GO+6

* 问题一:上例中,如果由LJMP改用AJMP,程序应如何变化?

* 问题二:上例中,如果A的值大于2会如何?怎样解决?

4. 条件转移指令的使用

* 因为A与C的值并不一定由计算操作而改变,故JZ、JNZ、JC、JNC等指令的运用与计算并无特别的联系,

* 位值判别转移指令使条件转移的功能更丰富和灵活。例如:

* 如果(B)³0,转向POS分支:JNB B.7,POS

* 如果计算溢出,转向FL分支: JB OV,FL

* 如果C=1,将C清零并转向NEG分支:JBC C,NEG

* 由P1.4检测火灾传感器,1有效。传感器报警时转向FIRE分支:JB P1.4,FIRE

* 可以在http://www.51hei.com 单片机教程 首页找更多资料哦

5. 比较转移指令CJNE及其使用

* 格式:CJNE 前数,后数,相对偏移量

转移条件:前数≠后数

对C的影响:按无符号数减法。前数减后数,有借位C = 1,否则C = 0。

* 应用例:A、B中为无符号数,比较两数,大数存A,小数存B。

CJNE A,B,0

JNC DONE

EXC A,B

DONE:……

转载须保留地址:http://www.51hei.com/mcu/284.html

* 应用例:A、B中为有符号数,比较两数,大数存A,小数存B。

有符号数比较的算法:

以A 与B 表示A与B的无符号值。

对于A >B 有,若A>0 A>BA<0 A

点此在新窗口浏览图片据此可以画出右边的流程图,相应的程序如下

CJNE A,B,NEQ

SJMP DONE

NEQ:JNC AGT

XCH A,B

AGT:JNB Acc.7,DONE

XCH A,B

DONE:……




 
发表评论】【告诉好友】【打印此文】【收藏此文】【关闭窗口
上一篇:位处理指令
网友评论(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
 >> 推荐文章
单片机USB-ISP下载线制作
自制单片机实验板
单片机一键多功能按键识别设
 >> 阅读排行
keil教程
单片机电子时钟设计
单片机DS18B20水温控制系统
单片机交通灯设计
单片机课程设计
单片机时钟设计
单片机数字钟设计
单片机键盘程序(4×4矩阵式
单片机串口通讯
单片机秒表设计
 >> 相关文章
  • 暂无相关链接
  • 站长:刘兴国 站长信箱:372xcom1@21cn.com
    单片机教程 @ www.51hei.com 2007-2008