深圳市华胄科技有限公司 >> MCU专题 >> 单片机编程


单片机教程:单片机编程入门十四



提交者 电子007  在  2007-9-12 15:29:53 

上一篇 下一篇
单片机教程26课
单片机编程入门十四:


条件转移指令:


条件转移指令是指在满足一定条件时进行相对转移。


判A内容是否为0转移指令


JZ rel


JNZ rel


第一指令的功能是:如果(A)=0,则转移,否则顺序执行(执行本指令的下一条指令)。转移到什么地方去呢?如果按照传统的方法,就要算偏移量,很麻烦,好在现在我们可以借助于机器汇编了。因此这第指令我们可以这样理解:JZ 标号。即转移到标号处。下面举一例说明:


MOV A,R0


JZ L1


MOV R1,#00H


AJMP L2


L1: MOV R1,#0FFH


L2: SJMP L2


END


在执行上面这段程序前如果R0中的值是0的话,就转移到L1执行,因此最终的执行结果是R1中的值为0FFH。而如果R0中的值不等于0,则顺序执行,也就是执行 MOV R1,#00H指令。最终的执行结果是R1中的值等于0。


第一条指令的功能清楚了,第二条当然就好理解了,如果A中的值不等于0,就转移。把上面的那个例子中的JZ改成JNZ试试吧,看看程序执行的结果是什么?


CJNE A,#data,rel


CJNE A,direct,rel


CJNE Rn,#data,rel


CJNE @Ri,#data,rel


第一条指令的功能是将A中的值和立即数data比较,如果两者相等,就顺序执行(执行本指令的下一条指令),如果不相等,就转移,同样地,我们可以将rel理解成标号,即:CJNE A,#data,标号。这样利用这条指令,我们就可以判断两数是否相等,这在很多场合是非常有用的。但有时还想得知两数比较之后哪个大,哪个小,本条指令也具有这样的功能,如果两数不相等,则CPU还会反映出哪个数大,哪个数小,这是用CY(进位位)来实现的。如果前面的数(A中的)大,则CY=0,否则CY=1,因此在程序转移后再次利用CY就可判断出A中的数比data大还是小了。


例:


MOV A,R0


CJNE A,#10H,L1


MOV R1,#0FFH


AJMP L3


L1: JC L2


MOV R1,#0AAH


AJMP L3


L2: MOV R1,#0FFH


L3: SJMP L3


上面的程序中有一条指令我们还没学过,即JC,这条指令的原型是JC rel,作用和上面的JZ类似,但是它是判CY是0,还是1进行转移,如果CY=1,则转移到JC后面的标号处执行,如果CY=0则顺序执行(执行它的下面一条指令)。


分析一下上面的程序,如果(A)=10H,则顺序执行,即R1=0。如果(A)不等于10H,则转到L1处继续执行,在L1处,再次进行判断,如果(A)>10H,则CY=1,将顺序执行,即执行MOV R1,#0AAH指令,而如果(A)<10H,则将转移到L2处指行,即执行MOV R1,#0FFH指令。因此最终结果是:本程序执行前,如果(R0)=10H,则(R1)=00H,如果(R0)>10H,则(R1)=0AAH,如果(R0)<10H,则(R1)=0FFH。


弄懂了这条指令,其它的几条就类似了,第二条是把A当中的值和直接地址中的值比较,第三条则是将直接地址中的值和立即数比较,第四条是将间址寻址得到的数和立即数比较,这里就不详谈了,下面给出几个相应的例子。


CJNE A,10H ;把A中的值和10H中的值比较(注意和上题的区别)


CJNE 10H,#35H ;把10H中的值和35H中的值比较


CJNE @R0,#35H ;把R0中的值作为地址,从此地址中取数并和35H比较


DJNZ Rn,rel


DJNZ direct,rel


第一条指令在前面的例子中有详细的分析,这里就不多谈了。第二条指令,只是将Rn改成直接地址,其它一样,也不多说了,给一个例子。


DJNZ 10H,LOOP


3.调用与返回指令


(1)主程序与子程序 在前面的灯的实验中,我们已用到过了子程序,只是我们并没有明确地介绍。子程序是干什么用的,为什么要用子程序技术呢?举个例子,我们数据老师布置了10道算术题,经过观察,每一道题中都包含一个(3*5+2)*3的运算,我们可以有两种选择,第一种,每做一道题,都把这个算式算一遍,第二种选择,我们可以先把这个结果算出来,也就是51,放在一边,然后要用到这个算式时就将51代进去。这两种方法哪种更好呢?不必多言。设计程序时也是这样,有时一个功能会在程序的不同地方反复使用,我们就可以把这个功能做成一段程序,每次需要用到这个功能时就“调用”一下。


