2012-08-26 69 views
1

我需要编写一个8051的延迟。我可以做到这一点,但我不知道如何计算延迟的频率。例如,这是我做的延迟:测量延迟8051

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

但我不知道的是这个延迟产生多少Hz的频率。有什么计算方法吗?

+0

你需要知道你的8051有多少mhz –

+0

你可能从[编写延迟子程序](http://stackoverflow.com/q/5134836/203667)上阅读这个类似的问题开始。 – jschmier

回答

2

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

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

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

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晶体是1micro sec.So这个例程需要1000 * 1microsec = 1mili秒的延迟。