-PR-
解決済み

PICアセンブラ、これって変?

  • すぐに回答を!
  • 質問No.94136
  • 閲覧数453
  • ありがとう数5
  • 気になる数0
  • 回答数6
  • コメント数0

お礼率 88% (361/410)

PIC16F84でのアセンブラなのですが、下記のプログラムで・・・。

MAIN
    MOVLW B'00000000'
    MOVWF PORTB
    BTFSC PORTA,3
    GOTO  FINISH
    GOTO  MAIN
FINISH
    MOVLW B'11111111'
    MOVWF PORTB
    END

PortAが入力、Bが出力なのですが、MAINでループしながら待機、
PortAの3bitめがHになったらPortBをすべて立てて終了という感じに
なると思いますが、上手くいかないんです。

3bit目にあらかじめ+5Vを印加しておくと、一瞬でPortBがすべて立つのですが、
ループ中にやっても何も変化がありません。

ループしていないか、判定ができていないかのどちらかなのですが・・・。

デバッグしてみても、きちんとループ・判定できているのですが
いざ焼いてみると動作しません。わかりますでしょうか。
通報する
  • 回答数6
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.6
レベル10

ベストアンサー率 50% (88/175)

回路の方はどうなっていますか?
特に入力ピンの処理は行っていますか?

入力ピンが不安定だときちんと動きません。
もし他のPORTAのピンを使っていなのであればGNDなどにおとすか出力ピンに設定してしまいましょう。

+5Vを印加とのことですが5Vをいれる前のPORTA(3)はGNDになっているのでしょうか?
5Vを直接いれるのであれば10KΩ程度の抵抗でPORTA(3)をGNDに接続しておいてスイッチなどで5Vが直接入るようにしてやればいいです。

また、
    CLRF PORTB
MAIN
    BTFSC PORTA,3
    GOTO  FINISH
    GOTO  MAIN
こっちの方が気持ち的にいいかな?
(PORTBにCLRFって使えたっけな?)
お礼コメント
pythian

お礼率 88% (361/410)

ありがとうございます。
入力ピンの設定はできているのですが、どうしてもダメでした。
ループするところでしていんたいので、もしやと思ってクリスタルを抜いてみたら・・・同じ症状でした。

すみません、発振部分がイカれていたようです。
なんとか正常に動作させることができました。お騒がせして申し訳ありません。
投稿日時 - 2001-06-25 15:43:09
関連するQ&A
-PR-
-PR-

その他の回答 (全5件)

  • 回答No.1
レベル12

ベストアンサー率 33% (196/589)

すみません。 回答では無いです。 PICアセンブラがどのくらい有名なのかわからないのですが、 アセンブラを知っていてもPICアセンブラを知らない人も多いと思います。 PICアセンブラの説明も載っていれば、回答出来る人が増えると思いますが。 例えばBTFSCのコマンドの説明です。 それがわかれば、なぜGOTO文が2つ並んでいるのか分かるのでしょうか?     GOTO  FINISH ...続きを読む
すみません。
回答では無いです。

PICアセンブラがどのくらい有名なのかわからないのですが、
アセンブラを知っていてもPICアセンブラを知らない人も多いと思います。
PICアセンブラの説明も載っていれば、回答出来る人が増えると思いますが。

例えばBTFSCのコマンドの説明です。
それがわかれば、なぜGOTO文が2つ並んでいるのか分かるのでしょうか?
    GOTO  FINISH
    GOTO  MAIN
補足コメント
pythian

お礼率 88% (361/410)

そうですね。お手数をおかけしてすみません。

MOVLW B'00000000'
0hをWReg(作業領域)にコピーします。

MOVWF PORTB
Wregの内容をPORTBに移動します。

これで、マイコンのポートB(出力用/8bit)のビットをすべて0にします。

BTFSC PORTA,3
ポートA(入力用)の3ビット目を見て、0だったら直後の命令をスキップします。

GOTO  FINISH
GOTO  MAIN
1だったらFINISHにジャンプ、それ以外はループ続行です。

FINISH
内では、同じように出力ビットをすべて立てて終了します。

ということなのですが・・・。
5V駆動なので、この3bit目に5Vを入れたりGNDに落としたりしているのですが、ダメでした・・・。(汗)
投稿日時 - 2001-06-22 20:41:43


  • 回答No.2
レベル12

ベストアンサー率 33% (196/589)

