電子書籍の厳選無料作品が豊富!

初歩的な質問で申し訳ございません。
H8-3048でスイッチ入力によってLEDを点灯させたいのですが、
スイッチの押されたタイミングによって
LEDの点灯状況が変化してしまいます。
何故でしょうか?回路側の問題?ご助言お待ちしています。
参考までに下にLED点灯ソースコードを示します。
#include <3048f.h>
#define led P1.DR.BYTE /*P1.DR.BYTEをledに割り当て*/
#define sw1 PA.DR.BIT.B2
#define sw2 PA.DR.BIT.B3

void initport(void) /*入出力端子設定*/
{
P1.DDR = 0xff;
PA.DDR = 0x00;
}

int main( void ){
initport();
led = 0x00; /*初期値設定*/
while(1){
if( sw1 == 1 ){ /*sw1が押された時LED点灯*/
led = 0xff;}
else if( sw2 == 1 ){ /*sw2が押された時LED消灯*/
led = 0x00;}
else{
led;} /*それ以外はLEDの状態保持*/
}
}

A 回答 (2件)

それでは、LEDの点灯だけにしましょう。


forループで、LEDに0x00と0xAAを書き込んでください。
LEDが交互に光っていますか?

次に、LEDに0x00とSW1を書き込んでください。
LEDの該当部分が光っていますか?
その位置は正しいですか?

最後に、LEDに0x00とSW2を書き込んでください。
同じくLEDの該当部分が光っていますか?
その位置は如何ですか?

これでダメな場合は、もう、遠隔教示では、ちょっと難しいかも知れません。
    • good
    • 0
この回答へのお礼

またしても返事が遅くなって申し訳ございません。
rot-N様の指示通りに対処してみたところうまくいきました。
どうも、ありがとうございました。

お礼日時:2005/01/23 23:44

まず、これを試してください。



int main( void ){
  initport();
  led = 0x00; /*初期値設定*/
  while(1){
    if( sw1 == 1 ){
      led = 0xff;
    }else{
      led = 0x00;
    }
  }
}

次に、sw1をsw2に変えてコンパイル、実行してください。多分、答えは自分で見つけることが出来るでしょう。

この回答への補足

返事が遅くなって申し訳ございません。
rot-N様に指示されたようにコンパイル、実行したのですが、依然意図していない動作をしてしまいます。
 答えも未だ見つかっていません。申し訳ございませんが、ご教導の程宜しくお願い致します。

補足日時:2005/01/12 00:06
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!