RTCで読み取った時刻がある時間になったときに,ある関数を読み込みたい

このQ&Aのポイント
  • C言語でPIC16F876を使用して,RTCで読み取った時刻がある時間になったときに特定の関数を読み込むプログラムを作成したいです。
  • プログラムではrtc_data_read()関数で取得した時刻の分が0分または05分の場合にadc_solar()関数を呼び出したいのですが,正しく動作しない問題が発生しています。
  • さらに,ポインタを使用した試みも行いましたが,コンパイルエラーが出てしまいます。正しいプログラムの書き方を教えていただきたいです。
回答を見る
  • ベストアンサー

RTCで読み取った時刻がある時間になったときに,ある関数を読み込みたい

RTCで読み取った時刻がある時間になったときに,ある関数を読み込みたいのですが, どのようにプログラムを書けばいいのでしょうか? ご回答をよろしくお願いいたします. プログラム言語はC言語で,PICは16F876を使用しています. 下記のようにrtc_data_read()関数で使用しているminが0分または05分のときにadc_solar()関数を読み出したいのですが, 下記のプログラムでは初期時刻を59分に設定しているのに,05分となり,時刻が変化してもずっと05分のままになってしまいます. また,ポインタを使用してみましたが,コンパイルエラーが出てしまいます. void Normal(void) { while(flg==0){ rtc_data_read(); if((min=0) || (min=5)){ adc_solar(); } } }

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

  • ベストアンサー
  • kirinoma
  • ベストアンサー率53% (288/542)
回答No.1

