Sto usando un PIC12F675 per un progetto e tutto funziona bene tranne una cosa. GP4 non funziona come IO digitale. Ho esaminato molto le configurazioni e il codice, ma non sono riuscito a trovare nulla.
config:
#pragma config FOSC = INTRCCLK
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config MCLRE = OFF
#pragma config BOREN = ON
#pragma config CP = OFF
#pragma config CPD = OFF
Codice:
#include <xc.h>
#include <math.h>
#include "config.h"
#define _XTAL_FREQ 4000000
void delay(unsigned int freq){
for(int i = 0; i < (int)freq; i++){
__delay_ms(1);
}
}
void dClock(unsigned int freq){
GPIO1 = 1;
delay(freq);
GPIO1 = 0;
delay(freq);
}
void InitADC(){
ANSEL = 0x11;
ADCON0 = 0b10000001;
CMCON = 0x7;
VRCON = 0;
}
unsigned int GetADCValue(){
ADCON0 = 0b10000011;
while(GO_nDONE);
return (ADRESH << 8) + ADRESL;
}
void main(void) {
TRISIO0 = 1; //analog input
TRISIO1 = 0; //output
TRISIO2 = 0; //indication
TRISIO3 = 1; //mode
TRISIO4 = 0; //halt
TRISIO5 = 1; //pulse_button
char pressed = 0;
GPIO1 = 0;
InitADC();
while(1){
if(GPIO4 == 0){
if(GPIO3 == 0){
GPIO2 = 1;
unsigned int freq = GetADCValue();
dClock(freq);
}
else{
GPIO2 = 0;
if(GPIO5 == 1 && pressed == 0){
GPIO1 = 1;
__delay_ms(50);
GPIO1 = 0;
pressed = 1;
}
else if(GPIO5 == 0 && pressed == 1){
pressed = 0;
}
}
}
}
return;
}
#pragma config FOSC = INTRCCLK
dice al PIC di produrre il suo clock su GP4? Non c'èFOSC
un'opzione diversa che dovresti usare?