Bonjour, On va parler d'architecture d'ordinateurs et vous allez comprendre pourquoi on utilise ce terme. On a vu les bascules, on a vu les portes logiques. Ce sont des briques avec lesquelles on peut construire des sous-ensembles, ces systèmes combinatoires et systèmes séquentiels, que sont, les décodeurs, les registres, les compteurs. Et maintenant, on peut assembler ces éléments préfabriqués pour construire, dans le fond, des machines informatiques. Les microprocesseurs actuels, ce sont des palais et on découvrira quelques chambres. Maintenant, on va se contenter de construire une cabane de jardin, et d'avoir une vague idée, comment on pourrait faire une maison. Donc on va parler, d'une machine simplifiée, qui nous aidera à comprendre l'architecture des ordinateurs, et on pourra un petit peu, évoquer les langages qui sont utilisés pour programmer, en particulier, les microcontrôleurs qui nous intéressent. Alors notre machine simplifiée, elle va calculer la suite de Fibonacci. Alors la suite de Fibonacci, chaque élément est la somme des deux éléments précédents. On part avec 01, on les additionne, le total vaut 1, on reprend ces 2 éléments, le total vaut 2, 1 plus 2, ça va faire 3, 2 plus 3, ça va faire 5, 3 plus 5, ça fait 8, 13, 21, 34. C'est une série que les vrais architectes connaissent puisqu'elle conduit au nombre d'or. Bien, on ne va pas travailler en décimal, on va travailler en binaire, naturellement. Donc on part avec la combinaison 000, qui représente 0 là , c'est limité à 5 bits. Le 1, ensuite 0 plus 1, ça va faire 1, 1 plus 1, ça va faire 10, on est en binaire. Donc 1, 0 unité et une 2 n. Ensuite 1 plus 10, ça fait 11, 10 plus 11; alors on n'a pas étudié l'additionneur binaire, mais vous en voyez bien maintenant, un petit peu, son principe. On additionne une colonne, on obtient un 0 et on a un report, comme quand on calcule en décimal et qu'on dépasse 9, ce report va être additionné, on aura 1 plus 0, plus 1, ça va nous refaire un 0. On a de nouveau un report, 1 plus 0, 1 ça va faire un 0 et 1, et ça c'est bien le codage que vous devez reconnaître du 8 puisqu'on a les poids binaires 1, 2, 4, 8, 16, comme vous l'avez vu la la dernière fois. Là , si on veut parler de système logique maintenant, et bien qu'est ce qu'on a fait? On a du additionner deux nombres, on a obtenu un résultat, on a fait la même chose pour les chiffres suivants; et chaque fois, on a obtenu un digit. Mais, étant donné que 1 plus 1 peut faire 10, on a un report qu'on appelle carry, d'un additionneur à l'autre. Et vous voyez que maintenant, et bien, on a un système logique avec trois entrées et un carry, et puis on a une sortie et un carry. Donc c'est facile de, transformer ce rectangle, dans une série de portes, et de fabriquer un additionneur de la taille qui nous intéresse. Alors, maintenant ce qu'on doit faire, et bien, c'est c'est symbolisé ici. Voilà notre algorithme, on doit additionner deux nombres, mettre le résultat, et puis ensuite déplacer cet opérateur pour agir sur les nombres décalés. Alors, construisons cette machine de façon à ce qu'elle puisse fonctionner. On va utiliser deux registres de 8 bits de large, c'est les valeurs un peu standard dans nos éléments, on les appelle A et B communément logiques, ces deux registres vont fournir leur information à un additionneur binaire et le résultat pourra être mémorisé dans un registre. Donc comment est-ce que ça fonctionne maintenant? On est parti avec 1, 0 partout dans A, on est parti avec 1 dans B, L'additionneur va fournir le résultat 0, 1, et on va donner une première impulsion d'horloge, qui va mémoriser cette information en sortie, où on pourra mettre des petites diodes lumineuses pour afficher le résultat. Et maintenant, il faut passer au cycle suivant, donc ce qu'on a fait maintenant c'est de dire, et bien, C est égal à A plus B, il faut transporter B dans A, et il faut transporter C dans B. Et là , si vous remarquez le câblage, ça peut se faire simultanément au niveau de cette machine. Et puis ensuite on va recommencer et on obtiendra les valeurs successives, dans le fond, de cette série, jusqu'à ce qu' il y ait un débordement de capacité, puisque ici, le maximum est de 256. Et je vous ai parlé du carry, cet additionneur 8 bits vous fournit un carry, si jamais vous vouliez additionner 16 bits, il suffirait de rajouter un module. Ce carry, et bien, on peut très bien l'utiliser pour stopper, la petite machine séquentielle qui va générer les horloges alternativement. Alors maintenant et bien, évidemment, on pourrait dire : voilà je vais construire une autre machine pour faire les multiples de 2, je vais construire une autre machine. C'est pas tellement, ce qu'on voudrait c'est une machine universelle. Alors, cette machine universelle qu'est-ce qu'elle doit contenir? Elle doit contenir ces registres avec lesquels on va travailler, elle doit contenir un additionneur mais, il y a des fois on voudra soustraire, il y a des fois où on voudra faire des opérations logiques entre ces nombres. Donc c'est ce qu'on appelle une unité arithmétique et logique, A.L.U., Arithmetic Logic Unit, en anglais. Et maintenant, on doit pouvoir, typiquement pour notre algorithme, maintenant, on doit pouvoir additionner A et B, et renvoyer le résultat dans C. Donc ça, ça va se faire au moyen d'un bus qui permet d'interconnecter n'importe quelle unité à n'importe quelle autre. C'est comme une gare avec des voies en parallèles et naturellement, il faut commander les aiguillages qui vont permettre de transporter l'information au bon endroit. Et il faut des ordres, pour positionner, dans le fond, ces engrenages. Alors on va définir des mots binaires en disant, et bien, voilà on va prendre, j'ai trois registres, je vais prendre 2 bits pour dire quel est le registre avec lequel je vais travailler. Et puis éventuellement vous allez pouvoir travailler avec deux registres en même temps, il faut les choisir indépendamment, avec des bits 00, ça sera 1, 01, ça sera B. Et puis maintenant, et bien, on va pouvoir dire, en rajoutant des bits, qu'on veut additionner, et cetera. Toutes les opérations que l'on veut commander, et bien, on va les transmettre à un décodeur qui va positionner les aiguillages et on va donner un, ou plusieurs coups d'horloge pour que la séquence d'opérations s'effectue. Et ça, et bien, ça sera la première chose qu'on veut faire, on l'a dit, C égal A plus B, ce sera le code binaire que l'on va mettre ici, et puis ensuite la chose suivante, ça sera de faire un transfert, dans une deuxième position mémoire, mais ça pourrait être une bande de papier qu'on déroule, historiquement on a commencé comme ça, et cetera. Voyez, on est en train de construire une séquence de mots binaires qui vont faire évoluer la machine de façon à obtenir le résultat qui nous intéresse. Donc, ces mots binaires, évidemment, sont très pénibles à mémoriser, à manipuler, à écrire. On va, remplacer les mots binaires par des expressions qui sont plus explicites, on veut bouger d'un registre à un autre, on va utiliser move. Quelle était la première opération dans notre algorithme de Fibonacci? C'était de mettre 0 dans A, c'était de mettre 1 dans B. Et bien ça nous coûte deux instructions élémentaires, qui seront codées en binaire, mais si on les écrit d'une façon explicite, on peut facilement imaginer un programme qui va faire une petite analyse syntaxique et créer les bits; A, et bien, on avait vu que c'était 0,0 à deux endroits et cetera. Alors maintenant, on doit faire l'addition A, B, C. A, B va sur C, donc voilà , c'est tout à fait compréhensible. On doit afficher C, et puis ensuite on doit déplacer B dans A, C dans B et recommencer. Donc voilà des instructions qui sont exactement les instructions binaires que l'on met en mémoire, mais on les a écrites de façon lisible. Chaque ligne correspond à un mot binaire, et c'est le langage d'assemblage, puisqu'on va assembler des bits, dans le fond, en fonction des instructions et on dit plutôt l'assembleur. Alors ce qui nous manque maintenant, c'est de pouvoir communiquer, et plutôt que de mettre des petites leds, on va mettre quelque chose qui deviendra assez compliqué, pour pouvoir entrer et sortir de l'information, dans des formats extrêmement variés. Et c'est ce qu'on étudiera par la suite. Et maintenant ce qu'il nous faut, c'est pouvoir charger le programme, et pour ça, il faut une communication vers l'extérieur et tout naturellement on va mettre une communication série, et il nous faut un petit programme parallèle qu'on mettra dans une mémoire indestructible, une mémoire morte comme on dit, qui va être attentif, qui va gérer ces opérations de remplissage de la mémoire, en fonction d'un séquenceur qui est évidemment, va être un élément relativement complexe. Alors l'étape suivante, et bien c'est de dire, l'assembleur, c'est bien joli, mais j'aimerais pouvoir écrire comme au début, C égal A plus B. Et cette transformation de C égal A plus B, dans une séquence d'instructions, qu'on avait vue avant, ça peut se faire par un programme. Et ça, c'est le Langage C que l'on va étudier, qui nous permettra d'écrire des choses comme ceci, avec encore un petit point-virgule à la fin. Et l'intérêt, c'est que l'on pourra écrire les programmes d'une façon qui nous est beaucoup plus naturelle. Alors tous les langages informatiques, depuis ce binaire, puis l'Assembleur, le C, le Java et il y en a encore beaucoup d'autres derrière, ont été développés pour interagir avec l'homme, programmer vos tablettes graphiques et cetera. Nous, ce qui nous intéresse, ce n'est pas d'interagir avec l'homme, c'est d'interagir avec un dispositif technique, que l'on va brancher sur ces entrées et sorties, des capteurs, des actionneurs. et pour cela il faut qu'on ait un langage approprié, qui à la fois permet de faire des calculs, en binaire, ou en décimal, puisque si c'est du décimal, le programme saura choisir, appeler toutes les instructions de conversions nécessaires. Donc, c'est le langage C qui va nous permettre d'écrire ce genre d'expressions, dans lesquelles on pourra aussi penser, pour des nombres, à leur représentation décimale, le programme n'aura qu'à faire les transformations nécessaires. Et ces langages se sont beaucoup développés, en pensant à l'interaction avec l'homme, mais ce qui nous intéresse avec les microcontrôleurs, ce n'est pas d'interagir avec une tablette, avec un écran, avec un clavier, c'est d'interagir avec des dispositifs physiques, des capteurs, des moteurs. Et c'est le but de ce cours; et c'est le rôle des microcontrôleurs, par rapport aux microprocesseurs, avec leurs mémoires énormes.