Paso 4: Arduino Microcontrollers con chips ATMEL
Como se mencionó anteriormente, los idiomas de la Asamblea de fondo usado para programar los chips PIC32 y ATMEL son diferentes. Si usted entonces salta a la conclusión de que el registro de los nombres son diferentes, sería correcto.
No entraré en la explicación de la lógica aquí, pero hay algunas diferencias importantes que usted debe tener en cuenta. Consulte el paso anterior para la profundidad en la explicación de la lógica.
En primer lugar, el registro de dirección que establece el estado de I/O del perno se llama DDRx, donde x designa el registro (pinMode() establece DDRx). Para configurar el pin como salida, necesita escribir un 1 en el bit correspondiente en DDRx. escritura que 0 a DDRx establecerá el pin como entrada. El siguiente es el registro PORTx, que determina si un pin establecido como una salida es HIGH (1) o bajo (0) (digitalWrite() establece PORTx). El último es PINx, que le permite leer datos presentan en el pin se encuentra como insumo (digitalRead() Lee PINx). Un '1' en el registro PINx indica que hay una señal presente en ese pin.
Mirando el Arduino UNO (ver .pdf abajo, fuente aquí), decidí usar 4 LEDs en 4→7 alfileres que registrar D, 4→7 de bits. Hemos creado registro D4→7 como salidas por ORing con 0b1111 0000, ajuste los cuatro bits de 1. Me puse 4 interruptores 8→11 clavijas, que registro B, brocas 0→3. Hemos creado registro B0→3 como entradas por ANDing 0b1111 0000, ajuste los cuatro bits como 0. El siguiente código va en la declaración de() de configuración:
DDRD = DDRD | 0xF0; 0b1111 0000
DDRB = DDRB & 0xF0; 0b1111 0000
Mirando los bits de registro otra vez, vemos que los interruptores se asignan a los LEDs para 4→7 bits y bits 0→3. Si sólo nos asigna el estado de PINB directamente a PORTD, nos marquen PORTD bits 0→3, no bits 4 -> 7 y los LEDs no encienden. Solucionarlo con un desplazamiento bit a bit a la izquierda por cuatro espacios. El código de nuestra declaración de bucle() se ve así:
PORTD = PINB << 4;
Aquí está el código completo:
Más de 10 líneas de código y sólo 3 hacer algo. Eso es todo.
Esta compilación con MPIDE tiene sólo 470 bytes de memoria, una reducción de 604 bytes desde la versión más corta en el paso 2 que costo 1074 bytes pinMode(), digitalWrite() y digitalRead().