input_a() en e parenthesis no va nada?
Las funciones input_x() son unicamente de CCS. No tienen ningun parametro, por eso esta vacio.
input_a() Te devuelve el valor de todo el puerto A. Es decir lee todo el puertoA y te devuelve un valor de 8 bits
input_b() es lo mismo pero para el puerto B.
O aqui int mArray[]?
Cuando declaro un array, puedo declarar la cantidad ejemplo:
int hola[3] = {1,2,3};
O puedo dejar sin declararlo como hice con mArray, luego el compilador va a verificar cuantos elementos tiene y le va a dar el valor correcto. Esto es mucho mas util cuando tenes textos, asi no tenes que estar contando uno por uno los caracteres + el caracter nulo.
char mText[] = "Hola como va";
y que significa 0x3?
En C hay distintas formas de representar los numeros. Decimal, Binario, Hexadecimal y Octal.
El Decimal (base 10)es el que conocemos, poner un numero y listo, ejemplo: 10
El Binario los numeros tienen base 2 ( solo podes usar del 0 al 1), debemos especificarle al compilador que lo que escribimos ES binario, por eso pusimos
0b1010
En Octal los numeros tienen base 8, ( se puede usar del 0 al 7), para que el compilador sepa que es un numero en octal, debemos anteponer un 0, ejemplo:
012
En Hexadecimal, los numeros tienen una base 16, simple de pasar de binario a Hexadecimal, para que el compilador sepa que es Hexadecimal se debe anteponer
0xA
Los elementos del Hexadecimal son del 0 al 9 y luego A,B,C,D,E y F.
Todos los numeros que te acabo de dar son lo mismo, es decir:
10 = 0b1010 = 012 = 0xA
Entonces 0x3 es igual a 3 decimal, o que es lo mismo que 0b11
La idea detras de eso es que de todo el puerto B, cuando se haga la AND del Puerto con 0x3 ( 0b0000 0011 ) unicamente queden los valores de RB0 y RB1 (obsevaras que son los unicos que se hacen la AND con un 1 )
Si hubiera querido hacer una AND y solo tener los valores de RB7 y RB6, entonces deberia haberlo hecho con 0b1100 0000
Espero que entiendas que esta pasando ahora.
PD: Separo los nibbles en binario porque es mas facil de ver, pero en realidad van juntos.