Intel P8051マイクロコントローラ | |
| 歴史 | |
|---|---|
| 前任者 | インテル MCS-48 |
| 後継 | インテル MCS-151 |
Intel MCS-51(一般に8051と呼ばれる)は、組み込みシステムで使用するために1980年にIntelによって開発されたシングルチップマイクロコントローラ(MCU)シリーズです。Intel MCS-51命令セットの設計者はJohn H. Whartonです。[1] [2] Intelのオリジナルバージョンは1980年代から1990年代初頭にかけて人気があり、拡張バイナリ互換の派生版は今日でも人気があります。これは、プログラム命令とデータ用に別々のメモリ空間を持つ複雑な命令セットコンピュータです。
Intel のオリジナルの MCS-51 ファミリーは、その前身であるIntel MCS-48と同様に、 N 型金属酸化膜半導体 ( NMOS ) テクノロジを使用して開発されましたが、名前に文字 C が含まれる後続のバージョン (例: 80C51) は相補型金属酸化膜半導体 ( CMOS ) テクノロジを使用しており、NMOS の前身よりも消費電力が少なくなっています。これにより、バッテリー駆動のデバイスに適したものになりました。
このファミリは、1996年に拡張8ビットMCS-151と、8/ 16 / 32ビットのバイナリ互換マイクロコントローラのMCS-251ファミリで継続されました。[3] IntelはMCS-51、MCS-151、MCS-251ファミリの製造を終了しましたが、多くのベンダーが製造した拡張バイナリ互換派生製品は現在でも人気があります。派生製品の中には、デジタル信号プロセッサ(DSP)または浮動小数点ユニット(コプロセッサ、FPU)を統合しているものもあります。これらの物理デバイスの他に、いくつかの企業が、フィールドプログラマブルゲートアレイ(FPGA)または特定用途向け集積回路(ASIC)設計で使用するためのIPコアとしてMCS-51派生製品も提供しています。
重要な機能とアプリケーション

