- 1、本文档共79页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4章汇编语言程序设计简介(修改)
4.2 汇编语言程序设计 例 6 设在内部 RAM的BLOCK单元开始处有长度为 LEN个的无符号数据块, 试编一个求和程序, 并将和存入内部 RAM的 SUM单元(设和不超过 8 位)。 BLOCK EQU 20H LENEQU 30H SUM EQU 40H START: CLR A ; 清累加器A MOV R2, #LEN; 数据块长度送R2 MOV R1, #BLOCK ; 数据块首址送R1 LOOP: ADD A, @R1 ; 循环加法 INC R1; 修改地址指针 DJNZ R2, LOOP ; 修改计数器并判断 MOV SUM, A; 存和 RET 二、 多重循环 循环体中还包含着一个或多个循环结构,即双重或多重循环。 例3、设8031使用12MHz晶振,试设计延迟100ms的延时程序。 内循环 外循环 解:延时程序的延迟时间就是该程序的执行时间,通常采用MOV 和DJNZ二指令。 T = 12 / fosc = 12 / (12×106)= 1us ORG 1000H DELAY:MOV R2,#CTS ;T = 1us LOOPS:MOV B,#CTR ;T = 1us LOOPR:DJNZ B,LOOPR ;2T = 2us DJNZ R2,LOOPS ;2T = 2us END 内循环延时: (1 + 2 × CTR)T = 500us(假设) 则CTR = 250 实际延时:[1 + 2 × 250] × 1us = 501us ? 外循环延时:T +(501 + 2T)× CTS = 100ms = 100 000us 所以 , CTS = 198.8 取 199 实际延时:[1 + (501 + 2)×199] = 1000.98ms DELAY:MOV R2,#CTS ;T = 1us LOOPS:MOV B,#CTR ;T = 1us LOOPR:DJNZ B,LOOPR ;2T = 2us DJNZ R2,LOOPS ;2T = 2us END 例 7 10 秒延时程序。 延时程序与 MCS - 51 执行指令的时间有关, 如果使用 6 MHz晶振, 一个机器周期为 2 μs, 计算出一条指令以至一个循环所需要的执行时间, 给出相应的循环次数, 便能达到延时的目的。10 秒延时程序如下: DELAY: MOV R5, #100 DEL0: MOV R6, #200 DEL1: MOV R7, #248 DEL2: DJNZ R7, DEL2 DJNZ R6, DEL1 DJNZ R5, DEL0 RET 上例程序中采用了多重循环程序, 即在一个循环体中又包含了其它的循环程序, 这种方式是实现延时程序的常用方法。 使用多重循环时, 必须注意: (1) 循环嵌套, 必须层次分明, 不允许产生内外层循环交叉。 (2) 外循环可以一层层向内循环进入, 结束时由里往外一层层退出。 (3) 内循环可以直接转入外循环, 实现一个循环由多个条件控制的循环结构方式。 例 8 在外部 RAM中, BLOCK开始的单元中有一无符号数据块, 其个数为 LEN个字节。试将这些无符号数按递减次序重新排列, 并存入原存储区。 ORG 1000H START: MOV DPTR, #BLOCK; 置地址指针 MOV P2, DPH ; P2作地址指针高字节 MOV R7, #LEN ; 置外循环计数
文档评论(0)