Mire le comparto el código de mi proyecto...utilizo el Pic 12f508 y es un sistema que detecta el agua de un tinaco y dependiendo si tiene agua o no lo llena a través de una bomba. En mi país lo conocen como electronivel.
// PIC12F508 Configuration Bit Settings
// 'C' source line config statements
// CONFIG
#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator)
#pragma config WDT = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config CP = OFF // Code Protection bit (Code protection off)
#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
#include <xc.h>
#define _XTAL_FREQ 4000000 // 4 Mhz OSC
#define INPUT1 GPIObits.GP0 // Asignamos al puerto A1 la etiqueta de "INPUT2"
#define INPUT2 GPIObits.GP1 // Asignamos al puerto A1 la etiqueta de "INPUT2"
#define INPUT3 GPIObits.GP2 // Asignamos al puerto A1 la etiqueta de "INPUT3"
#define INPUT4 GPIObits.GP3 // Asignamos al puerto A1 la etiqueta de "INPUT3"
#define OUT1 GPIObits.GP4 // Asignamos al puerto B1 la etiqueta de "OUT2"
#define OUT2 GPIObits.GP5 // Asignamos al puerto B2 la etiqueta de "OUT3"
void main(void) {
TRISGPIO = 0b001111; //GP0,GP1,GP2,GP3 CONFIGURADOS COMO ENTRADA....GP4,GP5 CONFUGURADOS COMO SALIDA
GPIO = 0b000000; // INICIALIZAR EL PUERTO EN CERO
OPTION = 0b11001111; // apaga timers para usar correctamente el puerto
__delay_ms(200); // Delay de 200 ms, tema de inicialización
while(1)
{
if (INPUT1 == 0 && INPUT2 == 0 && INPUT3 == 1)
{
OUT1 = 1;
OUT2 = 0;//LED INDICANDO CISTERNA LLENA
}
if (INPUT1 == 0 && INPUT2 == 0)
{
OUT2 = 0;//LED INDICANDO CISTERNA LLENA
}
if (INPUT4 == 0)
{
OUT1 = 0;
}
if (INPUT1 == 1 )
{
OUT1 = 0;
OUT2 = 1;//LED INDICANDO CISTERNA VACIA
}
} // Bucle infinito
return;
}