8051 アーキテクチャは、多くの機能 (中央処理装置(CPU)、ランダム アクセス メモリ(RAM)、読み取り専用メモリ(ROM)、入出力(I/O) ポート、シリアル ポート、割り込み制御、タイマー) を 1 つのパッケージで提供します。
- 8ビットの 算術論理ユニット(ALU)とアキュムレータ、8ビットレジスタ(特別な移動命令を備えた16ビットレジスタ1つ)、8ビットデータバスと2×16ビットアドレスバス、プログラムカウンタ、データポインタ、および関連する8/11/16ビット操作。したがって、主に8ビットマイクロコントローラです。
- 17個の命令、1ビットアキュムレータ、32個のレジスタ(4×8ビット、ビットアドレス可能)、および最大144個の特別な1ビットアドレス可能RAM変数(18×8ビット)を備えたブールプロセッサ[4]
- 乗算、除算、比較の命令
- それぞれ 8 つのレジスタを持つ4 つの高速切り替え可能なレジスタ バンク(メモリ マップ)
- オプションのレジスタバンク切り替えによる高速割り込み
- 優先度を選択できる割り込みとスレッド[5]
- 128 または 256バイトのオンチップ RAM (IRAM)
- デュアル 16 ビットアドレス バス。ハーバード アーキテクチャの 2 つのメモリ バスを使用して、 2 × 2 16のメモリ位置 (ROM (PMEM) と外部 RAM (XRAM) の各64 KB (65,536 位置)) にアクセスできます。
- オンチップ ROM (803x バリアントには含まれません)
- 4つの(3つのフル)8ビット双方向入出力ポート、ビットアドレス指定可能
- UART (シリアルポート)
- 2つの16ビットカウンタ/タイマー
- 省電力モード(一部の派生機種)
8051 コアの 1 つの特徴は、ブール処理エンジンを搭載していることです。これにより、ビットレベルのブール論理演算を、選択した内部レジスタ、ポート、および選択したRAM位置で直接かつ効率的に実行できます。もう 1 つの特徴は、バンク選択可能な4 つの作業レジスタ セットを搭載していることです。これにより、割り込みサービス ルーチンを開始および終了するためのコンテキスト スイッチの実行に必要な時間が大幅に短縮されます。8051 は 1 つの命令でレジスタ バンクを切り替えることができるため、重要なレジスタを RAM に転送するという時間のかかるタスクを回避できます。
UART と、必要に応じてタイマーが構成されると、プログラマーは、UART によって最後のビットがシフトアウトされるたびに送信シフト レジスタを補充したり、いっぱいになった受信シフト レジスタを空にしたり (データを別の場所にコピー) する単純な割り込み ルーチンを記述するだけで済みます。その後、メイン プログラムは、8 ビット データをスタックに読み書きするだけで、シリアル読み取りと書き込みを実行します。
派生的な特徴
2013年現在でも、多くの大手チップメーカーによって新たな派生製品が開発されており、 IAR Systems、Keil、Altium Tasking [6] [検証失敗][アップデート]などの主要なコンパイラサプライヤは継続的にアップデートをリリースしている。
MCS-51 ベースのマイクロコントローラには、通常、1 つまたは 2 つのUART、2 つまたは 3 つのタイマー、128 バイトまたは 256 バイトの内部データRAM (そのうち 16 バイトはビット アドレス可能)、最大 128 バイトのI/O、512 バイトから 64 KB の内部プログラム メモリ、および場合によっては外部データ空間にある拡張データ RAM (ERAM) が含まれます。外部 RAM と ROM は、データ バスとアドレス バスを共有します。オリジナルの 8051 コアは、マシン サイクルあたり 12 クロック サイクルで動作し、ほとんどの命令は 1 つまたは 2 つのマシン サイクルで実行されました。12 MHz のクロック周波数では、8051 は 1 サイクル命令を毎秒 100 万個、2 サイクル命令を毎秒 50 万個実行できました。強化された8051コアは現在一般的に使用されており、マシンサイクルあたり6、4、2、または1クロック(「1T」と表記)で動作し、クロック周波数は最大100MHzであるため、1秒あたりさらに多くの命令を実行できます。すべてのSilicon Labs、一部のDallas(現在はMaxim Integratedの一部)、およびいくつかのAtmel (現在はMicrochipの一部)デバイスには、シングルサイクルコアが搭載されています。[7] [8] [9]
8051 の派生製品には、電圧低下検出機能付きの内蔵リセット タイマー、オンチップ オシレーター、自己プログラム可能なフラッシュ ROMプログラム メモリ、内蔵外部 RAM、追加の内部プログラム ストレージ、 ROM 内のブートローダーコード、不揮発性データ ストレージEEPROM 、 I 2 C、SPI、およびUSBホスト インターフェイス、CANまたはLINバス、ZigbeeまたはBluetooth無線モジュール、PWMジェネレーター、アナログコンパレーター、アナログ - デジタルコンバーターおよびデジタル - アナログ コンバーター、RTC、追加のカウンターとタイマー、インサーキットデバッグ機能、より多くの割り込みソース、追加の省電力モード、より多くのまたはより少ないパラレル ポートなどが含まれる場合があります。Intel は、ROM 内にBASICインタープリターを搭載し、RAM にロードされたユーザー プログラムを実行できる マスク プログラム バージョン 8052AH-BASIC を製造しました。
MCS-51ベースのマイクロコントローラは、過酷な環境にも適応しています。高温対応の例として、-40 °C~+250 °CのTekmos TK8H51ファミリー[10]や、-55 °C~+225 °C(+300 °Cで最大1年間動作)のHoneywell HT83C51などがあります。 [11]宇宙船で使用するための耐放射線性MCS-51マイクロコントローラは、例えばCobham(旧Aeroflex)のUT69RH051 [12]やNIIETの1830VE32(ロシア語:1830ВЕ32)などから入手できます。[13]
一部の工学部では、8051マイクロコントローラをマイクロコントローラ入門コースで使用している。[14] [15] [16] [17]
家族の命名規則
Intel の最初の MCS-51 マイクロコントローラは 8051 で、4 KB の ROM と 128 バイトの RAM を搭載していました。87 で始まるバリアントには、ユーザー プログラム可能な EPROM が搭載されており、UV 消去可能な場合もあります。3 番目の文字が C のバリアントは、ある種のCMOSです。8031 と 8032 は ROM なしのバージョンで、RAM は 128 バイトと 256 バイトです。最後の桁はメモリ サイズを示します。たとえば、8052 は 8 KB の ROM、87C54 は 16 KB の EPROM、87C58 は 32 KB の EPROM で、いずれも 256 バイトの RAM を搭載しています。
メモリアーキテクチャ
MCS-51には、内部RAM、特殊機能レジスタ、プログラムメモリ、外部データメモリの4つの異なるタイプのメモリがあります。これらに効率的にアクセスするために、一部のコンパイラ[18]は、内部RAM、内部RAMへのシングルビットアクセス、特殊機能レジスタ、選択された(8で割り切れる)特殊機能レジスタへのシングルビットアクセス、プログラムRAM、標準の8ビットレジスタの1つを使用したレジスタ間接アクセスを使用してアクセスされる外部RAM、および16ビット間接アクセスレジスタを使用したレジスタ間接外部RAMアクセスの7種類ものメモリ定義を使用します。
8051 の命令セットは、メモリ (データと命令) が分離されたハーバード アーキテクチャとして設計されています。プログラム メモリからフェッチされたコードのみを実行でき、プログラム メモリに書き込む命令はありません。ただし、IC から出るバスには単一のアドレスとデータ パスがあり、フォン ノイマン アーキテクチャバスに非常に似ています。
ほとんどの 8051 システムは命令セットを尊重しており、フラッシュ メモリなどに新しい実行可能プログラムをダウンロードするにはカスタマイズされた機能が必要です。
内部RAM
内部 RAM (IRAM) には、アドレス 0 から 0xFF までの 8 ビットのアドレス空間があります。0x00 から 0x7F までの IRAM には、直接アドレス指定可能な 1 バイト レジスタが 128 個含まれており、命令の一部である 8 ビットの絶対アドレスを使用してアクセスできます。また、IRAM には間接的にアクセスすることもできます。アドレスは R0 または R1 にロードされ、または構文を使用してメモリにアクセスする@R0か、 /および/演算@R1を使用してスタック ポインター SP を介してスタック メモリとしてアクセスします。
PUSHPOP*CALLRET
オリジナルの 8051 には 128 バイトの IRAM しかありません。8052 では 0x80 から 0xFF までの IRAM が追加されましたが、これは間接的にしかアクセスできません (例: スタック スペースとして使用)。ほとんどの 8051 クローンにも 256 バイトの IRAM があります。
代わりに、IRAM アドレス 0x80~0xFF への直接アクセスは、アキュムレータ A、B、キャリー ビット C、および制御、ステータスなどのその他の特殊レジスタが配置されている特殊機能レジスタ (SFR) にマップされます。
特殊機能レジスタ
特殊機能レジスタ (SFR) は、IRAM と同じアドレス空間の 0x80 ~ 0xFF に配置されており、IRAM の下位半分と同じ命令を使用して直接アクセスされます。スタック ポインタ SP を介して@R0または@R1によって間接的にアクセスすることはできません。これらのアドレスへの間接アクセスは、代わりに IRAM の後半部分にアクセスします。
特殊機能レジスタ (SFR) には、アキュムレータ A (または ACC、E0) と B (F0)、プログラム ステータス ワード (または PSW、D0) 自体、および 16 ビット データ ポインタ DPTR (82、DPL として、83、DPH として) が含まれます。これらに加えて、その他の特殊機能レジスタの小さなコアとして、A8 の割り込み有効 IE と B8 の割り込み優先順位 IP、I/O ポート P0 (80)、P1 (90)、P2 (A0)、P3 (B0)、シリアル I/O 制御 SCON (98) とバッファー SBUF (99)、CPU/電源制御レジスタ PCON (87) があります。タイマー 0 と 1 の制御レジスタ (88 の TCON) と動作モード レジスタ (89 の TMOD)、16 ビット タイマー 0 (8A の TL0、8C の TH0)、およびタイマー 1 (8B の TL1、8D の TH1) は、8051 のすべてのバージョンに存在します。その他のアドレスはバージョンに依存します。特に、8052 のタイマー 2 のレジスタ、制御レジスタ T2CON (C8)、16 ビット キャプチャ/ラッチ (CA の RCAP2L、CB の RCAP2H)、およびタイマー 2 (CC の TL2、CD の TH2) は、8051 には含まれていません。
レジスターウィンドウ
IRAM の 0x00 から 0x1F までの 32 バイトには、8 つのレジスタ R0 ~ R7 がマップされる 4 つの 8 バイトレジスタ ウィンドウ用のスペースが含まれています。現在アクティブなウィンドウは、プログラム ステータス ワードに含まれる 2 ビットのアドレスによって決まります。
ビットレジスタ
IRAM 位置 0x20~0x2F の 16 バイト (128 ビット) には、128 個の 1 ビット レジスタ用のスペースが含まれており、ビット レジスタ 00~7F として個別にアドレス指定できます。
残りのビット レジスタは、80 ~ FF としてアドレス指定され、16 個の特殊機能レジスタ 80、88、90、98、...、F0、F8 (アドレスが 8 の倍数) にマップされるため、アキュムレータ A、B、プログラム ステータス ワード PSW を構成するビットが含まれます。レジスタ ウィンドウ アドレスは PSW のビット 3 と 4 であり、それ自体はそれぞれビット レジスタ D3 と D4 としてアドレス指定できます。一方、PSW のビット 7 にあるキャリー ビット C (または CY) は、ビット レジスタ D7 としてアドレス指定できます。
プログラムメモリ
プログラム メモリ (PMEM、ただし IRAM や XRAM ほど一般的ではない) は、最大 64 KB の読み取り専用メモリで、別のアドレス空間のアドレス 0 から始まります。使用されているチップの特定のモデルに応じて、オンチップまたはオフチップになります。プログラム メモリは読み取り専用ですが、8051 の一部のバリアントではオンチップ フラッシュ メモリが使用され、システム内またはアプリケーション内でメモリを再プログラムする方法が提供されています。
コードに加えて、または命令によって取得されるルックアップ テーブルなどの読み取り専用データをプログラム メモリに格納することもできます。アドレスは、8 ビットのアキュムレータと 16 ビットのレジスタ (PC または DPTR) の合計として計算されます。
MOVC A,@A+DPTRMOVC A,@A+PC
特殊なジャンプ命令と呼び出し命令(AJMPおよびACALL)は、ローカル(同じ2KB以内)プログラムメモリにアクセスするコードのサイズをわずかに削減します。[19]
64KBを超えるコードが必要な場合、一般的なシステムではコードをバンクスイッチし、汎用I/Oで上位アドレスビットを選択します。一部の8051コンパイラ[18]では、ページングされたコードに自動的にアクセスする機能を備えています。これらのシステムでは、割り込みベクターとページングテーブルはコードの最初の32KBに配置され、常に存在します。
外部データメモリ
外部データ メモリ (XRAM) は、3 番目のアドレス空間で、これもアドレス 0 から始まり、16 ビットのアドレス空間を許可します。オンチップまたはオフチップにすることもできます。「外部」である理由は、MOVX(move external) 命令を使用してアクセスする必要があるためです。8051 の多くのバリアントには、標準の 256 バイトの IRAM と数キロバイトの XRAM がチップ上に含まれています。
XRAM の最初の 256 バイトには、、、、および命令を使用してアクセスできます。64 KB 全体には、およびを使用してアクセスできます。16 ビット アドレスでは、プログラマが 16 ビット インデックス レジスタをロードする必要があります。このため、16 ビット アドレスによる RAM アクセスは大幅に遅くなります。
MOVX A,@R0MOVX A,@R1MOVX @R0,AMOVX @R1,AMOVX A,@DPTRMOVX @DPTR,A
一部のCPU [20]では、8ビット間接アドレスで任意の8ビット汎用レジスタを使用することができます。
この機能の使用を可能にするために、256バイトを超える内部RAMを持つ、または外部RAMにアクセスできない一部の8051互換マイクロコントローラ[20]は、内部RAMを外部RAMのようにアクセスし、256バイトページの上位アドレスを設定できる特別な機能レジスタ(例:PDATA)を備えています。これは、汎用I/Oピンを設定することでRAMアドレスの上位バイトをページングできるMCS8051モードをエミュレートします。
64KBを超えるRAMが必要な場合、一般的なシステムではRAMをバンクスイッチし、汎用I/Oで上位アドレスビットを選択します。一部の8051コンパイラ[18]では、ページデータに自動的にアクセスするための準備が行われています。
レジスター
8051 でメモリ マップされていない唯一のレジスタは、16 ビットのプログラム カウンタ (PC) です。これは、次に実行する命令のアドレスを指定します。相対分岐命令は、PC に追加される 8 ビットの符号付きオフセットを提供します。
8 つの汎用レジスタ R0 ~ R7 には、他のレジスタよりも 1 バイト短い命令でアクセスできます。これらは、0x00 ~ 0x1F の間の IRAM にマップされます。その範囲の 8 バイトだけが常に使用され、PSW の 2 つのバンク選択ビットによって決定されます。
以下は、特殊機能レジスタ空間にメモリマップされる 8051 のレジスタの一部です。
- スタックポインタ、SP (0x81)
- これは、サブルーチン呼び出しおよび戻り命令で使用される 8 ビット レジスタです。スタックは上方向に大きくなります。SP は、値をプッシュする前に増加し、値をポップした後に減少します。
- データポインタ、DP (0x82–83)
- これは、PMEM および XRAM にアクセスするために使用される 16 ビット レジスタです。
- プログラムステータスワード、PSW (0xD0)
- これには、ビット番号別に重要なステータス フラグが含まれています。
- パリティ P。アキュムレータ A のパリティ (ビットのXOR ) を返します。
- ユーザー定義、UD。ソフトウェアによる読み取りおよび書き込みが可能で、ハードウェアによる影響はありません。
- オーバーフロー フラグ、OV。加算によって符号付きオーバーフローが発生する場合に設定されます。
- レジスタ選択 0、RS0。レジスタ バンクの下位ビット。0x08 または 0x18 のバンクが使用されている場合に設定します。
- レジスタ選択 1、RS1。レジスタ バンクの上位ビット。0x10 または 0x18 のバンクが使用されている場合に設定します。
- フラグ 0、F0。ソフトウェアによって読み取りおよび書き込みが可能であり、ハードウェアによる影響はありません。
- 補助キャリー、AC。加算によりビット 3 からビット 4 へのキャリーが生成される場合に設定されます。
- キャリー ビット、C。ビット計算用の汎用レジスタ、または「ブール アキュムレータ」としてよく使用されます。
- アキュムレータ、A (0xE0)
- このレジスタはほとんどの命令で使用されます。
- Bレジスタ(0xF0)
- これは、乗算命令と除算命令のアキュムレータの拡張として使用されます。
256 個の単一ビットは直接アドレス指定可能です。これらは、0x20~0x2F の 16 個の IRAM 位置と、0x80、0x88、0x90、...、0xF8 の 16 個の特殊機能レジスタです。これらのバイトの任意のビットは、さまざまな論理演算や条件分岐によって直接アクセスできます。
PSW には、一般的な負のフラグ (N)やゼロのフラグ (Z)が含まれていないことに注意してください。前者の場合、アキュムレータの最上位ビットは、ビット アドレス指定可能な SFR であるため、直接アドレス指定できます。後者の場合、アキュムレータがゼロかどうかに応じてジャンプする明示的な命令があります。また、2 つのオペランドの比較とジャンプ操作もあります。
パリティ (P) ビットは、パリティを含むシリアル モードを実装するためによく使用されます。これをサポートするために、標準の MCS51 UART は9 ビットを送信できます。
マイクロアーキテクチャ
Intel MCS8051のマイクロアーキテクチャは独自のものですが、公開されている[21]機能からその動作がわかります。これはマルチサイクルプロセッサです。MCS8051はほとんどの命令に12クロックサイクル[21]を使用しました。多くの命令はアキュムレータを使用します。[21]対照的に、ほとんどの互換コンピュータは、乗算命令と除算命令を除いて、1〜3サイクルで命令を実行します。はるかに高速であることが、ほとんどのアプリケーションでMCS8051に代わってこれらが採用された主な理由です。
各割り込みには4つの優先度があります。[21]各優先度内では、デバイスの割り込みは固定優先度になります。[21]
命令セット
命令はすべて 1 ~ 3 バイトの長さで、最初のオペコード バイトとそれに続く最大 2 バイトのオペランドで構成されます。
オペコード バイトの1 ⁄ 4 ( x 0 ~x 3 ) は、不規則なオペコードに使用されます。
オペコード バイトの3 ⁄ 4 ( x 4 ~x F ) は、12 個のオペランドを持つ 16 個の基本 ALU 命令に割り当てられます。オペコードの 最下位ニブルは、次のようにプライマリ オペランドを選択します。
- x 8~x F : レジスタ直接、R0~R7。
- x 6~x 7 : レジスタ間接、@R0 または @R1。
- x 5 : メモリ直接、次のバイトは IRAM または SFR の場所を指定します。
- x 4 : 即値、後続のバイトは 8 ビット定数を指定します。オペランドが宛先 (、)の場合、または演算に即値ソース (、) がすでに含まれている場合は、代わりにアキュムレータが使用されることを指定します。
INC operandDEC operandMOV operand,#dataCJNE operand,#data,offset
最上位ニブルは、次のように操作を指定します。すべてがすべてのアドレッシング モードをサポートするわけではありません。特に、プライマリ オペランドが書き込まれる場合、即時モードは使用できません。命令ニーモニックは、宛先、ソースオペランドの順序を使用します。
- 0年:
INC operand - 指定されたオペランドを増分します。即時モード (オペコード 0x04) は、アキュムレータを指定します。
INC A - 1年:
DEC operand - 指定されたオペランドを減分します。即時モード (オペコード 0x14) は、アキュムレータを指定します。
DEC A - 2歳:
ADD A,operand - オペランドをアキュムレータ A に追加します。オペコード 0x23 ( 「左回転」ですが、実際は左シフト) は と考えることができます。
RL AADD A,A - 3歳:
ADDC A,operand - オペランドと C ビットをアキュムレータに追加します。オペコード 0x33 ( 、キャリーを介して左に回転) は と考えることができます。
RLC AADDC A,A - 4歳:
ORL A,operand - オペランドをアキュムレータに論理和します。この演算の 2 つのメモリ宛先形式、およびは、オペコード 0x43 と 0x42 で指定されます。
ORL address,#dataORL address,A - 5歳:
ANL A,operand - オペランドをアキュムレータに論理積します。この演算の 2 つのメモリ宛先形式、およびは、オペコード 0x53 と 0x52 で指定されます。
ANL address,#dataANL address,A - 6歳:
XRL A,operand - オペランドをアキュムレータに排他的論理和します。この演算の 2 つのメモリ宛先形式、およびは、オペコード 0x63 と 0x62 で指定されます。
XRL address,#dataXRL address,A - 7歳:
MOV operand,#data - 即値をオペランドに移動します。即値モード (オペコード 0x74) は、アキュムレータを指定します。
MOV A,#data - 8歳:
MOV address,operand - 値を IRAM または SFR レジスタに移動します。即時モード (オペコード 0x84) は、オペコード 0x75 と重複するため、この操作には使用されません。
- 9歳:
SUBB A,operand - オペランドをアキュムレータから減算します。この演算は借入であり、借入なしで減算することはできません。
- Ay:
MOV operand,address - IRAM または SFR レジスタから値を移動します。即値はソースとしてのみ機能するため、即値モード (オペコード 0xA4) は使用されません。メモリ直接モード (オペコード 0xA5) は 0x85 と重複するため使用されません。
- による:
CJNE operand,#data,offset - オペランドを即値と比較し
#data、等しくない場合はPC +オフセットにジャンプします。即値モードとメモリ直接モード (オペコード 0xB4 と 0xB5) では、オペランドをアキュムレータと比較します。等しい場合は比較してジャンプする命令がないことに注意してください。CJNE A,operand,offsetCJE - Cy :
XCH A,operand - アキュムレータとオペランドを交換します。この操作では即時モード (オペコード 0xC4) は使用されません。
- D y :
DJNZ operand,offset - オペランドをデクリメントし、結果がゼロ以外の場合はPC +オフセットにジャンプします。即時モード (オペコード 0xD4) とレジスタ間接モード (0xD6、0xD7) は使用されません。
- えい:
MOV A,operand - オペランドをアキュムレータに移動します。この操作 (オペコード 0xE4) では、オペコード 0x74 と重複するため、即時モードは使用されません。
- F y :
MOV operand,A - アキュムレータをオペランドに移動します。即時モード (オペコード 0xF4) は効果がないため使用されません。
ADD、、ADDCおよび命令のみがSUBBPSW フラグを設定します。INC、、DECおよび論理命令は設定しません。命令は、オペランド 1 −オペランド 2CJNEから得られる借用に対して、C ビットのみを変更します。
不規則な命令は、より制限されたアドレス指定モードを持つ 64 個のオペコードと、通常の命令の適用されないモードから抽出されたいくつかのオペコードで構成されます。
- 85
MOV address,address2 つの IRAM または SFR レジスタ間を直接移動します。- A5
- 未使用
- B5
CJNE A,address,offsetアキュムレータを IRAM または SFR レジスタと比較し、等しくない場合はPC +オフセットにジャンプします。- D6~7
XCHD A,@R0–1オペランドの下位ニブルを交換します。
(ショート ジャンプ)オペコードSJMPは、符号付き相対オフセット バイト オペランドを受け取り、次の命令のアドレスを基準にして制御をそこに転送します。/ オペコードAJMPはACALL、オペコード バイトの最上位 3 ビットと次のバイトを組み合わせて、PC レジスタの下位 11 ビットを置き換えるために使用される 11 ビットの宛先を指定します (PC レジスタの上位 5 ビットはそのまま残ります)。より大きなアドレスの場合、LJMPおよびLCALL命令では 16 ビットの宛先が許可されます。
8051 が人気を博している理由の 1 つは、単一ビットに対する操作の範囲です。ビットは常に絶対アドレスで指定され、レジスタ間接またはインデックスによるアドレス指定はありません。単一ビットに対して操作する命令は次のとおりです。
SETB bit、、:指定されたビットを設定、クリア、または補完するCLR bitCPL bitJB bit,offset: ビットが設定されている場合はジャンプJNB bit,offset: ビットがクリアならジャンプJBC bit,offset: ビットが設定されている場合はジャンプし、ビットをクリアしますMOV C,bit, : 指定されたビットをキャリービットに移動する、またはその逆MOV bit,CORL C,bit, : または、キャリービットのビット(またはその補数)ORL C,/bitANL C,bit, : そして、キャリービットのビット(またはその補数)ANL C,/bit
ビットオペランドは の形式で記述されますaddress.number。キャリーフラグはビットアドレス指定可能なプログラムステータスワードのビット 7 であるため、 、、命令は、、 と同等の短縮形になります。
SETB CCLR CCPL CSETB PSW.7CLR PSW.7CPL PSW.7
プログラミング
8051 にはさまざまな高水準プログラミング言語コンパイラがあります。8051 にはいくつかのCコンパイラが用意されており、そのほとんどは、プログラマが各変数を 6 種類のメモリのどこに保存するかを指定できるようにし、複数のレジスタ バンクやビット操作命令などの 8051 固有のハードウェア機能へのアクセスを提供します。市販の C コンパイラも多数あります。[22] Small Device C Compiler (SDCC) は、人気のあるオープン ソースの C コンパイラです。[23] C++、Forth、[24] [25] [26] [27] BASIC、Object Pascal、Pascal、PL/M、Modula-2 などの他の高水準言語も8051 で使用できますが、 C やアセンブリほど広く使用されていません[28]。
IRAM、XRAM、および PMEM (読み取り専用) はすべてアドレス 0 を持つため、8051 アーキテクチャの C コンパイラは、特定のデータ (PMEM 内の定数、または IRAM 内の高速アクセスが必要な変数など) を格納する場所を示すコンパイラ固有のプラグマまたはその他の拡張機能を提供します。データは 3 つのメモリ空間のいずれかに格納される可能性があるため、通常は、ポインター タイプをメモリ空間を含むように制限するか、ポインターとともにメタデータを格納することによって、ポインターが参照するメモリを決定できるメカニズムが提供されます。
関連プロセッサ


