インテル MCS-51

インテル8051
歴史
前任者インテル MCS-48
後継インテル MCS-151

インテルMCS-51(一般に8051と呼ばれる)は、1980年にインテルが組み込みシステム向けに開発したシングルチップ・マイクロコントローラ(MCU)シリーズです。インテルMCS-51命令セットの設計者はジョン・H・ウォートンです。[ 1 ] [ 2 ]インテルのオリジナル版は1980年代から1990年代初頭にかけて人気を博し、拡張バイナリ互換の派生版は現在でも人気を博しています。MCS-51は、プログラム命令とデータに別々のメモリ空間を持つ 複雑な命令セットを持つコンピュータです。

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)を統合したものもあります。これらの物理デバイス以外にも、複数の企業がMCS-51派生製品をフィールドプログラマブルゲートアレイ(FPGA)や特定用途向け集積回路(ASIC)設計 用のIPコアとして提供しています。

重要な機能とアプリケーション

i8051マイクロアーキテクチャ

8051 アーキテクチャは、1 つのパッケージで多くの機能 (中央処理装置(CPU)、ランダム アクセス メモリ(RAM)、読み取り専用メモリ(ROM)、入出力(I/O) ポート、シリアル ポート、割り込み制御、タイマー) を提供します

8051コアの特徴の一つは、ブール処理エンジンを搭載していることです。これにより、ビットレベルのブール論理演算を、選択された内部レジスタ、ポート、および選択されたRAMロケーションに対して直接かつ効率的に実行できます。もう一つの特徴は、バンク選択可能な4つのワーキングレジスタセットを搭載していることです。これにより、割り込みサービスルーチンの開始と終了に必要なコンテキストスイッチの実行時間が大幅に短縮されます。8051は1つの命令でレジスタバンクを切り替えることができるため、重要なレジスタをRAMに転送するという時間のかかる作業を回避できます。

派生的な特徴

2013年現在でも、多くの大手チップメーカーによって新たな派生製品が開発されており、IAR SystemsKeilTASKING [ 6 ]などの主要なコンパイラサプライヤーは継続的にアップデートをリリースしています。

MCS-51ベースのマイクロコントローラには、通常、1つまたは2つのUART、2つまたは3つのタイマー、128バイトまたは256バイトの内部データRAM(そのうち16バイトはビットアドレス指定可能)、最大128バイトのI/O、512バイト~64KBの内部プログラムメモリ、および場合によっては外部データ空間にある拡張データRAM(ERAM)が含まれます。外部RAMとROMは、データバスとアドレスバスを共有します。オリジナルの8051コアは、マシンサイクルあたり12クロックサイクルで動作し、ほとんどの命令は1つまたは2つのマシンサイクルで実行されました。12MHzのクロック周波数では、8051は1サイクル命令を毎秒100万回、2サイクル命令を毎秒50万回実行できました。現在では、マシンサイクルあたり6、4、2、あるいは1クロック(「1T」と表記)で動作し、最大100MHzのクロック周波数を持つ、拡張8051コアが一般的に使用されている。これにより、1秒あたりの命令実行数をさらに増加させることができる。Silicon Labsの全製品、Dallas(現在はMaxim Integratedの一部)、およびAtmel (現在はMicrochipの一部)の一部のデバイスは、シングルサイクルコアを搭載している。[ 7 ] [ 8 ] [ 9 ]

8051 の派生製品には、電圧低下検出機能付きの内蔵リセット タイマー、オンチップ オシレーター、自己プログラム可能なフラッシュ ROMプログラム メモリ、内蔵外部 RAM、追加の内部プログラム ストレージ、 ROM 内のブートローダーコード、EEPROM不揮発性データ ストレージ、I 2 CSPI、およびUSBホスト インターフェイス、CANまたはLINバス、ZigbeeまたはBluetooth無線モジュール、PWMジェネレーター、アナログコンパレーターアナログからデジタルおよびデジタルからアナログへのコンバーターRTC、追加のカウンターとタイマー、インサーキットデバッグ機能、より多くの割り込みソース、追加の省電力モード、より多くのまたはより少ないパラレル ポートなどが含まれる場合があります。Intel は、ROM 内にBASICインタプリタを組み込み、RAM にロードされたユーザー プログラムを実行できる マスク プログラム バージョン 8052AH-BASIC を製造しました。

MCS-51ベースのマイクロコントローラは、極限環境にも適応しています。高温対応型の例としては、Tekmos社のTK8H51ファミリー(-40  ℃~+250  ℃)[ 10 ]Honeywell社のHT83C51(-55  ℃~+225 ℃、+300 ℃ で最大1年間動作)などがあります。 [ 11 ]宇宙船向けに耐放射線仕様のMCS-51マイクロコントローラも提供されており、例えばCobham社(旧Aeroflex社)のUT69RH051 [ 12 ]やNIIET社の1830VE32(ロシア語1830ВЕ32)などがあります。[ 13 ] 

