• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:pic のポート出力がされない)

picのポート出力がされない

このQ&Aのポイント
  • picのポート出力がなぜか正しく動作しません。なぜでしょうか?
  • 16F648AのPORTAのbit4(RA4)を出力設定しようとしていますが、うまくいきません。
  • プログラムの中でH/Lレベルを出力するように設定しているはずですが、bit4の出力が正しくない問題に困っています。

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

  • ベストアンサー
noname#230359
noname#230359
回答No.1

フリー・エムエルというサイトがあります。 その中にMLコミュひろばというコーナー(MLメーリングリスト)があり、 その中にPIC-MLというMLがありますから、そちらで質問してはいかがでしょうか。 会員登録(無料)が必要ですが。

参考URL:
http://www.freeml.com/
noname#230358
質問者

お礼

早速回答いただきありがとうございました お礼のページに入る方法を忘れてしまっていて遅れました 土曜に登録をしたのですが休日のせいか登録に対する確認メールが入りませんでした 今日再度トライします ありがとうございまいた

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

noname#230359
noname#230359
回答No.2

毎度JOです。 PORTA bit4(RA4)はオープンコレクタ出力です、 従って抵抗器(10kΩなど)でプルアップしなければ正常に出力されません。   5V   |   10kΩ   |   RA4 -出力

noname#230358
質問者

お礼

