私は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コンパイラを使用しています。
オシレータの設定は何ですか?ウォッチドッグタイマーはオンまたはオフですか? –
#define _XTAL_FREQ 8000000 このラインに従ってオシレータは8MHzに設定されています。私はこれを提出した後でプリプロセッサの部分を編集します。 ウォッチドッグタイマーがオフです。 – user6569498
あなたは外付け発振器を使用していますか? –