单片机原理及应用技术-基于Keil C和Proteus仿真第3章 单片机编程语言.ppt

单片机原理及应用技术-基于Keil C和Proteus仿真第3章 单片机编程语言.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
3.3.2.2 分支程序结构 分支程序结构分为无条件转移和有条件转移。有条件分支转移程序又可分为单分支转移和多分支转移。 1.单分支选择结构 仅有两个出口,两者选一。一般根据运算结果的状态标志,用条件判跳指令来选择并转移。 【例3- 26】 求单字节有符号数的二进制补码 正数补码是其本身,负数补码是其反码加1。因此,应首先判被转换数的符号,负数进行转换,正数本身即为补码。 设二进制数放在A中,其补码放回到A中, 参考程序如下: CMPT: JNB Acc.7,RETURN ;(A)0,不需转换 MOV C,Acc.7 ;符号位保存 CPL A ;(A)求反,加1 ADD A,#1 MOV Acc.7,C ;符号位存在A的最高位 RETURN: RET 2.多分支选择结构 当程序的判别部分有两个以上的出口时,为多分支选择结构。指令系统提供了非常有用的两种多分支选择指令: 间接转移指令:JMP @A+DPTR 比较转移指令:CJNE A,direct,rel CJNE A,#data,rel CJNE Rn,#data,rel CJNE @Ri,#data,rel 间接转移指令“JMP @A+DPTR”由数据指针DPTR决定多分支转移程序的首地址,由A的内容选择对应分支。四条比较转移指令CJNE能对两个欲比较的单元内容进行比较,当不相等时,程序实现相对转移;若两者相等,则顺序往下执行。 简单的分支转移程序的设计,常采用逐次比较法,就是把所有不同的情况一个一个地进行比较,发现符合就转向对应的处理程序。缺点是程序太长,有n种可能的情况,就需有n个判断和转移。 实际中,典型例子就是当单片机系统中的键盘按下时,就会得到一个键值,根据不同的键值,跳向不同的键处理程序入口。此时,可用直接转移指令(LJMP或AJMP指令)组成一个转移表,然后把该单元的内容读入累加器A,转移表首地址放入DPTR中,再利用间接转移指令实现分支转移。 【例3- 27】根据寄存器R2的内容转向各处理程序PRGX(X=0~n) (R2)=0,转PRG0;(R2)=1,转PRG1;……;(R2)=n,转PRGn 程序段如下: JMP6: MOV DPTR,#TAB5 ;转移表首地址送DPTR MOV A,R2 ;分支转移参量送A MOV B,#03H ;乘数3送B MUL AB ;分支转移参量乘3 MOV R6, A ;乘积的低8位暂存R6 MOV A,B ;乘积的高8位送A ADD A ,DPH ;乘积的高8位加到DPH中 MOV DPH, A MOV A, R6 JMP @A+DPTR ;多分支转移选择 …… TAB5: LJMP PRG0 LJMP PRG1 …… LJMP PRGn 3.3.2.3 循环程序结构 1.循环程序的结构主要由以下四部分组成。 (1)循环初始化 完成循环前的准备工作。例如,循环控制计数初值的设置、地址指针起始地址的设置、为变量预置初值等。 (2)循环处理 完成实际的处理工作,反复循环执行的部分,故又称循环体。 (3)循环控制 在重复执行循环体的过程中,不断修改循环控制变量,直到符合结束条件就结束循环程序的执行。 循环结束控制方法分为循环计数控制法和条件控制法。 (4)循环结束 这部分是对循环程序执行的结果进行分析、处理和存放。 2.循环结构的控制分为循环计数控制结构和条件控制结构。 (1)计数循环控制结构 依据计数器的值来决定循环次数,一般为减1计数器,计数器减到“0”时,结束循环。计数器初值在初始化时设定。 MCS—51指令系统提供了功能极强的循环控制指令: DJNZ Rn,rel ;以工作寄存器作控制计数器 DJNZ direct,rel ;以直接寻址单元作控制计数器 计数控制只有在循环次数已知的情况下才适用。循环次数未知,不能用循环次数来控制,往往需要根据某种条件来判断是否应该终止循环。 【例3- 28】 求n个单字节无符号数xi的和,xi按i顺序存放在单片机内部RAM从50H开始的单元中,n放在R2中,所求和(为双字节)放在R3R4中。 程序如下: ADD1: MOV R2,#n ;加法次数n送R2 MOV R3,#0 ;R3存放和的高8位,初始值为0 MOV R4,#0 ;R4存放和的低8位,初始值为0 MOV R0,#50H LOOP: MOV A,R4 ADD A,@R0 MOV

您可能关注的文档

文档评论(0)

132****9295 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档