Étape 9: Blinky One – sens des déclarations codage
Les références fournissent des très bons livres et autres articles pour apprendre le C et C++ pour les Microcontrôleurs Atmel [5-8, 11]. Les éléments ci-dessous suivent essentiellement l’ordre dans le programme un Binky.
#include : une directive du compilateur d’inclure un fichier d’en-tête dans le code avec des fonctions spécifiques et méthodes. La plupart des fichiers d’en-tête peut être consultées en plaçant le curseur de la souris sur le nom et clic droit et en sélectionnant « aller à la mise en œuvre ».
avr/IO.h : se compose d’autres fichiers d’en-tête (par exemple, les extensions de .h) pour le MCU spécifique [17]. Les fichiers d’en-tête incluent des mots clés tels que DDRB, PORTB, PB0, TIMSK et TCNT0. Apparemment io.h ne peuvent pas être lus avec le « aller ├á la mise en œuvre » décrit au point 1 ci-dessus.
util/Delay.h : méthodes pour retarder l’exécution du programme. Comprend un millisecondes de retard et un autre pour les microsecondes.
#define x directive du compilateur y: A de substituer le texte y chaque fois que le texte x est rencontre dans le programme. Souvent, les définitions du compilateur sont utilisées afin que le programme peut être modifié facilement sans fouiller dans l’ensemble du code pour tous les endroits modifier un paramètre quand nécessaire.
#define F_CPU 8000000UL : le compilateur va se substituer 8000000UL pour le texte « F_CPU » chaque fois que rencontrées dans le code. Remarque : le fichier d’en-tête delay.h nécessite la F_CPU être défini avant d’importer les delay.h car le fichier delay.h utilise le F_CPU. Le 8000000UL se réfère à la vitesse d’horloge. Dans notre cas, nous utilisons 8MHz sélectionné par les fusibles. Toutefois, F_CPU de 16000000 serait correct pour un cristal de 16MHz par exemple. L’AMT à la fin veut dire entier « unsigned long ».
int main (void): principal est une fonction qui doivent intégrer tous les programmes C et C++. L’exécution du programme commence à la fonction « main ». Le mot clé « int » indique que « principale » peut retourner un entier (16bits). Fonctions comportent des arguments dans les parenthèses (). Dans ce cas, « void » indique la fonction n’utilise pas un paramètre. Si nous avions le mot-clé vide qui précède le nom de fonction comme par exemple dans « void main (void) », puis la fonction retournait pas une valeur - ce serait une sous-routine.
Accolades {}: La gamme de code définissant la fonction 'main' est placée entre {}. En fait, les structures de la plupart de codage C et C++ (par exemple, le « switch » et « if ») utilisation d’accolades {} pour indiquer leur portée. Assurez-vous d’inclure ces !
Des points-virgules : Codage des déclarations sont terminent par le «; ». L’instruction peut exécuter plusieurs lignes de texte au besoin.
_delay_ms(x) : une méthode (par exemple, la fonction) définie dans delay.h qui retarde l’exécution du programme par x millisecondes. Dans notre cas, x = 1000 et donc le retard est 1000mS qui est 1 seconde. Avis de tha l’habillage entre parenthèses le paramètre x.
DDRB = 0b00000001 : Registre de Direction données pour B0 B. Port sera une sortie et le reste sera entrées. Pour le ATTiny 2313A, la B0 est Pin12.
PORTB = 0 b 1: ensembles B0 1 qui se traduit par CVC à l’intégrité physique pin (12) correspondant à B0. Un moyen plus simple et privilégié pour écrire cette instruction est PORTB = 1 ; ou PORTB = 0 x 01 ;
PORTB = 0 X 00 ; Affecte à B0 0 qui se traduit par 0v à l’axe physique (12) correspondant à B0. Cela pourrait aussi être écrite comme PORTB = 0 ;
while(x) : le MCU exécutera les instructions entre les deux qui s’ensuivit correspondant d’accolades {} pour autant que l’État x est vrai. Le x pourrait mettre en doute si deux variables a et b sont égales comme un == b (Notez le double égal à). Dans notre cas, nous voulons que la LED clignote en permanence donc les déclarations entre les accolades doivent s’exécuter en continu. Nous pourrions écrire ' while(true == true)' où '==' est l’opérateur de C/C++ vérifiant l’égalité logique (un seul moyen de '=' pour assigner quelque chose à une variable comme dans z = 3). L’instruction « while(true==true) » causerait la boucle infinie que nous voulons depuis le « vrai » n’est toujours vrai. Dans notre cas, 1 est considérée comme un « vrai ». Si « while(1) » provoquera la boucle infinie car c’est le raccourci pour l’écriture de « while » qui est un raccourci pour l’écriture de « while(true=true) ».