シフトレジスタの動作シフトレジスタの動作は、以下のようになっています。値を保持することができます。そのためにはシフトクロックが固定されている必要があります。クロックが立ち上がると出力がシフトするこの動作がシフトレジスタと呼ばれるゆえんです。8本ある出力が一つずつ移動(シフト)します。QA出力だけはシフトしてくるデータがありません。ここで使用されるのがシフトデータです。シフトデータから入った値は、QA出力に補充されます。これら三つの動作を使用して出力を決定してやります。希望の値をすべての出力から出すことができるのでしょうか。シフトレジスタの出力は、QAだけです。決定することはできないように思われます。良いということになります。二つの信号だけで多くの出力の値を決定することができます。いくつか問題点がないわけではないのです。供給する必要があります。設定するまで時間がかかってしまいます。時間に余裕がある場合に限られます。シフトレジスタの出力はシフトし続けます。このため、シフトしている時の出力は、原則信用できません。出力を一度に変化させられるシフトレジスタも存在します。仕様このアプリケーションは、以下のような仕様で動作します。「シリアル通信で会話が出来、記憶した内容がLEDに表示される」ことです。左端のLEDから順にアドレス"0"から"3"までの内容を表示します。最初にCodeWarriorで新規プロジェクトを以下の手順で作成します。ここでは、V5.0を使って説明します。CodeWarriorを起動します。スタートメニューからCodeWarriorを起動します。"Startup"ダイアログを呼び出します。Dialog..."を選びます。Project"(新しいプロジェクトを作る)をクリックします。Pro「次へ」ボタンをクリックします。Parameters"(プロジェクトのパラメータ)を設定します。Name(プロジェクト名)Extmemory3.mcpLocation(プロジェクトを作成するディレクトリ)C:\Projects\CW\Extmemory3「次へ」ボタンをクリックします。追加するファイルは無いので、そのまま「次へ」ボタンをクリックします。Expert"(プロセッサエキスパート)を設定します。Expert"を選んで「次へ」ボタンをクリックします。Options"を設定します。formatNone「次へ」ボタンをクリックします。"PC-Lint"を設定します。"No"をチェックして「完了」ボタンをクリックします。パッケージを選びます。"MC9S08QG8_16"だけを選択して「OK」ボタンをクリックします。使用する設定を選びます。"Debug"だけを選択して「OK」をクリックします。新規プロジェクトができました。改造することで実現します。作成したリソースを再現します。シリアル通信の設定シリアル通信は、以下の手順で設定します。以下のプロパティを設定します。9600セグメントドライバの設定セグメントドライバは、以下の手順で設定します。以下のプロパティを設定します。以下のプロパティを設定します。桁ドライバは、以下の手順で設定します。以下のプロパティを設定します。以下のプロパティを設定します。周期割り込みタイマは、以下の手順で設定します。以下のプロパティを設定します。Expertにソースコードを生成させます。クリックするとコードが生成されます。最後にプログラムを再現します。最初に"Extmemory3.c"ファイルの編集を行います。テキストエディタを開きます。プログラムを用意しました。前にコピー&ペーストします。main(void)関数の中身を転記します。次に"Events.c"ファイルの編集を行います。テキストエディタを開きます。TI1_OnInterrupt(void)関数の中身を転記します。以上でプログラムは、再現できました。クリックするとコードが生成されます。リソース再設定ここからは、四桁の7セグメントLED出力を扱うための改造を行います。Expert"のリソースの再設定からです。オープンコレクタ出力で受け渡しします。そのため、シリアル出力の位相を反転させなくてはなりません。ビーンのプロパティを変更するだけなので、極めて簡単です。非同期シリアルビーン(AS1)の設定を以下のように変更します。マイコンの出力をそのまま使って2桁のLEDを制御していました。シフトレジスタ74HC164APで間接的に4桁のLEDを制御することにしました。シフトレジスタ制御用の信号として再設定します。シフトクロックとシフトデータの二本です。十の位ドライバ(Dig1)ビーンの設定を以下のように変更します。一の位ドライバ(Dig2)ビーンの設定を以下のように変更します。のちほどプログラミングと一緒に説明します。コードを生成させます。クリックするとコードが生成されます。コンパイルエラーなどが無ければ、いよいよプログラミングです。ビーンの名前を変えたはずなのに上の作業では、桁ドライバビーンの名前を変更しました。実際には、コンパイルエラーは発生しません。そのビーンに関連した関数名なども自動的に修正してくれます。プログラムの意味という面では正しくありません。