- 締切済み
PIC 初級プログラミング
PICプログラミングを初めて1ヶ月ほどの初心者です。下記、困っています。 プログラムサイズが小さいときは問題ないのですが、プログラムサイズが増える(推測です) と暴走する現象が起きています。 正常に動作しているプログラムでも、 'nop' を増やしていくとある時点で暴走します。(メインのループ内、外とも同様です。) この状態で、他の、無駄なコーディング部を削除すると、正常に動作します。 何が原因で、どうすれば長いコードを書き込め、正常に動作できるようになりますが。 PICProg4Uで確認するとプログラムメモリが 0100 を超えるとプログラムが暴走現象がおきます。 MPLAB(v7.6, v8.2, v8.3) それそれで試しましたがどれも同じです。 PIC16F84A, 16F88 を使っていますが両者とも同様に暴走します。 ( 両者ともhexファイルのファイルサイズは1500バイト前後が限界です。) 環境 MPLAB(v7.6, v8.2, v8.3), PICProg4U(v1.3.2.B), RCDライター、自作PC (WinXP, SP3) 以上、アドバイスよろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- undemande
- ベストアンサー率88% (8/9)
アセンブラーでPICをプログラムする場合の、大抵の初心者が犯すミスですね。こちらの中程の「PIC におけるプログラムカウンタ(PC)の操作」の説明欄をよく読んで下さい。特に最後の「0x0800 の壁」が重要ですよ。 http://junkbox.info/pic/index.htm PICは組込み制御用の小型マイコンとして数百円という低価格で提供する為に、様々な部分に工夫(?)を凝らしています。アセンブラーでプログラミングする場合には、特殊レジスターへのアクセスの際のBANK切り替えや、プログラムカウンターサイズ等を十分に気をつけてプログラムすれば、大きなソースでも何も問題なくプログラミングできますよ。 C言語を扱えば、こういった問題は全てコンパイラーが自動判別してアセンブラーソースを作ってくれますから、何も考えなくてよくなりますが、アセンブラーで苦労をして初めて、C言語のありがたさが分かるものです。 ぜひ、PICのアセンブラーを十分に習得して、C言語にも挑戦してくださいね。 がんばってください。
- waewa
- ベストアンサー率25% (1/4)
差し支えなければ100h前後のプログラムを教えてもらえませんか? MOVF xxx,W ADDWF PCL,F RETLW D'10' RETLW D'20' RETLW D'30' RETLW D'40' RETLW D'50' RETLW D'60' このようなプログラムが100hをまたいでいませんか?
- sunanegi
- ベストアンサー率47% (63/134)
16F84AのFlaashROMは000h~03FFh,0400h~1FFh未実装 200h特殊領域 2007h コンフィギューレーションワード プログラムは0000h~03FFhに格納します、(リセット処理、割り込み処理先頭メモリを除く)ユーザーメモリスペースに格納 この場合ユーザーメモリスペース03FFh をオーバーするコードを書いたので 正常にマシン語(バイナリー)に変換されない為暴走します 長いプログラムになる場合、ROM容量の多いPICを選択してください。
お礼
回答ありがとうございます。 16F88で確認しました。( 16F84AよりROMサイズが大 Page0: max. 07FFh ) プログラムがかかれている最終番地は 正常の場合、0105h で nop を1行追加し、暴走した場合、は 0106h でした。 プログラムエリアはまだまだ余裕と考えます 別の 16F88 でも試しましたが同様の結果でした。 16F84Aの場合も、上記とほぼ同じプログラムサイズで暴走が生じます。 何か設定忘れがあるのでしょうか。 その他・・・ 以上 よろしくお願いします。