ここから本文です

中学校の技術の授業で、JA制御ヒダピオというものを使って、実習をしています。 ...

smilecbh127さん

2013/11/2716:12:43

中学校の技術の授業で、JA制御ヒダピオというものを使って、実習をしています。
配られたプリントに下のようなプログラムが載っていたのですが、このプログラムではどういう動作をするのですか?

なぜそうなるのかも教えてください。よろしくお願いします。
ddrb=255
For i=0 To 7
portB=2^i,300
Next i
End

閲覧数:
479
回答数:
3
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

2013/11/2810:19:56

「JA制御ヒダピオ」でネット検索すると
解説サイトがみつかりました。
ほとんど読んでいないのですが
おもしろそうですね。
http://hidapio.jp/
たぶんこのサイトを一通り読めばわかると思います。

portとなっているので、出力ポートBの8ビットに対して順次ONのビット(端子)を移動しているのでしょう。
後ろの300は何かわかりませんが、おそらく300ミリ秒という時間ではないかと。
たとえば、0.3秒ごとなどに点灯ランプを移動させるかスイッチを切り替えるなどの実験をしたことがあるのでは?

この質問は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

akakusaさん

2013/11/3023:11:43

こんにちは。
一行目は、ポートBの8つのピンを出力ポートにするという意味です。


PortB ?、300 は「ポートBに?の値を 300ミリ秒を出力する」という意味です。
ここで?の値が0の時…「PortB 0、300」は、
0を2進数にして8桁にすると「00000000」となり、
ポートBの8つある全てのピンに「0を300m秒だけ出力する」となり、
ヒダピオの場合は「300ミリ秒だけ消灯する」となります。

また?の値が255の時…「PortB 255、300」は、
255を2進数にして8桁にすると「11111111」となり、
ポートBの8つある全てのピンに「1を300ミリ秒出力する」=「300ミリ秒点灯」となります。

ところで、「PortB 2^i、300」はポートBに「2のi乗」の値を300ミリ秒を出力するという意味で、
また For i=0 To 7 は 変数iの値を0~7まで変えながら、next iまでをくり返しなさい
ということですので
2行目から4行目までの計算は、
ポートBに 2の0乗、2の1乗、、、、、2の7乗を出力していくことになります。

つまり、1、2、4,8、、、、128を300ミリ秒ずつ出力するということになります。
(2の0乗=1、2の1乗=2、、、、2の7乗=128)

これらを2進数にして8桁にすると
「00000001」「00000010」「00000100」「00001000」、、、、「10000000」
となり、「1」に該当するピンだけに「300ミリ秒出力」=「300ミリ秒点灯」するということになります。

結果として、ポートB1(右端)のLEDから順に左にずれながら点灯していくことになります。

最後の行はプログラムの終了で、ヒダピオの場合、全てのLEDが消灯した状態でプログラムは終了します。

プロフィール画像

カテゴリマスター

2013/11/2812:26:11

こんにちは。
一行目は、決まり文句の行です。この行でない可能性があるとしたら、先生に確認してください。
2行目から4行目までが、for nextの計算と、ポートに対する出力です。
2^iの計算結果は、1 => 2 =>4 =>8 =>16 =>32 =>64 =>128 という計算結果になります。
さて、ポートのほうですが、作成したキットによって言い方は変化しますが、
ポートに8つのLEDが接続してあって、横に並んでいる状態、ポートに対して、0を書き込みしたら、全て消灯
ポートに対して、8つのLEDすべて点灯させる値が255という仕様、
さらに、数値1を書き込みしたときに、「右端」のLEDが点灯ということだったとしますと、

今回のループでは、最初のループで1を書き込みして、LED一番右端が点灯、
次のループでは2なので、最初のLEDは消灯します。
これを文字列の表現をすると、
1回目 00000001
2回目 00000010
3回目 00000100
4回目 00001000
5回目 00010000
6回目 00100000
7回目 01000000
8回目 10000000
の数値となります。これは、2進数になっていて、ループ最初の2^0は数値1になります。
このループの表が、そのままLEDが点灯している状態になります。
0が消灯、1が点灯です。
ポートの行の300は、300ミリセカンドということになります。
これ、最後は、左端のLEDが点灯した状態で、プログラムは終了します。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問や知恵ノートは選択されたID/ニックネームのMy知恵袋で確認できます。