8051 の遅延をコーディングする必要があります。それはできますが、遅延の周波数を計算する方法がわかりません。たとえば、私が行った遅延は次のとおりです。
DELAY: MOV R2, 0FFH
D2: NOP
NOP
DJNZ R2, DELAY
RET
しかし、私が知らないのは、この遅延が生成する周波数が何 Hz かということです。それを計算する方法はありますか?
8051 の遅延をコーディングする必要があります。それはできますが、遅延の周波数を計算する方法がわかりません。たとえば、私が行った遅延は次のとおりです。
DELAY: MOV R2, 0FFH
D2: NOP
NOP
DJNZ R2, DELAY
RET
しかし、私が知らないのは、この遅延が生成する周波数が何 Hz かということです。それを計算する方法はありますか?
各命令にかかるサイクル数とプロセッサの速度を知る必要があります。
一般に、プロセッサが1MHzで、NOPが2サイクルかかる場合、DJNZは3サイクルかかり(これらすべてを構成し、8051で何サイクルかかるかはわかりません)、D2からのループの最初のトリップは次のようになります。 7サイクル(2 + 2 + 3 = 7)で、1MHzプロセッサの場合、各サイクルは1マイクロ秒であるため、7 µsかかり、必要な遅延に達するまですすぎ、繰り返します。
DJNZがDELAYにジャンプするのではなく、D2にジャンプすることをお勧めします。8051にはあまり詳しくありませんが、それは単なる推測です。
また、MOV命令とRET命令を合計することを忘れないでください。
理解のためのコメント付きの単純な遅延ルーチン
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ミリ秒の遅延がかかります。