アプリ版:「スタンプのみでお礼する」機能のリリースについて

16F873AにてLEDの点灯

16F873AにてLEDの点灯をさせる回路とプログラムを作っています。
PORTBとPORTCからトランジスタアレイ経由のLEDを接続。
セラロックは10MHz。5V電源を使っています。

普通に点灯は出来ているのですが、RA0からRA3にに入力があったら
点灯パターンを変化させたいです。
MAINにてRA0をチェックして、入力があったらLOOPに移動するつもりですが、
起動後いきなりLOOPに移動してしまいます。

初心者で勉強しているつもりですが、ネットの寄せ集めのコピペで
16F84Aで同じ事は出来ました。16F873Aでは上記のような状態です。

どうか解決方法を教えて下さい。
宜しくお願い致します。


-------------------------------

LIST P=PIC16F873A
INCLUDE P16F873A.INC

__CONFIG _HS_OSC & _PWRTE_ON & _WDT_OFF & _LVP_OFF

GPR_1 EQU 020h
GPR_2 EQU 021h
GPR_3 EQU 022h

ORG 0

INIT
BSF STATUS,RP0
MOVLW 007h
MOVWF ADCON1
MOVLW 00Fh
MOVWF TRISA
CLRF TRISB
CLRF TRISC
BCF STATUS,RP0

MAIN1
BTFSC PORTA,0
GOTO MAIN1
GOTO LOOP

LOOP
MOVLW 01h
MOVWF PORTB
CALL T100mS

MOVLW 02h
MOVWF PORTB
CALL T100mS

MOVLW 04h
MOVWF PORTB
CALL T100mS

CLRF PORTB
CALL T100mS

BTFSC PORTA,0
GOTO MAIN1
GOTO LOOP


; << 100mS待つサブルーチン >>
T100mS
MOVLW 002h
MOVWF GPR_3
T100LP CALL T50mS
DECFSZ GPR_3,F
GOTO T100LP
RETURN

; << 50mS待つサブルーチン >>
T50mS
MOVLW 07Dh
MOVWF GPR_2
T50LP CALL T04mS
DECFSZ GPR_2,F
GOTO T50LP
RETURN


; << 0.4mS待つサブルーチン >>
T04mS
MOVLW 0F9h
MOVWF GPR_1
T04LP NOP
DECFSZ GPR_1,F
GOTO T04LP
RETURN

END

A 回答 (6件)

今までの内容から考えると、可能性が高いのはRA0の入力が、希望後通りの入力レベルになっておらず、


PICの条件判断が狂ってしまうことです。

一度、PICのRA0入力を5Vに接続した場合と、0Vに接続した場合の動作を確認してください。
(シミュレータ動作と同じく、確実な入力論理レベルで調べた方が良いと思います)

それで正しく動くようであれば、RA0の入力回路が間違っていることになります。


すみません、訂正を1つ。
回答2でスイッチOFFのとき0Vになると回答しましたが、抵抗を通して入力が浮いているので、
入力レベルが不安定になっているかもしれません。

この回答への補足

質問と回答が最初から噛み合っていないようです。

ちゃんとまとめて改めて質問させていただきます。

ありがとうございました。

補足日時:2010/10/15 22:06
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2010/10/15 22:02

念のためお伺いします。



このプログラムは、一度LOOPにはいると、
二度とLOOPを脱出できませんが、そのようにおつくりなのですよね。


でなければ、LOOPブロックの最後は、

goto MAIN1にする必要がありますね。

この回答への補足

MPLABのシュミレーションでは
RA0をLOWにすると、MAINに戻っています。

私がわからないのは、なぜMAINのRA0の状態に関わらず
分岐をスルーしてLOOPに移動してしまうのかなのです。

補足日時:2010/10/14 23:19
    • good
    • 0

PICには12Vを直接入力できませんので、


いったんウインカーの信号をリレーで受けるか、トランジスタで受けるか、フォトカプラで受けないといけません。
結局、上記デバイスの二次側をスイッチ代わりに用いることになります。


>BTFSSの文で起動後いきなりLOOPに移動し、時々MAINに戻ってきてまたLOOPに移動する。
>これの繰り返しになっています。

>MPLABのデバッグではちゃんと動作していました。

MPLABでは RA0が1の時はPORTBの点滅が止まり、RA0が0のときはPORTBが順に動いてましたか?

この回答への補足

12Vの入力は3端子で5Vにしようと思っていますが
まずは5V電源でテストしています。


ソースを変更しました。

MAIN
BTFSCPORTA,0
GOTOLOOP
GOTOMAIN1

LOOPの最後
BTFSSPORTA,0
GOTOMAIN1
GOTOLOOP

MPLABのシュミレーションでは
RA0がLOWの時にMAIN
RA0がHIGHの時にLOOPに移動。LOWに戻すとMAINに移動しています。

補足日時:2010/10/14 23:15
    • good
    • 0

補足です。



5V -- 10kオーム -- RA0 -- SW -- 0V

の様にすると、

スイッチOFF時は RA0は 5V,
スイッチON時は 0Vになり、
目的の動作をするのではないでしょうか?
    • good
    • 0
この回答へのお礼

現在は5Vで動作させていますが、
最終的には12Vの車のウィンカー信号に連動させたいと思っています。

ですので、今はスイッチを取り付けていますが、
スイッチが無くても信号の有無で
動作させる事は出来ないでしょうか?

お礼日時:2010/10/14 15:58

スイッチがoffの時は入力は0Vになります。


BTFSC は目的のビットが0の場合、次の命令は無視しますので、GOTO LOOPに
進んでいるのではありませんか?
    • good
    • 0
この回答へのお礼

色々試してるうちに、BTFSCの文をアップしてしまいましたが、元々はBTFSSでした。
申し訳ありません。

BTFSSの文で起動後いきなりLOOPに移動し、時々MAINに戻ってきてまたLOOPに移動する。
これの繰り返しになっています。

MPLABのデバッグではちゃんと動作していました。

お礼日時:2010/10/14 15:22

RA0~RA3の入力論理とプログラムの論理は整合していますか?

    • good
    • 0
この回答へのお礼

回路は
5V電源--SW--10k抵抗--RA0
という感じに繋いでおります。

合っていないのでしょうか?

お礼日時:2010/10/14 12:32

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