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がすべて立つのですが、
ループ中にやっても何も変化がありません。
ループしていないか、判定ができていないかのどちらかなのですが・・・。
デバッグしてみても、きちんとループ・判定できているのですが
いざ焼いてみると動作しません。わかりますでしょうか。
No.6ベストアンサー
- 回答日時:
回路の方はどうなっていますか?
特に入力ピンの処理は行っていますか?
入力ピンが不安定だときちんと動きません。
もし他の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って使えたっけな?)
ありがとうございます。
入力ピンの設定はできているのですが、どうしてもダメでした。
ループするところでしていんたいので、もしやと思ってクリスタルを抜いてみたら・・・同じ症状でした。
すみません、発振部分がイカれていたようです。
なんとか正常に動作させることができました。お騒がせして申し訳ありません。
No.5
- 回答日時:
\(^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ライフを過ごせると良いですね。
参考URL:http://www.phys.waseda.ac.jp/shalab/~riku/resear …
このPICは、ビットのH/Lで単純分岐してくれるので、フラグは考えなくても良いようです。
プログラムには誤りが無いようなんですが(デバッグokでした)、原因は発振部分の不良により、プログラムカウンタが進んでいなかったようです。
お騒がせして申し訳ありません。ありがとうございました。
No.4
- 回答日時:
プログラムにおかしいところはないように見えます。
PORTAのI/Oの設定をしていない。
配線が間違っている。
シリアル通信でON=1と思い込んでいる。
などが考えられます。
シリアル通信ではON=1のときと、ON=0のときがありますよね。
たとえば、PCとWonderSwanが逆だということに気付かないと...
って、それは私のことです(^^;)。
PORTAの入出力を設定しているところを数行見せてください。
この回答への補足
デバッガでは問題なかったのでハード的なものかと思ったのですが、正にその通りでした。(T_T)
クリスタルにつけたコンデンサの不良で、発振されていなかったようです。交換したら無事に動作しました。お騒がせしてすみません・・・。
No.2
- 回答日時:
BTFSCを調べた所オペランドのビット指定が0~7と成っています。
プログラムで3を指定していると言う事は、4番目のビットになるのではないでしょうか?
BTFSC
f レジスタ の指定ビットが 0 なら次の命令をスキップ
書式
[label]BTFSCf, b( label は省略可 はスペースを示す )
オペランド
f:ファイル・レジスタのアドレス ( 00(00h) ~ 127(7Fh) )
b:ビット指定 ( 0 ~ 7 )
この回答への補足
ありがとうございます。一通りの入力ピンを試してみたのですが、だめでした。
リセット時初からHiになっている時のみ正しく動くのですが、やはりハードウェア側がおかしいのでしょうか・・・。
No.1
- 回答日時:
すみません。
回答では無いです。
PICアセンブラがどのくらい有名なのかわからないのですが、
アセンブラを知っていてもPICアセンブラを知らない人も多いと思います。
PICアセンブラの説明も載っていれば、回答出来る人が増えると思いますが。
例えばBTFSCのコマンドの説明です。
それがわかれば、なぜGOTO文が2つ並んでいるのか分かるのでしょうか?
GOTO FINISH
GOTO MAIN
この回答への補足
そうですね。お手数をおかけしてすみません。
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に落としたりしているのですが、ダメでした・・・。(汗)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) Arduino UNO のC言語 2 2023/04/18 19:42
- Visual Basic(VBA) 【VBA】Excelの特定範囲のセルを画像で保存したい 2 2023/01/25 13:06
- Java Java 南京錠 2 2023/02/04 11:46
- Windows 10 windows10のクリーンインストールが完了出来ない 2 2022/06/04 13:33
- その他(プログラミング・Web制作) x86_32のGASの擬似命令 3 2023/06/07 19:55
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- JavaScript カラーミーショップのsectionループ内で、[引数][戻り値]ありの関数的な処理を行いたいです。 1 2022/05/07 19:39
- Visual Basic(VBA) 【VBA】印刷マクロのループ処理が反映されません 3 2022/08/09 02:15
- C言語・C++・C# C言語のwhileを含む関数について 2 2022/12/16 12:28
- Visual Basic(VBA) vbaのループ処理について 6 2022/05/06 15:35
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ライン数とステップ数の違いは?
-
実行ファイルからソースはみれる?
-
素数を求めるプログラム(アセン...
-
Windowsはオープンソースですか?
-
アセンブラ skipzの意味
-
アセンブリ言語について。
-
VC6でIDEでソース部分のアセン...
-
MPLAB IDE v8.92アセンブラにつ...
-
計算機科学 計算機科学に詳しい...
-
アセンブラの本、最近多くなり...
-
フリーの6502アセンブラ
-
CASIOのポケコンZ-1GRのアセン...
-
PC-9801でマシン語を学習するに...
-
VisualStudioでC++からx64のア...
-
アセンブラの擬似命令について
-
エクセルVBAのIf,Then 構...
-
0xffffとは?
-
8ビットのデータの、先頭ビット...
-
ビットシフトってどんな時使うの?
-
ものづくりに向いているプログ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ライン数とステップ数の違いは?
-
アセンブラからC言語に変換する...
-
Windowsはオープンソースですか?
-
[C言語→アセンブリ言語]はどう...
-
実行ファイルからソースはみれる?
-
PICはアセンブラとC言語のどち...
-
void __cdeclなど_
-
アセンブラ言語がわかりません。
-
このアセンブラの意味を教えて...
-
エンディアンについて。
-
アセンブラのコマンドについて
-
PICのアセンブラからC言語へ変...
-
アセンブラで割り算
-
最初のアセンブラ
-
CASIOのポケコンZ-1GRのアセン...
-
SHの命令の意味について
-
PC-9801でマシン語を学習するに...
-
PC-9801 MS-DOSでの実行ファイ...
-
アセンブラのLA
-
masm32がうまく動きません。
おすすめ情報