• ベストアンサー

PICマイコンで変数値の保持

PICマイコンで変数値の保持 PICマイコンでリセット時にリセット前の変数の値を1,2個保持して リセット後に用いたいのですが、なにかいい方法はありませんか? EEPROMは搭載してません。 また外部接続のパーツを増やさないのが望ましいです。 データ領域をうまく使う方法がありますかね? PIC24FJ32GA002です。 開発環境はMPLAB v8.35 C30コンパイラー です。 よろしくお願いします。

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

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

リセット時に電源を落とさないのであれば、RAMはクリアされないのでRAMのデータがそのまま使えます。 だだし、起動した時にリセットされたのか、電源を切断したのか判別する必要があります。多分IOのレジスタを調べれば判るはずです。 電源を切断するならばやはり外部にシリアルのEEPROMが必要です。

kyohei0922
質問者

お礼

初期化さえしなければ、RAMの値はクリアされないということですね? IOレジスタですね!調べてみます。 ありがとうございます。

その他の回答 (1)

  • tadys
  • ベストアンサー率40% (856/2135)
回答No.2

プログラム領域を使う方法は有ります。 データシートの 「4.0 FLASH PROGRAM MEMORY」の項目を読んでください。 ただし、以下のように注意が必要です。 書き換え回数が1万回です。EEPROMは100万回ですから1/100の回数です。 書き込みは64命令(192バイト)単位になります。 書き込む前には512命令(1536バイト)を消去する必要があります。 つまり1536バイトがプログラム用に使用できなくなります。 1536バイトの内1バイトだけ書き変えようとすると最初に1536バイトをRAMに読み込んでおいてから書き戻す必要があります。

kyohei0922
質問者

お礼

プログラム領域を使う方法があるんですね。 512命令を消去というのはプログラム領域を使う場合ですか? データシート見てみます。 ありがとうございます。

