Microcontrolador virtual de 4 bits con programaci贸n de tres botones y cuatro interruptores



El dispositivo propuesto emula en un microcontrolador ATmega4809 un microcontrolador abstracto de 4 bits con un espacio de direcciones de 256 bytes, que se puede programar con tres botones y cuatro interruptores.

El espacio de direcciones se divide en 16 p谩ginas con 16 instrucciones cada una. La longitud de la instrucci贸n es de 8 bits, de los cuales los cuatro m谩s significativos son el comando, y los cuatro inferiores son los datos:



Para ingresar al modo de programaci贸n, mantenga presionado el bot贸n 2, presione el bot贸n de reinicio, su茅ltelo, suelte el bot贸n despu茅s de eso. En el modo de programaci贸n, clasifique secuencialmente las instrucciones en la RAM por el bot贸n 2. Al pasar a la siguiente instrucci贸n, los LED muestran la direcci贸n actual durante una fracci贸n de segundo. El bot贸n 1 le permite realizar cambios en el comando y la direcci贸n como parte de la instrucci贸n actual. Al pasar a una nueva direcci贸n con el bot贸n 2, la instrucci贸n para la direcci贸n anterior se ingresa en la EEPROM. Despu茅s de escribir el programa, debe presionar el bot贸n de reinicio, y habr谩 una transici贸n del modo de programaci贸n al modo de ejecuci贸n del programa.

La lista de comandos:

0x0 - carga el valor constante en el puerto doutB
0x1 - lo mismo en doutA puerto
0x2 - pausa
0x3 - salto incondicional relativo hacia atr谩s
0x4: carga el valor constante en la variable A
0x5: carga algo con el valor de la variable A
0x6: carga el valor de algo en la variable A
0x7: realiza operaciones aritm茅ticas y l贸gicas con la variable A (y B)
0x8: establece el mordisco alto de la direcci贸n para la instrucci贸n de salto incondicional absoluta
0x9: realiza un salto incondicional absoluto a la direcci贸n especificada
0xA, 0xB: act煤a como un bucle for: cada vez que se ejecuta el comando, si la variable C (o D) es mayor que cero, se produce una transici贸n incondicional absoluta a la direcci贸n dada, entonces el valor de la variable C (o D) disminuye
0xC: omita la siguiente instrucci贸n si el argumento es una unidad l贸gica
0xD: llama a la funci贸n a la direcci贸n especificada
0xE - regreso de la funci贸n llamada
0xF: establezca la direcci贸n para la RAM virtual de 4 bits, el valor almacenado en esta direcci贸n puede leerse con la instrucci贸n 0x6E y escribirse con la instrucci贸n 0x50.

Ejemplo 1 - luz intermitente:

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

Ejemplo 2 - contador binario:


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

Ejemplo 3 - luz intermitente con velocidad ajustable (con subrutina):


     : 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  

Esquema:







Todos los archivos necesarios para la repetici贸n (placa, firmware, etc.) - por referencia al original. El simulador alem谩n TPS, cercano en capacidades, sirvi贸 de inspiraci贸n para el dise帽o.

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


All Articles