Embedded-systems-es-register-bank

提供:Dev Guides
移動先:案内検索

組み込みシステム-銀行/スタックの登録

8051マイクロコントローラーには、合計128バイトのRAMがあります。 これらの128バイトのRAMの割り当てについて説明し、スタックおよびレジスタとしての使用を調べます。

8051のRAMメモリ空間の割り当て

8051内の128バイトのRAMには、アドレス00〜7FHが割り当てられます。 それらはメモリの場所として直接アクセスでき、次のように3つの異なるグループに分けられます-

  • 00Hから1FHまでの32バイトは、レジスタバンクとスタック用に確保されています。
  • 20Hから2FHの位置までの16バイトは、ビットアドレス指定可能な読み取り/書き込みメモリ用に確保されています。 30Hから7FHまでの80バイトは、読み取りおよび書き込みストレージに使用されます。 スクラッチパッド*と呼ばれます。 これらの80個のロケーションRAMは、8051プログラマーがデータとパラメーターを保存する目的で広く使用されています。

ROMスペースの割り当て

8051の銀行の登録

合計32バイトのRAMが、レジスタバンクとスタック用に確保されます。 これらの32バイトは4つのレジスタバンクに分割され、各バンクには8つのレジスタR0〜R7があります。 0〜7のRAMロケーションは、R0〜R7のバンク0に対して確保されます。R0はRAMロケーション0、R1はRAMロケーション1、R2はロケーション2など、バンクのR7に属するメモリロケーション7まで0。

レジスタの2番目のバンクR0〜R7は、RAMロケーション08から始まり、ロケーションOFHに進みます。 R0〜R7の3番目のバンクは、メモリロケーション10Hから始まり、17Hのロケーションに進みます。 最後に、RAMロケーション18H〜1FHがR0〜R7の4番目のバンク用に確保されます。

デフォルトのレジスタバンク

RAMロケーション00〜1Fが4つのレジスタバンク用に確保されている場合、8051の電源投入時にR0〜R7のどのレジスタバンクにアクセスできますか? 答えはレジスタバンク0です。つまり、8051をプログラミングするときに、R0〜R7という名前で0〜7のRAMロケーションにアクセスします。 これらのRAMの場所は、メモリの場所ではなく、R0〜R7などの名前で参照する方がはるかに簡単だからです。

レジスタバンクを切り替える方法

8051の電源投入時のレジスタバンク0はデフォルトです。 PSWレジスタを使用して他のバンクに切り替えることができます。 PSWのD4およびD3ビットは、ビットアドレス指定可能な命令SETBおよびCLRによってアクセスできるため、目的のレジスタバンクを選択するために使用されます。 たとえば、「SETB PSW.3」はPSW.3 = 1を設定し、バンクレジスタ1を選択します。

RS1 RS2 Bank Selected
0 0 Bank0
0 1 Bank1
1 0 Bank2
1 1 Bank3

スタックとその操作

8051のスタック

スタックは、データやメモリアドレスなどの情報を一時的に保存するためにCPUが使用するRAMのセクションです。 CPUは、限られた数のレジスタを考慮して、このストレージ領域を必要とします。

スタックへのアクセス方法

スタックはRAMのセクションであるため、CPU内にそれを指すレジスタがあります。 スタックへのアクセスに使用されるレジスタは、スタックポインタレジスタと呼ばれます。 8051のスタックポインターは8ビット幅で、00〜FFHの値を取ることができます。 8051が初期化されると、SPレジスタには値07Hが含まれます。 これは、RAMロケーション08がスタックに使用される最初のロケーションであることを意味します。 スタックへのCPUレジスタの格納操作は PUSH と呼ばれ、スタックの内容をCPUレジスタに戻すことを POP と呼びます。

スタックにプッシュする

8051では、スタックポインター(SP)は、スタックの最後に使用された場所を指します。 データがスタックにプッシュされると、スタックポインター(SP)が1増加します。 PUSHが実行されると、レジスタの内容がスタックに保存され、SPが1増加します。 レジスタをスタックにプッシュするには、RAMアドレスを使用する必要があります。 たとえば、命令「PUSH 1」はレジスタR1をスタックにプッシュします。

スタックからポップする

スタックの内容を特定のレジスタにポップすることは、プッシュするプロセスの逆です。 すべてのポップ操作で、スタックの最上位バイトが命令で指定されたレジスタにコピーされ、スタックポインターが1回減少します。