Está en la página 1de 3

//Declaracion del pic que se va a usar

#include <18f4550.h>
//
#fuses INTRC_IO,WDT,NOPROTECT,PUT, NOPBADEN
//Declaracion del reloj
#use delay (clock=4000000)
//respuesta rapida de los puertos b y d
#use fast_io(b)
#use fast_io(d)
#BYTE port_b= 0xF81
#BYTE port_d= 0xF83
//Declaracion de pulsadores
#define pulsador bit_test(port_d,0)
#define pulsador1 bit_test(port_d,1)
#define pulsador2 bit_test(port_d,2)
//Declaracion de un contador
int k;
//Declaracion de funciones
void antirebote();
void simultanea();
void secuencial();
void semisecuencial();
//Funcion principal
void main()
{
//Limpieza de puerto b y d y previene ruidos
set_tris_b(0x00);
set_tris_d(0xff);
disable_interrupts(GLOBAL);
//Valores iniciales de las
port_b = 0;
k = 0;
//Inicio del ciclo infinito
WHILE (TRUE)
{
//condicion para simultanea
IF (pulsador == 0&&k == 0)
{
antirebote ();
k = 1;

WHILE (pulsador == 1)
{
simultanea ();
}

IF (pulsador == 0&&k == 1)
{
antirebote ();
k = 0;
bit_clear (port_b, 0);
}

// fin de simultanea
//condicion para secuencial
IF (pulsador1 == 0&&k == 0)
{
antirebote ();
k = 1;

WHILE (pulsador1 == 1)
{
secuencial () ;
}

IF (pulsador1 == 0&&k == 1)
{
antirebote ();
k = 0;
bit_clear (port_b, 0);
}
// fin de secuencial
//condicion para semisecuencial
IF (pulsador2 == 0&&k == 0)
{
antirebote ();
k = 1;

WHILE (pulsador2 == 1)
{
semisecuencial () ;
}

IF (pulsador2 == 0&&k == 1)
{
antirebote ();
k = 0;
bit_clear (port_b, 0);
}
// fin de semisecuencial

}
}
//Declaracion de funciones
VOID simultanea (void)
{
//Comando para encender los pines del puerto B
output_high (PIN_B0) ;
output_high (PIN_B1) ;
output_high (PIN_B2) ;
output_high (PIN_B3) ;
//Comando para una pausa de 100 ms
delay_ms (100) ;
//Comando para apagar los pines del puerto B
output_low (PIN_B0) ;
output_low (PIN_B1) ;
output_low (PIN_B2) ;
output_low (PIN_B3) ;
//Comando para una pausa de 100 ms
delay_ms (100) ;
}
VOID secuencial (void)
{
output_high (PIN_B0) ;
delay_ms (100) ;
output_low (PIN_B0) ;
delay_ms (100) ;
output_high (PIN_B1) ;
delay_ms (100) ;
output_low (PIN_B1) ;
delay_ms (100) ;
output_high (PIN_B2) ;
delay_ms (100) ;
output_low (PIN_B2) ;
delay_ms (100) ;
output_high (PIN_B3) ;
delay_ms (100) ;
output_low (PIN_B3) ;
delay_ms (100) ;
}

VOID semisecuencial (void)


{
output_high (PIN_B0) ;
output_high (PIN_B1) ;
delay_ms (100) ;
output_low (PIN_B0) ;
output_low (PIN_B1) ;
delay_ms (100) ;
output_high (PIN_B2) ;
output_high (PIN_B3) ;
delay_ms (100) ;
output_low (PIN_B2) ;
output_low (PIN_B3) ;
delay_ms (100);
}

VOID antirebote (void)


{
WHILE (pulsador == 0) { }
WHILE (pulsador1 == 0) { }
delay_ms (30) ;
RETURN;
}

También podría gustarte