Pues yo de C no se
pero siguiendo la lógica del programa, diría que es algo como esto:
#include<18F4550.H>
#fuses HSPLL, PLL5, USBDIV, NOWDT, CPUDIV1, NOPROTECT, NODEBUG, NOPBADEN, NOLVP, NOVREGEN //20MHz
#use delay(clock=40MHz)
#define LCD_DATA_PORT getenv("SFR:PORTD")
#BYTE PORTA = 0xf80
#BYTE PORTB = 0xf81
#DEFINE Rele PORTA,0
#DEFINE Rele2 PORTA,1
#DEFINE Push PORTB,0
VOID MAIN()
{
BOOLEAN start=0;
SET_TRIS_A(0); //Configura el puerto A como Salida
SET_TRIS_B(0b00000001); //Configura el puerto RB0 Entrada
PORTA=0;
WHILE(TRUE) // Haga por siempre
{
//Pregunta por el botón
if(bit_test(Push))
{
delay_ms(200); //Anti-Debounce
//Instrucción para contabilizar una pulsación del botón
while(bit_test(Push))
{
delay_ms(200); //Anti-Debounce
}
start = !start; //Cambia el estado lógico de start
}
//Activa o desactiva el relé
if(start)
bit_set(Rele); //Activa Rele
bit_clear(Rele2); // Desactiva Rele 2
else
bit_clear(Rele); //Desactiva rele
bit_set(Rele2); //Activa rele 2
}
}