マイコン端子に入出力 1
先の記事「マイコンって何が出来るの?」に、「マイコン仕掛けは信号を秩序立てて扱うことが出来る!」と書きました。
具体的なプログラムは他の記事に譲り、マイコンはどのようにして入出力信号を扱うのかについて、概観を紹介したいと思います。
ここで言うマイコン
Raspberry Pi はOSの力が大きく、パソコンに分類する方が良いと思います。
マイコンと呼ばれるものの中には ESP32 等のようにWiFi や Bluetooth , Ethernet を扱える優れ物ものもありますが、ここで言うマイコンはPIC18F のようなワンチップマイコンで、全ての信号は端子を通して入出力するものを扱います。
私が初めて手にしたマイコンはNECのPC-8001でした。PCで始まる型番ですが、キーボード、ビデオ出力、カセットテープレコーダー・インタフェースとN-BASIC インタプリタを備えたマイコン機器だったと理解しています。
今でいうPCとは様子が違いますが、
私の人生を変えた名機に敬意と感謝を表します。
PC-8001 の心臓部(CPU)はZ-80 と言う8bitマイコンでした。
その端子はアドレスバス、データバス、と制御信号(メモリーリスエスト、IOリクエスト)で、High/Low 任意に動かせる端子はありません。これらのバスと制御信号に、外付けICやロジック回路を接続することで任意の入出力を実現します。
ワンチップマイコンは、これら外付けICやロジック回路を内蔵しているため、その端子を任意に動かし、あるいは入力に使うことが出来ます。
C言語
マイコンは任意に動かせるIOに直結しているため、アセンブリ言語またはC言語で扱うことが多いのですが、ここではC言語に絞って紹介します。
C言語に絞ることで汎用レジスタや四則演算などの詳細を扱わずに済みます。
PICマイコン
タイトル画像は、ここで扱うマイコンについて、端子を扱うプログラムの立場から見た大概要を図にしたものです。各ブロックを紹介します。
Acc (Accumulator)主語
C言語でプログラミングする場合にはほとんど意識することはありませんが、演算機能を持った記憶装置です。(ワーキングレジスタと呼ぶこともあります。)
マイコンにはプログラムを読み出して実行を制御する重要な要素があるのですが、ここでは思い切って、これらも含めてAccとします。
こう考えると、C言語における主語は概ねAccと考えてよさそうです。
演算の他、各ブロックと入出力を行います。
SFR (Special Function Register)特殊レジスタ
端子を扱うプログラムの立場から次に重要なブロックで、端子の出力状態を指示したり、端子の入力状態を問い合わせる相手がSFRです。
端子の用途を指定するのもSFRで、電源端子など一部を除きほとんどの端子を制御します。
High/Low と言った単純なものから、I2Cバスのように複雑なシーケンスを要する入出力も(Accから見てある程度自動的に)こなします。
ROM (Read Only Memory)プログラムメモリー
電源がOFFでも内容を保持しているメモリーで、プログラムを保存してマイコン(Acc)の動作を規定するために使います。
(用途から)プログラムメモリー、(構造から)フラッシュメモリーとも呼ばれます。
手間がかかりますが書き込むこともありますので白抜き矢印で示しました。
RAM (Random access memory)データメモリー
電源が切れると内容が失われますが、プログラムを動かすために一時的に記録する用途に使うメモリーです。数を数えたり演算を行う変数を記録したりと頻繁に使われます。データメモリーとも呼ばれます。
PICではGPR(General Purpose Register)とも言います。
先のROMのように電源OFFでもデータを保持する(EEPROM)もデータメモリーの仲間です。
まとめ
AccはROMに書かれたプログラムに従ってRAMを使って演算し、SFRを通じて端子の入出力を行うことでプログラムの目的を達成します。
Accの説明等かなり乱暴な部分もあり、一般的な説明とは異なるとは思います。あくまでも「マイコンはどのようにして入出力信号を扱うのか」について概観する目的で書きました。
詳細について疑問が生じた時は、さらに詳しく調べてみて下さい。
何等か、お役に立てれば幸いです。
追伸
続編のご案内
「マイコン端子に入出力 2」 ー SFRの使い方概観
「マイコン端子に入出力 3」 - SFRはハードとソフトの接点
出来ればサポート頂けると、嬉しいです。 新しい基板や造形品を作る資金等に使いたいと思います。