作者SmallBeeWayn (喵喵叫的蜜蜂猫)
看板ASM
标题Re: [问题] 请教几个8051的问题
时间Fri Oct 22 22:03:04 2010
※ 引述《LinuxC (死工程师 = = )》之铭言:
: 最近再复习8051
: 但因为年代有点久远
: 而且现在看的书也并不是当初用的那本
: 所以书上有些看不太懂
: DELAY20MS:
: MOV R6,#40
: D1: MOV R5,#248
: DJNZ R5,$
: DJNZ R6,D1
: RET
: 请问$是什麽意思呢?
: 是要跳跃到哪里去了?
: 请问如何精确地写出要延迟20MS秒呢?
: 这当中要怎麽推算呢?
: 程式码为何给R6 资料值40
: 然後又给R5 资料值248
虽然没看人用过"$",不过望文生义,应该指的是自己
这段程式码用C写的话就是这样子
for(R6=40;R6<>0;R6--) {
for(R5=248;R5<>0;R5--) ;
}
指令 Byte Cycles
MOV Rn,#data 2 1
DJNZ Rn,rel 2 2
RET 1 2
MOV R6,#40 1
D1: MOV R5,#248 1
DJNZ R5,$ 2 *248
DJNZ R6,D1 2 *40
RET
所以这段程式码共计要 1+(1+2*248)*40+2=19883 Cycles
对於 1 Cycle = 1 us 的CPU而言就是19.883ms
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.116.180.163
1F:推 LinuxC:哇呜 谢谢 ^^ 10/23 13:29
2F:→ narcissusli: '$' 很常用,也很好用啊 10/26 19:08