He realizado un corto programa y espero que con este código pueda resolver tus inquietudes.
gfp
#include <18F452.h>
#use delay(clock=20000000)
#fuses NOWDT,WDT128,HS, NOPROTECT, NOOSCSEN, NOBROWNOUT, BORV20, PUT, NOSTVREN, NODEBUG, NOLVP, NOWRT, NOWRTD, NOWRTB, NOWRTC, NOCPD, NOCPB, NOEBTR, NOEBTRB
#zero_ram
#use fast_io(A)
#use fast_io(B)
#use fast_io(C)
#use fast_io(D)
#use fast_io(E)
long A =0b1010011111110100;
int B; //HighByte(A)
int C; //LowByte(A)
void main()
{
B=A/256; //Copias a "B" el byte mas significativo de "A"
C=A; //Copias a "C" el byte menos significativo de "A"
/*HASTA AQUI HEMOS SEPARADO EN DOS REGISTROS LA PARTE ALTA Y BAJA DE "A"*/
/*AHORA VAMOS A LAS INSTRUCCIONES DE MANIPULACION DE BITS*/
while(1)
{
if( bit_test(B,0)) //EL BIT 0 DEL REGISTRO B ESTA EN "1"?
{
bit_clear(B,0); //SI ESTA EN "1" LO COLOCAMOS A "0".
}
else
{
bit_set(B,0); //SI ESTA EN "0" LO COLOCAMOS A "1".
}
}
//NOTA QUE AL DIVIDIR UN REGISTRO CUALQUIERA POR 2,4,8,16,32,64,128,256,...,ETC LO DESPLAZAS A LA DERECHA UNA, DOS, CUATRO, U OCHO POSICIONES RESPECTIVAMENTE.
//SI MULTIPLICAS UN REGISTRO CUALQUIERA POR 2,4,8,16,32,64,..ETC. LO ESTAS DESPLAZANDOA LA IZQUIERDA UNA, DOS CUATRO U OCHO POSICIONES.
}