Yamamoto's Laboratory
Lesson
   1.Numbers
   2.Memory
   3.RAM
   4.Ports
   5.Timer
   6.ROM
   7.8085A
   8.Instruction
   9.Monitor
Appendix
コンピューターMPU基礎システム(はじめに) → Lesson 5.

Lesson 5   THE TIMER

Elenco Electronics社のコンピュータートレーニングボード MICRO-MASTER MM-8000 の Lesson 5 に関するメモです.ここでは,タイマーの取り扱いを学習します.(参照:MM=8000のマニュアルのLesson 5)

THE TIMER

はじめに

前のLessonでは,MPU 8085の周辺回路であるIntel 8155のRAMI/Oポートとレジスターについて学習しました.ここでは,8155の残りの機能,タイマーの使い方について学習します.このキットでは,MPU使ってタイマーを制御する前に,人間がスイッチによりタイマーを制御し,その動作を確認することになっています.前の Lesson の学習と同じような経験をします.

タイマーの詳細についてもデータシートがかなり参考になるので,一読を勧めます.8155のブロックダイアグラムとピン番号は,次の図の通りです.

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

タイマー

動作

8115のタイマーは,14ビットのダウンカウンターで,クロック毎にカウンターの値をひとつ減らします.クロック信号は8155のTIMER INから入れて,カウンターの設定に従いTIMER OUTから信号が出力されます.カウントするクロックの回数と出力する信号は,レジスターに値を書き込むことにより設定します.

設定できるカウンターの範囲は,2H(00000000000010)〜3FFFH(11111111111111)です.0Hと1Hは設定できず,丁度14ビット幅です.これを2バイト(16ビット)を用いて設定します.16ビットのうち14ビットがカウンターの設定で,残りの2ビットが次に述べるTIMER OUTの出力方法を決めます.

出力する信号は,レジスターの2ビットのM1とM0により,下図のようになります.カウントするクロックの回数を含め,レジスターの設定方法は次の「使い方」を見てください.

TIMER OUTのタイムチャート.カウンターの値を6と設定した場合.

8155のTIMER OUT
M2 M1 TIMER OUT
0 0 カウンターの残りの半分で Low になる.ひとつパルスが出す.
0 1 カウンターの残りの半分で Low になる.連続的に矩形波を出す.
1 0 カウンターの最後のクロックで Low になる.ひとつパルスが出す.
1 1 カウンターの最後のクロックで Low になる.連続的に矩形波を出す.

使い方

8155には,6つのレジスターがあります.そのレジスターのアドレスと役割は次の通りです.アドレスの'x'は,0でも1でも良いことを示す,いわゆる"don't care"のこと.タイマーの設定のためには,xxxxx000とxxxxx100,xxxxx101を使います.

8155のレジスター
アドレス レジスター名 機能 bit
xxxxx000 コマンド/ステータスレジスター 8155の外部ポートとタイマーの設定を行う.
8511の状態を表す.
8
xxxxx001 PAレジスター Aポートとのデータの受け渡しに使う. 8
xxxxx010 PBレジスター Bポートとのデータの受け渡しに使う. 8
xxxxx011 PCレジスター Cポートとのデータの受け渡しに使う. 6
xxxxx100 カウンター長レジスター カウンターの下位ビットの設定に使う. 8
xxxxx101 カウンター長レジスター タイマーのモードとカウンターの上位ビットの設定に使う. 8
カウンター長レジスターの各ビットの内容

8155のタイマーの機能を使えるようにするためには,次の手順を踏む必要があります.

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

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

  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 で学ぶ タイマーの設定は,コマンドレジスターより決めます.コマンドレジスターに書き込む各ビットは次の通りです.表中の TC は Terminal Count の略で,カウントの終端のことです.

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:なし

ASSEMBLY INSTRUCTIONS

とくに難しい半田付けはなく,マニュアルの通りにすれば,この Lesson の回路は完成します.

CIRCUIT DESCRIPTION

8155と2つの7セグとの接続は,下の図のようになっています.PORT B の出力が7セグのLEDに適当なドライバー回路を通してつながっているのは,I/Oポートの学習の回路と同じです. 7セグの点灯/消灯は,TIMER OUT の出力で決まります.二つの7セグ(ISPLAY 1 と 2) はTIMER OUTが H(1)になるとDISPLAY 1 が,反対に L(0)になると DISPLAY 2 が点灯します.

8155と7セグの接続回路

マニュアルには,スイッチのチャタリング(switch bounce)防止のためのフリップフロップのことが書いてあったが,ここでは省略.

TEST PROCEDURE

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

  1. 準備
    1. 電源を ON する.
    2. RSボタンを押して,8155を初期化する.
    3. TIMスイッチを off にする.これで,TIMER IN が L になる.
    4. EN RAMをONにする.これで,8155のCEがLになり,8155を動作状態にできる.
    5. IO/MをHにする.これで,8155のアドレスデータバスがIOポート・タイマーになる.
  2. コマンドレジスターの設定
    1. アドレスの設定で,データスイッチを 0000 0000 にする.これで,AD0〜AD7がすべてLになる.そして,ALEボタンを押す.これで,8155のアドレスが 0000 0000 が指定され,コマンド/ステータスレジスターの読み書きが可能となる.
    2. 次にコマンドレジスターに書き込みを行う.データスイッチを 0100 0010 にする.
      • 01:タイマーを停止
      •  0:ポートBの割り込みを禁止
      •  0:ポートAの割り込みを禁止
      • 00:prot C は入力
      •  1:prot B は出力
      •  0:prot A は入力
      そして,WRボタンを押す.これで,コマンドレジスターに書き込みが完了.すると,DSP1のすべてのLEDが点灯する.ポートはすべて0(初期値)となっており,TIMER OUTは1が出力されているからです.
  3. カウンターの下位8ビットを設定する.下位8ビットは0000 0110とする.これは,10進数で 6.
    1. アドレスを入力する.データスイッチを0000 0100にし,ALEスイッチを押す.
    2. カウンターの下位8ビットを入力する.データスイッチを0000 0110にし,WRボタンを押す.
  4. タイマーのモードとカウンター上位6ビットを設定する.モードは,M2は0,M1は1で,上位6ビットはすべて0とする.
    1. アドレスを入力する.データスイッチを0000 0101にし,ALEスイッチを押す.
    2. タイマーのモードとカウンターの上位6ビットを入力する.データスイッチを0100 0000にし,WRボタンを押す.
  5. タイマーのカウントをスタート
    1. コマンドレジスターのアドレスを指定する.データスイッチを 0000 0000 にし,ALEボタンを押す.
    2. 次にコマンドレジスターに書き込みを行う.データスイッチを 1100 0010 にする.
      • 11:モードとカウント数をロードして,スタート.
      •  0:ポートBの割り込みを禁止
      •  0:ポートAの割り込みを禁止
      • 00:prot C は入力
      •  1:prot B は出力
      •  0:prot A は入力
      そして,WRボタンを押す.
  6. TIMスイッチをアップ/ダウンを繰り返すことにより,TIMER IN にクロック信号を手動で送る.アップ/ダウンにより,タイマー内部のカウントが 6 → 5 → 4 → 3 → 2 → 1 → 6 → 5 → 4 → 3 → 2 → 1 → 6 → 5 と変化する.カウンターが3と6になったときに,7セグの表示がDSP1とDSP2で入れ替わる.このとき,TIMER OUTの出力が変わるからです.

これでテストは終わりです.カウンターのモードを変えて,いろいろ試すとその動作が理解できるでしょう.

FUNCTIONAL TESTの様子

参考文献・WEBサイトなど



no counter