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
외부 발진기가 있습니까? –