//******************************************************************************
#include <16F877A.h>
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP,NOBROWNOUT,NOCPD,NOWRT, NODEBUG
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, bits=8)
#use standard_io(a)
#use standard_io(b)
#use standard_io(d)
#byte port_a = 0x05
#byte port_b = 0x06
#byte port_d = 0x08
//******************************************************************************
//Variables
//******************************************************************************
char codigo;
//char counterA = 0;
//char counterD = 0;
//char counterS = 0;
//char counterB = 0;
int sample = 0;
int1 flagB0 = 0;
int1 flagB1 = 0;
int1 flagB2 = 0;
int1 flagB3 = 0;
int1 flagB4 = 0;
int1 flagB5 = 0;
int1 flagB6 = 0;
int1 flagB7 = 0;
int1 flagA0 = 0;
int1 flagA1 = 0;
int1 flagA2= 0;
int1 flagA3= 0;
int1 flagD0= 0;
int1 flagD1= 0;
int1 flagD2= 0;
int1 flagD3= 0;
void int2bcd(int valor);
//******************************************************************************
//INTERRUPCIONES
//******************************************************************************
#INT_RDA //Dato serie recibido
void serie(void)
{
codigo = getc () ; //obtener el valor de codigo
switch (codigo)
{
//Control de la Bomba 1:
/* case '0':
output_bit(PIN_B0,1);
delay_ms(1000);
output_bit(PIN_B0,0);
break;
*/
case '0' :
output_bit (PIN_B0, 1);
flagB0 = 1;
break;
case '1' :
output_bit (PIN_B0, 0);
flagB0 = 0;
break;
case '2':
output_bit(PIN_B1, 1);
flagB1 = 1;
break;
case '3' :
output_bit (PIN_B1, 0);
flagB1 = 0 ;
break;
//Control de la Bomba 2:
case '4':
output_bit(PIN_B2, 1);
flagB2 = 1;
break;
case '5' :
output_bit (PIN_B2, 0);
flagB2 = 0;
break;
case '6':
output_bit(PIN_B3, 1);
flagB3 = 1;
break;
case '7' :
output_bit (PIN_B3, 0);
flagB3 = 0;
break;
//Control de la Bomba 3:
case '8':
output_bit(PIN_B4, 1);
flagB4 = 1;
break;
case '9' :
output_bit (PIN_B4, 0);
flagB4 = 0;
break;
case 'a':
output_bit(PIN_B5, 1);
flagB5 = 1;
break;
case 'b' :
output_bit (PIN_B5, 0);
flagB5 = 0;
break;
//Control de la Bomba 4:
case 'c':
output_bit(PIN_B6, 1);
flagB6 = 1;
break;
case 'd' :
output_bit (PIN_B6, 0);
flagB6 = 0;
break;
case 'e':
output_bit(PIN_B7, 1);
flagB7 = 1;
break;
case 'f' :
output_bit (PIN_B7, 0);
flagB7 = 0;
break;
}
}
//******************************************************************************
//FUNCIONES
//******************************************************************************
void confi(void);
//******************************************************************************
//PROGRAMA
//******************************************************************************
void main(void)
{
{
/* while (1)
{
char A,B,C;
A = getc ();
B = getc ();
C = getc ();
if ( A=='o' && B=='-' && C=='o')
break;
*/ }
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
enable_interrupts (INT_RDA) ;
enable_interrupts (GLOBAL); //activadas interrupciones
set_tris_b (0xFF);
//*********************************************************************************
//Definir estado de las entraras de los sensores a la bomba
//*********************************************************************************
//Puerto A:
input_state(PIN_A0);
input_state(PIN_A1);
input_state(PIN_A2);
input_state(PIN_A3);
//Puerto D:
input_state(PIN_D0);
input_state(PIN_D1);
input_state(PIN_D2);
input_state(PIN_D3);
//*********************************************************************************
//Definir estado de inicio de las bombas
//*********************************************************************************
output_bit (PIN_B0, 0) ;
output_bit (PIN_B1, 0) ;
output_bit (PIN_B2, 0) ;
output_bit (PIN_B3, 0) ;
output_bit (PIN_B4, 0) ;
output_bit (PIN_B5, 0) ;
output_bit (PIN_B6, 0) ;
output_bit (PIN_B7, 0) ;
//********************************************************************************
//Programa para detectar el estado de las bombas
//********************************************************************************
printf("Reiniciar:\n\r");
while (1)
{
flagA0 = input(PIN_A0);
flagA1 = input(PIN_A1);
flagA2 = input(PIN_A2);
flagA3 = input(PIN_A3);
flagD0 = input(PIN_D0);
flagD1 = input(PIN_D1);
flagD2 = input(PIN_D2);
flagD3 = input(PIN_D3);
flagA0 = !flagA0;
flagA1 = !flagA1;
flagA2 = !flagA2;
flagA3 = !flagA3;
flagD0 = !flagD0;
flagD1 = !flagD1;
flagD2 = !flagD2;
flagD3 = !flagD3;
printf("<%u%u%u%u%u%u%u%u|%u%u%u%u%u%u%u%u>\n\r",flagA0,flagA1,flagA2,flagA3,flagD0,flagD1,flagD2,flagD3,flagB0,flagB1,flagB2,flagB3,flagB4,flagB5,flagB6,flagB7);// u -- d
delay_ms(250);
}
}