• 締切済み

pic のIOポート設定

PICの初心者です。 16F876AのAポートをデジタルに変更したいのですがなかなかうまくいきません。 初心者の質問で申し訳ありませんが教えてください。 よろしくお願いいたします。

みんなの回答

  • koujikuu
  • ベストアンサー率43% (428/992)
回答No.3

BTFSC -> BTFSS 論理が反転しています また PAT1 より戻る時に、PORTA に BANK を戻していますか? /MCLR プルアップ抵抗、発振器はついてますか? RA0-スイッチ RA5-LED で連動テストしました、問題ありません PIC16F877A 使用 MAIN2 BANKSEL TRISA MOVLW B'00001111' MOVWF TRISA MOVLW 0x06 MOVWF ADCON1 BANKSEL PORTA LOOP2 BTFSS PORTA,0 CALL LED_ON BTFSC PORTA,0 CALL LED_OFF GOTO LOOP2 LED_ON BSF PORTA,5 RETURN LED_OFF BCF PORTA,5 RETURN

office3110ss
質問者

お礼

ありがとうございました。 動きました!! 細かいご指導、本当にありがとうございました。 これで今日はゆっくり眠れます。

  • koujikuu
  • ベストアンサー率43% (428/992)
回答No.2

アセンブラの場合 BANKSEL ADCON1 ; RP0,RP1 設定 MOVLW 0x06 MOVWF ADCON1 で合っています、 また RA4 は、オープンドレインなのでHレベル出力はプルアップ抵抗が必要です 具体的症状と、プログラムの提示を願います。

office3110ss
質問者

補足

前段のところです。動作部分の後半は省きます。 単純にプルアップしたRA0のスイッチを押すことでPAT1の動作をするプログラムです。 ;************ list p=16f876A #include <p16F876A.inc> __CONFIG _CP_OFF & _LVP_OFF & _BOREN_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC ;************ CBLOCK 020h COUNT COUNT1 COUNT2 COUNT3 ENDC ORG 0 ;************************* BSF STATUS,RP0 MOVLW B'00001111' MOVWF TRISA MOVLW B'00000000' MOVWF TRISB MOVLW B'00001111' MOVWF TRISC BCF STATUS,RP0 MOVLW B'00000110' MOVWF ADCON1 ; ----------------------------------------------------- MAIN BTFSC PORTA,0 CALL   PAT1  GOTO MAIN ; --------動作1------------------------------------ PAT1

  • koujikuu
  • ベストアンサー率43% (428/992)
回答No.1

XC8 の場合、デジタルモード (A/Dコンバータ未使用)は ADCON1=0x06; // A/D 不使用 を追加して下さい

office3110ss
質問者

補足

ご回答ありがとうございます。 アセンブラなのですが、下記のプログラムを追加したのですがやはりうまくいきませんでした。何か間違っていますでしょうか? またはほかに原因があるのでしょうか? BCF STATUS,RP0 MOVLW B'00000110' MOVWF ADCON1

