- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 程序如下: 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 R2中的分支转移参量乘3是由于长跳转指令LJMP要占3个单元。本例程序可位于64KB程序存储器空间的任何区域。 4.3.7 循环程序设计 程序中含有可以反复执行的程序段,称循环体。例如,求100个数的累加和,没必要连续安排100条加法指令,用一条加法指令使其循环执行100次。因此可缩短程序长度和程序所占的内存单元数量更少,使程序结构紧凑。 * * 1.循环程序的结构 主要由以下四部分组成。 (1)循环初始化 完成循环前的准备工作。例如,循环控制计数初值的设置、地址指针的起始地址的设置、为变量预置初值等。 (2)循环处理 完成实际的处理工作,反复循环执行的部分,故又称循环体。 (3)循环控制 在重复执行循环体的过程中,不断修改循环控制变量,直到符合结束条件,就结束循环程序的执行。 * * 循环结束控制方法分为循环计数控制法和条件控制法。 (4)循环结束 这部分是对循环程序执行的结果进行分析、处理和存放。 2.循环结构的控制 分为循环计数控制结构和条件控制结构。 图4-8是计数循环控制结构,图4-9是条件控制结构。 * * * 图4-8 计数循环控制结构 图4-9 条件控制结构 * (1)计数循环控制结构 依据计数器的值来决定循环次数,一般为减1计数器,计数器减到“0”时,结束循环。计数器初值在初始化设定。 MCS—51指令系统提供了功能极强的循环控制指令: DJNZ Rn,rel ;以工作寄存器作控制计数器 DJNZ direct,rel ;以直接寻址单元作控制计数器 例如,计算n个数据的和,计算公式为 。 如直接按公式编写程序,则n=100时,需编写连续的100次加法。这样程序将太长,并且n可变时,将无法编写出程序。 * * 公式要改写为用程序实现的形式,用下式表示 程序框图见图4-10。 * 图4-10 求数据和的程序框图 * 【例4-12】 求n个单字节无符号数xi的和,xi按i顺序存放在AT89S51单片机内部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 R4,A INC R0 CLR A * * ADDC A,R3 MOV R3,A DJNZ R2,LOOP ;判加法循环次数是否已到? END 用寄存器R2作为计数控制变量,R0作为变址单元,用它来寻址xi。 一般来说,循环工作部分中的数据应该用间接方式来寻址,如这里用:ADD A,@R0 计数控制只有在循环次数已知的情况下才适用。循环次数未知,不能用循环次数来控制,往往需要根据某种条件来判断是否应该终止循环。 * * 内部数据区清零 ORG 0000H Zero: mov R0,#30H mov R7,#10 mov A,#00H Loop: mov @R0,A inc R0 djnz R7,Loop sjmp $ END 内部RAM 30H R0 23H 98H 0A8H 0FDH … 0 0 0 0 0 0 10个 * (2)条件控制结构 结构见图4-9。循环控制中,设置一个条件,判是否满足该条件,如满足,则循环结束。如不满足该条件则循环继续。 【例4-13】 一串字符,依次存放在内部RAM从30H单元开始的连续单元中,字符串以0
文档评论(0)