#include <16F628.h>
#FUSES NOWDT // No para el Watch Dog Timer
#FUSES INTRC_IO // Reloj interno RC Osc, no CLKOUT
#FUSES NOPUT // No para el Power Up Timer
#FUSES NOPROTECT // No para protección de lectura del código
#FUSES NOBROWNOUT // No para el brownout reset
#FUSES MCLR // MCLR habilitado para Reset por botón
#FUSES NOLVP // No para programado por bajo voltaje. El Pin se usa como I/O
#FUSES NOCPD // No para proteción de lectura de EEprom
#use delay(clock=4000000) // Se informa la frecuencia del reloj
#byte CMCON = 0x1F // Dirección de memoria de la variable, se saca de la Datasheet
#byte VRCON = 0x9F // Dirección de memoria de la variable, se saca de la Datasheet
#bit INDICADOR2 = 0x1F.7 // Salida del comparador 2 POR RB7
#bit INDICADOR1 = 0x1F.6 // Salida del comparador 1 POR RB6
#bit voltaje_alto = 0x06.7 //
#bit voltaje_bajo = 0x06.6 //
#bit PRUEBA = 0x06.1 //
#define led_voltaje_alto PIN_B3
#define led_voltaje_bajo PIN_B2
#define led_voltaje_normal PIN_B4
#define estado_voltaje_alto input_state(voltaje_alto)
#define estado_voltaje_bajo input_state(voltaje_bajo)
void main()
{
SET_TRIS_A(0b11111111); // Todos Input (1 = entrada)
SET_TRIS_B(0b00000000); // Todos Output (0 = salída)
output_low(pin_B0);
output_low(pin_B1);
output_low(pin_B2);
output_low(pin_B3);
// 76543210
CMCON = 0b00110011;
// CMCON7 0 C2OUT Comparator Output 2 (Siempre 0, No se programan, se leen).
// CMCON6 0 C1OUT Comparator Output 1 (Siempre 0, No se programan, se leen).
// CMCON5 1 C2INV Salida directa Comparador 2, 1 salida directa, 0 salida invertida.
// CMCON4 1 C1INV Salida directa Comparador 1, 1 salida directa, 0 salida invertida.
// CMCON3 0 Comparador Input Switch no se usa en este caso de modo 011.
// CMCON2 ) 0 Ver detalles en Datasheet figura 10-1.
// CMCON1 ) 1 Modo 011 para 2 comparadores con una sola Vref.
// CMCON0 ) 1
// Ver Data Sheet Sección 10
// 76543210
VRCON = 0b11101100;
// 7 1 VREN Voltaje de Referencia habilitada (1 = SI; 0 = NO)
// 6 1 VRON salida VREF habilitada (1 = Conecta la salida a RA2)
// 5 1 VRR Selecciona rango del voltaje de referencia (1 = "Low Range"; 0 = "High Range")
// 4 0 No se usa (0)
// 3 1 VR3)
// 2 1 VR2) Conjunto para voltaje de referencia
// 1 0 VR1) 1100 para 2.5 Volt en "Low Range"
// 0 0 VR0)
// Ver Data Sheet Sección 11
while (TRUE)
{
delay_ms( 500 ); // Retardo de un segundo
voltaje_alto = INDICADOR2; // Si la salida del comparador2 es 1, se prende el led
voltaje_bajo = INDICADOR1; // Si la salida del comparador1 es 1, se prende el led
PRUEBA = voltaje_bajo;
//if(estado_motor1 == 1 && estado_motor2 == 0)
if(input_state(PRUEBA) == 1 ) // Si el estado de PRUEBA e igual a 1
{
output_high(led_voltaje_alto); // Enciende el led alto voltaje
// Código
}
}
}