Pergunta

Vou começar a trabalhar em um projeto em que preciso ter um entendimento decente da linguagem de montagem para o microcontrolador PIC. Estou intimamente familiarizado com o C/C ++, então sei como codificar na maior parte do tempo e já fiz muitos projetos para a foto, para entender a arquitetura, mas fiz toda a minha programação em 'C'.

Existe um bom livro ou site que um bom trabalho explica o que todos os comandos da Assembléia significam e como realizar tarefas bastante simples (LEDs de blink, matemática básica, etc ...) para o microcontrolador PIC?

EDIT: O objetivo principal deste post é solicitar recursos para a Assembléia de Aprendizagem, não debatendo os méritos de C vs montagem no PIC ou se o PIC é um microcontrolador 'bom' para usar. Estou usando um microcontrolador PIC18 se isso fizer alguma diferença.

Foi útil?

Solução

Eu tentaria o seguinte:Tutorial da foto

Outras dicas

Há mais do que uma arquitetura de pic, com conjuntos de instruções significativamente diferentes. O microchip não possui a consistência arquitetônica do Atmel AVR, por exemplo. Portanto, você precisa especificar o que está usando - Pic12, 16, 24, 32, por exemplo.

Então, antes de tudo, sugiro evitar o montador de PIC com base no que você aprende, digamos um pic12, que pode não ser muito aplicável a um PIC24. Em segundo lugar, evitaria usar uma foto se pudesse como desenvolvedor de software - embora eu admitisse que existem outras considerações e você pode não ter escolha.

O que você pode ter uma escolha não está usando o Assembler. Embora as fotos de extremidade inferior não sejam mais adequadas para a geração de código C, esse é o problema do escritor do compilador; Ainda é mais econômico em termos de tempo de desenvolvimento para usar C sempre que possível. Por outro lado, para produtos de alto volume, se você puder ajustar o código em uma peça menor usando o Assembler, isso pode ser um fator. Decidir que você precisa de montador antes de testar uma solução C geralmente é uma 'otimização prematura'. Mesmo que a implementação C falhe em tamanho ou restrições de tempo, você pode chamá -lo de protótipo e recodificá -lo para atender às restrições. Fazer ainda pode ser mais rápido do que iniciar a codificação do montador do zero e lutar com o design e as instruções definidas ao mesmo tempo. Diga ao seu chefe que você protótipo de C, quando atender aos requisitos, ninguém desejará desperdiçar dinheiro re-codificando, é um código de assembler não portável e não portável.

Por fim, para responder à sua pergunta, supondo que você precise fazer o trabalho de maneira rápida e eficiente, use os exemplos e notas de aplicativo do microchip o máximo possível e se familiarize com o conjunto de instruções da referência do conjunto de instruções do fabricante. A instrução conjunta para as peças de ponta inferior não é grande. Para o dia-a-dia, gosto de usar um "cartão de referência do conjunto de instruções" como um assessor de assessores-resume todos os detalhes essenciais de cada instrução, geralmente em algumas páginas-imprima-o duplo e laminá-lo! ;). Aqui está um PIC16 Exemplo

Pode ser uma resposta bastante tardia, mas você pode se beneficiar deste curso de laboratório, escrito principalmente para aprender a montagem do PIC através de aplicativos.

Verificar: http://embedded-ju.ucoz.com/

Verifique a guia Experimentos, inclui:

Experiência 0 - (Introdução ao mplab)

Experiência 1 - (Introdução ao conjunto de instruções de montagem do PIC)

Experiência 2 - (mais sobre conjunto de instruções e técnicas de programação modular)

Experiência 3 - (Análise e design básicos do sistema)
3.1. Guia de hardware I

Experiência 4 - (LCD - HD44780)

Experiência 5 - (teclado)

Experiência 6 - (Usando o compilador C Hi-Tech C em Mplab) 6.1. Programação PIC com Guia da ICD2.

Experiência 7 - (Timers (Timer0 e Timer2))

Experiência 8 - (USART)

Experiência 9 - (Software PWM e A/D)


É baseado na série PIC 16, principalmente, 16F84A, 16F877A e 16F917 .. Os exemplos são totalmente comentados e os experimentos explicados completamente.

Eu acredito em escrever um desmontador. Comece com um programa de uma ou duas linhas muito simples que carrega um registro com uma constante (talvez tenha leia um tutorial ou algo para aprender essa etapa). Montá -lo. Salve o binário em um formato que você é capaz ou disposto a escrever um programa para ler (Intel Hex, talvez, ou ELF, se eles apoiarem isso).

Escreva um programa para ler o arquivo binário e extrair o programa, depois pegue esses bytes e escreva um desmontador (mesmo que o fornecedor tenha um desmontador, você ainda deve escrever um).

Agora comece a realizar o processo, aprenda uma nova instrução ou uma nova maneira de usar essa instrução, uma instrução por vez. Escreva o código para desmontar essa instrução ou opção. Tente escrever o assembler para manipular cada um dos bits nas instruções.

Quando você passar pelo conjunto de instruções, você saberá o conjunto de instruções melhor do que a maioria das pessoas que o usa todos os dias, saberá como escrever para cada uma das opções para cada um dos códigos de OPC, você também pode aprender por que esta instrução só pode abordar n bytes de sua localização e outros podem acessar qualquer coisa, ou essa instrução pode usar apenas um bit imediato e outras pessoas podem usar qualquer valor. Esse tipo de coisas.

Eu usei esse processo muitas vezes e aprendi muitos conjuntos de instruções, YMMV. Após o primeiro dois, três, o processo acima pode levar apenas uma tarde para ser concluída.

EDITAR:

O objetivo aqui é a educação e não o próximo grande projeto de origem. A saída pode ser tão feia ou incompleta quanto você gosta, é o único que vai lê -lo.

Nota: Um desmontador genérico para conjuntos de instruções de comprimento variável pode ser um pouco difícil, você não deseja desmontar linearmente o binário nesse caso que deseja seguir todos os caminhos de execução. Eu evitaria isso. Tomar programas simples que executam a montagem de um tanto linearmente, a desmontagem não é difícil, mesmo em um conjunto de instruções de comprimento variável. Você pode aprender um pouco sobre uma instrução definida desmontando e examinando a saída de um compilador C (ou outra linguagem de alto nível), se o compilador não tiver uma opção de saída do assembler ou não tiver um desmontador, você não poderá obter Para aproveitar isso (a menos que seja um conjunto de instruções de comprimento fixo).

Observe também depois de aprender o Assembler para um processador, o segundo é muito mais fácil e assim por diante. As coisas que você precisa aprender com uma para a seguinte geralmente se tornam o tamanho desse salto, quais são as regras imediatamente, abordando indiretas, basicamente todas as coisas que estão diretamente ligadas a examinar os códigos de OPC. Você pode aprender sem olhar para os códigos de operações, mas precisa confiar nas mensagens de erro de documentação ou montagem sendo de alta qualidade.

O piclist: http://piclist.com/ .

Em particular,

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top