//say delay_ms = 1
void Delay(const unsigned int delay_ms)
{
unsigned int x,y;
for(x=0;x<delay_ms;x++)
{
for(y=0;y<120;y++);
}
}
上記の C コードを 8051 マイクロコントローラーに使用しようとしています。上記で生成された遅延時間を知りたいです。12MHzの発振器を使用しています。
//say delay_ms = 1
void Delay(const unsigned int delay_ms)
{
unsigned int x,y;
for(x=0;x<delay_ms;x++)
{
for(y=0;y<120;y++);
}
}
上記の C コードを 8051 マイクロコントローラーに使用しようとしています。上記で生成された遅延時間を知りたいです。12MHzの発振器を使用しています。
これは、時間遅延を生成するための本当にお粗末な方法です。
コンパイラによって生成されたアセンブラを見ると、使用しているプロセッサバリアントのデータシートから、リスト内の各命令に必要なクロックサイクルを調べることができます。これらを合計すると、このコードが生成する最小の遅延時間が得られます。
プロセッサで割り込みを有効にしている場合、遅延時間は、遅延中にトリガーされた割り込みハンドラの実行時間によって延長されます。これらは、各割り込みの頻度と処理要件に応じて、各遅延関数呼び出しに本質的にランダムな時間を追加します。
8051は、ユーザーがプログラム可能な遅延の後に信号を生成するように設計されたハードウェアタイマー/カウンターで構築されています。これらは割り込み処理の影響を受けないため(トリガーイベントの処理が別の割り込みソースによって遅延する可能性があることは事実です)、遅延に対してはるかに信頼性の高い期間を提供します。