Gracias Nocturno,
Todavia no me aclaro mucho pero echa una ojeada a parte de mi programa:
#include <16F84A.h>
#fuses NOWDT,XT, NOPUT, NOPROTECT //fusibles
#use delay(clock=4000000) // Velocidad del cristal
#use fast_io(B) //Para hacerlo FAST el port B
#use fast_io(A) //Para hacerlo FAST el port A
#byte INTCON = 0x0B
set_tris_B(0b10001111); // Puerto B configurado, 1 entrada 0 salida
output_b(0x00); // Limpia B
set_tris_a(0b00010000); // Puerto A configurado, 1 entrada 0 salida
output_a(0x00); // Limpia A
Como pudes ver utilizo el #use fast_io(B) y set_tris para configurar el puerto B. Rb0,1,2,3 y 7 son entradas y Rb 4,5, y 6 son salidas.
Quiero que tolos los pines que sean salidas esten en 0 cuando empiece la ejecucion del programa.
Entonces utilizo output_b(0x00), mi pregunta es que si cuando hago output_b(0x00) el micro sabe que SOLAMENTE deve poner 0 en RB4,5 y 6, ya que son las SALIDAS, o pone 0 en todo el puerto B.
Si pone 0 en todo el puerto B, que passa con mis entradas RB0,1,2,3 y 7 ?
Cuanto a la pregunta 2, he encontrado un metodo para utilizar solamente el dato que me interesa y asy lo hecho:
valor_recebido= valor_memoria & 0b00001111; //mascara para utilizar solamente los datos contenidos en Ra0, 1, 2 y 3