“Disassemblando” código Intel Hex com o simulador Kit SENAI PIC16

Simulador Kit SENAI PIC16

Resumo

 

Este artigo tem por objetivo apresentar o programa intitulado de Simulador Kit SENAI PIC16. Cujo propósito principal é simular programas escritos e previamente compilados, no caso de linguagem de alto nível (C), ou montados (assembled), no caso de linguagem Assembly. Simularemos então código Intel Hex para microcontroladores PIC16F877A!

 

Essa simulação ocorre de duas maneiras. A primeira oferece a visualização dos registradores internos, memória e instruções em linguagem de montadora (Assembly) sendo executadas passo a passo ou continuamente. A segunda forma permite ao usuário experimentar sensação semelhante ao uso de um kit de desenvolvimento e depuração para microcontrolador. Possui interface gráfica com múltiplos periféricos de hardware.

 

 

Introdução

 

O programa Simulador Kit SENAI PIC16 começou a ser elaborado em meados de 2015 na Faculdade de Tecnologia SENAI Anchieta como trabalho de iniciação científica desenvolvido pelos alunos do curso de Tecnologia em Eletrônica Industrial "Matheus Veronese Quezini" e "Victor Carbón Ferreira", onde colaborei como orientador do projeto.

 

Seu objetivo foi criar um programa capaz de simular o funcionamento do kit de desenvolvimento para microcontroladores que utilizamos em nossas aulas de microcontroladores. Desta forma os alunos poderiam fazer experiências e testes em casa sem a necessidade de um kit real.

 

 

Desenvolvimento

 

Criar um simulador do funcionamento de um kit microcontrolado é uma tarefa que demanda muito trabalho e necessariamente precisa ser fracionada. Isso quer dizer que é preciso decompor a solução em pequenas partes e tratá-las separadamente. Após concluídas, é iniciado o processo de “costura”, a integração dos blocos desenvolvidos.

 

Neste caso utilizamos uma técnica de projeto chamada de top-down (de cima para baixo). Isso quer dizer que sabíamos o resultado desejado, mas para isso tivemos que dividir solução em partes e subpartes menores, de forma a tornar claro o que era preciso ser feito antes de partir para o desenvolvimento.

 

O projeto foi dividido em 4 etapas principais:

 

  1. Interpretação de arquivos em formato Intel Hex: esse é o formato de arquivo gerado após a compilação ou montagem de um programa. Tem extensão “.hex” e é utilizado pelos gravadores da Microchip para programação de todas suas famílias de microcontroladores. A tabela 1 apresenta um exemplo de programa no formato Intel Hex.

 

Tabela 1: Programa para PIC16 no formato Intel Hex.

:020000040000FA

:1000000083160F3085001F308600BF308700003018

:1000100088000030890081130E309F008312850113

:1000200086018701880189018516061C18281B286E

:0C003000FF3088001528003088001528DB

:04003C000034003458

:02400E00323F3F

:00000001FF

 

 

  1. Interpretação dos Opcodes da família PIC16: os Opcodes são os códigos binários que representam cada uma das instruções do programa em linguagem Assembly formadas por mnemônicos e operadores. A família PIC16 possui um conjunto de 35 instruções assembly para realização de qualquer atividade que os programas demandem. A tabela 2 apresenta alguns exemplos de instruções.

 

Tabela 2: Exemplo de instrução para o PIC16.

Mnemônico, Operadores

Opcode (14 bits)

Bits de status afetados

Descrição

ADDWF f,d

00 0111 dfff ffff

C, DC,Z

Soma o conteúdo do registrador W com o conteúdo do registrador F informado

ANDWF f

00 0101 dfff ffff

Z

Operação “E” entre o conteúdo do registrador W e conteúdo do registrador F informado

CLRF f

00 00001 1fff ffff

Z

Limpa o conteúdo do registrador F informado

 

 

  1. Execução dos Opcodes da família PIC16: dado um Opcode, após interpretá-lo, é preciso realizar a mesma operação que a CPU do PIC16 faria. Para isso é fundamental conhecer todos os registradores da memória do modelo de microcontrolador que se está simulando. Neste caso o PIC16F877A.

 

Essa memória é reproduzida pelo programa com todos os seus valores iniciais e interdependências (flags, registradores duplicados, etc.).

 

As operações da CPU são executadas pelo bloco chamado de ULA (Unidade Lógica e Aritmética). No caso da simulação esse unidade física é substituída por um grande conjunto condicional de equações e variáveis.

 

  1. Integração do microcontrolador com os periféricos do kit de desenvolvimento: essa é uma etapa extremamente complexa, onde o resultado das três etapas anteriores interage com periféricos criados para simulação do hardware que compõe a placa do kit (leds, chaves, displays, etc.).

 

Cada periférico precisa ser criado de forma a reproduzir o mais fielmente o funcionamento do hardware real. Sua integração com o microcontrolador simulado deve ser feita minuciosamente, isso porque muitos registradores podem ser envolvidos.

 

A figura 1 apresenta o circuito de acionamento do conjunto de leds. Para que um led virtual acenda é preciso que o port D esteja configurado como saída (registrador TRISB), que a saída esteja em nível lógico alto (registrador PORTD) e que o transistor de enable dos leds esteja em saturação (TRISA.5 e PORTA.5).

 

Circuito de acionamento dos leds do kit SENAI PIC16
Figura 1: Circuito de acionamento dos leds do kit SENAI PIC16.

 

Este projeto foi todo desenvolvido utilizando linguagem C# e usou como base a própria documentação presente no datasheet do PIC16F877A e as regras de geração do arquivo Intel Hex.

 

 

Resultado

 

