07

01

4ビットマイコンプログラミング演習 回答1

2010.07.01(23:03)

【問題1】数字LEDに、0から9まで1秒おきに表示し、繰り返す。

アドレスマシン語ソースコード 解説
00A99->YY = 9
02800 -> AA = 0
041A->OPAを数字LEDへ
053A <-> YAとYを入れ替える
06ECCAL TIMR(A+1)*0.1秒待つ
083A <-> YAとYを入れ替える
0991A + 1 -> AA += 1
0BCAA != A ?Aと10を比較
0DF04JUMP 04一致していなければ04へジャンプ
10F02JUMP 0202へジャンプ


【問題2】数字LEDに、9から0まで1秒おきに表示し、繰り返す。
アドレスマシン語ソースコード解説
00A99->YY = 9
02800 -> AA = 0
041A->OPAを数字LEDへ
053A <-> YAとYを入れ替える
06ECCAL TIMR(A+1)*0.1秒待つ
083A <-> YAとYを入れ替える
099FA + F -> AA += 15
0CF04JUMP 04桁あがりがあれば04へジャンプ
0FF02JUMP 0202へジャンプ

問題2は、問題1よりも1ステップ短くできる。

【問題3】数字LEDに、0からFまで1秒おきに表示し、繰り返す。
アドレスマシン語ソースコード解説
00A99 -> YY = 9
02800 -> AA = 0
041A->OPAを数字LEDへ
0591A + 1 -> AA += 1
073A <-> YAとYを入れ替える
08ECCAL TIMR(A+1)*0.1秒待つ
0A3A <-> YAとYを入れ替える。フラグ=1
0BF04JUMP 04フラグが1なら04へジャンプ

問題3は、問題2よりもさらに短くできる。ジャンプ命令を1つに減らす。


【問題4】2進 LEDを、左からビット6,5,4,3,2,1,0 として、1秒おきに、ビット0から順番に、右から左へ1つずつ順番に点灯させ、一番左にいったら右へもどって、繰り返す。
アドレスマシン語ソースコード解説
00899 -> AA = 9
02A00 -> YY = 0
04E1CAL SETR2進LEDのビット番号Yを点灯
06ECCAL TIMR(A+1)*0.1秒待つ
08E2CAL RSTR2進LEDのビット番号Yを消灯
0AB1Y + 1 -> YY += 1
0CD7Y != 7 ?Y と 7 を比較
0EF04JUMP 04一致していたら04番地へジャンプ
11F02JUMP 0202番地へジャンプ

レジスタを入れ替えなくてもできる。

【問題5】キー入力があった回数を、数字LEDに表示する。最初に0を表示し、任意のキーが押されるのを待ち、押されるたびに1ずつカウントアップする。
アドレスマシン語ソースコード解説
008FF -> YY = 15
02B1Y + 1 -> YY += 1
043A <-> YA = Y
051A -> OpAの値を数字LEDに点灯
063A <-> YY = A
070K -> A数字キーをAへ
08F07JUMP 07キーが押されない間は7番地へ
0B0K -> A数字キーをAへ
0CF02JUMP 02キーが離されたら02番地へジャンプ
0FF0BJUMP 0B0B番地へジャンプ

キーが押されたことと離されたことの両方を確認する。

【問題6】2進LEDを、左からビット 6,5,4,3,2,1,0 として、押されたキーの番号のビットを点灯させる。たとえば、3のキーが押されたら、ビット3 を点灯させ、ほかは消灯させる。次のキーが押されるまでは、その表示を継続する。
アドレスマシン語ソースコード解説
000K -> A数字キーをAへ
01F00JUMP 00キーが押されない間は0番地へ
04E2CAL RSTR2進LEDのビット番号Yを消灯
063A <-> YY = A
07E1CAL SETR2進LEDのビット番号Yを点灯
09F00JUMP 0000番地へジャンプ

2進LEDは消さないとつきっぱなしになる。

【問題7】2進LEDを、左からビット 6,5,4,3,2,1,0 として、押されたキーの値を2進数表示で、各ビットを点灯させる。たとえば、6のキーが押されたら、ビット 2と1 を点灯させ、ほかは消灯させる。次のキーが押されるまでは、その表示を継続する。
アドレスマシン語ソースコード解説
00800 -> AA = 0
02AFF -> YY = F
044A -> M(50+Y)番地にAを代入
05AEE -> YY = E
070K -> A数字キーをAへ
08F07JUMP 07キーが押されない間は07番地へ
0B4A -> M(50+Y)番地にAを代入
0CEDCAL DSPRデータメモリの値を2進LEDに点灯する
0EF07JUMP 0707番地へジャンプ

ビットシフトするよりも短く書ける。

06

30

4ビットマイコンプログラミング演習 出題1

2010.06.30(21:35)

【目的】
4ビットマイコン、レジスタ、フラグ、条件分岐、アセンブリ言語に慣れる。
ビット操作や数値演算、入出力をおこなうプログラムを作る。

【条件】
できるだけ、短いプログラムサイズ、
できるだけ、少ないプログラムステップで、
実行するように書くこと。

回答例のように、表形式で1行1命令で書くこと。

【問題0】
押されたキーを数字LEDに表示する。

【回答例】
アドレスマシン語ソースコード 解説
00K->A押されたキーをAへ
011A->OPAを数字LEDへ
02F00JUMP 000番地へジャンプ


【問題1】
数字 LEDに、0から9まで1秒おきに表示し、繰り返す。

【問題2】
数字LEDに、9から0まで1秒おきに表示し、繰り返す。

【問題3】
数字LEDに、0からFまで1秒おきに表示し、繰り返す。

【問題4】
2進LEDを、左からビット6,5,4,3,2,1,0 として、
1秒おきに、ビット0から順番に、右から左へ1つずつ順番に点灯させ、
一番左にいったら右へもどって、繰り返す。

【問題5】
キー入力があった回数を、数字LEDに表示する。
最初に0を表示し、任意のキーが押されるのを待ち、押されるたびに1ずつカウントアップする。

【問題6】
2進LEDを、左からビット6,5,4,3,2,1,0 として、
押されたキーの番号のビットを点灯させる。
たとえば、3のキーが押されたら、ビット3 を点灯させ、ほかは消灯させる。
次のキーが押されるまでは、その表示を継続する。

【問題7】
2進LEDを、左からビット6,5,4,3,2,1,0 として、
押されたキーの値を2進数表示で、各ビットを点灯させる。
たとえば、6のキーが押されたら、ビット2と1 を点灯させ、ほかは消灯させる。
次のキーが押されるまでは、その表示を継続する。
プロフィール

島敏博

Shima Toshihiro 島敏博
信州アルプスハイランド在住。HaskellとElixirが好き。組み込みソフトウェアアーキテクト、C++プログラマ、山歩き、美術館巡り、和食食べ歩き、日本赤十字社救急法指導員、インデックス投資、クラシック音楽、SESSAME会員、状態マシン設計、モデル駆動開発、ソフトウェアプロダクトライン、Rubyist、実践ビジネス英語

■ ツイッター
http://twitter.com/saltheads
■ Facebook
http://www.facebook.com/saltheads
■ Qiita
http://qiita.com/saltheads

印刷する場合は、ブラウザの印刷メニューではなく、このページの上から3cmくらいの青いところにある、「印刷」を押してみてください。少しうまく印刷できます。まだ完全ではないのですが、これで勘弁してください。


カテゴリ
最新記事
月別アーカイブ
最新コメント
検索フォーム
リンク
sessame
RSSリンクの表示