(2)调用及回过程:主程序调用了子程序,子程序执行完之后必须再回到主程序继续执行,不能“一去不回头”,那么回到什么地方呢?是回到调用子程序的下面一条指令继续执行(当然啦,要是还回到这条指令,不又要再调用子程序了吗?那可就没完没了了……)。参考图1




图1


比较转移指令


循环转移指令


调用指令


LCALL addr16 ;长调用指令


ACALL addr11 ;短调用指令


上面两条指令都是在主程序中调用子程序,两者有一定的区别,但在初学时,可以不加以区分,而且可以用LCALL 标号,ACALL 标号,来理解,即调用子程序。


(5)返回指令 则说了,子程序执行完后必须回到主程序,如何返回呢?只要执行一条返回指令就可以了,即执行


ret


指令


4.空操作指令


nop


空操作,就是什么事也不干,停一个周期,一般用作短时间的延时。


单片机机系列--单片机教程---单片机教程:单片机编程--单片机教程:单片机编程入门十四


作者:技术资料



单片机教程,五系列(55讲)电子书全集下载

论坛精选:
■ 单片机c语言,10小时学会C 语言 (一)
第一章 C 语言简介与Turbo C 的使用
■ 单片机c语言,10小时学会C 语言 (二)
第二章 C 程序的结构
■ 单片机c语言,10小时学会C 语言 (三)
第三章 常数与变数
■ 单片机c语言,10小时学会C 语言 (四)
第四章 基本输出入函式
■ 单片机c语言,10小时学会C 语言 (五)
第五章 流程图与抉择指令
■ 单片机c语言,10小时学会C 语言 (六)
第六章 循环与自动重复
■ 单片机c语言,10小时学会C 语言 (七)
第七章 数组与指针
■ 单片机c语言,10小时学会C 语言 (八)
第八章 函数与呼叫
■ 单片机c语言,10小时学会C 语言 (九)
第九章 档案存取

1 楼  提交者:果冻 在 2007-9-27 16:42:27
通俗易懂!!!
2 楼  提交者:Guest 在 2007-9-27 19:00:10
rfhrf
3 楼  提交者:306663570 在 2007-9-28 7:38:24
222
4 楼  提交者:实在不服 在 2007-9-28 16:18:38
OK
5 楼  提交者:plcpic 在 2007-9-28 17:50:12
2
6 楼  提交者:lyralos 在 2007-9-29 22:04:20
想问你一个问题
就是如何用PIC单片机实现发出警报
7 楼  提交者:tisa 在 2007-9-30 15:19:41
hao
8 楼  提交者:luck1 在 2007-9-30 18:25:15
9 楼  提交者:ltianbin 在 2007-10-1 8:59:14
好啊
好啊
好啊
好啊
好啊
好啊
好啊
好啊
好啊
10 楼  提交者:拈花一笑 在 2007-10-4 2:17:15
Q
11 楼  提交者:Guest 在 2007-10-4 14:07:24
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
12 楼  提交者:郭志成 在 2007-10-4 16:31:26
无内容
13 楼  提交者:Guest 在 2007-10-4 16:49:59
hfghfgh
14 楼  提交者:sure365 在 2007-10-6 11:45:39
继续看
15 楼  提交者:黄伟 在 2007-10-6 13:03:14
16 楼  提交者:Guest 在 2007-10-6 16:57:58
坚持
17 楼  提交者:弘毅 在 2007-10-6 22:41:32
xiexie
18 楼  提交者:mlx666777 在 2007-10-7 22:32:30
好懂
19 楼  提交者:张建军 在 2007-10-8 11:31:32
继续
20 楼  提交者:lizhugood 在 2007-10-8 17:18:56
21 楼  提交者:dataie 在 2007-10-8 17:24:20
xiexie
22 楼  提交者:Guest 在 2007-10-9 15:55:03
无内容
23 楼  提交者:星雨 在 2007-10-11 14:37:29
fg  
24 楼  提交者:Guest 在 2007-10-12 9:53:29
a
25 楼  提交者:不哭死神 在 2007-10-13 21:19:08
1
26 楼  提交者:dataie 在 2007-10-15 13:41:03
kankan
27 楼  提交者:123456 在 2007-10-16 11:32:31
sdagdsrdf
28 楼  提交者:谭伟 在 2007-10-16 16:19:40
通俗易懂!!!
29 楼  提交者:lqb2005 在 2007-10-16 20:51:26
浩资料
30 楼  提交者:晚上万岁 在 2007-10-17 0:29:31
HAO TAI HAO
上一篇 下一篇
当前第〖1〗页 共有28页 转到第 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28