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.