测量延迟8051

时间:2012-08-26 22:34:02

标签: assembly microcontroller 8051

我需要为8051编码延迟。我可以这样做,但我不知道的是如何计算延迟的频率。例如,这是我做的延迟:

DELAY: MOV R2, 0FFH
D2:    NOP
       NOP
       DJNZ R2, DELAY
       RET

但我不知道这个延迟会产生多少Hz的频率。有没有计算它的方法?

2 个答案:

答案 0 :(得分:2)

您需要知道每条指令需要多少个周期,以及处理器的速度。

一般来说,如果你的处理器是1MHz,而NOP需要2个周期,那么DJNZ需要3个周期(使所有这些都完成,不知道它们在8051上有多少个周期),然后第一次通过循环,从D2:将是7个周期(2 + 2 + 3 = 7),使用1MHz处理器,每个周期为1微秒,因此需要7μs,冲洗并重复,直到达到所需的延迟。

注意,您可能不希望DJNZ跳转到DELAY,而是D2。真的不熟悉8051,但这只是猜测。

另外不要忘记添加MOV和RET指令。

答案 1 :(得分:0)

一个简单的延迟例程,带有用于理解的注释

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

如果12mhz晶体的一个机器周期为1微秒,那么这个程序需要1000 * 1microsec = 1毫秒的延迟。