LEDインターフェースは最初のものであり、マイクロコントローラーを使い始めている間にやろうとします。したがって、このチュートリアルでは、LEDを8051マイクロコントローラーとインターフェースし、LEDを点滅させるCプログラムを作成します。ATMELの8051ファミリの非常に人気のあるマイクロコントローラAT89S52を使用しました。
詳細に入る前に、マイクロコントローラーAT89S52について簡単に説明する必要があります。これは40ピンのマイクロコントローラーで、4つのポート(P0、P1、P2、P3)があり、各ポートには8つのピンがあります。ソフトウェアの観点からは、各ポートを8ビットレジスタと見なすことができます。 1つの入力/出力ラインを持つ各ピンは、すべてのピンを入力と出力に使用できることを意味します。つまり、センサーなどのデバイスからデータを読み取ったり、出力を出力デバイスに提供したりできます。一部のピンにはデュアル機能があります。これは、以下のピン図の括弧内に記載されています。割り込み、カウンター、タイマーなどのデュアル機能。
AT89S52には2種類のメモリがあります。1つは256バイトのメモリを備えたRAMで、もう1つは8kバイトのメモリを備えたEEPROM(電子的に消去可能でプログラム可能な読み取り専用メモリ)です。RAMはプログラムの実行中にデータを保存するために使用され、EEPROMはプログラム自体を保存するために使用されます。EEPROMは、プログラムを書き込むために使用したフラッシュメモリです。
回路図と説明
ポート1のピン1を使用してLEDを接続しています。では組み込みCプログラミング我々はP1_0を使用してポート1のPIN 1にアクセスすることができます。 11.0592MHzの周波数の水晶発振器をPIN19と18、つまりXTAL1とXTAL2に接続しました。水晶発振器はクロックパルスを生成するために使用され、クロックパルスはタイミング計算の平均を提供するために使用されます。これはすべてのイベントを同期するために必須です。これらのタイプの水晶は、コンピューターや時計など、ほとんどすべての最新のデジタル機器で使用されています。最も一般的に使用されている水晶は水晶です。これは共振発振回路であり、水晶を発振させるためにコンデンサが使用されているため、ここでは22pfのコンデンサを接続しました。詳細については、「共振回路」について読むことができます。
8051マイクロコントローラ89S52とインターフェイスするLEDの回路図を上の図に示します。 ピン31(EA)は、アクティブLowピンであるVccに接続されています。外部メモリを使用していない場合は、これをVccに接続する必要があります。ピン30(ALE)とピン29(PSEN)は、マイクロコントローラを外部メモリに接続するために使用され、ピン31は、グランドに接続されている場合、マイクロコントローラに外部メモリを使用するように指示します。外部メモリを使用していないため、Pin31をVccに接続しました。
ピン9(RST)はリセットPINであり、マイクロコントローラーをリセットするために使用され、プログラムは最初から再開されます。HIGHに接続するとマイクロコントローラをリセットします。RSTピンの接続には、標準のリセット回路、10kオームの抵抗、1uFのコンデンサを使用しました。
ここで興味深いのは、LEDを逆に接続することです。これは、マイクロコントローラーがLEDを点灯させるのに十分な電力を供給しないため、マイクロコントローラーPINで負のレッグを意味します。したがって、ここでは、ピンP1_0が1の場合のようにLEDが負のロジックで動作します。次に、LEDがオフに調整され、ピン出力が0の場合、LEDがオンになります。PIN出力が0の場合、グラウンドのように動作し、LEDが点灯します。
コードの説明
基本的なレジスタ定義を含めるために、ヘッダーREGX52.hが含まれています。埋め込みCには、int、char、unsigned int、floatなど、さまざまな種類の変数と定数があり、簡単に学ぶことができます。ここでは、0〜65535の範囲のunsigned intを使用しています。遅延を作成するために「forloop」を使用しているため、LEDはしばらくの間オン(P1_0 = 0、負のLEDロジック)およびオフ(P1_0 = 1)になります。 、負のLEDロジック)遅延時間。通常、「forループ」が1275回実行されると、1ミリ秒の遅延が発生するため、DELAYを作成するための「delay」関数を作成し、メインプログラム(main())から呼び出しました。main関数から「delay」関数を呼び出している間、DELAY時間(ミリ秒単位)を渡すことができます。プログラムでは、「While(1)」はプログラムが無限に実行されることを意味します。
「for」ループを1275回実行すると、1ミリ秒の遅延が発生することを簡単に説明します。
8051では、1マシンサイクルの実行に12個の水晶パルスが必要であり、11.0592MHzの水晶を使用しています。
したがって、1マシンサイクルに必要な時間:12 / 11.0592 = 1.085us
したがって、1275 * 1.085 = 1.3ms、1275回の「for」ループはほぼ1msの遅延を与えます。
「C」プログラムによって生成される正確な時間遅延は、オシロスコープ(CRO)から測定する場合、(j = 0; j <1275; j ++)がほぼ1msの遅延を与えるため、計算するのが非常に困難です。
したがって、LEDを8051マイクロコントローラーとインターフェースするだけで、マイクロコントローラーを使用したソフトウェア(プログラミング)を介してハードウェアと対話および制御できることを理解できます。また、プログラミングを通じてマイクロコントローラの各ポートとピンを操作することもできます。