組み込みプログラミングとかあまり詳しくないので,見当はずれでしたらすみません. if((min=0) || (min=5)){ これは,=(代入)で結んでよいのですか? minが常に5になりそうです. ==ではないのですか? 以上,参考になりましたら幸いです.

sora_kuu_sara
質問者

お礼

初歩的なところを見落としていました. ==にしたら,きちんと制御できました. 回答していただき,本当にありがとうございました.

関連するQ&A

  • 時刻取得について

    C言語において時刻取得を以下のようにプログラムしたら、プログラムを3回目以上実行すると前回時間内容が常に1回目が表示されてしまいます。どこを直せばちゃんと前回の時刻が正しく表示されるようになるのでしょうか。put()のfopenの"a"の部分は"w"に変えるだけで正しく実行されるのですが、これを"a"にした場合について正しく表示されるようにするということです。 #include <time.h> #include <stdio.h> void get(void); void put(void); char data_file[] = "time.dat"; int main(void) { get(); put(); return(0); } /* 前回の日付・時刻を読込む   */ void get(void) { FILE *fp; time_t t; struct tm *local; time(&t); local = localtime(&t); if ((fp = fopen(data_file, "r")) == NULL){ printf("\a本プログラムを実行するのは初めて\n"); }else { int year, month, day, h, m, s; fscanf(fp, "%d %d %d", &h, &m, &s); printf("前回は%d時%d分%d秒\n", h, m, s); fclose(fp); } } /* 今回の日付・時刻を書き込む   */ void put(void) { FILE *fp; time_t t; struct tm *local; time(&t); local = localtime(&t); if ((fp = fopen(data_file, "a")) == NULL) printf("\aファイルをオープンできません。\n"); else { printf("現在の日付・時刻を書き出しました。\n"); fprintf(fp, "%d %d %d\n", local->tm_hour, local->tm_min, local->tm_sec ); fclose(fp); } }

  • a=a+1;mysub(a);とmysub(a+1);の違いは。

    こんにちは。 MikroCというコンパイラで C言語のプログラムを組んでいます。 ここで、 ある関数に引数を渡すのですが、 a=Adc_Read(0); a=a+10; Delay_Cyc(a); では、期待した動作を しないのですが、 a=Adc_Read(0); Delay_Cyc(a+10); では、期待した動作となります。 また、 a=Adc_Read(0)+10; Delay_Cyc(a); でも、期待した動作となります。 まったく同じのように 思うのですが、 何が違うのでしょうか。 コンパイラが、a=a+xという 書き方を許していない ということでしょうか。 何か分かる人がいましたら、 よろしくお願いします。

  • リアルタイムクロック

    RTC-7301SF(EPSON TOYOCOM)とゆうリアルタイムクロックを使用し、 その計時データをシリアル通信させて、時計機能の確認をしようと しているのですが・・・ 下記のプログラムをステップで実行させると、 ちゃんと時計が進むような形で表示できるのですが、 ループで回すと最初に書いたデータがそのまま 出力され、時計が進んでないような表示になります。 void Rtc_Read(void) {  struct RTC_TIME rtc_clock;    //RTC構造体  if(CONTROL_REG.BIT.BUSY_ADJ){ //BUSYフラグをチェック   usec_timer(TIME_244US);   return;   }   else{   rtc_Get_data(&rtc_clock); //RTC構造体の取得   rtc_time_str(&rtc_clock); //文字列に変換し、シリアル送信   } } シリアル送信後に1秒のウェイトを入れています。 ステップで動作するのに、ループで回すと動作しないとゆうことに なっていて、行き詰っています。 何か参考になるような意見いただければありがたいです。 よろしくお願いします。

  • C言語の標準関数についての質問です。

    C言語の標準関数についての質問です。 実行結果が以下のようになるようにしたいのですが・・・ char moji[]="AB$c5kDp9#s*Gz"; ←この二行は用意されている変数です。 int cnt[4]; 実行結果↓ 英大文字:4 ←cnt[0] 英小文字:5 ←cnt[1] 数字文字:2 ←cnt[2] その他:3 ←cnt[3] 使える関数は ・isdigit ・islower ・isupper です。 ↓ 自分で作ったのですがなかなかできません>< #include <stdio.h> #include <ctype.h> void main(void) { char moji[]="AB$c5kDp9#s*Gz"; int cnt[4]={0,0,0,0},flg; cnt=0; while(flg!='\0') { flg=isupper(moji[cnt]); if(flg!=0) { cnt[0]++; } flg=islower(moji[cnt]); if(flg!=0) { cnt[1]++; } flg=flgisdigit(moji[cnt]); if(flg!=0) { cnt[2]++; } else { cnt[3]++; } } printf("英大文字:%d\n",cnt[0]); printf("英小文字:%d\n",cnt[1]); printf("数字文字:%d\n",cnt[2]); printf("その他:%d\n",cnt[3]); return; } プログラムの訂正や、他にどんなプログラムがあるのか見せてもらいたいです>< ちなみに自分のはflgを立てるやり方なのですが、エラーが・・・・。

  • C言語 main関数とsum関数の記述順について

    はじめまして。 【苦しんで覚えるC言語】(Web版)でC言語を学んでいる初学者です。 【第1部:C言語基礎編】>【関数の作り方】>【自作関数を作る】の部分(http://9cguide.appspot.com/11-01.html#S2)でつまづいています。 下記のような、1から100までの数字の合計を表示するプログラムが例題として取り上げられています。 しかし、ここが理解できないので、次の【プロトタイプ宣言】に進めずにいます。 例題1  sum関数をmain関数の後に記述した場合(プログラムが実行されない)。 #include <stdio.h> int main(void) { return 0; } int sum(void) { printf("%d\n",(1 + 100) * 100 / 2); return 0; } 例題2  sum関数をmain関数の先に記述した場合(プログラムが実行される)。 #include <stdio.h> int sum(void) { printf("%d\n",(1 + 100) * 100 / 2); return 0; } int main(void) { return 0; } 例題1の場合、【まずmain関数を作り、次にsum関数を作りました。この場合、main関数を解析している段階では、sum関数は発見されておらず、従って、main関数の中では、sum関数を使うことは出来なくなってしまいます。】との説明がありますが理解できません。 コンパイラがどのような順番でプログラムを処理しているか理解できていないので分からないのだと思います。 例題1の場合と例題2の場合の両方について、コンパイラがどのような順番でプログラムを処理しているのかを具体的に教えてください。 どうかよろしくお願い致します。

  • 関数に0を代入??

    研究に使うため,C言語のプログラムを読んでいます. 下記のようなプログラムがあるのですが,関数のプロトタイプに0を代入しています,この部分が意味が分からないので,どなたか分かる人がいたら教えてください. class CLASS{ public: virtual void setVar (std::string& rcValue) = 0; }; void ConfigLineChar::setVar( std::string& pvValue ) { *m_pcPar = (Char)atoi( pvValue.c_str() ); } 不必要な部分は削除して書いています.

  • VB 関数

    初めまして。 VB初心者なので,簡単な質問なのかしれませんが御願いします。 C言語で,   int      main        (void) 戻り値の型    関数名      戻り値なし と書きますが,これと同じ意味を持つプログラムをVBで書くとどのようになりますか? 関数の作り方がまだわかってないので教えていただけますか? 宜しく御願いします。 

  • エクセルの時刻関係の関数について教えてください。

    エクセルの時刻関係の関数について教えてください。 深夜の1:00を25:00で表示する関数はありますか? 勤怠表をエクセルにて作成したのですが、上記の問題が解決できなくて 正確な残業時間がもとめられません。 現状は、時:分が三つのセルによって区切られており、それぞれ数字を 出社時刻・退社時刻の時・分を入力することで残業時間が自動計上され その月の合計時間がもとめられるように作りました。 上記のように数字を入力した際に、他のセルでTIME関数を使用して 時間を表示させることによって自動計上をしているので、いわゆる 大元な部分になってきます。 そこで、問題になったのが、深夜残業でも24:00以降がTIME関数だと表示されなくて 正確な残業時間がもとめられません。 一応、他の時間に関係する関数を調べたり、しましたが、よく分かりませんでした。 どんな些細なことでも結構ですので、ご回答をよろしくお願い致します。

  • エクセルで時刻に関する関数ついての質問です。12時50分に20分たして

    エクセルで時刻に関する関数ついての質問です。12時50分に20分たして13時10分にしたいのですが、例えばA1に12:50、A2に20のときに、A3に13:10と表示したいのですがどんな関数を使用すればよろしいでしょうか。

  • マイコンでのC言語でポインタを使用

     C言語の初心者です。マイコンでのC言語で関数を作成しました。  Switch文ではなく、ポインタを使用して作成したいのですが出来ません。 よろしくお願いします。 1)使用する関数です。(作成済み:内容は省略しています) void job_1(void); void job_2(void);      |      | void job_50(void); void job_1(void) { } void job_2(void) { }      |      | void job_50(void) { } 2)関数を使用したい順に並べます。(使用したい関数の順番は変わります) seq_1[1] = ? ; // 関数 job_1 を選択 seq_1[2] = ? ; // 関数 job_5 を選択 seq_1[3] = ? ; // 関数 job_22 を選択 seq_1[4] = ? ; // 関数 job_10 を選択 3)上記の2)の関数を動作するプログラムです。 上記の 1)から3)までの登録、処理プログラムをよろしくお願いします。

専門家に質問してみよう