Hola jorkera, la respuesta a tu pregunta es no, ese codigo tal y como lo tienes no funciona, si es tu tarea como dice ahi, entonces ya debieron darte siquiera una mínima capacitación para usar el CCS ¿o eres autodidacta?, tampoco dices que versión del CCS tienes, bueno la verdad el código que llevas te daría mas errores que nada. Imagino que ni siquiera lo has intentado compilar verdad??
La idea es muy sencilla, pero hasta para eso debes tener bien clara tu lógica.
Primero para especificar el dispositivo a usar, no es necesario poner toda la ruta, basta con poner así:
Luego, tu cristal realmente es de 10 Mhz, si es asi esta bien, aunque lo mas usual para principiar es 4 Mhz.
Para configurar las entradas o salidas del puerto pones set_trib_b(0x00); cuando debe ser set_tris_b(0x00); ademas con eso estarias diciendo que todas han de ser salidas, algo ilogico pues mas abajo das a entender que es en el puerto B donde tienes los pulsadores, de modo que al menos RB0 y RB1 deberian estar como entradas.
Ahora si te fijas en el nudo de tu codigo (aunque saltaramos los errores) lo que sucederia es que checaria las entrads una sola vez y de ahi quedaria todo muerto, a parte de eso si acaso se detectara el estado, entraria en un bucle infinito y nunca mas volveria a preguntar si se ha dado otra pulsacion que indique una accion diferente ¿me explico?.
Yo lo haria por medio de interrupciones del puerto B y el parpadeo (los leds) en el puerto C con un timer, para no tener ocupado el PIC y poder hacer otras cosas.
Pero como al final esto no es mas que un ejemplo practico lo mejor es que sea lo mas sencillo posible no?, no se, crear una variable para guardar ahi el estado y luego vigilar las entradas y dependiendo de eso pues se habilita o no los pulsos en el puerto C y asi. Mira no es que te vaya a hacer la tarea pero tuve unos minutitos libres y para pasar el rato hice este ejemplo de como yo lo haria:
Código:
/*
El proposito de este codigo es curioso
Entradas de los botones RB0 Y RB1 (igual podria ser uno y no dos)
Salidas Puerto C, para encender unos leds, mucha pieza ¿no crees?
*/
#include <16F877A.h> /* PIC16F877A */
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP,BROWNOUT /* Fusibles (lo mas comun) */
#use delay (clock=10000000) /* Ajuste retardos */
#use fast_io(b) /* Opcional */
#use standard_io(c) /* Opcional */
/* En esta variable de tipo boleano guardaremos el estado ¿te parece? */
boolean habilitar=false;
void main(void)
{
disable_interrupts(GLOBAL); /* Deshabilitamos todas las interrupciones (opcional) */
set_tris_b(0b00000011); /* RB0 y RB1 como entradas (para los botones) */
/* Chequeo infinito */
do
{
/* Mientras habilitar sea verdadero */
while(habilitar)
{
/* Salidas intermitentes, empieza el circo */
output_c(0b01010101);
delay_ms(500); /* Retardo de 500 ms */
output_c(0b10101010);
delay_ms(500); /* Retardo de 500 ms */
/* Sin duda esto saldria mas bonito usando interrupcion */
if(input(PIN_B1))
{
habilitar=false; /* Obviamente se deshabilita */
output_c(0x00); /* Se apaga el circo */
}
}
/* Habilitamos en caso de que la entrada RB0 sea verdadera */
if(input(PIN_B0))
{
habilitar=true;
}
}
while(true); /* Todo de nuevo */
}
Es algo muy simple, como decia tiene el inconveniente de que las pulsaciones solo se detectan en ciertos momentos (no interrumpen), asi que deberia tenerse pulsado el boton de contraorden al menos por un segundo.
Espero que te sirva el ejemplo y aprendas, no simple copia y pega, pero si asi lo haces ya es problema tuyo.
Saludos,