関連するQ&A

  • 8bitの2進数を入力して2つのポートに(PIC)

    8bitの2進数を入力して2つのポートに出力させる方法 PIC16F886のポートAに8bitの2進数を入力したとします。 そのとき ポートAの入力が   ポートBの出力では  ポートCの出力では ・LLLLLLLL        ・LHHHLHLH   ・HLHLLHLH ・LLLLLLLH   のとき ・LHLLHHHH   ・LHLHLHLH          ・          ・          ・ ・LLLLLLHL        ・LHHLLLLH   ・HLHHHHH ポートAに入力された2進数を変更して、ポートB、ポートCに 出力させて、1チップで14セグメントLED(英数字表示器)を点灯させたいです。 このような動作は可能なのでしょうか?

  • PIC 12F675について

    PICを利用してラジオをシリアルポートでPCに送信しようと思っているのですが、 ラジオのイヤホンの差し込むところの電流をA/Dコンバータを利用し デジタルデータにして送信しようと思っています。 12F675を1つ使ってラジオの電流をA/Dコンバートしてシリアル送信しようと思っていますが このPICの6ピンだけでできるのでしょうか? なにか送信用ICなどが必要でしょうか? よろしくお願いします。

  • PIC16F1823の割り込み処理について

    PIC初心者です。よろしくお願いします。 ※HI-TECH Cコンパイラを使用しています。 最近まで、PIC16F676を使用していましたが、 今回、PIC16F1823に変更することにしました。 プルグラムをPIC16F1823用に変更し、実行したところ思ったように動いてくれません。 いろいろ調べたところ割り込み処理がうまいこと出来ていないような気がします。 割り込みルーチンに飛んだ後、なぜか戻ってこないような気がします。 下記のコードは、簡単に書き直しました。 どなたか分かる方、お願いしますm(_ _)m --------------------------------------------- #include <htc.h> __CONFIG(FOSC_INTOSC & WDTE_OFF & PWRTE_ON & MCLRE_OFF & BOREN_ON & CP_OFF); unsigned int i,Time; void main(void) { OSCCON = 0b01101010; //おそらく4MHz? //ポートA ANSELA = 0x00; //全てデジタル CM1CON0 = 0b00000111; //コンパレート無効化 CM1CON1 = 0b00000111; TRISA = 0b00111110; //ポートA入力出力設定 WPUA = 0b00110110; //ポートAプルアップビット指定 PORTA = 0b00000100; //各ピンデフォルト値 IOCAP = 0b00100000; //割り込みピン指定 //ポートC ANSELC = 0x00; //全てデジタル TRISC = 0b00000000; //ポートC入力出力設定 nWPUEN = 0; //プルアップ有効化 IOCIE = 1; IOCIF = 0; GIE = 1; i = 0; while(1){  if(i){   RC5 =1;   RC0 =0;  }else{   RC5 =0;   RC0 =1;  } } } void interrupt ISR(void){ //割込み if(IOCIF && !RA5){  if(i) i=0;else i=1; } IOCIF = 0; }

  • 初歩のPIC

    最近PICはじめたばかりの初心者です。 16f628Aの機能をみますとRA0~4はディジタルとアナログの入力に対応しています。A/D変換コンバーターがついているわけでもないのに、なぜアナログ入力ピンがあるんでしょうか。あっても意味がないような気がするんですが、どうゆう使い方をするんですか、おしえてください。

  • PIC16F88 動作不良

    PIC初心者です。 PIC16F88を使用してスイッチ入力(Aポート)でAポートでリレーとBポートでスイッチのLEDの制御をしていました。 全16台中1台のみスイッチのLEDが点灯したまま動作しなくなりました。 電源を再投入しても復帰しません。 秋月電子のROMライターで、データーを読み込み、別のPIC16F88に書き込み、同基板にセットして電源を入れると、正常に動作します。 不具合のPICは再書き込みすると、動作してしまい原因がわからなくなりそうなので、再書き込みはしていません。 何が原因(考えられる要因)かわかる方、よろしくお願いします。

  • PICアセンブラでのポート入出力設定の質問です。

    初めに、カテ違いだったらすいません。 大学の授業でPIC16F628Aを用いてライントレースロボットを動かすアセンブラプログラムを作っています。 授業でポートBの入出力設定を MOVLW B'11000011' MOVWF TRISB とTRISBレジスタの入出力設定を行なっていました。  入力が1で出力が0だというのは分かるんですが、どうやって、01を決定しているのかが分かりません。 教科書には、各ポートに接続されているハードウェアに依存すると書いているのですが、理解しにくいので、出来れば例などを上げて頂けたら幸いです。  また、この11000011という設定は、何の意味があるのかも頂けないでしょうか? お願いします。

  • PIC18のポート入出力

    PIC16からPIC18を使おうといろいろ勉強中ですが、PIC18のポートはPIC16と違いLAT*というのがあります。 調べると高速処理時(容量性の負荷)の際の誤動作が防げるということらしいのですがLAT*への出力もPORT*出力も同じことらしいような。 この2つの使い分けは 出力ではLAT* 入力(ポート読み込み)ではPORT*を使うといった感じなのでしょうか? 使い分けはどんな感じなのでしょうか?

  • PICのIOピンからの電流回り込み

    2つのPICのIOピン同士を繋いでRS232C通信を試みています.PICはPIC16F877を使用しております.最初は片方のPICのみに電源を与えて動作させ,しばらくしたらもう一方のPICに電源を与えて動作させたいのですが,片方のPICのみ電源をONにすると,IOピンから電流が流れ,もう一方のPICが動いてしまいます.電流の回り込みという現象らしいのですが,回路でどのように対策したらよいか,方法がわからず困っています.何か方法をご存知の方,ご教授お願い致します.

  • PICでつくりたいです

    今回PICでおもちゃを作ろうと思う初心者です。 ある程度のC言語はわかり、去年は簡単なPICを使ったライントレーサを作りました。そのときには参考となるプログラム、車自体があったので簡単につくることができました。 今回は、一からPICで光から逃げるねずみのようなものを作りたいのですが、まったくどう作っていいかわかりません。 具体的に説明すると、車の上に光センサを数個付け、光の強い方向から逃げるようなものを作る予定です。 ネットでPICなどの検索をいっぱいかけたり、多少本を探してみたのですが、全然参考になるようなものがありませんでした。去年はPICの16F84Aを使用しました。 よろしくお願いします

  • PICで入力ポートの内容を出力ポートにコピーしたい

    PICのプログラムをアセンブラで組んでいるのですが、 どうにもシンプルな書き方ができなそうなのでお知恵をお貸しください。 例えば、 ポートAが入力、それ以外のポートは出力になっているとします。 ・ポートAの0番のオンオフを、ポートBの2番へコピー出力。 ・ポートAの1-3番のオンオフを、ポートCの4-6番へコピー出力。 という感じで、Aのオンオフ状況を、各出力ポートにコピーするということをしたいです。 どのようにしたらスマートに書けるでしょうか? ちなみに各出力ポートに関して、コピーする前に一旦全てオフにする、 というようなことはできません。