一部の工学部では、マイクロコントローラ入門コースで8051マイクロコントローラが使用されている。[ 14 ] [ 15 ] [ 16 ] [ 17 ]

家族の命名規則

Intelの最初のMCS-51マイクロコントローラは8051で、4KBのROMと128バイトのRAMを搭載していました。87で始まるバリアントは、ユーザープログラマブルEPROMを搭載しており、UV消去可能なものもあります。3番目の文字がCであるバリアントは、CMOSの一種です。8031と8032はROMレス版で、RAMは128バイトと256バイトです。最後の数字はメモリサイズを表します。例えば、8052は8KBのROM、87C54は16KBのEPROM、87C58は32KBのEPROMを搭載し、いずれも256バイトのRAMを搭載しています。

メモリアーキテクチャ

4KB EPROMと128バイトのRAMを搭載した8751のダイショット

MCS-51には、内部RAM、特殊機能レジスタ、プログラムメモリ、外部データメモリという4つの異なる種類のメモリがあります。これらのメモリに効率的にアクセスするために、一部のコンパイラ[ 18 ]では、最大7種類のメモリ定義が利用されています。内部RAM、内部RAMへのシングルビットアクセス、特殊機能レジスタ、選択された(8で割り切れる)特殊機能レジスタへのシングルビットアクセス、プログラムRAM、標準8ビットレジスタのいずれかを使用したレジスタ間接アクセスによる外部RAMアクセス、そして16ビット間接アクセスレジスタを使用したレジスタ間接外部RAMアクセスです。

8051の命令セットは、メモリ(データと命令)が分離されたハーバード・アーキテクチャとして設計されています。プログラムメモリからフェッチされたコードのみを実行でき、プログラムメモリに書き込む命令はありません。しかし、ICから出力されるバスは単一のアドレスとデータパスを持ち、フォン・ノイマン・アーキテクチャのバスに非常に似ています。

ほとんどの 8051 システムは命令セットを尊重しており、フラッシュ メモリなどに新しい実行可能プログラムをダウンロードするにはカスタマイズされた機能が必要です。

内部RAM

内部RAM(IRAM)は8ビットのアドレス空間を持ち、アドレス0から0xFFまでを使用します。0x00から0x7FまでのIRAMには、128個の直接アドレス指定可能な1バイトレジスタが含まれており、命令の一部である8ビット絶対アドレスを使用してアクセスできます。また、IRAMには間接的にアクセスすることも可能です。アドレスはR0またはR1にロードされ、@R0OR@R1構文を使用してメモリにアクセスするか、スタックポインタSPを介してスタックメモリとしてアクセスし、PUSH/POPおよび*CALL/RET演算を使用します。

オリジナルの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として)が含まれます。これらに加えて、その他の特殊機能レジスタの小規模なコアとして、割り込みイネーブルIE(A8)と割り込み優先度IP(B8)、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バイトには、4つの8バイトレジスタウィンドウのための空間が含まれており、8つのレジスタR0~R7がこれらのウィンドウにマッピングされます。現在アクティブなウィンドウは、プログラムステータスワードに含まれる2ビットのアドレスによって決定されます。

ビットレジスタ

IRAM 位置 0x20~0x2F の 16 バイト (128 ビット) には、128 個の 1 ビット レジスタ用のスペースが含まれており、ビット レジスタ 00~7F として個別にアドレス指定できます。

残りのビットレジスタ(アドレス80~FF)は、16個の特殊機能レジスタ(アドレスが8の倍数)80、88、90、98、…、F0、F8にマッピングされます。これらのレジスタには、アキュムレータA、B、およびプログラムステータスワードPSWを構成するビットが含まれます。レジスタウィンドウアドレス(PSWのビット3と4)自体は、それぞれビットレジスタD3とD4としてアドレス指定できます。一方、PSWのビット7にあるキャリービットC(またはCY)は、ビットレジスタD7としてアドレス指定できます。

プログラムメモリ

プログラムメモリ(PMEM、ただしIRAMやXRAMほど一般的ではない)は、最大64KBの読み取り専用メモリで、アドレス0から始まる独立したアドレス空間に存在します。使用されるチップのモデルに応じて、オンチップまたはオフチップになります。プログラムメモリは読み取り専用ですが、8051の一部のバリアントではオンチップフラッシュメモリが使用され、システム内またはアプリケーション内でメモリを再プログラミングする手段が提供されています。

コードに加えて、プログラムメモリ内のルックアップテーブルなどの読み取り専用データを保存することも可能です。これらのデータは、命令または命令によって取得されます。アドレスは、8ビットのアキュムレータと16ビットのレジスタ(PCまたはDPTR)の和として計算されます。 MOVCA,@A+DPTRMOVCA,@A+PC

特殊なジャンプ命令と呼び出し命令(AJMPおよびACALL)は、ローカル(同じ2KB以内)プログラムメモリにアクセスするコードのサイズをわずかに削減します。[ 19 ]