早速回答いただきありがとうございました お礼のページに入る方法を忘れてしまっていて遅れました  土曜夜に手直しをしまして OK でした きちんと勉強をしないのにすぐに動いてほしいという身勝手さでいますもので皆さんにご迷惑をおかけします 助かりました

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • PIC16F88の使い方?に関する質問(アセンブラ)

    現在PICの16F88に書きこむプログラムをアセンブラで書いてます。4番ピンのMCLRをRA5として使いたいのですが、MPLABのWATCHの機能を使って、ポートAの動きを見てみると、ポートAが出力になっているはずなのに、何をしてもポートAの0~4がHにならず、ポートAのRA5はBSF,BCFの命令が利きません。コンフィグの設定が怪しいと思うのですが、自分には理由が分からないので、誰か教えてください。お願いします。(下に書いたプログラムはテスト用に書いたプログラムなので特に目的はありません) ;外部発振,セラロック20MHz使用 LIST P=PIC16F88 INCLUDE P16F88.INC __CONFIG _CONFIG1, _CP_OFF & _DEBUG_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC __CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF BSF STATUS,RP0 MOVLW B'000000' MOVWF TRISA MOVLW B'00000000' MOVWF TRISB BCF STATUS,RP0 MAIN CLRF PORTA MOVLW B'11111111' MOVWF PORTA MOVWF PORTB BSF PORTA,0 BCF PORTA,0 BSF PORTA,1 BCF PORTA,1 BSF PORTA,2 BCF PORTA,2 BSF PORTA,3 BCF PORTA,3 BSF PORTA,4 BCF PORTA,4 BSF PORTA,5 BCF PORTA,5 GOTO MAIN END

  • PIC16F84Aで入力があるとスタートするプログラム

    PIC16F84Aで、アセンブリ言語でプログラムをしています。 RA4を入力端子とし、入力があればプログラムがスタートするということをしたいんですけどうまくいきません。 私の作ったプログラムはこのようになっています。  listp=16f84A   include <p16f84A.inc>  __CONFIG _HS_OSC & _PWRTE_ON & _WDT_OFF tim1   EQU  0x20      org  0x00      NOP      GOTO start start      BSF  STATUS,RP0      MOVLW B'00010000'      MOVWF TRISA      CLRF TRISB      BCF  STATUS,RP0      MOVLW B'00010000'      MOVWF PORTA      CLRF  PORTB main      MOVLW  001h      MOVWF  tim1 timlp1  BTFSC  PORTA,5      CALL   playball      GOTO   main playball      MOVLW  B'00001111'      MOVWF  PORTA      MOVLW  B'11111111'      MOVWF  PORTB      RETURN 修正点などありましたら教えて下さい。

  • PIC 初歩プログラムについて

    PICの初めてのプログラムを書いたのですがテキストのように動きません。 ORG 0 ; MAIN  BSF STATUS,RP0 MOVLW B'00000000' ;ポートB 出力 MOVWF TRISB ; MOVLW B'00001111' ;ポートA 0,1,2,3入力 MOVWF TRISA ; BCF STATUS,RP0 SW BTFSS PORTA,0 GOTO  LED1 BTFSS PORTA,1 GOTO LED2 GOTO SW LED1 MOVLW B'00000010' MOVWF PORTB GOTO SW LED2 MOVLW B'00000001' MOVWF PORTB GOTO SW END 入力SWを押していないときがHIです。したがって何もしなければSWのループになると思うのですが、LED2に行ってしまいます。BTFSC POARTA,1とすればSWループ状態ですがテキストとは違います。 何かおかしいのでしょうか?

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

    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がすべて立つのですが、 ループ中にやっても何も変化がありません。 ループしていないか、判定ができていないかのどちらかなのですが・・・。 デバッグしてみても、きちんとループ・判定できているのですが いざ焼いてみると動作しません。わかりますでしょうか。

  • PIC16F88のアナログコンパレータ使用について

         LIST    P=PIC16F88 #INCLUDE<P16F88.INC> __CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF &                    _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF &                    _PWRTE_ON & _WDT_OFF & _HS_OSC __CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF VAR1 EQU 0x20 VAR2 EQU 0x21 ORG 0 start      BCF       STATUS,RP1      BSF       STATUS,RP0   ;bank1へ移動      CLRF      TRISB       ;PORTBをすべて出力      MOVLW     0xff      MOVWF     TRISA       ;PORTAをすべて入力      MOVLW      x05        ;コンパレータ1つのみ使用      MOVWF     CMCON      BCF       STATUS,RP0   ;bank0へ移動      CLRW      MOVWF     PORTB      MOVLW     0xff      MOVWF     PORTA 18ピンのPIC16F88の内蔵アナログコンパレータ(RA1/AN1とVINRA2/AN2/CVREFが入力、C2OUTが出力の1つのみ利用する設定)を使用しPORTBからLEDへ出力し電圧の大小の判定を行いたく、上記のような設定でプログラムをつくりコンパイルは通ったのですが動作せず、 MPLABのデバッグにて確認したところ『MOVWF PORTA』の部分でPORTAのレジスタ値が0x00から変化しておりませんでした。 『BCF STATUS,RP0』まではレジスタ値は変化しており、 STATUSは0x1cでbank0、TRISAは0x3fで入力、ANSELはデフォルトで0x7fでアナログ入力 になっているのですが、何故PORTAが値を入れても変わらないのか原因が分かりません。 分かる方、ご教授頂けますと幸いです。 宜しくお願い致します。

  • PICで1秒間の豆の数をカウントするプログラム

     PIcの初心者です。回路図を見て、基板を作れる程度、プログラムは書いてあるのを打ち込める程度で、意味はまったくわかりません。  PIC16F84のPICでカウントする公開の回路を見つけて、光りセンサ-回路でON.OFFさせるかいろも作りました。プログラムは作成者のものです。 見て書き込んで、なんとか見事にカウントしました。合計数は、わかりました。 質問は、 1,このプログラムを直して、1秒間あたり、何粒落ちるかカウントしたいと考えました。  どのように、すれば良いのか教えてください。 2,合計のカウンタ-と秒速何粒落ちているかプログラムを1つのPICに入れて、動作の最初に選択 できるようにしたいのですが、どのようにしたらよいでしょうか。  PICの回路図とプログラム(テキスト形式)を添付しています。   お願いします。私の連休中の宿題で困っています。 7セグメントLED表示4桁カウンタ ; (クロック 4MHz) ; [ ご注意 ] ;PIC プログラムには秋月電子製のライター・キットを使用しているため、アセン ;ブルにはキットに付属のアセンブラを使用しています。 ;プログラム本体は PIC の基本命令だけでの構成に書き替えていますが、ヘッ ;ダー部分などが異なる場合がありますので、他のアセンブラを使用する場合は ;適宜変更してご利用下さい。 include 16f84.h .16f84 .osc hs .pwrt on .wdt off .protect off countsw equ rb.0 ;カウント入力ポート org 0ch d1 ds 1 ;カウント用 d2 ds 1 d3 ds 1 d4 ds 1 swlc ds 1 ;swait でのループ回数 sd ds 1 ;表示データ (0~9) lc ds 1 ;汎用、ループ用 org 0 goto start org 4 goto start start ;初期設定 bsf 3h,5 ;ページ 1 movlw 10000b movwf 85h ;ポート ra の初期化 movlw 00000001b movwf 86h ;ポート rb の初期化 bcf 3h,5 ;ページ 0 clrf d1 ;カウントデータの初期化 clrf d2 clrf d3 clrf d4 ct10: btfsc countsw ;入力が 0 なら次をスキップ goto ct12 call swait btfsc countsw ;入力が 0 なら次をスキップ goto ct12 ;確かでないなら戻る incf d1,1 ;加算 movlw 10 subwf d1,0 btfss 3h,2 goto ct11 clrf d1 incf d2,1 movlw 10 subwf d2,0 btfss 3h,2 goto ct11 clrf d2 incf d3,1 movlw 10 subwf d3,0 btfss 3h,2 goto ct11 clrf d3 incf d4,1 movlw 10 subwf d4,0 btfss 3h,2 goto ct11 clrf d4 ct11: call swait btfss countsw ;入力が 1 なら次をスキップ goto ct11 ;入力が 1 になるのを待つ call swait btfss countsw ;確かに入力が 1 に戻ったかを確認 goto ct11 ct12: movlw 11111110b movwf rb movlw 01101b movwf ra ;桁4へ表示 movf d4,0 movwf sd call l7ptset call wait movlw 11111110b movwf rb movlw 01110b movwf ra ;桁 3 へ表示 movf d3,0 movwf sd call l7ptset call wait movlw 11111110b movwf rb movlw 00111b movwf ra ;桁 2 へ表示 movf d2,0 movwf sd call l7ptset call wait movlw 11111110b movwf rb movlw 01011b movwf ra ;桁 1 へ表示 movf d1,0 movwf sd call l7ptset call wait goto ct10 ;********************************************************************* l7ptset: ;sd に指定された 0~9 の数字をセットする bcf 3h,0 ;キャリフラグのクリア rlf sd,1 ;4倍 rlf sd,1 movf sd,0 ;sd の値を w にコピー addwf pc,1 ;プログラム・カウンタに加算 movlw 00000010b ;0 movwf rb goto pt10 nop movlw 11100110b ;1 movwf rb goto pt10 nop movlw 10010000b ;2 movwf rb goto pt10 nop movlw 11000000b ;3 movwf rb goto pt10 nop movlw 01100100b ;4 movwf rb goto pt10 nop movlw 01001000b ;5 movwf rb goto pt10 nop movlw 00001100b ;6 movwf rb goto pt10 nop movlw 11100010b ;7 movwf rb goto pt10 nop movlw 00000000b ;8 movwf rb goto pt10 nop movlw 01100000b ;9 movwf rb pt10: return ;********************************************************************* swait: ;カウント入力時のウェイト・ルーチン movlw 6 ;6回のループ movwf swlc swt10 movlw 11111110b movwf rb movlw 01101b movwf ra movf d4,0 movwf sd call l7ptset call wait movlw 11111110b movwf rb movlw 01110b movwf ra movf d3,0 movwf sd call l7ptset call wait movlw 11111110b movwf rb movlw 00111b movwf ra movf d2,0 movwf sd call l7ptset call wait movlw 11111110b movwf rb movlw 01011b movwf ra movf d1,0 movwf sd call l7ptset call wait decfsz swlc,1 goto swt10 return ;********************************************************************* wait: ;ウェイトルーチン(1桁の表示時間) movlw 100 movwf lc wt10 decfsz lc,1 goto wt10 return

  • PICアセンブラを出来る方、教えてください!

    初めに、カテゴリー間違ってたら、ごめんなさい。 大学の授業でライントレースロボットのアセンブラプログラムをやっています。 「以下のプログラムをセンサ入力をPORTA、モータドライブをPORTBとしプログラムを完成させよ(本講義で用いる装置はそのような回路になっていないので実行できない)。」 という問題なんですが分かる方居ますでしょうか? ;改造するプログラム ーーーーLIST P=PIC16F628A ーーーーinclude "P16F628A.inc" ーーーー__CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _LVP_OFF & _CP_OFF STATUS EQU 3 RP0 EQU 5 PORTA EQU H'05' PORTB EQU H'06' TRISA EQU H'85' TRISB EQU H'86' LR EQU D'7' LL EQU D'0' FRONT EQU B'00011000' RIGHT EQU B'00001000' LEFT EQU B'00010000' ーーBSF STATUS,RP0 ーーCLRF TRISA ーーMOVLW B'11000011' ーーMOVWF TRISB ーーBCF STATUS,RP0 ーーCLRF PORTA ーーCLRF PORTB LINE BTFSC PORTB,LL ーーGOTO MIGI ーーBTFSC PORTB,LR ーーGOTO HIDARI ーーGOTO MAE MAE MOVLW FRONT ーーIORWF PORTB,1 ーーMOVLW B'11011011' ーーANDWF PORTB,1 ーーGOTO LINE MIGI MOVLW RIGHT ーーIORWF PORTB,1 ーーMOVLW B'11001011' ーーANDWF PORTB,1 ーーGOTO LINE HIDARI MOVLW LEFT ーーIORWF PORTB,1 ーーMOVLW B'11010011' ーーANDWF PORTB,1 ーーGOTO LINE ーーEND 私が今、予想しているのは MOVLW B'11111111' MOVWF TRISA CLRF TRISB とするのではないかな、くらいです。(合ってるか分かりませんが) この問題を解ける方、いましたらお願いします。 (注)プログラムがスペースが分かりにくくなっていますが、本当のプログラムはちゃんとスペースが空いて、列も揃っています。行の先頭に付いているーは強制的に左寄せになるのを、すこしでも見やすくするための物で、意味はありません。

  • PIC 簡単なプログラミングで行き詰まりました

    PIC初心者です。よろしくお願いします。 PIC16F84Aを使って 「ポートA 0bIt 」 に入力があったとき(1になったとき) ラベルの「OPEN」に飛びポートBのLEDが一秒点灯。 「ポートA 1bit 」に入力があったとき ラベルの「CLOSE」に飛びポートBのLEDが一秒点灯。 これだけのプログラムなのですが MPLAB IDE v8.63で Debug all すると ;の記述のところで表記のエラーが出ます。 プログラムはこちらです。 list P=pic16f84a include "p16f84a.inc" __CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF CNT1     EQU   0CH CNT2    EQU   0DH CNT3     EQU  0EH       ORG    0      GOTO    MAIN           MAIN      BSF    STATUS,RP0      MOVWF    TRISA      CLRF    TRISB      BCF    STATUS,RP0      CLRF    PORTB      CLRW LOOP      BTFSC    PORTA,0      GOTO   OPEN      BTFSC   PORTA,1      GOTO    CLOSE     ;ここで「Symbol not previously defined (CLOSE)」 のエラー                        GOTO    LOOP OPEN      MOVLW    010H      MOVWF    PORTB      CALL   TIMER3    ;ここでSymbol not previously defined (TIMER3)エラー                             CLRF    PORTB      END CLOSE   MOVLW    020H      MOVWF    PORTB      CALL   TIMER3      CLRF   PORTB      END TIMER1     MOVLW    D'62'       MOVWF    CNT1 LOOP1     NOP       DECFSZ    CNT1,1       LOOP1       RETURN TIMER2     MOVLW    D'100'       MOVWF    CNT2 LOOP2     NOP       CALL    TIMER1       DECFSZ    CNT2,1       goto     LOOP2       RETURN TIMER3     MOVLW    D'100'       MOVWF    CNT3 LOOP3     NOP       CALL    TIMER2       DECFSZ    CNT3,1       goto     LOOP3       RETURN      END 何日も堂々巡りをしてまして埒があかないので質問させていただきました。 どこが間違えているのでしょうか???? よろしくお願いいたします。

  • PIC 初心者で行き詰まりました(汗、、、)

    PIC初心者です。よろしくお願いします。 PIC16F84Aを使って 「ポートA 0bIt 」 に入力があったとき(1になったとき) ラベルの「OPEN」に飛びポートBのLEDが一秒点灯。 「ポートA 1bit 」に入力があったとき ラベルの「CLOSE」に飛びポートBのLEDが一秒点灯。 これだけのプログラムなのですが MPLAB IDE v8.63で Debug all すると ;の記述のところで表記のエラーが出ます。 プログラムはこちらです。 list P=pic16f84a include "p16f84a.inc" __CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF CNT1     EQU   0CH CNT2    EQU   0DH CNT3     EQU  0EH       ORG    0      GOTO    MAIN           MAIN      BSF    STATUS,RP0      MOVWF    TRISA      CLRF    TRISB      BCF    STATUS,RP0      CLRF    PORTB      CLRW LOOP      BTFSC    PORTA,0      GOTO   OPEN      BTFSC   PORTA,1      GOTO    CLOSE     ;ここで「Symbol not previously defined (CLOSE)」 のエラー                        GOTO    LOOP OPEN      MOVLW    010H      MOVWF    PORTB      CALL   TIMER3    ;ここでSymbol not previously defined (TIMER3)エラー                             CLRF    PORTB      END CLOSE   MOVLW    020H      MOVWF    PORTB      CALL   TIMER3      CLRF   PORTB      END TIMER1     MOVLW    D'62'       MOVWF    CNT1 LOOP1     NOP       DECFSZ    CNT1,1       LOOP1       RETURN TIMER2     MOVLW    D'100'       MOVWF    CNT2 LOOP2     NOP       CALL    TIMER1       DECFSZ    CNT2,1       goto     LOOP2       RETURN TIMER3     MOVLW    D'100'       MOVWF    CNT3 LOOP3     NOP       CALL    TIMER2       DECFSZ    CNT3,1       goto     LOOP3       RETURN      END 何日も堂々巡りをしてまして埒があかないので質問させていただきました。 どこが間違えているのでしょうか???? よろしくお願いいたします。

  • 電子工作

    簡単なLED点灯回路を作ってみようと思っています。 アセンブラ言語は初めてなんですが、テストプログラムを見たのですがよくわかりません。分かる方、教えてください。 これは7セグドライバーを用いてアノードコモンの二桁LEDを光らせる ものなんですが、以下がそのテストプログラムです。 org 00h bcf STATUS,RP1 bsf STATUS,RP0 ;Bank1へ切り替え movlw b'00000100' ;RA2をアナログに設定 movwf ANSEL movlw b'00000100' ;RA2を入力に設定 movwf TRISA movlw b'00000000' movwf TRISB movlw b'01110000' ;発振周波数8Mに設定 movwf OSCCON movlw b'00000101' movwf OPTION_REG bcf STATUS,RP1 ;Bank0へ切り替え bcf STATUS,RP0 bcf PORTA,0      (1) bcf PORTA,1      (2) movlw d'9'      (3)  movwf PORTB loop nop goto loop end これを実行するとLEDに「99」と表示されます。 便宜上(1)~(3)をここで加えましたが、この部分が何をやっているのか よく分かりません。 まず、(1)と(2)について、 一と十の位ののLEDのコモン(アノード部)をHiにしているのでしょうか? また(3)では7セグドライバは2進で入力しなければならないんじゃないですか?なぜ10進の数字が入力されているんでしょうか。 分かる方、教えてください、よろしくお願いします。