- ベストアンサー
PIC16F84で作成したプログラム
- PIC16F84のプログラムで、75×255=19125回(多分)繰り返す動作を行うものです。
- 同様の処理を多数行なうため、プログラムの容量オーバーが発生し、アセンブルできなかった。
- シンプルな方法で同様の動作を行う方法はあるかを質問している。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
補足拝見しました。 movlwの問題ではないと言う事ですね。 そして、約100回、同じ物を書かれたのでしょうか? とすると、やはり、容量オーバーしますね。 PICにはあまりプログラム領域はありませんから。 MPLABだと、確かに容量オーバーでアセンブルできないと 思います。(もっと高価なアセンブラをお使いでしたら失礼!) (1)~(2)を数十パターン用意するのでしたら やはり、CALL命令が良いと思います。 そういう書き方は、PICが一番得意とする処です (プログラムカウンタの扱いは柔軟なのに プログラムそのものはガチガチなのが、PICの特徴ですから)
その他の回答 (1)
- tnt
- ベストアンサー率40% (1358/3355)
これだけだと判断が付かないのですが 容量オーバーと言うことは無いでしょう。 エラーは何が出ましたか? アセンブラは何ですか? tm3,tm4はちゃんと定義されていますか? 10進数と16進数はちゃんと区別していますか? そして、もしかして.....ですが、 秋月のアセンブラにはバグがあることをご存じですか? movlwは上手く動きません。 mov命令を代用して下さい
お礼
ありがとうございます。 すいません、説明不足のようでした。 プログラムを多数繰り返すとありましたが、(1)~(2)までの内容の若干違うものを約100回程度繰り返したいと思っています。 数を減らしてアセンブルすると(50回程度)きちんとアセンブルでき、PICも思った動きをしてくれます。 ちなみにアセンブラは秋月ではありません。 友人から教わったHPよりダウンロードしたものです。まだ素人でしてあまり詳しい事は分りませんが、movlwは正常に動きます。 ちなみにこの文を書きながら思いついたのですが revel1 movlw 75 movwf tm3 movlw 255 movwf tm4 call main no1_on decfsz tm4,1 goto no1_on decfsz tm3,1 goto no1_on main mov rb,#11110000b ;(1) mov rb,#10000000b mov rb,#11000000b mov rb,#10100000b mov rb,#11000000b mov rb,#10000000b ;(2) ret では動作的には同じになる。で正解でしょうか?(やってみれば分りますが・・・) 100回程度繰り返すと書きましたが、詳しくは(1)~(2)を十数パターン用意して、それをそれぞれを6~7回で約100回繰り返すというものです。 これなら(1)~(2)の十数パターンをサブルーチンにしてcallで呼び出せば(1)~(2)を何十回も書かなくてすみますよね?なんとなく解決したような気になってきました(素人の勘違いかもしれませんが・・)。 とりあえずこの思いついた方法で試してみます。アドバイスありがとうございました。
お礼
ありがとうございます。 アセンブラはどこかのHPでフリーで入手したものでして、高価な物でないことは間違い無いです。といっても本当に素人レベルなので違いは分りませんが(^_^;)。 やはり、CALL命令ですか。実は最初一生懸命約100回分を書き込んでアセンブルしてました(今から思えばよくやったものです・・・)。 CALL命令ならかなりスマートに出来そうですね。 とりあえずそれでトライしてみます。 ありがとうございました。