関連するQ&A

  • PICマイコン メモリのバックアップ 切換え

    PICマイコンにて電源を切ってもデータを保持したいです。 マイコンはPIC16F84やPIC16F887を使います。 887でEEPROMを試したのですが、書込みのタイミングが悪いのかデータを保持出来ない場合がありました。 基板は、16F84、16F887どちらも共通にしたいので、リチウム電池で保持しようと考えています。 その場合、外部電源とリチウム電池の自動切り替え回路はどのようにすれば良いでしょうか。 簡単な案は、「リレーを使い切り替える。」ですが、他にありましたら教えて頂きたいです。 また、充電電池の場合、参考となる回路があればご紹介ください。 宜しくお願いいたします。 この手のカテゴリはどこなんでしょうか。

  • PICプログラミングをしているのですが、

    PICプログラミングをしているのですが、 グローバルでint型の変数を宣言しているのですが、 割り込み時にインクリメントをしているのですが、 それをログ出力するとインクリメントができていません。 コードの一部を載せます。 http://drp.ly/1pH841 なにかわかる方いらっしゃいましたら教えてください。 PIC24FJ32GA 開発環境 Windows7 64bit MPLAB IDE v8.53 C30コンパイラ よろしくお願いします。

  • PICマイコンでPN9符号生成(C言語)

    PICマイコンでC言語を用いてPN9擬似ランダム符号発生器を作成したいのですが、WEBで検索してみてもディスクリートでの作成方法や、理論的な解説、アセンブラのソースしか見つからず、作業が滞っている状態です。 参考ですがPICはPIC24FJ64GA002,004,PIC24FJ32GA002などで、コンパイラはMICROCHIP C30 を使っています。 上記のマイコン用のソースではなくても構いませんので、PN9符号擬似ランダム符号を生成する C言語のソースを教えて頂けないでしょうか。  また参考となるソースが載っているHP、書籍などの情報でも助かりますのでよろしくお願い致します。

  • PICマイコン(PIC16F73B)書込みについて

    PIC16F73BにCコンパイラで作ったプログラムを書き込もうとしますがエラーが出て書き込みできません。理由と対処方法を教えてください。  ちなみに (1)プログラマーはMPLAB PM3 (2)使用マイコンはPIC16F73B (3)書き込みを行ったときのエラーは   PM3 is unable to read device - Current operation is aborted.  が表示されます。 (4)Read及びVerifyを実施すると以前書き込みができていたため、   Read successfully.   Verify Succeeded.  が表示されます。 なぜ、ReadやVerifyができてWritwができないか不明。 PIC16F73BのBは何か特殊で書き込み等できないのでしょうか? 以上、ご教授、よろしくお願いします。

  • PIC18Fで変数の受け渡しが出来ない

    次の環境でPICを動かしているのですが変数の受け渡しが出来ません。 お心当たりがありましたらご教授いただけないでしょうか。 現象 int val1,Val2; : val1 = 1;・・・・・(1) val2 = val1;・・・・(2) ※(1)ではval1に1が正しく入ります ※(2)でval2にval1の値(1)が正しく入りません ※(2)を「val2 = 1;」とするとval2に1が正しく入ります ※longや関数の戻り値「val=func();」なども(2)と同様に正しく入りません CPU:PIC18F66J15 コンパイラ:CCS ライター:MPLAB ICD2

  • PIC用のCコンパーラーの組み込み

    現在、PICマイコン用Cコンパイラー(デバッカー付き)をインストールしました。しかしながら、ふつうに使用すると、プロンプト画面からいちいちコマンド入力しなければいけないため、統合開発環境であるマイクロチップ社のMPLAB-IDEにCコンパイラ(デバッカ付き)を組み込もう としているのですが、説明書にそれらしいものが見あたりません。誰か、組み込み方を知っている人、教えて下さい。ちなみに、PICのCコンパイラは、(有)データダイナミクスの、PIC Cコンパイラ バージョン3、です

  • マイコンの中のEEPROMについて

    マイコンの中のEEPROMについて マイコンの中(例えばSHシリーズ)にフラッシュROM領域とEEPROM領域があります。 これらは物理的にというか原理的には同じものなのでしょうか。 例えば、両方ともフラッシュメモリーと同じ構造で、アクセス方法(プロトコル?)が違うのでしょうか。 それとも、物理的・原理的に違う仕組みなのでしょうか。 マイコンの外付けのEEPROMとの違いは何がありますでしょうか。 よろしくお願いします。 追伸 もっと適切なカテゴリーがありましたら誘導していただければと思います。

  • picマイコンの中のソースコードを確認したい

    多くの方に教えて頂き、やっと書き込みができました。、pic16f84aのマイコンに何度も変更して書き直しました。その後,偶然に突然正常にマイコンが動作しました。 何度も変更して書き直したためどこを直した時のゴードが良かったのかその後わかりません。 別のpic16f84aのマイコンに書き込んで試みるも相変わらず動作しません。 この動作したpic16f84aのソースコードを確認する方法はありませんか、方法があるとしたらその方法を教えて頂けませんか。お願いいたします。 環境: windows8  MPLAB X IDE XC(8)  pickit3 pickit対応ICSP書き込みアダブター  pic16f84a

  • PIC16F1827のEEPROMへの書込み

    PCM V5.0(PIC用CCS社コンパイラ)を Mplab8.92に組込み、PICkit3を使ってプログラムしています。 PIC16F1827のEEPROMへの書込みがうまくいきません。 RAは入力ポートで固定してあります。 RBは出力ポートでLEDが接続してあります。 テストプログラムは一回のみの動作です。 実機で動作させると RAは固定してあるので当然(4)でLEDが点灯しますが、 実機からCPUを抜き取りMplab上でReadすると EEPROMのアドレス0,1,2は異なるデータであり 動作させるたびに違うデータが書込まれています。 しかし (1) a0=35h (2) a1=a6h (3) a2=93h と定数にすると EEPROMのアドレス0,1,2は正しいデータが 書込まれています。 Q1. a0,a1,a2をポート入力とする場合は CPU自体に何か設定する必要があるのでしょうか? それともプログラムに工夫が必要なのでしょうか? いままで使っていたPIC16F88では このようなことはなかったと思うのですが・・・。 ----- テストプログラム ----- a0 = RA; //(1) write_eeprom (0,a0); a1 = RA; //(2) write_eeprom (1,a1); a2 = RA; //(3) write_eeprom (2,a2); if (a0 == a1 && a1==a2) //(4) RB =255; else RB =0;

  • picの連射状態について

    閲覧ありがとうございます。 現在学校でPICマイコンを使った授業をしており、スイッチを押すと7セグLEDがカウントアップ されるものを作っているのですが、どう作っても連射状態(スイッチを押しっぱなしだと勝手に カウントアップされる)になるのですが、これをスイッチを押すたびにカウントアップするように するにはどうすれば良いのでしょうか? 言語はCで使用PICは16F84A、環境はMPLABでCCS-Cコンパイラを使用 しています。