Voy a suponer que en el puerto A llega siempre los bits de 0 al 3.
Para leerlos lo voy a hacer con
Como esto me toma TODOS los bits, y yo quiero solamente los bits del 0 al 3, entonces voy a hacerlo pasar por una AND que me filtre solo los bits que yo quiero.
numero = input_a() & 0xF;
Genial ya tengo mi numero. Solo tengo que hacer 2 cosas, La priemra es determinar si numero es mayor o igual a 5.
if(numero >= 5)
{
//Aca lo es
}
else
{
//Aca no
}
Y luego debo poner esos bits en Rb4 a Rb7, lo que no debo hacer es cambiar los valores de Rb0 a Rb3
Pensemos como los podemos hacer... deberia mover los bits del 0-3 al 4-7, hay 2 formas, una es usar la instruccion SWAP que hace eso, y la otra es rotar el valor a la izquierda 4 veces.
Si hago :
Pero el puerto B cambiaria todo el valor incluso lo que antes hicimos, lo que podemos hacer es poner primero esto y luego lo otro
while(1)
{
numero = input_a() & 0xF;
output_b((numero << 4));
if(numero >= 5)
{
//Aca lo es
}
else
{
//Aca no
}
}
Solo falta rellenar unas instrucciones mas. Nada mas