64KBを超えるコードが必要な場合、一般的なシステムではコードをバンクスイッチ方式とし、汎用I/Oが上位アドレスビットを選択する。一部の8051コンパイラ[ 18 ]は、ページングされたコードに自動的にアクセスする機能を備えている。これらのシステムでは、割り込みベクターとページングテーブルはコードの最初の32KBに配置され、常に常駐している。

外部データメモリ

外部データメモリ(XRAM)は、同じくアドレス0から始まる3番目のアドレス空間であり、16ビットのアドレス空間を利用できます。チップ上に配置することも、チップ外に配置することもできますMOVX。「外部」と呼ばれるのは、(move external)命令を使用してアクセスする必要があるためです。8051の多くの派生モデルでは、標準の256バイトのIRAMに加えて、数キロバイトのXRAMがチップ上に搭載されています。

XRAMの最初の256バイトは、、、、および命令を使用してアクセスできます。64KB全体は、およびを使用してアクセスできます。16ビットアドレスを使用するには、プログラマが16ビットインデックスレジスタをロードする必要があります。そのため、16ビットアドレスによるRAMアクセスは大幅に遅くなります。 MOVXA,@R0MOVXA,@R1MOVX@R0,AMOVX@R1,AMOVXA,@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バイト短い命令でアクセスできます。これらのレジスタは、IRAMの0x00~0x1Fにマッピングされています。この範囲のうち、PSWの2つのバンクセレクトビットによって決定される8バイトのみが、常に使用されます。

以下は、特殊機能レジスタ空間にメモリマップされる 8051 のレジスタの部分的なリストです。

スタックポインタ、SP (0x81)
これはサブルーチン呼び出し命令とリターン命令で使用される8ビットレジスタです。スタックは上方向に拡張され、SPは値をプッシュする前にインクリメントされ、値をポップした後にデクリメントされます。
データポインタ、DP (0x82–83)
これは、PMEM および XRAM にアクセスするために使用される 16 ビット レジスタです。
プログラムステータスワード、PSW (0xD0)
これには、ビット番号別に重要なステータス フラグが含まれています。
  1. パリティ P。アキュムレータ A のパリティ (ビットのXOR ) を返します。
  2. ユーザー定義、UD。ソフトウェアによる読み取りおよび書き込みが可能。ハードウェアによる影響は受けません。
  3. オーバーフローフラグ、OV。加算によって符号付きオーバーフローが発生したときに設定されます。
  4. レジスタ選択0(RS0)。レジスタバンクの下位ビット。0x08または0x18のバンクが使用されている場合に設定されます。
  5. レジスタ選択1(RS1)。レジスタバンクの上位ビット。0x10または0x18のバンクが使用されている場合に設定されます。
  6. フラグ 0、F0。ソフトウェアによる読み取りと書き込みが可能。ハードウェアによる影響は受けません。
  7. 補助キャリー、AC。加算によりビット3からビット4へのキャリーが生成された場合に設定されます。
  8. キャリー ビット、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はマルチサイクルプロセッサです。MCS8051はほとんどの命令に12クロックサイクル[ 21 ]を使用しました。多くの命令はアキュムレータを使用します[ 21 ] 。対照的に、ほとんどの互換コンピュータは、乗算命令と除算命令を除いて、1~3サイクルで命令を実行します。この圧倒的な高速性が、ほとんどのアプリケーションでMCS8051に取って代わった主な理由です。

各割り込みには4つの優先度があります。[ 21 ]各優先度内で、デバイスの割り込みの優先度は固定されています。[ 21 ]

命令セット

命令はすべて 1 ~ 3 バイトの長さで、最初のオペコード バイトとそれに続く最大 2 バイトのオペランドで構成されます。

オペコード バイトの14 ( x 0 ~x 3 ) は、不規則なオペコードに使用されます。

