2016-07-09 31 views
2

私はPIC16f688を使用して、アナログ入力の読み取りと電圧読み取りに基づいてライトのオン/オフを試みます。このPICを使用して、私は点灯と消灯を使って明かりを点滅させることに成功しました。ここに私が使ったコードがあります。mplabとxc8コンパイラを使用してpic16f688へのアナログ入力を読み取る必要があります

void main() { 
    ANSEL = 0b00000000; //All I/O pins are configured as digital 
    CMCON0 = 0x07; // Disbale comparators 
    TRISC = 0b00000000; // PORTC All Outputs 
    TRISA = 0b00001000; // PORTA All Outputs, Except RA3 

    do { 
     RC0 = 1; 
     __delay_ms(500); 
     RC0 = 0; 
     __delay_ms(500); 
    } while (1); // Infinite Loop 
} 

異なるものを読んだ後、私は、アナログ入力を読み取ろうとするために、このコードで終わりました。

#pragma config FOSC = HS  // Oscillator Selection bits (HS oscillator) 
#pragma config WDTE = OFF  // Watchdog Timer Enable bit (WDT disabled) 
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled) 
#pragma config BOREN = OFF // Brown-out Reset Enable bit (BOR disabled) 
#pragma config CPD = OFF  // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off) 
#pragma config CP = OFF  // Flash Program Memory Code Protection bit (Code protection off) 


#include <xc.h> 
#include <pic16f688.h> 
#define _XTAL_FREQ 8000000 
void main() { 
    int voltage; 
    ANSEL = 0b01000000; //All I/O pins are configured as digital except an6/RC2 
    TRISC = 0b00000100; // PORTC All Outputs except RC2 
    TRISA = 0b00001000; // PORTA All Outputs, Except RA3 

    do { 
     ADCON0 = 0xbb; //set to read 
     GO_nDONE = 1; 
     while(GO_nDONE == 1); 
     voltage = (ADRESH << 8) + ADRESL; //get voltage reading 
     if(voltage > 500){ //if voltage is greater than 500 out of 1023 turn light on 
      RC0 = 1; 
     } 
     else{ 
      RC0 = 0; 
     } 
     __delay_ms(500); 
    } while (1); // Infinite Loop 
} 

これを実行すると、入力が地面に配線されているときを含め、入力が何であるかにかかわらずライトが点灯します。

私はMPLabでXC8コンパイラを使用しています。

+0

オシレータの設定は何ですか?ウォッチドッグタイマーはオンまたはオフですか? –

+0

#define _XTAL_FREQ 8000000 このラインに従ってオシレータは8MHzに設定されています。私はこれを提出した後でプリプロセッサの部分を編集します。 ウォッチドッグタイマーがオフです。 – user6569498

+0

あなたは外付け発振器を使用していますか? –

答えて

0

私はあなたが間違った内部発振器を設定した場合は、外部発振器を使用していることを願っています!

デフォルトのADCクロックはFosc/2で、8Mhzの場合はHighになるため、ADCON1をFosc/16チェックデータシートに設定します。

なぜこの行を削除しましたか?

CMCON0 = 0x07; // Disbale comparators 

必須です!

0

CMCON0 = 0x07を使用してコンパレータを無効にしてみてください。 RC0は正常に機能するはずです。

関連する問題