1

8051 の遅延をコーディングする必要があります。それはできますが、遅延の周波数を計算する方法がわかりません。たとえば、私が行った遅延は次のとおりです。

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

しかし、私が知らないのは、この遅延が生成する周波数が何 Hz かということです。それを計算する方法はありますか?

4

2 に答える 2

2

各命令にかかるサイクル数とプロセッサの速度を知る必要があります。

一般に、プロセッサが1MHzで、NOPが2サイクルかかる場合、DJNZは3サイクルかかり(これらすべてを構成し、8051で何サイクルかかるかはわかりません)、D2からのループの最初のトリップは次のようになります。 7サイクル(2 + 2 + 3 = 7)で、1MHzプロセッサの場合、各サイクルは1マイクロ秒であるため、7 µsかかり、必要な遅延に達するまですすぎ、繰り返します。

DJNZがDELAYにジャンプするのではなく、D2にジャンプすることをお勧めします。8051にはあまり詳しくありませんが、それは単なる推測です。

また、MOV命令とRET命令を合計することを忘れないでください。

于 2012-08-26T22:39:47.320 に答える
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マシンサイクルが1マイクロ秒の場合、このルーチンには1000*1マイクロ秒=1ミリ秒の遅延がかかります。

于 2012-10-05T15:59:25.620 に答える