5a aula

Propaganda
5ª aula – Laboratório
Diretivas
Diretivas (são comandos para o programa montador, não são instruções p o PIC)
● ORG (Originate): determina o endereço a partir do qual as próximas instruções serão
montadas.
● EQU (Equate): define uma relação entre um símbolo e um valor constante.
● CBLOCK ... ENDC: Permite definir vários símbolos em endereços sequenciais.
● #DEFINE sym txt : permite definir textos para substituição
● MACRO ..... ENDM : define uma macro, que é um #define muito mais poderoso pois
pode conter parâmetros e definir várias instruções.
● #INCLUDE <arquivo> (ou “arquivo”): inclui todo o texto do arquivo citado na posição
da diretiva.
● END: diretiva obrigatória, indica ao montador onde parar o processo de montagem.
Obs: O MPLAB diferencia as diretivas das instruções, colocando estas em azul com
negrito.
Formato das Instruções em Assembly
MOVLW 0x1B
MOV: Ação
L: Origem
W: Destino
0x1B: Valor (literal)
→ “Move Literal to Work”
→ Move (copia) o valor 0x1B para o acumulador.
MOVWF 0x1B
Ação: MOV
Origem: W
Destino: F
Endereço do File: 0x1B (normalmente é o nome do registrador e não seu endereço, como
TMR0, PORTB, etc).
→ “Move Work to File”
→ Move (copia) o valor do acumulador para o file (registrador) localizado no endereço 0x1B da
RAM.
BSF 0x21,3
Ação: Bit Set – colocar em 1 o bit
Origem: F – file (registrador) 0x21
Endereço do File: 0x21
Num.do bit: 3
→ “Bit Set File”
→ Seta o bit 3 do file 0x21.
BTFSC 0x21,3
Ação: BT SC - Teste o bit e pule a próxima instrução
Origem: F
Condição: C – clear - zero
Endereço do File: 0x21
Ação condicional: pular a próxima instrução
Num.do bit: 3
→ “Bit Test File Skip if Cleared”
→ Testa o bit 3 do file 0x21; se (o bit) for zero, pula a próxima instrução.
DECF 0x1C,F
Ação: DEC – decrement – diminuir uma unidade
Origem: F – file - registrador
Endereço do File: 0x1C
Destino: F
→ “Decrement File”
→ Decrementa o valor do file 0x1C e coloca o resultado no próprio file.
DECFSZ 0x1C,F
Ação: DEC - decrement
Origem: F
Condição: Z – ser zero
Endereço do File: 0x1C
Ação condicional: S – skip – pular a próxima instrução
Destino: F – o próprio registrador
→ “Decrement File Skip if Zero”
→ Decrementa o valor do file 0x1C e coloca o resultado no próprio file; se (o byte) for zero,
pula a próxima instrução.
Ver Ciclos de máquina e MACROS no material do Professor Amauri Assef
http://paginapessoal.utfpr.edu.br/amauriassef/disciplinas/sistemasmicrocontrolados/material-de-apoio/Slides%20SMIC%201-71.pdf/view
Exercícios:
1) Faça um programa em Assembly que gere um PISCA PISCA com 8 LEDs ligados no
PORTB do PIC16F628A, sendo que o mesmo deverá ser acionado 10 vezes com um
intervalo de tempo entre as alterações em ms (milissegundos) igual aos dois últimos
números de seu código de aluno.
2) Faça um programa em Assembly que gere um sequencial de 8 LEDs ligados no PORTB
do PIC16F628A, sendo que o mesmo deverá ser acionado 5 vezes com um intervalo de
tempo entre as alterações de 100ms (milissegundos), com a seguinte sequência de
acionamentos:
Pinos
13
12
11
10
9
8
7
6
Bits do PORTB RB7
RB6
RB5
RB4
RB3
RB2
RB1
RB0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
1
0
0
0
0
0
0
1
0
0
0
0
0
0
1
0
0
0
0
0
0
1
0
0
0
0
0
0
1
0
0
0
0
0
0
1
0
0
0
0
0
0
1
0
0
0
0
0
0
0
3) a) Faça o algoritmo e o programa que realize uma contagem na variável CONT desde 0
até 9 retornando novamente a 0 e repetindo novamente a contagem.
b) Modificar o programa anterior de forma que a contagem seja regressiva de 9 a 0.
c) Baseando-se nos anteriores, fazer um programa que faça a contagem
primeiramente crescente de 0 a 9, tornando-se decrescente até 0, voltando a ficar
crescente até 9 e assim sucessivamente.
d) Fazer um programa que faça a contagem crescente de 0 a 9, tornando-se
decrescente até 1, tornando-se crescente até 10, tornando-se decrescente até 2,
tornando-se crescente até 11 e assim por diante.
4)
Fazer um programa que faça piscar todos os leds conectados à porta D a uma
frequência de 2 Hz.
5)
Modificar o programa anterior de forma que os leds pisquem 10 vezes no
padrão 11111111 / 00000000, outras 10 vezes no padrão 11110000 / 00001111 e
outras 10 vezes no padrão 10101010 / 01010101 repetindo tudo novamente.
6) Fazer um programa que faça um LED aceso ir percorrendo um a um dos bits desde o
sinal RB0 até RB7 sequencialmente, invertendo o sentido e percorrendo de RB7 até
RB0, invertendo novamente e assim por diante. O tempo que cada LED fica aceso é de
150ms.
2ª APS
Em relação ao exercício nº 2 mostre para a Professora para que ela possa verificar e anotar a
nota da APS as seguintes atividades:
- tempo gerado na subrotina (stopwatch do MPLAB);
- simulação funcionando no ISIS do Proteus;
- implementação e circuito funcionando no Protoboard ou em um kit de desenvolvimento.
Download