Pub

mercredi 3 mars 2021

myTinyPLC : complément d'explication sur l'utilisation de la pile (stack)

 Il me semble opportun de fournir quelques compléments d'explication sur l'utilisation de la pile sinon la programmation de myTinyPLC peut apparaître obscure pour les personnes ne connaissant pas la logique du langage Forth ou la notation RPN.

 Dans le code de myTinyPLC, on utilise le tableau stack[n] et ses 10 éléments (n de 0 à 9) comme pile LIFO (Last In, First Out) pour y déposer lors d'un READ la valeur binaire lue sur une entrée, une mémoire, ou une sortie. C'est aussi dans l'élément le plus haut de pile stack[0] qu'il y aura le résultat d'une opération logique AND, OR, NOT, XOR.

 Comme exemple, on va prendre la programmation de la fonction NI (NOR en anglais) :
Pour allumer la LED rouge, ni le bouton poussoir 1 ni le bouton poussoir 2 ne doivent être appuyés.
Il s'agit d'effectuer l'opération logique OU entre les deux entrées i1 et i2, d'inverser le résultat obtenu puis d'écrire ce résultat dans la sortie o1.







Voilà pour le programme, et il s'écrira dans myTinyPLC comme suit :

stp[1] = 11; // Read input 1
stp[2] = 12; // Read input 2
stp[3] = 82; // OR
stp[4] = 83; // NOT
stp[5] = 41; // Write output 1
stp[6] = 99; // END

Dans myTinyPLC version 1, j'ai aussi implémenté trois autres instructions pour opérer des copies et des déplacements d'éléments dans la pile. On retrouve ces instructions en Forth, c'est DUP, SWAP et DROP. 

Voici quelques schémas explicatifs :


Merci de vous intéresser au projet myTinyPLC !

**** Guy F8ABX - 03/03/2021 ****


Aucun commentaire:

Enregistrer un commentaire