性格いい人が優勝

PIC16F84のプログラムでこのようなものを作りました。

revel1  movlw75
      movwftm3

      movlw255
      movwftm4

no1_on  movrb,#11110000b     ;(1)
      movrb,#10000000b
      movrb,#11000000b
      movrb,#10100000b
      movrb,#11000000b
      movrb,#10000000b    ;(2)

      decfsztm4,1
      gotono1_on

      decfsztm3,1
      gotono1_on

これは、(1)~(2)の動作を75×255=19125回(多分)繰り返すという物です。
同様の処理を多数行ないたいのですが、プログラムしてみたところ、容量オーバーの為か?アセンブルできませんでした。これを同様の動作でもう少しシンプルに出来ないでしょうか?よろしくお願いします。

A 回答 (2件)

補足拝見しました。


movlwの問題ではないと言う事ですね。

そして、約100回、同じ物を書かれたのでしょうか?

とすると、やはり、容量オーバーしますね。

PICにはあまりプログラム領域はありませんから。
MPLABだと、確かに容量オーバーでアセンブルできないと
思います。(もっと高価なアセンブラをお使いでしたら失礼!)

(1)~(2)を数十パターン用意するのでしたら
やはり、CALL命令が良いと思います。
そういう書き方は、PICが一番得意とする処です

(プログラムカウンタの扱いは柔軟なのに
 プログラムそのものはガチガチなのが、PICの特徴ですから)
    • good
    • 0
この回答へのお礼

ありがとうございます。
アセンブラはどこかのHPでフリーで入手したものでして、高価な物でないことは間違い無いです。といっても本当に素人レベルなので違いは分りませんが(^_^;)。
やはり、CALL命令ですか。実は最初一生懸命約100回分を書き込んでアセンブルしてました(今から思えばよくやったものです・・・)。
CALL命令ならかなりスマートに出来そうですね。
とりあえずそれでトライしてみます。
ありがとうございました。

お礼日時:2003/01/16 20:50

これだけだと判断が付かないのですが


容量オーバーと言うことは無いでしょう。

エラーは何が出ましたか?
アセンブラは何ですか?
tm3,tm4はちゃんと定義されていますか?
10進数と16進数はちゃんと区別していますか?

そして、もしかして.....ですが、
秋月のアセンブラにはバグがあることをご存じですか?
movlwは上手く動きません。
mov命令を代用して下さい
    • good
    • 0
この回答へのお礼

ありがとうございます。
すいません、説明不足のようでした。
プログラムを多数繰り返すとありましたが、(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)を何十回も書かなくてすみますよね?なんとなく解決したような気になってきました(素人の勘違いかもしれませんが・・)。
とりあえずこの思いついた方法で試してみます。アドバイスありがとうございました。

お礼日時:2003/01/15 21:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!