BTFSCを調べた所オペランドのビット指定が0~7と成っています。 プログラムで3を指定していると言う事は、4番目のビットになるのではないでしょうか? BTFSC f レジスタ の指定ビットが 0 なら次の命令をスキップ 書式 [label]BTFSCf, b( label は省略可 はスペースを示す ) オペランド f:ファイル・レジスタのアドレス ( 00(00h) ~ ...続きを読む
BTFSCを調べた所オペランドのビット指定が0~7と成っています。
プログラムで3を指定していると言う事は、4番目のビットになるのではないでしょうか?


BTFSC
f レジスタ の指定ビットが 0 なら次の命令をスキップ

書式
[label]BTFSCf, b( label は省略可 はスペースを示す )

オペランド
f:ファイル・レジスタのアドレス ( 00(00h) ~ 127(7Fh) )
b:ビット指定 ( 0 ~ 7 )
補足コメント
pythian

お礼率 88% (361/410)

ありがとうございます。一通りの入力ピンを試してみたのですが、だめでした。
リセット時初からHiになっている時のみ正しく動くのですが、やはりハードウェア側がおかしいのでしょうか・・・。
投稿日時 - 2001-06-22 23:10:09
  • 回答No.3
レベル12

ベストアンサー率 33% (196/589)

PORTAの初期化を行っていないようですが大丈夫でしょうか? よく分かっていないのですが、レジスタのアドレスを初期化で入れるのではないでしょうか? 違っていたら、ごめんなさい。 ...続きを読む
PORTAの初期化を行っていないようですが大丈夫でしょうか?
よく分かっていないのですが、レジスタのアドレスを初期化で入れるのではないでしょうか?
違っていたら、ごめんなさい。
補足コメント
pythian

お礼率 88% (361/410)

初期化として、入出力のモードを設定、出力データを設定というのが必要なのですが、
とりあえずPortAは入力に指定し、出力はしないので初期値は0としてあります。
う~ん、お手上げかもしれません・・・。(笑)
お手を煩わせてしまって申し訳ありません。
投稿日時 - 2001-06-23 01:09:13
  • 回答No.4
レベル12

ベストアンサー率 31% (161/506)

プログラムにおかしいところはないように見えます。 PORTAのI/Oの設定をしていない。 配線が間違っている。 シリアル通信でON=1と思い込んでいる。 などが考えられます。 シリアル通信ではON=1のときと、ON=0のときがありますよね。 たとえば、PCとWonderSwanが逆だということに気付かないと... って、それは私のことです(^^;)。 PORTAの入出力を設定し ...続きを読む
プログラムにおかしいところはないように見えます。

PORTAのI/Oの設定をしていない。
配線が間違っている。
シリアル通信でON=1と思い込んでいる。

などが考えられます。
シリアル通信ではON=1のときと、ON=0のときがありますよね。
たとえば、PCとWonderSwanが逆だということに気付かないと...
って、それは私のことです(^^;)。

PORTAの入出力を設定しているところを数行見せてください。
補足コメント
pythian

お礼率 88% (361/410)

デバッガでは問題なかったのでハード的なものかと思ったのですが、正にその通りでした。(T_T)
クリスタルにつけたコンデンサの不良で、発振されていなかったようです。交換したら無事に動作しました。お騒がせしてすみません・・・。
投稿日時 - 2001-06-25 15:47:06
  • 回答No.5
レベル9

ベストアンサー率 44% (32/72)

\(^o^)/コンバンワ!! IMUSAI時代から、TK80を経て現在まで現役で仕事をしています。 アセンブラなどは懐かしく思い、ついチョッカイを書いてみました。 PICなど秋月電気通商さんなどで売っているあれ?でしょうか? PICは使った事ありませんので、知りませんが予測してみますのでチャレンジしてみて下さい。 【ご質問の整理】 ご質問のビットを確認しているのだが、分岐で実行 ...続きを読む
\(^o^)/コンバンワ!!

IMUSAI時代から、TK80を経て現在まで現役で仕事をしています。
アセンブラなどは懐かしく思い、ついチョッカイを書いてみました。

PICなど秋月電気通商さんなどで売っているあれ?でしょうか?

PICは使った事ありませんので、知りませんが予測してみますのでチャレンジしてみて下さい。

【ご質問の整理】
ご質問のビットを確認しているのだが、分岐で実行されない。と言う事ですね。

【根本原因】
フラグがたたないので分岐しないと思われます。

80系のCPUは、MOV命令などで値を移動しても、移動した数値によりフラグレジスターは変化しません。
68系のMPUは、MOV命令などで数値を移動するだけで、フラグレジスターに変化が表れます。

このPICはどうやら68系CPUみたいですね。

BTFSC PORTA,3 の命令を
BTFSS PORTA,3 に変更してみて下さい。

PORTAの3ビット目が、trueであれば、次の命令をスキップする。と言う事になり、目的が果たせるかと思われます。

我々の時代は、ICEと言うものを使ってCPU自体をシュミレートするマシンを使って、メインボードなどのハードウエア欠陥を治したものです。あの頃が懐かしい。

PICのニューモニック一覧表を添付しておきました。

楽しいPICライフを過ごせると良いですね。
お礼コメント
pythian

お礼率 88% (361/410)

このPICは、ビットのH/Lで単純分岐してくれるので、フラグは考えなくても良いようです。
プログラムには誤りが無いようなんですが(デバッグokでした)、原因は発振部分の不良により、プログラムカウンタが進んでいなかったようです。
お騒がせして申し訳ありません。ありがとうございました。
投稿日時 - 2001-06-25 15:47:00
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


新大学生・新社会人のパソコンの悩みを解決!

いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