Microcontrôleur virtuel 4 bits avec programmation à trois boutons et quatre commutateurs



Le dispositif proposé émule sur un microcontrôleur ATmega4809 un microcontrôleur abstrait 4 bits avec un espace d'adressage de 256 octets, qui peut être programmé avec trois boutons et quatre commutateurs.

L'espace d'adressage est divisé en 16 pages avec 16 instructions chacune. La longueur de l'instruction est de 8 bits, dont les quatre plus significatifs sont la commande, et les quatre inférieurs sont les données:



Pour entrer dans le mode de programmation, maintenez enfoncé le bouton 2, appuyez sur le bouton de réinitialisation, relâchez-le, relâchez le bouton après. En mode de programmation, triez séquentiellement les instructions dans la RAM par le bouton 2. Lorsque vous passez à l'instruction suivante, les LED indiquent l'adresse actuelle pendant une fraction de seconde. Le bouton 1 vous permet de modifier la commande et l'adresse dans le cadre de l'instruction en cours. Lorsque vous passez à une nouvelle adresse avec le bouton 2, l'instruction pour l'adresse précédente est entrée dans l'EEPROM. Après avoir tapé le programme, vous devez appuyer sur le bouton de réinitialisation, et il y aura une transition du mode de programmation au mode d'exécution du programme.

La liste des commandes:

0x0 - charger une valeur constante dans le port doutB
0x1 - le même dans le port doutA
0x2 - pause
0x3 - saut inconditionnel relatif
0x4 - charger la valeur constante dans la variable A
0x5 - charger quelque chose avec la valeur de la variable A
0x6 - charge la valeur de quelque chose dans la variable A
0x7 - effectuer des opérations arithmétiques et logiques avec la variable A (et B)
0x8 - définir le quartet supérieur de l'adresse pour l'instruction de saut inconditionnel absolu
0x9 - faites un saut inconditionnel absolu à l'adresse spécifiée
0xA, 0xB - agit comme une boucle for: chaque fois que la commande est exécutée, si la variable C (ou D) est supérieure à zéro, une transition inconditionnelle absolue vers l'adresse donnée se produit, alors la valeur de la variable C (ou D) diminue
0xC - ignorer l'instruction suivante si l'argument est une unité logique
0xD - appeler la fonction à l'adresse spécifiée
0xE - retour de la fonction appelée
0xF - définissez l'adresse de la RAM virtuelle 4 bits, la valeur stockée à cette adresse peut être lue avec l'instruction 0x6E et écrite avec l'instruction 0x50.

Exemple 1 - clignotant:

   0 1f      doutA 1 28  500  2 10      doutB 3 28  500  4 34     -4  

Exemple 2 - compteur binaire:


    0 5B DoutB = A 1 59 PWM1 = A 2 71 A++ 3 28  500  4 34     -4  

Exemple 3 - clignotant à vitesse réglable (avec sous-programme):


     : 0 10 DoutA = 0x0 1 d5   myWait 2 1f DoutA = 0xf 3 d5   myWait 4 34     -4   myWait: 5 64 A = Din 6 52 C = A 7 25  50  8 a7 for(C > 0; C--) jmp 7 9 e0  

Schéma:







Tous les fichiers nécessaires à la répétition (carte, firmware, etc.) - par référence à l'original. Le simulateur TPS allemand , aux capacités proches, a servi d'inspiration pour la conception.

Source: https://habr.com/ru/post/fr451670/


All Articles