インテルは2007年3月にMCS-51製品ラインの製造を中止しました。[29] [30]しかし、他のベンダーからは強化された8051製品やシリコン知的財産が定期的に追加されています。
8051 の前身である8048 は、最初のIBM PCのキーボードで使用され、キー入力をシリアル データ ストリームに変換して、コンピューターのメイン ユニットに送信しました。Intel 8049 は、Sinclair QLで同様の役割を果たしました。8048 とその派生製品は、今日でも[アップデート]基本モデルのキーボードに使用されています。
8031は、内部プログラム メモリ (読み取り専用メモリ、ROM)を持たない、オリジナルの 8051 の縮小版でした。このチップを使用するには、8031 が取得して実行するプログラムを含む外部 ROM を追加する必要がありました。8031 ベースの設計では、EA ピンの通常の状態によって 8051 の内部 ROM が無効になるため、8051 チップは ROM なしの 8031 として販売される可能性があります。ベンダーが 8051 を 8031 として販売する理由は、8051 の ROM に欠陥のあるコードがある、または単に 8051 が過剰供給で 8031 が不足しているなど、さまざまです。

8044 (およびROMなしの8344とEPROM付きの8744)は、8051コアにSDLCコントローラを追加しました(特にBitbusアプリケーション用)。 [ 31]
8052はオリジナルの 8051 の拡張バージョンで、内部 RAM が 128 バイトではなく 256 バイト、ROM が 4 KB ではなく 8 KB、3 番目の 16 ビット タイマーを備えています。最新の 8051 互換マイクロコントローラのほとんどには、これらの機能が搭載されています。
8032 は、内部 ROM プログラム メモリがない点を除けば、8052 と同じ機能を備えていました。
8751 は、4 KB ROM の代わりに 4 KB EPROM を搭載した 8051 です。不揮発性メモリの種類を除いて、これらは同一です。この部品は、ダイの上部に透明な石英窓が付いたセラミック パッケージで提供されており、紫外線を使用してEPROM を消去できます。関連部品: 8752 には 8 KB EPROM、8754 には 16 KB EPROM、8758 には 32 KB EPROM が搭載されています。
80C537 (ROM なし) と80C517 (8 KB ROM) は、自動車業界向けに設計された CMOS バージョンです。機能強化には、主に新しい周辺機器と強化された周辺機器が含まれます。 80C5x7 には、フェイルセーフ メカニズム、アナログ信号処理機能、強化されたタイマー機能、および 32 ビット演算周辺機器があります。 その他の機能は次のとおりです。
- 256バイトのオンチップRAM
- 256 直接アドレス指定可能なビット
- 外部プログラムおよびデータメモリは最大64KBまで拡張可能
- 12 の多重入力を備えた 8 ビット A/D コンバータ
- 演算ペリフェラルは、16×16→32ビット乗算、32/16→16ビット除算、32ビットシフト、32ビット正規化演算を実行できます。
- プログラムと外部データメモリの間接アドレス指定に、1つではなく8つのデータポインタを使用
- 拡張監視施設
- 9つのI/Oポート
- 個別のボーレートジェネレータを備えた2つの全二重シリアルインターフェース
- 4つの優先レベル割り込みシステム、14の割り込みベクトル
- 3つの省電力モード
- インテル MCS-51セカンドソース
-
D87C51の
-
富士通MBL8031AH
-
MHS S-80C31
-
OKI M80C31
-
フィリップスPCB80C31
-
シグネティクスSCN8031
-
テミック TS80C32X2
デリバティブベンダー
20 社を超える独立メーカーが MCS-51 互換プロセッサを製造しています。[引用が必要]
MCS-51と互換性のある他のICやIPは、アナログ・デバイセズ[32]、インテグラル・ミンスク[33]、 クリスタル・キエフ[34]、NIIETヴォロネジ[13]によって開発されています。
知的財産としての利用
現在でも8051は個別部品として入手可能だが、シリコンIPコアとして使われることがほとんどだ。[35]ハードウェア記述言語ソースコード( VHDLやVerilogなど)またはFPGA ネットリスト形式で入手可能なこれらのコアは、 USBフラッシュドライブから洗濯機、チップ上の複雑な無線通信システムまで、さまざまな製品の組み込みシステムに統合されるのが一般的だ。設計者は、 ARM Cortex-Mシリーズ、MIPS、BA22などの32ビットプロセッサに比べてサイズが小さく、消費電力が低いため、8051シリコンIPコアを使用する。 [要出典]
最新の 8051 コアは、以前のパッケージ バージョンよりも高速です。設計の改善により、8051 のパフォーマンスが向上しましたが、オリジナルの MCS 51 命令セットとの互換性は維持されています。オリジナルの Intel 8051 は、マシン サイクルあたり 12 クロック サイクルで動作し、ほとんどの命令は 1 または 2 マシン サイクルで実行されました。一般的な最大クロック周波数は 12 MHz で、これらの古い 8051 は 1 秒あたり 100 万のシングル サイクル命令、または 50 万の 2 サイクル命令を実行できました。対照的に、強化された 8051 シリコン IP コアは現在、マシン サイクルあたり 1 クロック サイクルで動作し、クロック周波数は最大 450 MHz です。つまり、8051 互換プロセッサは1 秒あたり4 億 5000 万の命令を実行できることになります。
8051ベースのMCU

