语言程序设计基础介绍.ppt

  1. 1、本文档共53页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章 MCS-51汇编语言程序设计基础 Contents 2.多分支转移结构 程序的判别部分有两个以上的出口流向 常见的两种形式如下: 指令系统提供了非常有用的两种多分支选择指令: 间接转移指令: JMP @A+DPTR; 比较转移指令: CJNE A,direct,rel; CJNE A,#data,rel; CJNE Rn,#data,rel; CJNE @Ri,#data,rel; 需根据某一单元的内容是0,1,……,n,来分别转向处理程序0,处理程序1,……处理程序n。一个典型的例子就是当单片机系统中的键盘按下时,就会得到一个键值,根据不同的键值,跳向不同的键处理程序入口。对于这种情况,可用直接转移指令(LJMP或AJMP指令)组成一个转移表,然后把该单元的内容读入累加器A,转移表首地址放入DPTR中,再利用间接转移指令实现分支转移。 例:按照R7的内容转向5个操作程序。 JUMP3: MOV A,R7 MOV DPTR,#TAB3 MOVC A,@A+DPTR JMP @A+DPTR TAB3: DB OPR0-TAB3 DB OPR1-TAB3 DB OPR2-TAB3 DB OPR3-TAB3 DB OPR4-TAB3 OPR0: 操作程序0 OPR1: 操作程序1 OPR4: 操作程序4 7.2.3 循环程序设计 特点是程序中含有可以反复执行的程序段,该程序段通常称为循环体。例如求100个数的累加和,则没有必要连续安排100条加法指令,可以只用一条加法指令并使其循环执行100次。 (1)可大大缩短程序长度 (2)使程序所占的内存单元数量少 (3)使程序结构紧凑和可读性变好。 一、循环程序的结构 循环控制 在重复执行循环体的过程中,不断修改循环控制变量,直到符合结束条件,就结束循环程序的执行。 循环初始化 循环前的的准备工作,例循环控制计数初值的设置、地址指针的起始地址的设置、为变量预置初值等。 循环结束 对循环程序执行的结果进行分析、处理和存放。 循环体 要求重复执行的程序段部分。主要完成计算或操作任务,同时也包括对初始值的修改。 图4-8是计数循环控制结构,图4-9是条件控制结构。 二、循环结构的控制 1.计数循环结构 计数循环控制结构是依据计数器的值来决定循环次数,一般为减“1” 计数器,计数器减到“0”时,结束循环。计数器的初值是在初始化时设定。 MCS-51的指令系统提供了功能极强的循环控制指令: DJNZ Rn,rel ;工作寄存器作控制计数器 DJNZ direct,rel ;以直接寻址单元作控制计数器。 计数控制方法只有在循环次数已知的情况下才适用 2.条件控制结构 例 50ms延时程序。 延时程序与MCS-51指令执行时间有很大的关系。在使用12MHz晶振时,一个机器周期为1μs,执行一条DJNZ指令的时间为2μs。这时,可用双重循环方法写出下面如下的延时50ms的程序: DEL: MOV R7,#200 DEL1: MOV R6,#125 DEL2: DJNZ R6,DEL2 ;125*2=250μs DJNZ R7,DEL1 ;0.25ms*200=50ms RET 以上延时程序不太精确,它没有考虑到除“DJNZ R6,DEL2 ”指令外的其它指令的执行时间,如把其它指令的执行时间计算在内,它的延时时间为: (250+1+2)*200+1=50.301ms 如果要求比较精确的延时,可按如下修改: DEL: MOV R7,#200 DEL1: MOV R6,#122 NOP DEL2: DJNZ R6,DEL2 ;2*122+2=246μs DJNZ R7,DEL1 ;(246+1+1+2)*200+1=50.001ms RET 实际延迟时间为50.001ms,注意。软件延时程序,不允许有中断,否则将严重影响定时的准确性。 例 片内RAM中存放一批数据, 查找出最大值并存放于R3中。 设R0中存首地址,R2中存放字节 数,程序框图如图4-1所示。 MOV A,@ R0 MOV R3, A ;假设第一次取的数为最大值 INC R0 ;地址指针加1 DEC R2 ;字节数减1 LOOP: MOV A,@

文档评论(0)

502992 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档