angmall 发表于 2017-3-15 22:56 感谢大神 |
本帖最后由 angmall 于 2017-3-15 23:43 编辑
;例如MOV指令,执行这条指令需要一个机器周期。DJNZ指令,执行这条指令需要2个机器周期。 ;延时程序共有三层循环 ;一层循环n:R7*2 = 255*2 = 510个机器周期 (DJNZ 2个机器周期) ;二层循环m:R6*(n+3) = 255*513 = 130815个机器周期 (DJNZ 2个机器周期 + R5赋值 1个机器周期 = 3个机器周期) ;三层循环: R5*(m+3) = 4*130818 = 523272个机器周期 (DJNZ 2个机器周期 + R6赋值 1个机器周期= 3个机器周期) ;循环外: 5个机器周期 子程序调用 2个机器周期 + 子程序返回 2个机器周期 + R7赋值 1个机器周期 = 5个机器周期 ;延时总时间 = 三层循环 + 循环外 = 523272+5 = 523277个机器周期 ;计算公式:延时时间=[(2*R7+3)*R6+3]*R5+5 ORG 0000H LJMP MAIN ;意思是该条指令从ROM的0000H单元开始存放, ORG 0030H MAIN:MOV ..... ;意思是此指令从ROM的30H开始存放,该指令是为了绕开0003H,000BH,0013H,001BH.....等中断入口而设置. ORG指令属于伪指令,不控制程序执行,只是控制汇编过程,也就是说,ORG指令在汇编过程中,告诉紧随其后的指令存放的位置.所以在程序执行时,从0000H单元取出长转移指令LJMP MAIN后,自然会转移到主程序MAIN:MOV.......了. |