Lesson 5 THE TIMER
Elenco Electronics社のコンピュータートレーニングボード MICRO-MASTER MM-8000 の Lesson 5 に関するメモです.ここでは,タイマーの取り扱いを学習します.(参照:MM=8000のマニュアルのLesson 5)
THE TIMER
はじめに
前のLessonでは,MPU 8085の周辺回路であるIntel 8155のRAMとI/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のタイマーの機能を使えるようにするためには,次の手順を踏む必要があります.
- CE を Low にする.これにより,このICが動作状態になります.
- IO/Mを High にする.これにより,アドレスバスとデータバスが,I/Oポートやタイマーに接続されます.
これらのレジスターへの書き込み/読み込みの手順は,RAMやI/Oポートの場合と全く同じようにします.
- AD0〜AD7にレジスターのアドレスを設定します.
- ALEを一度,High にします.この立ち下がりのエッジでアドレスを読み込みます.これにより,操作対象のレジスターが決まります.
- 次のようにすることにより,書き込み/読み込みの動作を行います.
- 書き込み 書き込むデータを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のタイマーの動作内容を理解します.
- 準備
- 電源を ON する.
- RSボタンを押して,8155を初期化する.
- TIMスイッチを off にする.これで,TIMER IN が L になる.
- EN RAMをONにする.これで,8155のCEがLになり,8155を動作状態にできる.
- IO/MをHにする.これで,8155のアドレスデータバスがIOポート・タイマーになる.
- コマンドレジスターの設定
- アドレスの設定で,データスイッチを 0000 0000 にする.これで,AD0〜AD7がすべてLになる.そして,ALEボタンを押す.これで,8155のアドレスが 0000 0000 が指定され,コマンド/ステータスレジスターの読み書きが可能となる.
- 次にコマンドレジスターに書き込みを行う.データスイッチを 0100 0010 にする.
- 01:タイマーを停止
- 0:ポートBの割り込みを禁止
- 0:ポートAの割り込みを禁止
- 00:prot C は入力
- 1:prot B は出力
- 0:prot A は入力
そして,WRボタンを押す.これで,コマンドレジスターに書き込みが完了.すると,DSP1のすべてのLEDが点灯する.ポートはすべて0(初期値)となっており,TIMER OUTは1が出力されているからです.
- カウンターの下位8ビットを設定する.下位8ビットは0000 0110とする.これは,10進数で 6.
- アドレスを入力する.データスイッチを0000 0100にし,ALEスイッチを押す.
- カウンターの下位8ビットを入力する.データスイッチを0000 0110にし,WRボタンを押す.
- タイマーのモードとカウンター上位6ビットを設定する.モードは,M2は0,M1は1で,上位6ビットはすべて0とする.
- アドレスを入力する.データスイッチを0000 0101にし,ALEスイッチを押す.
- タイマーのモードとカウンターの上位6ビットを入力する.データスイッチを0100 0000にし,WRボタンを押す.
- タイマーのカウントをスタート
- コマンドレジスターのアドレスを指定する.データスイッチを 0000 0000 にし,ALEボタンを押す.
- 次にコマンドレジスターに書き込みを行う.データスイッチを 1100 0010 にする.
- 11:モードとカウント数をロードして,スタート.
- 0:ポートBの割り込みを禁止
- 0:ポートAの割り込みを禁止
- 00:prot C は入力
- 1:prot B は出力
- 0:prot A は入力
そして,WRボタンを押す.
- 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サイトなど
|