• ベストアンサー

LEDをタイマー機能を使って点滅させるプログラムです

LEDをタイマー機能を使用し、点滅させるプログラムなのですが、 if(input(PIN_b0)){output_c(0b00001111);} delay_ms(20); {output_c(0b11110000);} : : と続ずいていくのですが、もっと点滅速度を速くするには どうすればよいのでしょうか? また、例えばスイッチ1が押されたら、そこのLEDだけを 繰り返し連続で点滅させるには、どのような感じで記述すればよいのでしょうか? 例えばでいいので、普通のC言語だったらどのように記述するのか 教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

例えば・・・ ポートAの0ビット目にスイッチがついてて、0の時オンだとしましょう。 そして、ポートCの0ビット目にLEDがついてて、0を出力すると光るとしましょう。 こんな感じでできませんか? ポートの入出力設定など初期処理 while(1) { /* 無限ループ */  if ((input_a() & 0b00000001)==0) { /* ポートAの0ビット目が0 */   output_c(input_c()^0b00000001); /* ポートCの0ビット目を反転 */  } else {   output_c(0b00000001); /* ポートCの0ビット目に1を出す(LEDを消す) */  }  他の処理(もしあれば)  delay_ms(20); /* ちょっと待つ */ } 入出力の関数は適当です。お使いのコンパイラに合わせて変えてください。

その他の回答 (2)

  • kent85
  • ベストアンサー率52% (38/73)
回答No.2

C があれなら、ASMで考えればいいんじゃないんですか? エスパーしてみたけど構成不明なので、うっさんくっさいです。 C + 擬似コード。  もしもスイッチA/B/Cは別PORTだったら do { /* 無限実行ループ */  sw_a = PORTから読み出す(スイッチA);  if( sw_a は ONか? ) {   /* SW A ON なので LED1 を 200回点滅させる */   int loop;   for(loop = 0; loop < 200; loop++) {    PORT出力(LED1 ON);    delay_ms(20); /* 20msec? / 100msec? の点滅待ち==LED状態保持時間 */    PORT出力(LED1 OFF);    delay_ms(20); /* 20msec? / 100msec? の点滅待ち==LED状態保持時間 */   }   continue;  }  sw_b = PORTから読み出す(スイッチB);  if( sw_b は ONか? ) {   /* SW A と似た感じなので省略 */   continue;  }  sw_c = PORTから読み出す(スイッチC);  if( sw_c は ONか? ) {   /* SW A と似た感じなので省略 */   continue;  } } while(1); /* 無限実行ループ */

  • arain
  • ベストアンサー率27% (292/1049)
回答No.1

http://okwave.jp/qa4293166.html http://okwave.jp/qa4293980.html でも書いてるんだけど、その質問内容じゃどうしようもないんだよ。 >例えばでいいので、普通のC言語だったらどのように記述するのか >教えてください。 そもそも、ANSIに準拠している「普通のC言語」というものには、ビットをそのまま計算したり、ポート出力なんて関数存在しないから。 まず、 ・自分がどのような環境で作成しているか、 ・(課題の?)プログラムがどのような動作をしているか ということを理解することから始めるべき。 特に後者についてはソースがどのように動作しているか理解できれば、おのずとどのようなことが足りないかわかるはず。 >また、例えばスイッチ1が押されたら、そこのLEDだけを >繰り返し連続で点滅させるには、どのような感じで記述すればよいのでしょうか? は、C言語以前に、設計手法の勉強からだね。