Microcontrolador virtual de 4 bits com programação com três botões e quatro switches



O dispositivo proposto emula em um microcontrolador ATmega4809 um microcontrolador abstrato de 4 bits com um espaço de endereço de 256 bytes, que pode ser programado com três botões e quatro comutadores.

O espaço de endereço é dividido em 16 páginas com 16 instruções cada. O comprimento da instrução é de 8 bits, dos quais os quatro mais significativos são o comando e os quatro inferiores são os dados:



Para entrar no modo de programação, mantenha pressionado o botão 2, pressione o botão reset, solte-o, solte o botão após ele. No modo de programação, classifique sequencialmente as instruções na RAM pelo botão 2. Ao passar para a próxima instrução, os LEDs mostram o endereço atual por uma fração de segundo. O botão 1 permite que você faça alterações no comando e endereço como parte da instrução atual. Ao mover para um novo endereço com o botão 2, as instruções para o endereço anterior são inseridas na EEPROM. Após digitar o programa, você precisa pressionar o botão de reset, e haverá uma transição do modo de programação para o modo de execução do programa.

A lista de comandos:

0x0 - carrega o valor constante na porta doutB
0x1 - o mesmo na porta doutA
0x2 - pausa
0x3 - salto incondicional relativo
0x4 - carrega o valor constante na variável A
0x5 - carrega algo com o valor da variável A
0x6 - carrega o valor de algo na variável A
0x7 - executa operações aritméticas e lógicas com a variável A (e B)
0x8 - defina a mordidela alta do endereço para a instrução de salto incondicional absoluta
0x9 - faça um salto incondicional absoluto para o endereço especificado
0xA, 0xB - age como um loop for: toda vez que o comando é executado, se a variável C (ou D) for maior que zero, ocorre uma transição incondicional absoluta para o endereço fornecido, então o valor da variável C (ou D) diminui
0xC - pule a instrução a seguir se o argumento for uma unidade lógica
0xD - chame a função no endereço especificado
0xE - retorna da função chamada
0xF - defina o endereço para a RAM virtual de 4 bits, o valor armazenado nesse endereço pode ser lido com a instrução 0x6E e escrito com a instrução 0x50.

Exemplo 1 - pisca-pisca:

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

Exemplo 2 - contador binário:


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

Exemplo 3 - pisca-pisca com velocidade ajustável (com sub-rotina):


     : 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 os arquivos necessários para repetição (placa, firmware, etc.) - por referência ao original. O simulador TPS alemão , com capacidades próximas, serviu de inspiração para o design.

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


All Articles