オペコードバイトの34 ( 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ビット定数を指定します。オペランドがデスティネーション(、)の場合、または演算に即値ソース(、)が既に含まれている場合は、代わりにアキュムレータを使用することを指定します。INCoperandDECoperandMOVoperand,#dataCJNEoperand,#data,offset

最上位ニブルは、以下のように演算を指定します。すべての命令がすべてのアドレッシングモードをサポートしているわけではありません。特に、主オペランドへの書き込み時に即値モードは使用できません。命令ニーモニックは、宛先ソースオペランドの順序で使用されます。

0:INCoperand
指定されたオペランドをインクリメントします。イミディエイトモード(オペコード0x04)はアキュムレータを指定します。INCA
1:DECoperand
指定されたオペランドを減分します。イミディエイトモード(オペコード0x14)はアキュムレータを指定します。DECA
2ADDA,operand
オペランドをアキュムレータ A に追加します。オペコード 0x23 ( 、「左に回転」しますが、実際には左にシフトします) は、 と考えることができます。RLAADDA,A
3ADDCA,operand
オペランドとCビットをアキュムレータに加算します。オペコード0x33(、キャリーによる左回転)は と考えることができます。RLCAADDCA,A
4ORLA,operand
オペランドをアキュムレータに論理和演算します。この演算の2つのメモリ格納形式(および)は、オペコード0x43と0x42で指定されます。ORLaddress,#dataORLaddress,A
5ANLA,operand
オペランドをアキュムレータに論理積演算します。この演算の2つのメモリ出力形式(および)は、オペコード0x53と0x52で指定されます。ANLaddress,#dataANLaddress,A
6XRLA,operand
オペランドをアキュムレータに排他的論理和演算します。この演算の2つのメモリ出力形式(および)は、オペコード0x63と0x62で指定されます。XRLaddress,#dataXRLaddress,A
7MOVoperand,#data
即値をオペランドに移動します。即値モード(オペコード 0x74)はアキュムレータを指定します。MOVA,#data
8MOVaddress,operand
値をIRAMまたはSFRレジスタに移動します。この操作では、オペコード0x75と重複するため、イミディエイトモード(オペコード0x84)は使用されません。
9SUBBA,operand
アキュムレータからオペランドを減算します。この演算は借入を伴うため、借入なしで減算することはできません。
午前:MOVoperand,address
IRAMまたはSFRレジスタから値を移動します。即値モード(オペコード0xA4)は使用されません。即値はソースとしてのみ使用されるためです。メモリ直接モード(オペコード0xA5)は0x85と重複するため使用されません。
よる:CJNEoperand,#data,offset
オペランドを即値と比較し#data、等しくない場合はPC +オフセットにジャンプします。即値モードとメモリ直接モード(オペコード0xB4と0xB5)では、オペランドをアキュムレータと比較します。「等しい場合は比較してジャンプする」命令は存在しないことに注意してください。CJNEA,operand,offsetCJE
C y :XCHA,operand
アキュムレータとオペランドを交換します。この操作ではイミディエイトモード(オペコード0xC4)は使用されません。
D y :DJNZoperand,offset
オペランドをデクリメントし、結果がゼロ以外の場合はPC +オフセットにジャンプします。イミディエイトモード(オペコード0xD4)およびレジスタ間接モード(オペコード0xD6、0xD7)は使用されません。
E y :MOVA,operand
オペランドをアキュムレータに移動します。この操作(オペコード0xE4)では、オペコード0x74と重複するため、イミディエイトモードは使用されません。
F y :MOVoperand,A
アキュムレータをオペランドに移動します。イミディエイトモード(オペコード0xF4)は効果が無いため使用されません。

ADD、、ADDCおよび命令のみがSUBBPSWフラグを設定します。INC、、DECおよび論理命令はPSWフラグを設定しません。命令はCビットのみを、オペランド1オペランド2CJNEの結果である借用に変更します。

不規則な命令は、より制限されたアドレス指定モードを持つ 64 個のオペコードと、通常の命令の適用されないモードから抽出されたいくつかのオペコードで構成されます。

8051/8052 不規則な指示
オペコード× 0× 1× 2× 3× 4
0NOP
  • AJMPaddr11
  • ACALLaddr11
LJMPaddr16RRA(右に回転)INCA
1JBCbit,offset(ビットがクリアで設定されている場合はジャンプ) LCALLaddr16RRCA(キャリーを通して右に回転)DECA
2JBbit,offset(ビットが設定されている場合はジャンプ) RETRLA(左に回転)ADDA,#data
3JNBbit,offset(少しクリアならジャンプ) RETIRLCA(キャリーを通して左に回転)ADDCA,#data
4JCoffset(キャリーセットの場合はジャンプ) ORLaddress,AORLaddress,#dataORLA,#data
5JNCoffset(キャリークリアならジャンプ) ANLaddress,AANLaddress,#dataANLA,#data
6JZoffset(ゼロの場合はジャンプ) XRLaddress,AXRLaddress,#dataXRLA,#data
7JNZoffset(ゼロ以外の場合はジャンプ) ORLC,bitJMP@A+DPTRMOVA,#data
8SJMPoffset(ショートジャンプ) ANLC,bitMOVCA,@A+PCDIVAB
9MOVDPTR,#data16MOVbit,CMOVCA,@A+DPTRSUBBA,#data
ああORLC,/bitMOVC,bitINCDPTRMULAB
よるANLC,/bitCPLbitCPLCCJNEA,#data,offset
C yPUSHaddressCLRbitCLRCSWAPA
D yPOPaddressSETBbitSETBCDAA(小数点調整)
ええMOVXA,@DPTRMOVXA,@R0MOVXA,@R1CLRA
F yMOVX@DPTR,AMOVX@R0,AMOVX@R1,ACPLA
85
MOVaddress,address2 つの IRAM または SFR レジスタ間を直接移動します。
A5
未使用
B5
CJNEA,address,offsetアキュムレータを IRAM または SFR レジスタと比較し、等しくない場合はPC +オフセットにジャンプします。
D6~7
XCHDA,@R01オペランドの下位ニブルを交換します。

(ショートジャンプ)オペコードSJMPは、符号付き相対オフセットバイトオペランドを受け取り、次の命令のアドレスを基準として制御を移します。/オペコードはAJMPACALLオペコードバイトの最上位3ビットと後続のバイトを組み合わせて、PCレジスタの下位11ビットを置き換える11ビットのデスティネーションを指定します(PCレジスタの上位5ビットはそのまま残ります)。より大きなアドレスの場合、LJMPおよびLCALL命令は16ビットのデスティネーションを可能にします。

8051が人気の理由の一つは、単一ビットに対する操作の幅広さです。ビットは常に絶対アドレスで指定され、レジスタ間接やインデックスによるアドレッシングは存在しません。単一ビットを操作する命令には以下のものがあります。

  • SETBbit、、:指定されたビットを設定、クリア、または補数化するCLRbitCPLbit
  • JBbit,offset: ビットが設定されている場合はジャンプ
  • JNBbit,offset: 少しクリアならジャンプ
  • JBCbit,offset: ビットが設定されている場合はジャンプし、ビットをクリアします
  • MOVC,bit, : 指定されたビットをキャリービットに移動する、またはその逆MOVbit,C
  • ORLC,bit, : または、キャリービットのビット(またはその補数)ORLC,/bit
  • ANLC,bit, : そして、キャリービットのビット(またはその補数)ANLC,/bit

ビットオペランドは の形式で記述されますaddress.number。キャリーフラグはビットアドレス指定可能なプログラムステータスワードのビット7であるため、 、、命令はそれぞれ、、 命令と短縮形になります。 SETBCCLRCCPLCSETBPSW.7CLRPSW.7CPLPSW.7

プログラミング

8051 にはさまざまな高水準プログラミング言語コンパイラがある。8051 ではいくつかのCコンパイラが利用可能であり、そのほとんどは、プログラマが各変数を 6 種類のメモリのどこに保存するかを指定し、複数のレジスタ バンクやビット操作命令などの 8051 固有のハードウェア機能にアクセスできるようにします。市販の C コンパイラも多数あります。[ 22 ] Small Device C Compiler (SDCC) は、人気のあるオープン ソースの C コンパイラです。[ 23 ] C++Forth[ 24 ] [ 25 ] [ 26 ] [ 27 ] BASICObject PascalPascalPL/MModula-2 などの他の高水準言語も8051 で使用できますが、 C やアセンブリほど広くは使用されていません[ 28 ]

IRAM、XRAM、およびPMEM(読み取り専用)はすべてアドレス0を持つため、8051アーキテクチャ用のCコンパイラは、特定のデータ(PMEM内の定数、またはIRAM内の高速アクセスが必要な変数など)をどこに格納するかを示すためのコンパイラ固有のプラグマやその他の拡張機能を提供しています。データは3つのメモリ空間のいずれかに格納される可能性があるため、通常、ポインタ型をメモリ空間を含むように制約するか、ポインタにメタデータを格納することで、ポインタがどのメモリを参照するかを判別できるメカニズムが提供されています。

Intel 8031マイクロコントローラ
Intel D87C51マイクロコントローラ

インテルは2007年3月にMCS-51製品ラインの製造を中止しましたが、[ 29 ] [ 30 ]、他のベンダーからは定期的に多数の強化された8051製品やシリコン知的財産が追加されています。

8051の前身である8048は、初代IBM PCのキーボードに使用され、キー入力をシリアルデータストリームに変換してコンピュータ本体に送信しました。Intel 8049は、Sinclair QLで同様の役割を果たしました。8048とその派生製品は、今日でもベーシックモデルのキーボードに使用されています。

8031、オリジナルの8051の縮小版で、内部プログラムROMを備えていませんでした。このチップを使用するには、8031がフェッチして実行するプログラムを格納した外部ROMを追加する必要がありました。8031ベースの設計では、EAピンの通常状態によって8051の内部ROMが無効になるため、8051チップはROMレスの8031として販売される可能性がありました。ベンダーが8051を8031として販売する理由は様々ですが、例えば8051のROMに欠陥コードが含まれている場合や、単に8051の供給過剰と8031の供給不足が原因である場合などが挙げられます。

Intel P8044AHマイクロコントローラ

8044 (ROMなしの8344とEPROM付きの8744も同様)は、8051コアにSDLCコントローラを追加しました特にビットバスアプリケーション用)。[ 31 ]

