Yamamoto's Laboratory
Lesson
   1.Numbers
   2.Memory
   3.RAM
   4.Ports
   5.Timer
   6.ROM
   7.8085A
   8.Instruction
   9.Monitor
Appendix

Lesson 4REGISTERS AND PORTSレジスターとIOポート

Elenco Electronics社のコンピュータートレーニングボード MICRO-MASTER MM-8000 の Lesson 4 に関するメモです.ここでは,I/Oポートの取り扱いを学習する.(参照:MM-8000のマニュアルのLesson 4).IOポートとレジスターについて,学習します.

目次


REGISTERS and PORTS

はじめに

MPUは,メモリーの他に外部周辺機器とのデータの入出力を行う.周辺機器には,キーボードやハードディスク,プリンターなどがある.これら外部機器との接続口をI/Oポートと言う.ただし,MPUのI/Oポートに直接周辺機器を接続することはなく,通常は周辺回路を通す.すなわち,MPU⇔周辺回路⇔外部機器となる.MPUと外部機器との間にある周辺回路は,データを受け渡すバッファーのような役割を担っている.

MM-8000ではIntel 8155を周辺回路に用いて,MPU(Intel 8085)は外部機器と接続するようになっている.この周辺回路と外部機器との接続口もI/Oポートと言う.ここではこのI/0ポートとそれをコントロールするレジスターの取り扱いについて学習する.このキットでは,MPU使ってI/Oポートをコントロールする前に,人間がスイッチによりそれを制御し,8155の動作を理解する.前の Lesson の RAM と同じような経験をするのである.

Intel 8155 には A(8bit)とB(8biy), C(6bit)の3つのポートがある.それらは,コマンド/ステータスレジスターの値により制御される.コマンドレジスターでポートの動作を指定し,RAMと同じようにアドレスデータバスからデータを読み込む.ステータスレジスターの値を読み込むと8155の状態を知ることができる.

Intel 8155のブロックダイアグラムとピン番号は,次の図の通りである.詳細についてはデータシートをみることを勧める.

8155ブロックダイアグラム ピン配置
8155 ブロックダイアグラム 8155 ピン配置

I/Oポート

使い方

8155はRAMとI/Oポートの機能がある.それらを同時に使うことはできない.IO/Mピンを High/Low にすることとで,それらの機能の選択を行う.I/Oポートを使う具体的な手順は次のようにする.

  1. CE を Low にする.これにより,このICが動作状態になる.
  2. IO/Mを High にする.これにより,アドレスバスとデータバスが,RAMではなくI/Oポートに接続される.

8155ではRAMの場合と同じように,レジスターと呼ばれる記憶領域を通してI/Oポートの向こう側にある機器とのデータの受け渡しを行う.MPUから見ると,周辺機器ではなくレジスターと呼ばれる記憶領域が見える.したがって,機器であってもほとんどRAMと同じように考えることができるので便利である.レジスターとのデータの受け渡し方法は,アドレスバスでレジスターを指定し,データバスでデータの受け渡しを行う.

8155には,I/Oポートに関係する4つのレジスターがある.そのほか,タイマーに関する2つのレジスターもあるが,それらについては「TIMER」のところで述べる.I/Oポートに関するレジスターのアドレスと役割は次の通り.アドレスの'x'は,0でも1でも良いことを示す.いわゆる"don't care"のこと.

8155のレジスター
アドレス レジスター名 機能 bit
xxxxx000 コマンド/ステータスレジスター 8155の外部ポートとタイマーの設定を行う.
8511の状態を表す.
8
xxxxx001 PAレジスター Aポートとのデータの受け渡しに使う. 8
xxxxx010 PBレジスター Bポートとのデータの受け渡しに使う. 8
xxxxx011 PCレジスター Cポートとのデータの受け渡しに使う. 6

これらのレジスターへの書き込み/読み込みの手順は,RAMの場合と全く同じようにする.

  1. AD0〜AD7にこれらのアドレスを設定する.
  2. ALEを一度,High にする.立ち下がりのエッジでアドレスを読み込む.これにより,操作対象のレジスターが決まる.
  3. 書き込みと読み込みの動作を行う.それぞれは,以下の通り.
    • 書き込み書き込むデータをAD0〜AD7を設定した後,WRを Low にする.
    • 読み込みRDを Low にすると,AD0〜AD7にデータが出力される.

コマンド/ステータスレジスター

コマンド/ステータスレジスター(command/status register)は,書き込みに時(WRがLow)にはコマンドを書き込み,読み込み時(RDがLow)にはステータスを読み込む.前者をコマンドレジスターと呼び,8155へ命令を与える.後者をステータスレジスターと呼び,8511の状態を示す.

コマンドレジスターこの Lesson で学ぶ I/Oポートの設定は,コマンドレジスターより決める.コマンドレジスターに書き込む各ビットは次のようになっている.

8155のコマンドレジスター
ビット 名称 機能
第7, 6ビット TM2,TM1 00:タイマー動作に影響なし 01:タイマーを停止
10:TCに達すると停止
11:タイマー停止中 モードとCNTをロードして,スタート.
    タイマー動作中 TC到達後にモードとCNTをロードして,再スタート
第5ビット IEB 0:ポートBの割り込みを禁止 1:ポートBの割り込みを許可
第4ビット IEA 0:ポートAの割り込みを禁止 1:ポートAの割り込みを許可
第3, 2ビット PC2, PC1 00:prot C は入力 11:prot C は出力
01:prot C は出力とPAをハンドシェーク付きIO
11:PAとPBをハンドシェーク付きIO
第1ビット PB 0:prot B は入力 1:prot B は出力
第0ビット PA 0:prot A は入力 1:prot A は出力