Atualmente o “Simulador KIT SENAI PIC16” está na versão 3.1 e é capaz de simular 33 instruções (exceções REFIE e SLEEP) das 35 existentes para família PIC16.

 

Os periféricos internos e externos já implementados e disponíveis para simulação são:

  • LEDS (PORTD pinos de 0 a 7);
  • DISPLAYS DE 7 SEGMENTOS (PORTD pinos de 0 a 7);
  • DISPLAY LCD (PORTD pinos de 0 a 6);
  • BOTÕES (PORTB pinos 0 e 1);
  • TECLADO MATRICIAL (PORTB pinos de 2 a 7);
  • PORTA SERIAL USART somente modo assíncrono (PORTC pinos 6 e 7);
  • TIMER0;
  • ENTRADAS ANALÓGICAS (PORTA pinas 0 e 1).

 

A figura 2 representa a tela principal do simulador, nela é possível ter o KIT SENAI PIC16 à esquerda e a descrição de periféricos, bem como a porta serial virtual, à direita.

 

Simulador KIT SENAI PIC16 para simular Intel Hex para microcontroladores PIC16F877A
Figura 2: Simulador KIT SENAI PIC16.

  

 

Desafios

 

Além dos desafios encontrados na integração dos periféricos outros podem ser destacados:

  • Controle do program counter PC: o program counter é o vetor que determina qual o endereço da próxima instrução a ser executada. Seu valor é incrementado de um em um ao longo de um código sequencial, porém, quando ocorrem desvios no código, ele precisa ser atualizado corretamente para que não haja falha na dinâmica de execução do programa;
  • Controle do stack: o PIC16 possui uma pequena memória LIFO (last-in, first-out) de oito posições para o armazenamento dos endereços de retorno de sub-rotinas e interrupções. Sem essa memória seria impossível retornar de um desvio causado por uma chamada (instrução CALL);
  • Rendimento do microcontrolador simulado: o microcontrolador utilizado no kit trabalha com um cristal de 4 MHz que garante a execução de até 1 milhão de instruções por segundo (1 MIPS).

 

Na primeira versão deste simulador não conseguimos desempenho melhor do que algumas centenas de instruções por segundo.

 

Na segunda versão mudamos a forma de decodificação e armazenamento dos dados, além de permitir a simulação sem o refresh da interface visual representativa das memórias da dados e programa. Com isso o desempenho melhorou mas ainda esteve abaixo de mil instruções por segundo. Além disso, foi incorporada a porta serial virtual, até então inexistente.

 

A versão 3.0 sofreu total reformulação da dinâmica e execução das instruções, passando a operar com múltiplas threads. Está é a primeira versão na qual o LCD foi implementado. Com o uso de múltiplas threads, durante testes foi possível executar mais de milhão de instruções por segundo, porém isso impactou no consumo excessivo de processamento do computador utilizado. Atualmente é possível executar até mil instruções por segundo garantindo o refresh da interface visual representativa das memórias da dados e programa, ou executar até 10 mil instruções com refresh apenas dos periféricos do kit virtual.

 

A versão (3.1) ganhou um novo periférico, as entradas analógicas AN0 e AN1, além de uma tela para consulta de periféricos implementados e observações sobre eles.

 

Por conta do tempo de resposta de alguns periféricos externos, as instruções que os afetam de alguma forma podem levar mais tempo para serem executadas.

 

Aversão 3.3(atual) do simulador teve melhoria de desempenho e correção na indicação dos bits de configuração.

 

Considerações finais

 

A divulgação deste programa tem como objetivo oferecer uma ferramenta prática e funcional para o aprendizado e depuração de programas para microcontroladores PIC16. Não possui qualquer objetivo comercial, apenas espera estimular a disseminação de conhecimento.

 

Destacamos ainda que muitos periféricos internos do microcontrolador precisam ser desenvolvidos. Isso ocorrerá paulatinamente de acordo com a disponibilidade de seu mantenedor atual e a disposição de novos alunos para desenvolverem seu código.

 

 

Link para baixar o instalador do Simulador KIT SENAI PIC16-v3.1

 

Simulador KIT SENAI PIC16 - simule seus programas para microcontrolador

 

 

 

Nova versão Simulador KIT SENAI PIC16 - Agora com modo TURBO!

 

 

 

Bibliografia

 

NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Leandro Poloni Dantas
Mestre em engenharia elétrica e doutorando na mesma área pelo Centro Universitário da FEI, se dedica ao estudo de arquiteturas alternativas para o projeto de processadores e microcontroladores. Atuou por mais de 15 anos na indústria eletrônica no desenvolvimento de novos produtos para diferentes segmentos, com foco principal no projeto de equipamentos eletrônicos para o mercado de segurança eletrônica e automação predial. Desde 2009, vem lecionando para alunos dos cursos de engenharia elétrica, civil, mecânica e tecnologia em diferentes instituições paulistanas. Especialista em sistemas embarcados e inventor de traquitanas.

2
Deixe um comentário

avatar
 
2 Comment threads
0 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
2 Comment authors
Leandro Poloni DantasVagner Rodrigues Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Leandro Poloni Dantas
Visitante

Pessoal,
Já está disponível a versão 3.3 do simulador com melhora de desempenho e correção na indicação dos bits de configuração.
O links vocês encontram no meu blog: http://oprofessorleandro.wordpress.com/programas/
Postei um vídeo no Youtube descrevendo as alterações e exemplificando o uso: https://youtu.be/aDPdjlOsodQ?list=PLCDUzEnMT5RqT8xXfDvgX4YPr9hjXmJy4

Abraços!

Vagner Rodrigues
Visitante
Vagner Rodrigues

Muito legal, Leandro! Estarei testando e utilizando com meus alunos também.
Obrigado por compartilhar o conhecimento. Um abraço.