8052オリジナルの8051の拡張版で、内部RAMが128バイトから256バイトに、ROMが4KBから8KBに、そして3つ目の16ビットタイマーを搭載しています。現代の8051互換マイクロコントローラのほとんどがこれらの機能を備えています。

80328052 と同じ機能を備えていましたが、内部 ROM プログラム メモリがありませんでした。

8751、8051の4KB ROMではなく4KB EPROMを搭載した製品です。不揮発性メモリの種類を除けば、両者は同一です。この部品はセラミックパッケージで提供され、ダイの上部に透明な石英窓が付いており、紫外線でEPROMを消去できました。関連部品としては、8752は8KB EPROM、8754は16KB EPROM、8758は32KB EPROMを搭載していました。

80C537 (ROMレス)と80C517(8KB 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つの省電力モード

デリバティブベンダー

20 社を超える独立系メーカーが MCS-51 互換プロセッサを製造しています。

MCS-51と互換性のある他のICやIPは、アナログ・デバイセズ[ 32 ]、インテグラル・ミンスク[ 33 ]、 クリスタル・キエフ[ 34 ]、NIIETヴォロネジ[ 13 ]によって開発されている。

知的財産としての利用

現在でも8051は個別部品として入手可能ですが、主にシリコンIPコアとして使用されています。[ 35 ]ハードウェア記述言語ソースコード(VHDLVerilogなど)またはFPGAネットリスト形式で利用できるこれらのコアは、通常、USBフラッシュドライブから洗濯機、チップ上の複雑な無線通信システムまで、さまざまな製品の組み込みシステムに統合されています。設計者は、ARM Cortex-MシリーズMIPS 、BA22などの32ビットプロセッサと比較してサイズが小さく、消費電力が低いため、8051シリコンIPコアを使用します。

後続の 8051 コア設計では、オリジナルの MCS-51 命令セットとの互換性を保ちながらパフォーマンスが向上しました。オリジナルの Intel 8051 は、マシン サイクルごとに 12 クロックのマイクロコード サイクルを使用するマイクロコード エンジンで、受動抵抗プルアップで電力を消費する NMOS ロジック ゲートの数を最小限に抑えていました。ほとんどの命令は 1 つまたは 2 つのマシン サイクルで実行されます。一般的な最大クロック周波数 12 MHz では、オリジナルの 8051 タイプは 1 秒あたり 100 万のシングル サイクル命令、または 50 万の 2 サイクル命令を実行します。アクティブ P チャネル FET プルアップを使用する CMOS への変更によって、マイクロコードなしでコアを実現できるようになりました。拡張 8051 IP コアは、マシン サイクルごとに 1 クロック サイクルで動作します。最大 450 MHz のクロック周波数では、8051 互換プロセッサは 1 秒あたり最大 4 億 5000 万の命令を実行できます。

8051ベースのMCU

シリコンストレージテクノロジー 89V54RD2

デジタル信号プロセッサ(DSP)のバリエーション

16ビットのデジタル信号プロセッサ(DSP)(例えばMP3Vorbisの符号化/復号化用)を追加し、最大6億7500万MIPS [ 46 ]の処理能力とUSB 2.0インターフェース[ 47 ]を統合したモデルや、知的財産[ 48 ]を備えたモデルがいくつか存在する。

拡張8ビットバイナリ互換マイクロコントローラ:MCS-151ファミリー

1996年、インテルはMCS-151ファミリーを発表しました。これは最大6倍の速度を誇る派生型で、[ 3 ] 8051と完全なバイナリおよび命令セット互換性を備えています。8051とは異なり、MCS-151はパイプライン型CPUで、16ビットの内部コードバスを備え、6倍の速度を実現しています。MCS-151ファミリーもインテルによって製造中止となりましたが、バイナリ互換の派生型や一部強化された派生型は広く入手可能です。

8/16/32ビットバイナリ互換マイクロコントローラ:MCS-251ファミリ

16 MB ( 24 ビット) のアドレス空間と 6 倍の高速命令サイクルを備えた80251 8/16/32 ビット マイクロコントローラは、 1996 年にインテルによって導入されました。 [ 3 ] [ 49 ] 8 ビット 8051 として実行でき、24 ビットの線形アドレス指定、8 ビット ALU、8 ビット命令、16 ビット命令、限られた 32 ビット命令セット、16 個の 8 ビット レジスタ、16 個の 16 ビット レジスタ (8 ビット レジスタと空間を共有しない 8 個の 16 ビット レジスタと、16 ビット レジスタごとに 2 つの 8 ビット レジスタを含む 8 個の 16 ビット レジスタ)、および 10 個の 32 ビット レジスタ (登録)。[ 50 ]

拡張命令[ 51 ](プログラマーズガイド[ 52 ]も参照)と、より高性能な後継機種[ 53 ]があり、これらは知的財産(IP)としても入手可能です[ 54 ] 。3段パイプライン方式を採用しています。MCS-251ファミリーもIntelによって製造中止となりましたが、多くのメーカーからバイナリ互換の機種や一部機能強化された機種が広く入手可能です。

参照

参考文献

  1. ^ John Wharton (1980年5月). 「Intel MCS-51シングルチップ・マイクロコンピュータ・ファミリの紹介」 . Intel Corporation. アプリケーションノート AP-69.
  2. ^ Intel 8051マイクロプロセッサ口述歴史パネル(PDF)コンピュータ歴史博物館、2008年9月16日、オリジナル(PDF)から2012年2月25日にアーカイブ、 2018年11月17日取得
  3. ^ a b c「Intel MCS 151 および MCS 251 マイクロコントローラ。datasheets.chipdb.org
  4. ^ John Wharton (1980年5月). 「Intel MCS-51ブール演算処理機能の使用」(PDF) . Intel Corporation. アプリケーションノート AP-70. 2016年3月3日時点のオリジナル(PDF)からのアーカイブ。
  5. ^ 「8051チュートリアル:割り込み」2012年12月28日時点のオリジナルよりアーカイブ2012年12月21日閲覧。
  6. ^ 「8051ソフトウェア開発ツールセット - 概要」 . TASKING . 2025年2月13日閲覧
  7. ^ a b「8ビットマイクロコントローラ – 8ビットMCU – EFM8」 . Silicon Labs . 2021年6月21日閲覧。
  8. ^ 「サイト検索」 . Maxim Integrated . 2021年6月24日時点のオリジナルよりアーカイブ。 2021年6月21日閲覧
  9. ^ a b「8051 MCU」 . Microchip Technology . 2021年6月21日閲覧。
  10. ^ 「TK80H51 250 °C マイクロコントローラ」 Tekmos Inc. 2017年8月20日時点のオリジナルよりアーカイブ2017年8月23日閲覧。
  11. ^ 「高温対応83C51マイクロコントローラ」(PDF)ハネウェル。 2017年8月23日閲覧
  12. ^ 「マイクロコントローラとマイクロプロセッサ」 Cobham Semiconductor Solutions. 2017年8月23日時点のオリジナルよりアーカイブ。 2017年8月23日閲覧
  13. ^ a b "Микроконтроллеры" [マイクロコントローラー] (ロシア語)。ヴォロネジ: OAO「NIIET」。2017 年 8 月 22 日のオリジナルからアーカイブ2017 年8 月 22 日に取得
  14. ^ 「ダウンロードリンク Youtube: ELEC2700 – 8051 超音波レーダー」 。 2017年8月22日時点のオリジナルよりアーカイブ2017年8月22日閲覧。
  15. ^ GhostarchiveWayback Machineにアーカイブ:「ELEC2700 Assignment 1 2014: 1D Pong」。YouTube 2014年4月10日。
  16. ^ 「ELEC2700 – コンピュータエンジニアリング2(ニューカッスル大学の教科書)」Zookal . 2017年7月27日時点のオリジナルよりアーカイブ。 2017年8月22日閲覧
  17. ^ 「ELEC2700 課題3:超音波レーダー」(PDF) . JustAnswer . 2012年6月29日. 2023年4月17日時点のオリジナル(PDF)からアーカイブ。 2023年4月30日閲覧
  18. ^ a b c Keil C51 ユーザーズマニュアル. Keil, a division of ARM Inc. 2021 . 2021年5月17日閲覧
  19. ^ ACALLは2バイトのサブルーチン呼び出し命令であり、同じ2KB のメモリセグメント内の任意の場所にアクセスできます。絶対メモリアドレスは、PCの上位5ビットと命令によって定義された11ビットで構成されます。
  20. ^ a b「Silergy 71M6513 データシート」 . Silergy 電力計測IC . Silergy Corp. 2021年5月17日閲覧
  21. ^ a b c d e MCS-51マイクロコントローラ・ファミリ・ユーザーズ・マニュアル(PDF) . 発行番号121517:Intel. 1994. 2021年5月17日閲覧{{cite book}}: CS1 メンテナンス: 場所 (リンク)
  22. ^ Han-Way Huang. 「C8051を使用した組み込みシステム設計」 p. 238.
  23. ^ Lewin ARW Edwards (2006). So, You Wanna be an Embedded Engineer: The Guide to Embedded Engineering, from Consultancy to the Corporate Ladder . p. 51. ISBN 978-0-7506-7953-4
  24. ^ブラッドフォード・J・ロドリゲス. 「キャメルフォース/8051」 .
  25. ^ブラッド・ロドリゲス。「前進第7部:8051向けCamelForth」
  26. ^ 「8051 SwiftX Forth開発」 。2015年9月24日時点のオリジナルよりアーカイブ
  27. ^ 「MPE VFX Forth 7 クロスコンパイラ」 。2014年10月23日時点のオリジナルよりアーカイブ
  28. ^ Agarwal, Tarun (2014年9月16日). 「アセンブリ言語による8051プログラミングの詳細な説明」 . ElProCus - 工学部学生向け電子プロジェクト. 2024年10月21日閲覧
  29. ^ Ganssle, Jack (2006年5月29日). 「IntelがMCS-51の開発を中止」 . 2017年8月13日時点のオリジナルよりアーカイブ
  30. ^ 「MCS 51、MCS 251、MCS 96マイクロコントローラ製品ライン、Intel 186、Intel386、Intel486プロセッサ製品ライン、およびi960 32ビットRISCプロセッサ、PCN 106013-01、製品の製造中止、改訂理由:主要なマイルストーン情報を追加し、変更内容の説明を改訂」(PDF)。Intel。2006年5月2日。
  31. ^ 「8044AH/8344AH/8744AH オンチップシリアル通信コントローラ搭載高性能8ビットマイクロコントローラ」(PDF)。Intel。1994年10月。
  32. ^ 「MicroConverter、62kBフラッシュMCUを内蔵した12ビットADCおよびDAC」(PDF) . analog.com . 2014年5月28日時点のオリジナル(PDF)からアーカイブ。 2023年4月30日閲覧
  33. ^ "Микроконтроллеры и супервизоры питания Серии 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 日に取得
  34. ^ "Однокристальные микро-эвм" [シングルチップ マイクロコンピューター] (ロシア語)。キエフ: クリスタル。2012 年 5 月 30 日のオリジナルからアーカイブ2017 年1 月 5 日に取得
  35. ^ Hussaini (2019年8月20日). 「なぜ8051を使わなければならないのか?古すぎるのではないか?」 Technobyte . 2023年7月5日閲覧
  36. ^ 「DS80C320 データシートと製品情報」アナログ・デバイセズ2025年2月12日閲覧
  37. ^ 「PSoC 3 - Infineon Technologies」Infineon . 2022年9月21時点のオリジナルよりアーカイブ2023年5月20日閲覧。
  38. ^ 「ドキュメント」(中国語)。
  39. ^ 「Syntill8 - 製品」 . www.syntill8.com . 2021年6月21日閲覧。
  40. ^ 「SDA30C164 データシート」(PDF)www.semiee.com . 2022年6月17日時点のオリジナル(PDF)からアーカイブ。 2022年5月15日閲覧
  41. ^ 「Silergy Metering ICs」 . Silergy Corp. 2021年5月12日閲覧
  42. ^ 「Silergyエネルギー測定IC」 . Silergy Corp. 2021年5月12日閲覧
  43. ^ datasheetq.com. 「89V54RD2 データシート PDF ダウンロード - シリコンストレージテクノロジー」 www.datasheetq.com . 2020年1月18日閲覧
  44. ^ 「STCマイクロコントローラ---STCmicro Technology Co,.Ltd」 www.stcmicro.com . 2017年2月19日閲覧
  45. ^ 「サイトインデックス - 南京秦衡微電子有限公司」wch-ic.com . 2021年6月21日閲覧
  46. ^ 「TI、8051を搭載した家庭用・車載用低コスト・高性能オーディオDSPを発表」 。 2016年11月13日時点のオリジナルよりアーカイブ2013年5月6日閲覧。
  47. ^ 「Atmel AT85C51SND3 Audio DSP Data Sheet with USB 2.0」(PDF) . 2023年4月30日閲覧
  48. ^ Salim, AJ; Othman, M.; Ali, MA Mohd (2006年10月5日). 「Xilinx FPGAにおける8051とDSPの統合」. 2006 IEEE International Conference on Semiconductor Electronics . pp.  562– 566. doi : 10.1109/SMELEC.2006.380694 . ISBN 0-7803-9730-4S2CID  21616742 – IEEE Xplore 経由。
  49. ^ Kenneth J Ayala (2005). 8051マイクロコントローラ. Thomson Delmar Learning. ISBN 978-1-4018-6158-2
  50. ^ 「MCSÉ 251アーキテクチャの概要」(PDF) . chipdb.org . 2023年4月30日閲覧
  51. ^ 「Temic TSC80251 アーキテクチャ」(PDF)
  52. ^ 「Atmel TSC80251プログラマーズガイド」(PDF)2016年3月4日時点のオリジナル(PDF)からアーカイブ2013年5月6日閲覧。
  53. ^ 「DQ80251 32ビットマイクロコントローラ」(PDF) . DCD .
  54. ^ 「R80251XC 32ビットマイクロコントローラ」(PDF) . Evatronix .

さらに読む

  • マジディ、マッキンレー、マジディ (2012). 『8051マイクロコントローラ:システムアプローチ』 ピアソン社. 648ページ. ISBN 978-0-13-508044-3
  • シュルツ、トーマス (2008). Cと8051(第4版). トーマス・W・シュルツ. 464ページ. ISBN 978-0-9783995-0-4
  • シュタイナー、クレイグ(2005年)『8051/8052マイクロコントローラ:アーキテクチャ、アセンブリ言語、ハードウェアインタフェース』ユニバーサル・パブリッシャーズ、348ページ、ISBN 978-1-58112-459-0
  • Calcutt、Cowan、Parchizadeh (2000). 8051 Microcontrollers: Hardware, Software and Applications . Elsevier. 329 pp. ISBN 978-0-340-67707-0
  • アクセルソン、ジャン(1994年)『マイクロコントローラ・アイデアブック:8052-BASICマイクロコントローラ搭載回路、プログラム、アプリケーション』 Lakeview research LLC. 277ページ、ISBN 978-0-9650819-0-0
  • ペイン, ウィリアム (1990年12月19日) [1990]. Embedded Controller FORTH for the 8051 Family (ハードカバー). ボストン: Academic Press. 528ページ. ISBN 978-0-12-547570-9
インテル
その他

ウィキメディア・コモンズの MCS-51関連メディア