ステータスレジスターステータスレジスターを読み込むと,8155の状態を知ることができる.ステータスレジスターが表す各ビットの内容は次のようになっている.

8155のステータスレジスター
ビット 名称 機能
第7ビット   未使用
第6ビット Timer TCに達したときに High.リセットは,ステータスレジスターの読み込み,あるいはRESTをHigh.
第5ビット INTE B ポートB割り込み許可 1:許可 0:禁止
第4ビット B BF ポートBバッファフル 1:フル 0:空
第3ビット INTR B ポートB割り込み要求 1:あり 0:なし
第2ビット INTE A ポートA割り込み許可 1:許可 0:禁止
第1ビット A BF ポートAバッファフル 1:フル 0:空
第0ビット INTR A ポートA割り込み要求 1:あり 0:なし

汎用ポート

PAとPB,PCは汎用ポートで,RAMと同じように読み書きができる.これらのポートの入力/出力の設定は,コマンドレジスターで行う.読み/書きには「使い方」で述べたように,アドレスバスとデータバスを使う.

大事なことは,I/Oポートを通して外部機器とのデータの受け渡しを行う場合でも,アドレスバスとデータバスを使うことである.こうすることにより,MPU からは,RAMも外部機器も同じように見える.外部機器に依存して,コンピューターを設計する必要がなくなるので,コンピューターそのものが単純になる.その分,外部機器の方をコンピューターに合わせる.

ASSEMBLY INSTRUCTIONS

交換したトランジスター
交換したトランジスター

とくに難しい半田付けはなく,マニュアルの通りにする.この課程で,A70というトランジスターが1個不足している—最初から入っていない—ことが分かった.その代わりに,A20というトランジスターが入っている.データシートによると,どちらも PNP型のシリコントランジスターで,特性も大きくは違わない.スイッチとして使っているだけなので,問題ないだろうと判断する.

TEST PROCEDUREで動作不良が発生した.どうしても,DSP2の7セグが点灯しない.テスターで調べてみたところ,トランジスターQ1とQ2が怪しそうである.これらのトランジスターを交換することにする.2SA1015(PNP型シリコントランジスター)を大量に持っているので,それと交換.すると,TEST PROCEDUREの通り,問題なく動作した.


CIRCUIT DESCRIPTION

8155と2つの7セグとの接続は,下の図のようになっている.PORT B の出力が7セグのLEDに適当なドライバー回路を通してつながっている. 7セグの点灯/消灯は,PORT B の0/1で制御する.二つの7セグ(ISPLAY 1 と 2) はPORT C のビット0で選択できる.それを H(1)にすると,DISPLAY 1 が,反対に L(0)にすると DISPLAY 2 が点灯する.

7セグとの接続
8155と7セグの接続回路

TEST PROCEDURE

出来上がった回路は,次のようにして動作を確認し,8155の内容を理解する.

テストの様子
FUNCTIONAL TESTの様子
  1. 電源を ON する.
  2. IO/MをHにする.これで,8155のアドレスデータバスがIOポートになる.
  3. RSボタンを押して,8155を初期化する.
  4. EN RAMをONにする.これで,8155のCEがLになり,8155を動作状態にできる.
  5. まずはアドレスの設定で,データスイッチを 0000 0000 にする.これで,AD0〜AD7がすべてLになる.そして,ALEボタンを押す.これで,8155のアドレスが 0000 0000 が指定され,コマンド/ステータスレジスターの読み書きが可能となる.
  6. 次にコマンドレジスターに書き込みを行う.データスイッチを 1000 1110 にする.
    • 10:TCに達すると停止
    •  0:ポートBの割り込みを禁止
    •  0:ポートAの割り込みを禁止
    • 11:prot C は出力
    •  1:prot B は出力
    •  0:prot A は入力
    そして,WRボタンを押す.これで,コマンドレジスターに書き込みが完了.すると,DISP2のすべてのLEDが点灯する.ポートはすべて0(初期値)となっているからである.
  7. ポートBを使うために,そのアドレスを設定する.データスイッチを0000 0010にして,ALEスイッチを押す.
  8. ポートBの出力を設定する.データスイッチを0110 0001にする.WRボタンを押すと,DISP1の7セグに3が表示される.7セグのfとgと.が消えるから,3が表示される(図5).
  9. データスイッチをいろいろ変えて,WRスイッチを押すと7セグがそれに応じたパターンで表示される.
  10. つぎに,DISP1に表示させてみよう.そのためには,ポートCの0ビットを1にする必要がある.データスイッチを0000 0011にして,ALEボタンを押す.これでデータバスがポートBに接続される.
  11. データスイッチを0000 0001にして,WEボタンを押す.すると,DISP2からDISP1に表示が変わる.

READING AN OUTPUT PORT

ポートを出力に設定していても,データを読み出すこともできる.

  1. ポートCを使うためのアドレスを設定する.データスイッチを0000 0011にして,ALEボタンを押す.
  2. RDボタンを押すと,ポートCのデータを読み出すことができる.データに応じたアドレス/データスイッチの上のLEDが点灯する.ポートCは6ビットで,表示された上位の2ビットは意味はなく,1になるようである.
  3. 同様に,他もアドレスの指定とRDボタンを押すことによりデータを読み出すことができる.

ページ作成情報

参考資料

  1. データシート「8155(H)/8156(H)」
  2. 半導体コレクション展示会場8155, 8156のページ
  3. MM-8000のマニュアルのLesson 4

更新履歴

2008年01月04日 ページの新規作成
2014年01月04日 表示の一部変更


no counter