8051マイクロコントローラのレジスタバンクとスタックメモリ割り当て

問題を排除するために楽器を試してください





汎用レジスタ(R0〜R7)の集合は、1バイトのデータを受け入れるレジスタバンクと呼ばれます。銀行登録簿はの一部です 組み込みのRAMメモリ マイクロコントローラ、およびプログラム命令を格納するために使用されます。各マイクロコントローラはさまざまなメモリバンクで構成され、各バンクレジスタはストレージの場所を認識するための一意のアドレスで構成されています。

8051年に銀行を登録する

8051年に銀行を登録する

8051年に銀行を登録する



8051マイクロコントローラー PSW(プログラムステータスワード)レジスタによって選択されるBank0、Bank1、Bank2、Bank3などの4つのレジスタバンクで構成されます。これらのレジスタバンクは8051マイクロコントローラの内部RAMメモリに存在し、マイクロコントローラがプログラムされるときにデータを処理するために使用されます。


レジスターバンクの切り替え



デフォルトでは、8051マイクロコントローラーはレジスタバンク0でパワーアップされており、プログラムステータスワード(PSW)を使用して、他のバンクに切り替えることができます。 PSWの2ビットは、レジスタバンク間の切り替えに使用されます。これらの2ビットは、ビットアドレス指定可能な命令SETBおよびCLRによってアクセスされます。

PSWのRS1とRS0の可能な組み合わせに基づいて、レジスタバンクがそれに応じて変更されます。つまり、RS1とRS0が0の場合、バンク0が選択されます。同様に、Bank1、2、3は、RS1とRS0の値に従って選択されます。

8051マイクロコントローラのスタックメモリ割り当て

スタックは、変数のすべてのパラメーターを一時的に保持するために割り当てられたランダムアクセスメモリ(RAM)の領域です。スタックは、関数が正しく返されるように、関数が呼び出される順序を思い出させる役割も果たします。関数が呼び出されるたびに、それに関連付けられているパラメーターとローカル変数がスタック(PUSH)に追加されます。関数が戻ると、パラメーターと変数がスタックから削除されます(「POP」)。これが、プログラムの実行中にプログラムのスタックサイズが継続的に変化する理由です。


スタックへのアクセスに使用されるレジスタは、スタックポインタレジスタと呼ばれます。スタックポインタは、スタックを指すために使用される小さなレジスタです。スタックメモリに何かをプッシュすると、スタックポインタが増加します。

8051マイクロコントローラのスタックメモリ割り当て

8051マイクロコントローラのスタックメモリ割り当て

上図に示すように、8051マイクロコントローラーの電源を入れると、スタックポインターに含まれる値はデフォルトで07になります。 「PUSH」操作を実行すると、スタックポインタアドレスが増加し、別のレジスタにシフトされます。この問題を回避するには、プログラムを開始する前に、スタックポインタに別のアドレス位置を割り当てる必要があります。

PUSH操作

「PUSH」は、任意のレジスタから値を取得し、「PUSH」操作を使用してスタックポインタの開始アドレス(00h)に格納するために使用されます。そして、次の「PUSH」では、+ 1をインクリメントし、スタックポインタの次のアドレス(01h)に値を格納します。

スタックのPUSH操作

スタックのPUSH操作

PUSH操作とは(先入れ先出し)

例:PUSH操作用のアセンブリ言語のWAP

0000h
MOV 08h、#21h
MOV 09h、#56h
プッシュ00h
プッシュ01h
終わり

POP操作

スタックポインタの最大アドレスから他のレジスタのアドレスに値を配置するために使用されます。この「POP」を再度使用すると、1ずつ減少し、任意のレジスタに格納されている値が「POP」として与えられます。

スタックでのPOP操作

スタックでのPOP操作

POP操作は「後入れ先出し」を意味します。

000H
MOV 00H、#12H
MOV 01H、#32H
POP 1FH
POP 0EH
終わり

8051マイクロコントローラのレジスタ

加算または減算のいずれかの演算を実行すると、これらの演算をメモリ内で直接実行することはできないため、レジスタを使用して実行されます。さまざまな種類があります 8051マイクロコントローラのレジスタ

