• 締切済み

PIC16F877AでRA0をデジタルI/Oに

PICプログラミング初心者です。 テスト回路を作っていたのですが、下記の回路でRB0のスイッチ入力部をRA0に変更したいのですが いろいろ試してどうしてもRA0ではうまく出来ませんでした。 わかるかた教えて下さい、宜しくお願いします。 //HI-TECH //PIC16F877 LED Momentary SW ON_OFF #include <pic.h> #include <htc.h> #define _XTAL_FREQ 20000000 //セラミック発振子:20MHz ディレイ関数用 __CONFIG( PWRTEN // パワーアップタイマ有 enable power up timer & BORDIS // ブラウンアウトリセット有enable brown out reset & UNPROTECT // コードプロテクト無 use UNPROTECT & WDTDIS // ウォッチドックタイマ無 & LVPDIS // 低電圧プログラミング無 low voltage programming disabled & HS // 外部ハイスピード発振子 EXTRC Oscillator, RC on RA7/OSC1/CLKIN ); short int Led = 0; //LED Mode : LED On_Mode = 1, LED Off_Mode = 0 /*///////////////////////// 1mse ディレー関数 /////////////////////////*/ void delay_ms(unsigned long int msec) { while(msec) { msec--; __delay_ms(1); //1msec delay } } void interrupt ISR(void) { INTE = 0; // ext INT Disable PEIE = 0; //Peripheral INT Disable GIE = 0; // Gloval INT Disable delay_ms(50); if(RB0 == 0)//←ここをRA0に変更したい { if(Led == 0) //if LED Not Lighed { Led = 1; //LED Mode : LED ON Mode RD0 = 0; // LED Turn ON } else //if LED Lighted { Led = 0; //LED Mode : LED OFF Mode RD0 = 1; //RD0 port LED Turn off } } INTF = 0; // LED Flag Clear INTE = 1; // ext INT Enable PEIE = 0; // Peripheral INT Disable GIE = 1; //Gloval INT Enable } int main() { ADCON0 = 0x00; ADCON1 = 0x00; //アナログセレクタ アナログ不使用 TRISA=0b11111111;//入出力設定 A,Bポートすべて入力に TRISB=0b11111111; TRISC=0b10111111;//RC6 = TxDなので出力に。RC7はRxDなので入力にする必要あり。 TRISD=0b00000000; INTEDG = 0; // Down Edge Trigger Led = 0; //LED Mode : OFF Mode RD0 = 1; //RD0 port LED Turn off INTF = 0; //INT Flag Clear INTE = 1; //ext-INT Enable PEIE = 0; // Peripheral INT Disable GIE = 1; // Gloval INT Enable while(1) { } return 0; }

みんなの回答

  • paspas
  • ベストアンサー率52% (47/90)
回答No.1

A/Dコンバータだけでなく、アナログコンパレータも禁止する必要があるのではないでしょか? CMCONレジスタを確認してください。

seventozero
質問者

お礼

すいません、アナログセレクタの設定が間違っていました。 回答頂きありがとうございます。

seventozero
質問者

補足

回答頂きありがとうございます。 CMCON = 0b00000111; //PORTAをデジタル入出力使用に設定 を追加してみたのですが、やはりうまくいきませんでした。 すこし気になる点がありプログラムをRA0に変えてもRB0から入力したらONになるという点です。書き込みのやり方が悪いのかなと思い、出力部のを変更してみたり、入力部の指定を出力に変更したりして正常に反映されるのは確認しました。 なにか解決のヒントにならないでしょうか?

関連するQ&A