Étape 4: Arduino Microcontrollers avec puces ATMEL
Tel que mentionné précédemment, les langues de l’Assemblée de fond utilisé pour programmer les puces PIC32 et ATMEL sont différents. Si vous sautez ensuite à la conclusion que les noms de Registre sont différents, vous ne serait pas juste.
Je ne vais pas en profondeur dans l’explication de la logique ici, mais il y a quelques différences essentielles que vous devez garder à l’esprit. Renvoyer à l’étape précédente pour la profondeur en explication de la logique.
Tout d’abord, le registre directionnel qui définit l’état de I/O de la broche est appelé DDRx, où x désigne le registre (pinMode() définit DDRx). Pour définir le code pin en tant que sortie, vous devez écrire un 1 au bit correspondant dans l’écriture DDRx. 0 pour DDRx fixera la broche en tant qu’entrée. Suivant est le registre PORTx, qui détermine si une épingle comme une sortie est élevé (1) ou faible (0) (digitalWrite() définit PORTx). Dernière est PINx, qui permet de lire les données présentent sur la broche c’est définie comme un intrant (digitalRead() lit PINx). Un « 1 » dans le registre PINx indique qu’il y a un signal présent sur cette broche.
En regardant l’Arduino UNO (voir .pdf ci-dessous, source ici), j’ai décidé d’utiliser les 4 LEDs sur 4→7 de pins qui mappent à inscrire D, 4→7 bits. Nous avons mis le registre D4→7 comme sorties par ORing avec 0b1111 0000, définissant ces quatre bits que 1. J’ai mis 4 interrupteurs sur broches 8→11, qui correspondent au registre B, 0→3 bits. Nous avons mis le registre B0→3 comme entrées par ANDing avec 0b1111 0000, définissant ces quatre bits de 0. Le code suivant va dans notre déclaration de() de configuration:
DDDR = DDDR | 0xF0 ; 0b1111 0000
DDRB = DDRB & 0xF0 ; 0b1111 0000
En regardant les bits du Registre encore une fois, nous voyons que les interrupteurs sont affectées aux voyants de bits 4→7 et 0→3 bits. Si nous assignons à l’état de PINB directement à PORTD, nous sera mise PORTD bits 0→3, pas de fers 4 -> 7 et les LEDs ne s’allument. Nous y remédier avec un décalage de bits vers la gauche par quatre espaces. Le code de notre boucle() déclaration ressemble à ceci :
PORTD = PINB << 4 ;
Voici le code complet :
De plus de 10 lignes de code et 3 seulement faire quelque chose. C’est tout.
Cette compilation avec MPIDE prend seulement 470 octets de mémoire, une réduction de 604 octets de la version courte à l’étape 2 qui coûtent 1074 octets et utilisé pinMode(), digitalWrite() et digitalRead().