我要编码8051的延迟。我可以这样做,但我不知道如何计算延迟的频率。例如,以下是我所做的延迟:
DELAY: MOV R2, 0FFH
D2: NOP
NOP
DJNZ R2, DELAY
RET但是我不知道的是这个延迟产生了多少赫兹的频率。有没有办法计算一下呢?
发布于 2012-08-27 06:39:47
你需要知道每条指令需要多少周期,以及你的处理器的速度。
通常,如果您的处理器是1 1MHz,并且NOP需要2个周期,那么DJNZ需要3个周期(将所有这些组合在一起,不知道这些周期在8051上需要多少个周期),然后第一次循环,从D2:将是7个周期(2 +2+3= 7),对于1 1MHz处理器,每个周期是1微秒,所以这将需要7µs,漂洗和重复,直到您达到您想要的延迟。
注意,您可能不希望DJNZ跳转到延迟,而是D2。对8051真的不熟悉,但这只是一个猜测。
另外,不要忘记添加MOV和RET指令。
发布于 2012-10-05 23:59:26
一个简单的延迟例程,带有注释以便于理解
delay_1_ms: ;calling this routine take 2 mc ;tmc=2
MOV R7,#250 ;mov rn,#data take 1 mc(machine cycle);tmc=2+1
DJNZ R7,$ ;djnz take 2mc for each time exicuted;tmc=3+(2*250)
MOV R7,#247 ;mov rn,#data take 1 mc ;tmc=503+1
DJNZ R7,$ ;djnz take 2mc for each time exicuted.;tmc=504+(247*2)
RET ;ret takes 2mc so total machine cycle=998+2=1000mc如果12 sec晶体的一个机器周期是1微秒,则此例程需要1000*1microsec=1mili秒延迟。
https://stackoverflow.com/questions/12134458
复制相似问题