これらのレジスタは、操作に基づいて2つのタイプに分類されます。

•汎用レジスタ

•特殊機能レジスタ

汎用レジスタ

この記事の前半で説明したように、4つの異なるバンクレジスタがあり、各バンクには8つのアドレス指定可能な8ビットレジスタがあり、一度にアクセスできるバンクレジスタは1つだけです。ただし、フラグレジスタの銀行レジスタの番号を変更することで、このペーパーで前述した他の銀行レジスタにアクセスできます。 8051の割り込みコンセプト

特殊機能レジスタ

アキュムレータ、レジスタB、データポインタ、PCON、PSWなどの特殊機能レジスタは、アドレス80H〜FFHで製造時に所定の目的で設計されており、この領域をデータまたはプログラムの保存目的で使用することはできません。これらのレジスタは、ビットアドレスレジスタとバイトアドレスレジスタによって実装できます。

特殊機能レジスタの種類

8051は、合計32のI / Oラインがある4つの入力/出力関連の特殊機能レジスタで構成されています。特殊機能レジスタは、I / Oラインから読み取られた値と8051の動作を制御する特殊機能レジスタを制御します。補助特殊機能レジスタは8051に直接接続されていませんが、実際には、これらのレジスタがない場合は8051です。正常に動作しません。 8051のレジスタセットについて以下に説明します。

8051マイクロコントローラーのレジスタセット

レジスタに固定定数値を設定することをレジスタセットと呼びます。値は、命令セットを使用してレジスタに設定されます。 8051は、「ハーバード」アーキテクチャのCISC命令に従います。ザ・ CISCは、複雑な命令セットコンピューティングの略です 。 8051マイクロコントローラのさまざまなタイプの命令には次のものがあります。

  1. 算術命令
  2. 条件付きの説明
  3. 呼び出しとジャンプの手順
  4. ループ命令
  5. 論理命令
  6. 地金の指示

1.算術命令

算術命令は、次のようないくつかの基本的な操作を実行します。

  • 添加
  • 減算
  • 乗算
  • 分割
8051マイクロコントローラーの算術命令

8051マイクロコントローラーの算術命令

例:

a。添加:

組織0000h
MOV R0、#03H //値3を移動するレジスタR0 //
MOV A、#05H //アキュムレータAの値5を移動します//
A、00Hを追加//アキュムレータ値「5」を0にして、アキュムレータに格納//
終わり

b。減算:

組織0000h
MOV R0、#03H //値3を移動するレジスタR0 //
MOV A、#05H //アキュムレータAの値5を移動します//
SUBB A、03H // A = 5-3最終値は2アキュムレータAに格納されます//
終わり

C.乗算:

組織0000h
MOV R0、#03H //値3を移動するレジスタR0 //
MOV A、#05H //アキュムレータAの値5を移動します//
MUL A、03H // A = 5 * 3の最終値は15で、アキュムレータAに格納されます//
終わり

D.部門:

組織0000h
MOV R0、#03H //値3を移動するレジスタR0 //
MOV A、#15H //アキュムレータAの値5を移動します//
DIV A、03H // A = 15/3最終値は5アキュムレータAに格納されます//
終わり

2.条件付きの指示

CPUは、シングルビットステータスをチェックすることにより、条件に基づいて命令を実行できます。バイトステータスは、次のような条件付き命令と呼ばれます。

ビットアドレス可能レジスタのシングルビットステータスを確認するには

JB-以下の場合はジャンプ

JNB-上にない場合はジャンプ

キャリービットの状態を確認するには

JC-キャリーフラグの場合はジャンプ

JNC-キャリーがない場合はジャンプ

アキュムレータのステータスを0または1で確認するには

JZ-ゼロフラグの場合はジャンプ

JNZ-ゼロでない場合はジャンプ

これはすべて、8051マイクロコントローラに設定されたレジスタとそれらのスタックメモリ割り当てに関するものです。この記事が、各トピックに付随するいくつかの非常に興味深いプログラムとともに、トピックに関するいくつかの重要な洞察を提供したことを願っています。また、私たちに助けを求めることができます マイクロコントローラのコーディング そしてまたについて マイクロコントローラーに関する最新プロジェクト 。