- 上記:MC94F、MC95F、MC96F シリーズ
- 専用のUSB 2.0インターフェースを備えたCypress PSoC CY8C3xxxxシリーズ[36]
- インフィニオン: XC800
- マキシム・インテグレーテッド(旧ダラス):DS80シリーズ等[37]
- メンターグラフィックス:SYNTILL8がメンター向けに設計したM8051EWなど[38]
- メガウィン: 74、82、84、86、87、89 シリーズ
- マイクロチップ(旧アトメル):AT89C51、AT89S51、AT83C5134など[9]
- NXP: NXP700 および NXP900 シリーズ
- シーメンス 8 ビット: SAB 8035/8048、SAB 80512/80532、SAB 80513、SAB 8352-2/8352-5、SAB 80(C)515/80(C)535、SAB 83515、SAB 80(C)517/80(C)537、SAB 8051A/8031A、SAB 8052A/8032A、SAB 8052B/8032B、SAB80C52/80C32、SDA 30C164-2 (ROM なし) [39]
- シーメンス 16 ビット: C166 ファミリー
- Silergy電力計測SoC : 71M6511、71M6513、71M6531、71M6533、71M6534、71M6542、71M6543 [40]エネルギー測定SoC : 78M6631、78M6618、78M6613、78M6612 [41]
- シリコンラボ:C8051シリーズおよびEFM8シリーズ[7]
- シリコンストレージテクノロジー:FlashFlex51 MCU(SST89E52RD2、SST89E54RD2、SST89E58RD2、SST89E516RD2SST89V52RD2、SST89V54RD2、SST89V58RD2、SST89V516RD2)[42]
- STCマイクロ:STC89C51RC、STC90C51RC、STC90C58AD、STC10F08XE、STC11F60XE、STC12C5410AD、STC12C5202AD、STC12C5A60S2、STC12C5628AD、STC15F100、STC15F204EA、STC15F2K60S2、STC15F4K60S2、STC15F101W、STC15F408AD、STC15W104、STC15W408S、STC15W201S、STC15W408AS、STC15W1K16SおよびSTC15W4K56S4シリーズ[43]
- Texas Instruments CC111x、CC24xx、CC25xx ファミリの RF SoC
- WCH(南京秦恒微電子):CH551、CH552、CH554、CH546、CH547、CH548、CH558、CH559 [44]
デジタル信号プロセッサ(DSP)のバリエーション
16ビットのデジタル信号プロセッサ(DSP)(例えば、MP3やVorbisのコーディング/デコーディング用)を追加し、最大6億7500万命令/秒(MIPS)[45]の処理能力と統合されたUSB 2.0インターフェース[46]を備えたモデルや、知的財産[47]を備えたモデルがいくつか存在します。
強化された8ビットバイナリ互換マイクロコントローラ: MCS-151ファミリー
1996年にインテルは、最大6倍高速なMCS-151ファミリを発表しました。[3]これは8051と完全にバイナリおよび命令セット互換性があります。8051とは異なり、MCS-151はパイプラインCPUで、16ビットの内部コードバスを持ち、6倍の速度です。MCS-151ファミリもインテルによって製造中止になりましたが、バイナリ互換および部分的に強化されたバージョンが広く入手可能です。
8/16/32ビットバイナリ互換マイクロコントローラ: MCS-251ファミリ
16 MB ( 24 ビット) のアドレス空間と 6 倍高速な命令サイクルを備えた80251 8/16/32 ビット マイクロコントローラは、 1996 年に Intel によって導入されました。 [3] [48]これは 8 ビット 8051 として動作し、24 ビットのリニア アドレッシング、8 ビット ALU、8 ビット命令、16 ビット命令、限定された 32 ビット命令セット、16 個の 8 ビット レジスタ、16 個の 16 ビット レジスタ (8 個の 16 ビット レジスタはどの 8 ビット レジスタとも空間を共有せず、8 個の 16 ビット レジスタには 16 ビット レジスタごとに 2 つの 8 ビット レジスタが含まれます)、および 10 個の 32 ビット レジスタ (2 [49]
拡張命令[50](プログラマーズガイド[51]も参照)と、より高性能な派生型[52]があり、知的財産(IP)としても利用可能である。[53] 3段パイプラインである。MCS-251ファミリもIntelによって製造中止となったが、多くのメーカーからバイナリ互換の派生型や部分的に機能強化された派生型が広く入手可能である。
参照
- DS80C390
- 日立 HD44780 - XRAM 互換インターフェースを備えた LCD コントローラ
- インテルPL/M-51
- SDK-51 システム設計キット
参考文献
- ^ John Wharton (1980 年 5 月)。「Intel MCS-51 シングルチップ マイクロコンピュータ ファミリの紹介」。Intel Corporation。アプリケーション ノート AP-69。
- ^ Intel 8051 マイクロプロセッサ オーラル ヒストリー パネル(PDF)、コンピュータ歴史博物館、2008 年 9 月 16 日、2012 年 2 月 25 日時点のオリジナル(PDF)からアーカイブ、 2018 年11 月 17 日取得。
- ^ abc 「Intel MCS 151 および MCS 251 マイクロコントローラ」。datasheets.chipdb.org。
- ^ John Wharton (1980 年 5 月)。「Intel MCS-51 ブール処理機能の使用」(PDF) 。Intel Corporation。アプリケーション ノート AP-70。2016年 3 月 3 日のオリジナル(PDF)からアーカイブ。
- ^ 「8051 チュートリアル: 割り込み」。2012 年 12 月 28 日時点のオリジナルよりアーカイブ。2012 年 12 月 21 日閲覧。
- ^ 「TASKING」。www.tasking.com。
- ^ ab 「8ビットマイクロコントローラ – 8ビットMCU – EFM8」。Silicon Labs 。 2021年6月21日閲覧。
- ^ 「サイト検索」。Maxim Integrated。2021年6月24日時点のオリジナルよりアーカイブ。2021年6月21日閲覧。
- ^ ab 「8051 MCU」。Microchip Technology 。 2021年6月21日閲覧。
- ^ 「TK80H51 250 °C マイクロコントローラ」。Tekmos Inc. 2017年8月20日時点のオリジナルよりアーカイブ。 2017年8月23日閲覧。
- ^ 「高温対応 83C51 マイクロコントローラ」(PDF)。Honeywell 。2017年8 月 23 日閲覧。
- ^ 「マイクロコントローラとマイクロプロセッサ」。Cobham Semiconductor Solutions。2017年8月23日時点のオリジナルよりアーカイブ。2017年8月23日閲覧。
- ^ ab "Микроконтроллеры" [マイクロコントローラー] (ロシア語)。ヴォロネジ: OAO「NIIET」。 2017 年 8 月 22 日のオリジナルからアーカイブ。2017 年8 月 22 日に取得。
- ^ 「ダウンロードリンク Youtube: ELEC2700 – 8051 超音波レーダー」。2017年8月22日時点のオリジナルよりアーカイブ。2017年8月22日閲覧。
- ^ Ghostarchive および Wayback Machine にアーカイブされています: 「ELEC2700 Assignment 1 2014: 1D Pong」。YouTube。
- ^ 「ELEC2700 – コンピュータエンジニアリング2(ニューカッスル大学の教科書)」Zookal。2017年7月27日時点のオリジナルよりアーカイブ。2017年8月22日閲覧。
- ^ 「ELEC2700 課題3: 超音波レーダー」(PDF) . JustAnswer . 2012年6月29日. 2023年4月30日閲覧。
- ^ abc Keil C51 ユーザーズマニュアル。Keil, a division of ARM Inc. 2021 . 2021年5月17日閲覧。
- ^ ACALL は 2 バイトのサブルーチン呼び出し命令で、同じ 2 KB のメモリ セグメント内の場所にアクセスできます。絶対メモリ アドレスは、PC の上位 5 ビットと命令によって定義された 11 ビットによって形成されます。
- ^ ab 「Silergy 71M6513 データシート」。Silergy 電力計測 IC。 Silergy Corp. 2021 年5 月 17 日閲覧。
- ^ abcde MCS-51 マイクロコントローラ ファミリ ユーザーズ マニュアル(PDF) . 発行番号 121517: Intel. 1994 . 2021 年5 月 17 日閲覧。
{{cite book}}: CS1 メンテナンス: 場所 (リンク) - ^ Han-Way Huang. 「C8051 を使用した組み込みシステム設計」p. 238。
- ^ Lewin ARW Edwards (2006)。『組み込みエンジニアになりたいなら: コンサルタントから企業階層まで、組み込みエンジニアリングガイド』p. 51。
- ^ ブラッドフォード・J・ロドリゲス。「CamelForth/8051」。
- ^ Brad Rodriguez. 「前進パート 7: 8051 向け CamelForth」。
- ^ 「8051 SwiftX Forth 開発」。2015 年 9 月 24 日時点のオリジナルよりアーカイブ。
- ^ 「MPE VFX Forth 7 クロスコンパイラ」。2014 年 10 月 23 日時点のオリジナルよりアーカイブ。
- ^ Agarwal, Tarun (2014-09-16). 「アセンブリ言語での8051プログラミングの詳細な説明」。ElProCus - 工学部の学生のための電子プロジェクト。 2024年10月21日閲覧。
- ^ Ganssle, Jack (2006-05-29). 「Intel が撤退、MCS-51 を廃止」
- ^ 「MCS 51、MCS 251、MCS 96 マイクロコントローラ製品ライン、Intel 186、Intel386、Intel486 プロセッサ製品ライン、および i960 32 ビット RISC プロセッサ、PCN 106013-01、製品の製造中止、改訂理由: 主要なマイルストーン情報を追加し、変更の説明を改訂」(PDF)。Intel。2006 年 5 月 2 日。
- ^ 「8044AH/8344AH/8744AH オンチップシリアル通信コントローラ搭載高性能 8 ビットマイクロコントローラ」(PDF)。Intel。1994 年 10 月。
- ^ 「MicroConverter、62 kBフラッシュMCUを内蔵した12ビットADCおよびDAC」(PDF)。analog.com 。 2014年5月28日時点のオリジナル(PDF)からアーカイブ。2023年4月30日閲覧。
- ^ "Микроконтроллеры и супервизоры питания Серии 1880; 1881; 1842; 588; 1345; 5518АП1ТБМ" [Microcontrollers and Power Supervisors Series 1880; 1881年。 1842年。 588; 1345; 5518AP1TBM] (ロシア語)。ミンスク:OAO「インテグラル」。 2017 年 1 月 1 日のオリジナルからアーカイブ。2017 年1 月 6 日に取得。
- ^ "Однокристальные микро-эвм" [シングルチップ マイクロコンピューター] (ロシア語)。キエフ: クリスタル。 2012 年 5 月 30 日のオリジナルからアーカイブ。2017 年1 月 5 日に取得。
- ^ Hussaini (2019年8月20日). 「なぜ8051を使わなければならないのか?古すぎるのではないのか?」Technobyte . 2023年7月5日閲覧。
- ^ 「PSoC 3 - Infineon Technologies」。Infineon 。2022年9月21日時点のオリジナルよりアーカイブ。2023年5月20日閲覧。
- ^ 「DS80C320 高速/低電力マイクロコントローラ - Maxim Integrated」。www.maximintegrated.com 。 2021年6月21日閲覧。
- ^ 「Syntill8 - 製品」www.syntill8.com . 2021年6月21日閲覧。
- ^ 「SDA30C164 データシート」(PDF) 。www.semiee.com。2022年6月17日時点のオリジナル(PDF)からアーカイブ。2022年5月15日閲覧。
- ^ 「Silergy Metering ICs」。 Silergy Corp. 2021年5月12日閲覧。
- ^ 「Silergy エネルギー測定 IC」。 Silergy Corp. 2021 年5 月 12 日閲覧。
- ^ datasheetq.com. 「89V54RD2 データシート PDF ダウンロード - シリコン ストレージ テクノロジー」www.datasheetq.com 。 2020 年 1 月 18 日閲覧。
- ^ 「STC マイクロコントローラ---STCmicro Technology Co,.Ltd」www.stcmicro.com 。 2017 年 2 月 19 日閲覧。
- ^ 「サイトインデックス - 南京秦恒微電子有限公司」wch-ic.com . 2021年6月21日閲覧。
- ^ 「TI、8051を搭載した家庭用および車載用の低コストで高性能なオーディオDSPを発表」。2016年11月13日時点のオリジナルよりアーカイブ。2013年5月6日閲覧。
- ^ 「Atmel AT85C51SND3 Audio DSP Data Sheet with USB 2.0」(PDF) 。 2023年4月30日閲覧。
- ^ Salim, AJ; Othman, M.; Ali, MA Mohd ( 2006 年 10 月 5 日)。「Xilinx FPGA での 8051 と DSP の統合」。2006 IEEE 国際半導体エレクトロニクス会議。pp. 562–566。doi :10.1109 / SMELEC.2006.380694。ISBN 0-7803-9730-4。S2CID 21616742 – IEEE Xplore 経由。
- ^ Kenneth J Ayala (2005). 8051 マイクロコントローラ 。Thomson Delmar Learning。ISBN 978-1-4018-6158-2。
- ^ 「MCSÉ 251 アーキテクチャの概要」(PDF) . chipdb.org . 2023 年4 月 30 日閲覧。
- ^ 「Temic TSC80251 アーキテクチャ」(PDF)。
- ^ 「Atmel TSC80251 プログラマーズ ガイド」(PDF)。2016 年 3 月 4 日のオリジナル(PDF)からアーカイブ。2013年 5 月 6 日に閲覧。
- ^ 「DQ80251 32ビットマイクロコントローラ」(PDF) . DCD .
- ^ 「R80251XC 32 ビット マイクロコントローラ」(PDF) . Evatronix .[リンク切れ ]
さらに読む
- 書籍
- Mazidi、McKinlay、Mazidi (2012)。8051マイクロコントローラ: システムアプローチ。ピアソン。648 ページ。ISBN 978-0-13-508044-3。
- シュルツ、トーマス (2008)。Cと 8051 (第 4 版)。トーマス W. シュルツ。464 ページ。ISBN 978-0-9783995-0-4。
- Steiner, Craig (2005)。『8051/8052 マイクロコントローラ: アーキテクチャ、アセンブリ言語、およびハードウェア インターフェイス』。Universal-Publishers。348 ページ。ISBN 978-1-58112-459-0。
- Calcutt、Cowan、Parchizadeh (2000)。8051マイクロコントローラ: ハードウェア、ソフトウェア、およびアプリケーション。Elsevier。329 ページ。ISBN 978-0-340-67707-0。
- Axelson, Jan (1994)。『マイクロコントローラ アイデア ブック: 8052-BASIC マイクロコントローラを使用した回路、プログラム、アプリケーション』。Lakeview research LLC。277 ページ。ISBN 978-0-9650819-0-0。
- ペイン、ウィリアム (1990 年 12 月 19 日) [1990]。8051ファミリ用組み込みコントローラ FORTH (ハードカバー)。ボストン: アカデミック プレス。528 ページ。ISBN 978-0-12-547570-9。
- インテル
- MCS-51 マイクロコントローラ ファミリ ユーザーズ マニュアル、Intel、1994 年、発行番号 121517。
- MCS-51 マクロ アセンブラ ユーザーズ ガイド、Intel、発行番号 9800937。
- 8 ビット組み込みコントローラ、Intel、1991 年、発行番号 270645-003。
- マイクロコントローラ ハンドブック、Intel、1984 年、発行番号 210918-002。
- 8051 マイクロコントローラの暫定アーキテクチャ仕様および機能説明、Intel、44 ページ、1980 年。
- その他
- Hennig-Roleff, Werner (1993-02-01) [1988]. 「HEX.DOC: EASM51 - HEX フォーマット (elektor Assembler)」. SIM51 . 1.04 (ドイツ語)。2017-08-11 にオリジナルからアーカイブ。2021-12-08に取得。[1][2] (EASM形式のほかに、HEX.DOCファイルでは、Intel、Motorola、Tektronix、MOS Technology、elektorのさまざまなHEXファイル形式について説明しています。)
外部リンク
- 8051 マイクロコントローラの完全なチュートリアル
- 8051 のチュートリアルとシミュレータのソース Web サイト
- 基本的な 8051 インターフェース回路
- オープンソース VHDL 8051 実装 (Oregano Systems)
