標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第362回]

●本日は時間がありません

どうしてもやらなきゃならない急ぎの仕事がはいってしまって、MYCPU80はちょっと中断です。
お待ちいただいている残りのパーツのことについては、とりあえずの作業は終わりました。
あとはCDを焼くのとPICを焼くのと、説明書をプリントアウトすればよいところまでできたのですが。
ちょっと欲が出てしまいました。

PICもCDROMもお送りしてしまったら、とりあえずはそこまでで終了です。
ですからできればお送りするまでに、もうひとつちょいと細工をしておきたい。
詳細は内緒です。
できるはず、と思っているのですが、1日、2日でとりあえずの評価ができるかどうかわかりませんから、今は書きません。
できなかったら今回はそれはなし、ということで、いずれにせよ、私としてはもうタイムリミットと思っていますので、あと1日、2日お時間をいただいて、それでクリアできなかったら、来週はじめには発送させていただきます。
先週末からプラスアルファに内緒で取り組んでおりました。
サービス精神が旺盛なのです。
とりあえず今日までのところだけでも、皆様によろこんでいただけるはず。
と思っております。
それに加えてもう一段UPを、ということなのですが、そのあたりは、また時間ができましたら次回にでもご説明いたします。
とにかく本日のところは、そういうことで、とりあえずご了承願います。

☆☆☆TK80回路の操作説明の続きです☆☆☆

●MYCPU80(TK80回路)操作説明書 5章  I/O制御

●1. はじめに

CPUはメモリとの間でデータやプログラムを書いたり読んだりします。
この取扱説明書もいままで説明した部分は、全てメモリに対して読んだり書いたりする作業が基本になっていました。
それに対してこの章では、外部に対して働きかける方法について説明します。

●リレーやスイッチはCPUと直結できない

CPUはメモリに対しては直接読んだり書いたりすることができます。ハード的に説明するならばCPUとメモリとはアドレスバスやデータバスを直接つなぐことができます。
ところが例えばスイッチやリレーから信号をCPUに送ったり、逆にCPUからのデータでLEDを光らせたり、リレーをON、OFFさせたりすることは、直接CPUとの間で行うわけにはいきません。
勿論TK80回路に使われているICでは、リレーを直接駆動させることは電気的に考えて無理があります。普通はトランジスタが必要です。
ここで直接制御できないと言ったのは、そういう電気的な問題ではなくて、回路そのものが直接つなぐことができないのです。

●アドレスバスとデータバス

メモリとCPUとの間でデータをやりとりするには、データバス(回路図でD0〜D7と表示されているライン)を通じて行います。8080にはメモリは最大64KBも接続できますが、データバスはたった8本しかありません。つまり一度に8ビット=1バイトのデータしか読んだり書いたりできません。
そこでアドレスが必要になってきます。CPUはデータの読み書きをする場合に、その対象になっているアドレスをまず出力し、それによってメモリの特定部分のみを選択するのです。アドレス信号はアドレスバス(A0〜A15 )を通してメモリに与えられます。そしてメモリICは、アドレス信号(およびその他の制御信号)が与えられると、メモリIC自体の働きで、該当するアドレスの記憶場所(メモリセルなどと言います)だけがデータバスにつながるようになっています。
リレーやスイッチなどには、いま説明したアドレスによる選択機構はついていません。
これらの外部回路、外部装置部品とのデータのやりとりも、メモリと同じようにデータバスを通じて行われ、その選択はやはりアドレスバスに出力されるアドレス信号によって行われます。(ただしメモリの場合と違って、アドレスバスの下位8ビット(A0〜A7)のみが使用されます)
またCPUからの出力データは瞬間的に出されるだけなので、それを保持するラッチ回路も必要です。

●I/Oインターフェース回路

そこで、前述のスイッチやリレーなどとCPUの間にアドレスやデータの受け渡しをする、特別な回路が必要になります。
そのような回路は、入力と出力を別々にして単純な機能にするならば、普通のTTL回路でも作ることができます。
TK80回路には汎用のロジックICを使った出力回路と入力回路があって、ユーザーが利用することができるようになっています。
 
なお今までのところで説明してきたメモリのアドレスとは異なり、I/Oアドレスは16進2桁しかありません。(メモリアドレスは16進4桁)
命令もメモリに対するもの(代表的なものはMOV命令)とは区別されており、IN、OUT命令を使います。

●2. I/Oインターフェース回路に対するデータ入出力の方法

●2.1 I/Oアドレス

TK80回路の、ユーザーが入出力に利用できるI/Oアドレスは98〜9Bです。
I/Oアドレスの下位2ビットはデコードしてないため、98〜9Bのどのアドレスを指定しても同じ回路がアクティブになります。
入力も出力も同じ98〜9Bに対して行いますが、入力はIORD、出力はIOWR信号でコントロールしていますから、入力と出力がぶつかることはありません。

アドレス 98〜9B 8ビット出力ポート
         ビット0〜ビット3 PIC16F88コントロール(ユーザーは使えません)
         ビット4 スピーカー出力
         ビット5〜7 ユーザー用出力

アドレス 98〜9B 8ビット入力ポート
         ビット0〜2 PIC16F88コントロール(ユーザーは使えません)
         ビット3〜7 ユーザー用入力

(1)データの出力
AレジスタのデータがOUT命令によって、指定したI/Oアドレスの出力回路から出力されます。
命令は下のようにコーディングします。

D398  OUT 98 ………Aレジスタの内容がI/Oアドレス98の出力回路から出力される

〔注記〕I/Oアドレス98〜9Bの出力回路から外部に出力されるデータはラッチされています。
したがって新たに別のデータをそのポートから出力するまではもとのデータの出力が維持されます。
 I/Oアドレス98〜9Bの出力回路のビット0〜3はシステム専用です。出力データの下位4ビットは1111にしてください。

(2)データの入力
IN命令によって、指定したI/Oアドレスの入力回路からのデータがAレジスタに入ります。
命令は下のようにコーディングします。

  DB98  IN 98  ………I/Oアドレス98の入力回路から入力されたデータがAレジスタに入る。

〔注意〕入力データはラッチされません。
 I/Oアドレス98〜9Bの入力回路のビット0〜2はシステム専用です。入力データの下位3ビットはユーザーにとって意味はありません。

●3. スピーカの使用方法

I/Oアドレス98〜9Bの出力回路のビット4はスピーカ出力回路につながっています。
したがって I/Oアドレス98〜9Bの出力回路のビット4から、任意の周波数のパルスを出力することにより、その周波数に相当する高さの音を出すことができます。
具体的な使い方については、6章 応用プログラム 2.電子オルガンプログラム を参照してください。
2009.10.14upload
2009.10.15一部訂正

前へ
次へ
ホームページトップへ戻る