Buscar

Linguagem Assembly do PIC e ambiente MPLAB

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

IESB - Instituto de Educação Superior de Brasília 
Engenharia de Computação e Eng. de Telecomunicações 
Laboratório de Aplicações de Microcontroladores e Microprocessadores 
 
Experiência 01 
Linguagem assembly do PIC e ambiente MPLAB 
 
1) Objetivo: 
 
Familiarizar os alunos com a linguagem assembly do microcontrolador PIC da Microchip. Mostrar os 
recursos disponíveis na ferramenta de desenvolvimento MPLAB. 
 
2) Aspectos teóricos: 
 
2.1. MPLAB: 
 
O MPLAB é um ambiente IDE (Integrated Development Environment), ou seja, um conjunto de 
ferramentas para desenvolvimento de aplicações para os microcontroladores PIC da Microchip. Ele integra 
editor de texto, compilador, simulador, gerenciador de projetos e gravador para os dispositivos. É gratuito e 
pode ser obtido no site da Microchip: www.microchip.com . 
O programa pode ser elaborado em assembly ou em C, sendo depois compilado quando é gerado 
um arquivo no formato Intel hexadecimal (extensão .HEX). Esse arquivo contém o código de máquina a ser 
gravado no microcontrolador. 
Necessita de um sistema operacional compatível com Windows 9x, NT, 2000 ou XP. 
 
2.2. Registradores do PIC: 
 
 Para desenvolvimento de aplicativos, o microcontrolador PIC16F628A, que 
será utilizado durante o curso, possui um único registrador acessível dentro de sua 
CPU, o registrador W (work register). Assim, algumas operações, como uso de 
constantes ou transferência de valores entre registradores, só poderão ser 
realizadas por intermédio desse registrador W. 
Os demais registradores do PIC são definidos dentro de sua memória RAM. 
Dessa forma, o PIC irá reservar uma parte dessa memória (endereços iniciais) para 
seu uso e nela estarão contidos os outros registradores necessários ao 
funcionamento do sistema. Esses registradores “especiais” são chamados de SFRs 
(Special Function Register) e indicam ao PIC como ele deve operar. 
 Os programas desenvolvidos também podem definir seus próprios 
registradores, ou variáveis na memória RAM, desde que não utilizem a região 
reservada. 
 Essa arquitetura permite que, tanto o acesso aos registradores especiais do PIC (que ocupam uma 
região reservada da memória RAM), quanto o acesso aos registradores definidos no programa, sejam feitos 
da mesma forma, utilizando as mesmas instruções. 
 
2.3. Diretivas de compilação: 
 
 São comandos colocados dentro do programa assembly para indicar ao compilador a execução de 
alguma tarefa ou atribuição. Esses comandos não fazem parte do conjunto de instruções do PIC e servem 
para auxiliar a programação e/ou tornar o entendimento do código mais fácil. Dentre essas diretivas 
destacamos: 
 
- ORG: indica ao compilador um endereço de memória onde o programa deverá ser colocado. 
- EQU: utilizada nas atribuições, ou seja, serve para fazer associações entre nomes e endereços de memória 
ou constantes numéricas. 
- LABEL: são nomes colocados dentro do programa que depois serão substituídos por endereços ou valores 
previamente definidos. Deve ser colocado sempre na primeira coluna da linha onde é definido. 
- END: indica ao compilador o final do programa assembly e que a compilação deve ser encerrada. 
- INCLUDE: serve para inserir um arquivo dentro daquele que está sendo compilado, em tempo de 
compilação. Em geral, esse arquivo contém definições que serão utilizadas no programa sendo compilado. 
- DEFINE: da mesma forma que EQU, serve para efetuar atribuições no programa para facilitar sua 
compreensão e futuras alterações 
 
 
http://www.microchip.com
3) Aspectos práticos: 
 
3.1. Desenvolva um programa que coloque o valor 3AH na posição de memória 25H, o valor 45 na posição 
26H e transfira o valor contido em 27H para 30H. O programa deve ser salvo com a extensão .ASM. 
 
3.2. Altere o programa anterior para que o conteúdo das posições 25H e 30H sejam somados e o resultado 
colocado na posição 28H. Se a soma exceder a capacidade do registrador, coloque o valor 1 na posição 31H 
e 0, caso contrário. Compile o programa desenvolvido. 
 
3.3. Faça uma operação NAND da constante 67H com um valor contido no endereço 2AH de memória. Salve 
o resultado na posição 2BH. Pegue novamente o valor contido em 2AH e efetue uma operação AND com o 
resultado anterior salvo em 2BH, alterando essa última posição de memória. Nesse último resultado deve ser 
feito agora uma operação OR novamente com a constante 67H e, em seguida, uma operação AND também 
com a constante 67H, com o resultado final salvo em 2BH. Compile e simule o programa escrito. Verifique 
que o resultado final é sempre igual ao da constante 67H, independente do valor contido em 2AH. 
 
3.4. Faça um programa que zere os bits D7, D5 e D4, coloque em 1 os bits D0, D3 e D6, e inverta os bits D1 
e D2 de um valor contido na posição 20H. O resultado final dessas operações deve ser testado para ver se é 
igual a 49H. Caso seja, a posição 25H deverá receber o valor 0. Se não, deverá ser colocado FFH nessa 
posição. Teste (simule) seu programa com os valores 27H e 92H na posição 20H. 
 
3.5. Crie um programa que verifique se a posição de memória 25H possui um valor diferente de 0. Se isso for 
verdade, some o conteúdo dessa posição com a constante 37 e salve o resultado na posição 26H. Caso 
contrário, zere o conteúdo da posição 26H 
 
3.6. Elabore um programa que verifique se a posição de memória 30H possui o valor 1EH. Se isso for verdade, 
some o conteúdo dessa posição com o conteúdo da posição 31H e salve o resultado na posição 32H. Caso 
contrário, subtraia o conteúdo dessa posição do conteúdo da posição 31H, salvando o resultado em 31H. 
 
3.7. Escreva um código que avalie o seguinte polinômio: Y(X) = 11X + K, com K sendo os dois últimos dígitos 
de sua matrícula (em decimal). Antes efetuar o cálculo, garanta que o resultado está na faixa de valores 
possíveis para Y (considere X maior ou igual a 0). Teste (simule) seu programa com os valores 10 e 32 para 
X. 
 
3.8. Dado um valor contido na posição de memória DADO e uma posição chamada FLAGS, na qual o bit 7 
indica a paridade ímpar de DADO, faça um programa que calcule essa paridade sem alterar o valor de DADO. 
Teste seu programa para os valores 87H e E3H. Dica: utilize a instrução RLF para poder testar todos os bits 
da posição pedida em um laço de repetição.

Continue navegando