sw1.cを改造
if文の実行内容を変えてみる
if文の実行内容を
PE.DRL.BIT.B0=1;
PE.DRL.BIT.B1=1;
else文の実行内容を
PE.DRL.BIT.B0=0;
PE.DRL.BIT.B1=0;
としてみる
結果:両方同時に光って、両方同時に消える
tera3.cを改造
for文の中の1400000を変えてみる
1400000を小さくする→光る時間が短くなる
1400000を大きくする→光る時間が長くなる
sw1.cを更に改造
プログラムを作成するときのマナー
括弧で囲まれた一連の処理は1段下げる
付属のサンプルプログラムだとwhile文以降が全部揃ってますが、
このままだとどこから何処までが1連の動作かわかり辛い。
括弧の中身に相当する部分は半角スペースかTabを挿入して一段下げましょう。
全角スペースは処理できずエラーになるので全角スペースは使用しないこと。
一度挿入したが最後、どこに全角スペースがあるか見つからなくなり何でエラーが出てるのか分からなくなります。
while文以降を整理してみる。
while(1){
if(PE.DRL.BIT.B2 == 1){
PE.DRL.BIT.B0=1;
PE.DRL.BIT.B1=1;
}else{
PE.DRL.BIT.B0=0;
PE.DRL.BIT.B1=0;
}
}
}
ビルドして書き込んで動作が変わってないことを確認しましょう。
<プログラムの機能>
コメント文
HEW内で深緑色の表示になっている部分がコメント文。
「//」を挿入するとその行の「//」以降の文字がコメント文になる(機械語に変換されない)
「/*」を挿入すると、「*/」がある場所までコメント文になる
説明を挿入したり、機能を一時的に停止したい場合に使う
else文をコメントアウトしてみる
while(1){
if(PE.DRL.BIT.B2 == 1){
PE.DRL.BIT.B0=1;
PE.DRL.BIT.B1=1;
// }else{
// PE.DRL.BIT.B0=0;
// PE.DRL.BIT.B1=0;
} //この括弧をコメントアウトしないように
} //while 終了
} //main 終了
これをビルドして書き込んでみる。
<動作>
SW1を下げて電源ON
LED2つとも光りっぱなし消えない
SW1を上げて電源ON
LED2つとも消えたまま
スイッチを下げるとLED2つとも光る
一度光るとスイッチを上げなおしても光ったまま
<解説>
マイコンでは一度指令が来ると次の指令が来るまでその状態を維持します。
LEDを消灯する指示をコメントアウトしてしまってるので、一度点灯してし
まうと消す手段が無く点灯しっぱなしになります。
改造2
入力をPE02からPE03に変更する
while(1){
if(PE.DRL.BIT.B3 == 1){
PE.DRL.BIT.B0=1;
PE.DRL.BIT.B1=1;
}else{
PE.DRL.BIT.B0=0;
PE.DRL.BIT.B1=0;
} //else 終了
} //while 終了
<動作>
今回はスイッチは関係ありません。
PE03を指で触るとLEDが光ります。
<解説>
端子をON-OFF入力で使用する場合は端子に常に0Vか5Vが接続される状況にする必要があります。しかし、PE03には何も接続されていません。
端子に指を触れると人の体が巨大なアンテナ代わりになります。
人の体をアンテナにした程度ではLEDを光らせることすらできません。
マイコンは省電力化のために非常に小さな電力でも反応するように設計されています。
ただ、0Vや5Vが正しく接続されたポートに指を触れてもアンテナからの信号はかき消されてしまいます。
しかし、0Vも5Vも接続されていない端子ではアンテナからの信号がかき消されません。
今回書き込んだプログラムでは指で受信した信号に反応してLEDが点灯します。
今後他の端子を入力として使用したい場合も同じ現象が起きます。
仮にスイッチを押した時に端子に5Vが接続されるように配線したとします。
スイッチを押して5Vが接続されている間は問題ありませんが、スイッチを押してないときは
端子に0Vも5Vも接続されていない状態になり指で触れただけで反応する不安定な状態になります。
端子に常に0Vが接続された状態にして、スイッチが押されたときに5Vが接続されるように
配線すると配線に大電流が流れて配線が溶けるか電源が壊れます。
常に3本足のスイッチを使い、スイッチを一方に倒すと0V、もう一方に倒すと5Vに接続する事もできますが通常その様な配線は行いません。
プルアップやプルダウンといった配線を行います。
この話はまた今度