- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
通过这个程序的学习,需要了解到: ? 程序不仅仅可以由上至下顺序执行,还可以打破顺序跳着执行。后面还要学习有条件的跳转和调用。 ? 在实际编程中,放在SJMP、AJMP指令后面的不是需要计算的rel和addr11,而是用标号表示的目的地址,如:SJMP JUMP2。具体指令中的地址则由编译程序自动完成。 ? ?SJMP $是一种常用的程序原地执行的写法。后面学了循环后,就知道这是一个死循环,在学习阶段经常使用。特别在上机实验时,当执行到这条指令后,程序不会退出,所以可以继续观察寄存器、MEMORY中的值。 ? 上面的分析方法还是使用了μV3的汇编指令混合显示方法。慢慢地适应这种学习方法,对于学习单片机编程可以收到事半功倍的效果。 进一步: ? 图3-7对于跳转指令的跳转地址有详细的运算,图3-6对于跳转指令的跳转过程有详细的图示,对比二者,进一步理解跳转指令的执行过程和原理。 ? 思考验证: 仔细阅读关于SJMP rel指令中rel的解释。?指令SJMP $的作用是执行原地跳转(循环),由图3-7中的解释可以知道,这里的$实际获得的值为0FEH,即-2。 如果在程序中实际书写的指令为:SJMP 0FEH,则程序会怎样执行?先分析然后到机器上去验证吧! 3.2.2 条件转移 条件转移的原理是当程序设定的条件满足时,进行程序的转移,否则程序顺序执行。这一点在C程序中采用“if”语句进行描述。条件转移结构采用如图3-8所示的流程图描述。51所有的条件转移指令都是采用相对寻址方式得到转移目的地址,以rel作为8位偏移量。在编写程序时,正像前面转移指令所介绍的一样,常用目的地址的标号来代替rel,由汇编或者其他的编译器自动换算成8位相对地址。 后面的解释不再使用相对地址,而是直接采用程序编写时使用的标号地址。 图3-8 条件转移流程图 根据判断条件把条件转移指令划分为4类(如表3-3所示): ? 累加器判零转移指令; ? 数值比较判等转移指令; ? 减1判零转移指令; ? 判位转移指令。 下面在程序中对相关的指令进行解释。 (1) 程序如下(仍使用前面图3-5所示的电路): ORG 0000H LJMP MAIN ORG 0040H MAIN: MOV SP,#30H MOV DPTR,#0FEFFH ;设置控制字 MOVX A,@DPTR ;读按键状态 JZ LED_OFF ;判断A是否为0 MOV A,#01H ;如果不为0, MOVX @DPTR,A ;则点亮D0 SJMP GOON ;跳转 LED_OFF: MOV A,#00H ;否则熄灭D0 MOVX @DPTR,A GOON: SJMP $ END 对该程序的分析如图3-9所示。 进一步: ? 这个程序完成的功能是:如果8个按键全部闭合,则发光二极管D0熄灭,否则D0点亮。 ? 注意看上面的分析,“如果…,则…,否则…”,还有图3-8所示的流程图,这就是程序的基本结构之一:选择结构。 ? 分析图中,阴影部分作为以后常用的程序结构框架,以后再举例时,这一部分一般不再给出。读者只要把程序段填充到这个框架中,就可以运行了。当然,这里面不包括中断部分,以后还要给这个框架补充内容。 ? 就这个程序完成的功能而言,里面有不少的“废话”。这个以后再解释。 ? 这个程序只对键盘判断一次,并且对LED0的状态也只是操作一次,如何动态监测并且及时更新输出呢?请继续学习。 图3-9 程序分析 (2) 程序如下: DELAY: MOV R0,#00H ;延时控制 DELAY1: MOV R1,#00H ; DJNZ R1,$ ; DJNZ R0 , DELAY1 这个程序段前面已经出现过,现在解释如下: ① ?DJNZ R1,$:该语句先把R1的值减1,然后判断是否为0,若不为0,则跳转,因为是跳转到$,所以还是跳转到本指令继续执行,再把R1的值减1,然后判断是否为0,若不为0,则跳转,如此反复执行下去;当判断R1的值为0时,程序不再跳转,而是向下继续执行。执行结构如图3-10所示。 图3-10 DJNZ R1,$的执行结构 ? 如果R1的初始值为1,则执行一次R1?=?R1-1(注:汇编语言当中没有这种表达方式,但以后的C程序会有这种表达方
文档评论(0)