Buenas!!! la programacion que tu necesitas es el control del estado de un pin del microcontrolador mediante un pulsador, si el estado es alto, '1' logico, pues pone cierto pin en alto (a '1' logico), y si se vuelve a pulsar el boton, pues permutara el estado del pin de salida a nivel bajo ('0' logico), el montaje hardware del rele es cosa aparte, te aconsejo que te revises este post, donde hay un par de programas que resvisan el estado de un pin (en el cual hay conectado un boton) y segun se pulse el boton o no, pues encendera o apagara un led, aqui el post:
http://www.todopic.com.ar/foros/index.php?topic=12789.0En tu caso, es similar, simplemente que en vez de apagar un led o encenderlo, se activara un rele o se desactivara.
De todas formas, tu pides que el boton este conectado al pin B1, y en caso de pulsarse pues ponga en alto el pin B0, yo te aconsejo que lo hagas al reves, aproveches la interrupcion externa del pic, conectes el boton al pin B0 y el rele al pin B1, asi el microcontrolador no hara nada hasta que se pulse el boton, aqui te dejo el codigo de ejemplo con su simulacion en proteus:
////////////////////////////////////////////////////////////////////////////////////
// VsZeNeR'06
// 13/Julio/06
// vszener@gmail.com
//
// Programa: Activar rele mediante pulsador
// Version: 0.0
//
// Dispositivo: PIC 16F877 Compilador: CCS vs3.249
// Entorno IDE: MPLAB IDE v7.40 Simulador: Proteus 6.7sp3
//
// Notas: Este programa activa un rele cuando s epulsa un boton, si dicho
// boton es nuevamente pulsado, se desactivara el rele.
//
// Conexiones: B0 -> Boton
// B1 -> Rele
//////////////////////////////////////////////////////////////////////////////////
#include <16f877.h> //pic a utilizar
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP //ordenes para el programador
#fuses NOBROWNOUT,NOCPD,NOWRT,NODEBUG
#use delay (clock=4000000) //Fosc=4Mhz
#use fast_io(B)
#bit RB1=0x06.1 //pin donde estara el rele conectado
///FUNCION DE INTERRUPCION EXTERNA
#INT_EXT
void funcion(){ //Interrupcion para activar el rele
while(!input(PIN_B0)); //elimina rebotes
RB1=!RB1; //activamos/desactivamos rele
}
///PROGRAMA
void main(void)
{
set_tris_b(0b00000001); //puertb salida menos el pin B0 entrada
enable_interrupts(INT_EXT); //activamos int. externa...
EXT_INT_EDGE(H_TO_L); //..de alto a bajo
enable_interrupts(GLOBAL); //permiso de las interrupciones
RB1=0; //rele off de inicio
for(;;){} //bucle infinito
}
Suerte!!!