//Por el Puerto C se obtiene el dato del Puerto A
//invirtiendo los bit pares. Los impares se dejan como en la entrada.
#include <16f877a.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4M)
#use fast_io(a)
#use fast_io(c)
#byte PORTA=5
#byte PORTC=7
void main()
{
set_tris_a(0x3F);
set_tris_c(0x00);
PORTC=0x00;
int impares;
int pares;
while(true)
{
impares=PORTA;
impares=impares&&0b10101010;//me quedo con los bit impares
pares=~PORTA; //complemento lo que entra por el PortA
pares=pares&&0b01010101; //me quedo con los bit pares
#asm
movf pares,0
iorwf impares,1 //esta parte lo hice en asm porque no me sale el OR
#endasm
PORTC=impares;
delay_ms(1);
}
}
Estas implementando mal los operadores.. AND sería & y OR seria |, entonces:Código: C
PORTC=(PORTA&0b10101010)|((~PORTA)&0b01010101);
Saludos!
Alt + 1 o el que tiene !