Escolar Documentos
Profissional Documentos
Cultura Documentos
-Botão direito na pasta source file -> new -> assembly file
Para incluir: Botão direito na pasta linker file ->add existing item (procurar arquivo no
diretório acima)
Se não incluir ele acusará a falta deste arquivo na hora de montar o código.
#include "p24EP512GU810.inc"
- Para saber quais instruções você poderá utilizar e suas respectivas sintaxes, é muito importante
consultar o arquivo: 16-bit MCU and DSC Programmer’s Reference Manual.pdf. Este
arquivo foi renomeado para "Detalhes Instruções PIC24.pdf". A sessão 5 é a de principal
interesse.
- Assim como no SAP e no 8085, faremos a manipulação de dados por meio de registradores.
Em algumas instruções você verá que será necessário informar o nome do registrador que
receberá tais dados. Nas definições do PIC, os registradores recebem os nomes W0,W1,...,W15.
Dica: É possível escrever todo o código utilizando dois registradores. Para padronizarmos os
códigos da turma, vamos utilizar o W1 e W2.
- Primeiro devemos forçar que os pinos da porta B sejam digitais. Qual SFR é responsável por
isso? Consulte o datasheet do PIC24EP512GU810 no cap11 (págs 207 e 209).
- Depois devemos configurar os pinos da porta B como saídas digitais. Qual SFR é responsável
por isso? Consulte o datasheet do PIC24EP512GU810 no cap11(págs 207 e 209).
*Os bits que serão definidos como saída dependerão de quais LEDs da porta B você deseja
ligar. Vamos manipular todos os LEDs. Assim vamos manipular 16 bits de uma só vez.
- Por fim, vamos acender (ou manter apagados) os LEDs da porta B. O estado aceso (ou
apagado) é controlado também em um SFR. Que SFR é esse? Consulte o datasheet do
PIC24EP512GU810 no cap11(págs 207 e 209).
- Após consultar o datasheet no cap11 você constatará a necessidade de atribuir 0's e 1's aos
SFR's consultados anteriormente. Contudo o comando TRISB=0, por exemplo, não será aceito
pois o operador de atribuição "=" não é reconhecido pelo assembler. Para carregarmos o SFR
TRISB com 0's, precisaremos recorrer às instruções reconhecidas pela CPU do PIC que de
alguma forma irão carregar os 16bits de TRISB com 0's.
- Procure no arquivo "Detalhes Instruções PIC24.pdf" as instruções que irão viabilizar essas
manipulações nos SFRs. Consulte a tabela 3.1 (Pág 38) para ter acesso às tabelas 3-2 a 3-11,
que contêm uma breve descrição de todas as instruções reconhecidas pela CPU do PIC. Para
maiores detalhes de uma determinada instrução, acesse a página indicada na última coluna da
tabela onde ela está descrita. Veja o exemplo abaixo para a instrução ADD:
- Veja que no exemplo da instrução ADD, a sintaxe é apresentada da seguinte forma:
Ou seja, para realizar esta instrução você deverá passar as informações apresentadas acima.
Aquelas que estão entre "{}" são opcionais e, nesta aula, não iremos utilizá-las. Na descrição
detalhada de cada instrução é informado o que cada campo opcional (e obrigatório)
representam. Assim, neste exemplo esta instrução de soma ficaria: ADD f
É importante você observar que f representa um endereço da memória de dados e que nesta
memória há espaços para armazenamento de dados de modo geral e espaços dedicados para os
SFRs. Veja a figura 4-6 (pág 53) do datasheet do PIC24EP512GU810 para identificar esta
divisão da memória. Desta forma, se você quiser realizar a soma entre WREG (um dos
operandos fixos relacionados a instrução ADD dada neste exemplo) e o conteúdo de um SFR,
você deveria passar o endereço deste registrador. Se, por exemplo este registrador fosse o
TRISB, então a instrução ficaria "ADD 0x0E10" pois o endereço (f) do registrador TRISB é
0xE10 (veja a figura abaixo)
Contudo, para facilitar nosso trabalho, o arquivo p24EP512GU810.inc, que incluímos no início
deste projeto, possui uma série de definições que associam o nome dos SFRs aos endereços que
eles ocupam na memória de dados. Isso permite então que, ao invés de termos que informar o
endereço do SRF ao passar o operando f, podemos passar o nome do registrador. Desta forma,
para o exemplo dado, a instrução que antes deveria ser passada como "ADD 0x0E10" poderá ser
passada como ADD TRISB. Dica: Utilize sempre letras maiúsculas para informar o nome do
SFR, ou seja, "TRISB" ao invés de "trisb".
- Para esta primeira parte da prática, podemos utilizar apenas a instrução "MOV" para carregar
0's e 1's nos devidos SFRs e com isso, atingirmos o objetivo de acender os LEDs da porta B.
- Para auxiliá-lo na escolha das instruções, segue abaixo os passos que devem ser executados
para acender os LEDs da porta B:
- Caso não haja erros no seu projeto, o MPLAB apresentará a seguinte mensagem:
- O próximo passo consiste em gravar o projeto no PIC. Para isso, abra o MikroProg, selecione
a família PIC24E/dsPIC33E e selecione o modelo do PIC (ver chip na placa). Em seguida,
pressione o botão "LOAD". Neste instante, abrirá uma janela para que você localize o arquivo
".HEX" (arquivo gerado a partir do seu código e que será carregado dentro do PIC). O caminho
para localizar este arquivo é C:\Users\nome_do
_usuário\MPLABXProjects\pratica1.X\dist\default\production.
Em seguida, você deve mandar o MikroProg carregar o arquivo .HEX no PIC. Para isso
pressione o botão "WRITE".
- Verifique na placa se as chaves (SW15) que ligam/desligam os LEDs estão na posição ON.
Esta segunda parte da prática tem o objetivo de fazer os LEDs da porta B piscarem.
Contudo, o código escrito na primeira parte deverá ser mantido pois ele é necessário
para viabilizar este segundo objetivo.
A lógica é a seguinte:
o Vamos carregar um registrador com 1s. Em seguida utilizaremos uma instrução
para decrementar este registrador e outra para verificar se o valor deste
registrador é zero. Se o valor após o decréscimo não for zero, ele vai voltar para
a instrução anterior e fará isso até que o registrador fique zero. Isso servirá para
dar um delay antes de mudar o estado do led. Caso contrário, não seremos
capazes de perceber os LEDs piscando.
o Para verificar se é o registrador é zero ou não, utilizaremos a instrução BRA NZ
(Branch if not zero). Consulte os detalhes desta instrução na página 145 de
"Detalhes Instruções PIC24.pdf".
o Depois que der o delay, vamos inverter o status do LED. Isso é feito usando a
instrução de complemento. Procure por essa instrução no datasheet de
instruções.
o Depois vamos mover este novo valor para o SFR de saída ligados aos leds
(LATB).
o Depois que inverter, vamos começar tudo novamente.
Abaixo, segue a estrutura do código que poderá ser utilizada para atingir este objetivo:
L1: MOV ?a , ?b
L2: DEC ?x , ?x
BRA NZ, ?c;
COM ?y , ?y
MOV W2, LATB
GOTO ?d