Baixe o app para aproveitar ainda mais
Prévia do material em texto
Microprocessadores Aula 09: Programação Assembly – Parte 2: Organização Programação Assembly – Parte 2: Organização da rotina e criação de tabela de dados. Referência para a aula: 1 – Apostila: Instruções e Diretivas [Xerox]. Prof.: Edgar Campos Furtado edgar@ufsj.edu.br Sala: 217.2 ORGANIZAÇÃO DO CÓDIGO-FONTE 5V Considere o circuito a seguir. Caso o botão seja pressionado o LED deve apagar. Do contrário, o LED deve permanecer ligado. INÍCIO 2UFSJ – CAP © Edgar C. Furtado 16F877 RD0 VSS VDD RB0 BOTÃO Botão Pressionado � RB0 = 0 � LED APAGADO Botão Livre � RB0 = 1 � LED LIGADO LIGA LED DESLIGA LED RB0 = 1? NÃO SIM A criação de um código-fonte deve seguir padrões que facilitem a análise e possível otimização. Diretrizes para elaboração do código- fonte: • Construa um FLUXOGRAMA de execução da rotina; • ESTRUTURAR o código-fonte; ORGANIZAÇÃO DO CÓDIGO-FONTE 3UFSJ – CAP © Edgar C. Furtado • Comentar durante o processo de programação; • Compor o arquivo código-fonte com caracteres em apenas uma forma: MASIÚSCULO ou MINÚSCULO; • ESQUECER que existe acentuação (exceto para comentários!); • Usar TABULAÇÃO. ORGANIZAÇÃO DO CÓDIGO-FONTE 4UFSJ – CAP © Edgar C. Furtado ORGANIZAÇÃO DO CÓDIGO-FONTE 01) Cabeçalho: Dados relativos ao projeto do código-fonte. ; NOME DO PROJETO ; CLIENTE ; PROGRAMADORES ; VERSÃO ; DESCRIÇÃO DO ARQUIVO Exemplo informações fornecidas no cabeçalho! Indica início do comentário! 5UFSJ – CAP © Edgar C. Furtado Indica início do comentário! ORGANIZAÇÃO DO CÓDIGO-FONTE 02) Arquivo de Definições e configuração do microcontrolador: ; -- ARQUIVO DE DEFINIÇÕES: #INCLUDE <P16F877.INC> ; ARQUIVO DEFINIÇÕES PADRÕES Arquivo de definições para o microcontrolador: P16F877.INC 6UFSJ – CAP © Edgar C. Furtado P16F877.INC Palavras-chave para: • Definições dos registradores SFR; • Definições dos bits dos registradores; • Configuração dos bits; ORGANIZAÇÃO DO CÓDIGO-FONTE 02) Arquivo de Definições e configuração do microcontrolador: Existem duas formas de se especificar as atribuições. A primeira consiste em utilizar mnemônicos, os quais representam o estado do hardware. A segunda forma consiste em se escrever diretamente a palavra de configuração binária. __CONFIG <ATRIBUIÇÕES> ; PALAVRA DE CONFIGURAÇÃO 7UFSJ – CAP © Edgar C. Furtado palavra de configuração binária. A palavra de configuração consiste em um número binário de 14bits, armazenado em um registrador que fica localizado após o final da memória de programa. Esse registrador está acessível somente durante o processo de gravação do PIC, e tem por finalidade armazenar a configuração interna do hardware do mesmo. ORGANIZAÇÃO DO CÓDIGO-FONTE Escrevendo diretamente a palavra de configuração binária. 8UFSJ – CAP © Edgar C. Furtado ORGANIZAÇÃO DO CÓDIGO-FONTE 9UFSJ – CAP © Edgar C. Furtado O microcontrolador pode reiniciar a operação caso seja detectado um nível de tensão de alimentação inadequado. ORGANIZAÇÃO DO CÓDIGO-FONTE O PWRTE é um contador digital que permite o início do processamento do microcontrolador depois de transcorrido cerca de 72ms após terminal de reset MCLR (terminal 1) se tornar nível lógico 1. 10UFSJ – CAP © Edgar C. Furtado Nesse caso o microcontrolador foi configurado com: reset por baixa de tensão ativado, proteção do código fonte desligada, contador de tempo após reset por queda/baixa de tensão de alimentação ativado, contador de tempo do Watch-Dog-Time desligado, oscilador externo via cristal ou ressonador com ORGANIZAÇÃO DO CÓDIGO-FONTE 11UFSJ – CAP © Edgar C. Furtado Watch-Dog-Time desligado, oscilador externo via cristal ou ressonador com frequência entre 200kHz e 4MHz. Os mnemônicos de configuração devem obrigatoriamente ser separados por &; Em termos de palavra de configuração binário a configuração acima é equivalente a: __CONFIG B'11111111110001' Formação da palavra de configuração binária: ORGANIZAÇÃO DO CÓDIGO-FONTE 12UFSJ – CAP © Edgar C. Furtado ORGANIZAÇÃO DO CÓDIGO-FONTE 03) Definindo Variáveis e macros: Como visto na AULA 08 a declaração das variáveis pode ser feita utilizando- se EQU e/ou CBLOCK-ENDC. Além disso, as diretivas #DEFINE e MACRO-ENDM podem ser utilizadas 13UFSJ – CAP © Edgar C. Furtado Associa um conjunto de instruções a uma palavra! Associa uma instrução a uma palavra! ORGANIZAÇÃO DO CÓDIGO-FONTE Exemplo com várias formas de declaração de variáveis e macros: 14UFSJ – CAP © Edgar C. Furtado ORGANIZAÇÃO DO CÓDIGO-FONTE 04) Vetor de RESET: Especifica o endereço para o qual a execução do código é desviada toda vez que um reinício ocorrer. O reset pode acontecer de três formas: • Quando o microcontrolador é ligado; • Aplicando-se nível lógico 0 ao terminal 1 (reset externo); • Estouro do contador watchdog; 15UFSJ – CAP © Edgar C. Furtado • Nível baixo de tensão de alimentação (Brown Out). DIRETIVA ORG: obriga o montador a colocar a primeira instrução após a diretiva no endereço da memória de programa especificado pelo argumento da diretiva, ou seja, no exemplo acima 0x000. Aponta para o início da código principal ORGANIZAÇÃO DO CÓDIGO-FONTE 05) Vetor de Interrupção: É necessário definir um vetor que aponta para a parte da memória de programa que irá armazenar as instruções relativas às interrupções. Esse endereço é padrão para o microcontrolador PIC, sendo definido como ORG 0x004. 16UFSJ – CAP © Edgar C. Furtado Retorno da interrupção 06) Subrotinas: Espaço para as subrotinas. ORGANIZAÇÃO DO CÓDIGO-FONTE 07) Código Principal: Espaço para o código principal, que pode ser dividido em duas partes: • Configuração dos registradores especiais: configuram-se os registradores especiais de interesse, tais como INTCON, OPTION_REG, TRISX, etc; • Rotina principal. 17UFSJ – CAP © Edgar C. Furtado Para configuração dos registradores é necessário conhecimento das funções do microcontrolador: • Temporizadores; • Módulo de captura, comparação e geração PWM; • Comparadores analógicos; • Comunicação serial; • Saída analógica; ; -- ROTINA PRINCIPAL: ... ; -- FIM DO PROGRAMA: END ;OBRIGATÓRIO 08) FIM DO CÓDIGO PRINCIPAL: Utiliza-se a diretiva END para indicar ao motador o fim do código Assembly. ORGANIZAÇÃO DO CÓDIGO-FONTE 18UFSJ – CAP © Edgar C. Furtado END ;OBRIGATÓRIO ; UFSJ/CAP ; MICROPROCESSADORES ; VERSAO 1.0 ; SISTEMA PARA ACIOINAMENTO DE UM LED ; POR MEIO DO COMANDO DE UMA BOTOEIRA ; -- ARQUIVO DE DEFINIÇÕES: #INCLUDE <P16F877.INC> __CONFIG _BODEN_ON & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _XT_OSC ; -- PAGINAÇÃO DE MEMÓRIA: #DEFINE BANK0 BCF STATUS,RPO ; -- INÍCIO DO PROGRAMA: INICIO CLRF PORTB CLRF PORTD BANK1 MOVLW B’00000100’ MOVWF TRISB MOVLW B’00000001’ MOVWF TRISD MOVLW B'00000111' MOVWF ADCON1 CLRF INTCON BANK0 ; -- ROTINA PRINCIPAL: MAIN 19 #DEFINE BANK0 BCF STATUS,RPO #DEFINE BANK1 BSF STATUS,RPO ; -- DEFINIÇÃO DE FLAGS: #DEFINE BOTAO PORTB,0 #DEFINE LED PORTD,0 ; -- VETOR DE RESET: ORG 0X00 GOTO INICIO ; -- INÍCIO INTERRUPÇÃO: ORG 0X04 RETFIE MAIN BTFSC BOTAO GOTO BOTAO_LIB GOTO BOTAO_PRES BOTAO_LIB BCF LED GOTO MAIN BOTAO_PRES BSF LED GOTO MAIN ; -- FIM DO PROGRAMA: END Quando se necessita armazenar um conjunto de valores constantes, que podem ser acessados por meio de um índice, utiliza-se de tabelas; A tabela consiste de uma subrotina, que é chamada por meio da instrução CALL. Na subrotina utiliza-se os registradores PCL e PCLATH para acessar o valor de interesse da tabela; CRIAÇÃO DE TABELA DE DADOS 20UFSJ – CAP © Edgar C. Furtado para acessar o valor de interesse da tabela; O valor de interesse é extraído da tabela, por meio da instrução RETLW; O registrador PCL está presente em todos os bancos de registradores, ou seja, não é necessário mudar de banco para alterar o conteúdo do mesmo. CRIAÇÃO DE TABELAS DE DADOS Uso do registrador PCL para saltar instruções. 21UFSJ – CAP © Edgar C. Furtado CRIAÇÃO DE TABELAS DE DADOS A utilização do PCL deve ser acompanhada de alguns cuidados: � Verificarse a adição do PCL resulta em um índice válido para a tabela, lembrando que PCL é um registrador de 8bis; � Garantir que a tabela não esteja em uma área de transição do PCL. 22UFSJ – CAP © Edgar C. Furtado No primeiro caso, deve-se validar o índice da tabela comparando-o com o número de valores armazenados na tabela menos um. Se o Carry for 1 significa que o índice repassado excede o número de elementos da tabela. CRIAÇÃO DE TABELAS DE DADOS Exemplo de uma sub-rotina tabela, onde se faz a validação do índice dos elementos. Caso o índice seja maior que o número de elementos menos um, deve-se retornar da subrotina sem associar nenhum valor. 23UFSJ – CAP © Edgar C. Furtado CRIAÇÃO DE TABELAS DE DADOS No segundo caso deve-se garantir que os dados armazenados não estejam na área de transição do PCL, ou seja, 24UFSJ – CAP © Edgar C. Furtado Memória de Programa (FLASH): Local onde ser armazena as instruções. Contador de Programa Registrador SRAM 8 níveis de Pilhas Memória FLASH do PIC 25UFSJ – CAP © Edgar C. Furtado Word: 14 bits Tamanho: 8096 x 14 bits Endereçamento a partir do PC (program Counter). CRIAÇÃO DE TABELAS DE DADOS Solução? ORG 0X500 BCF PCLATH,4 BSF PCLATH,3 CALL TAB_1 Configura a página da memória de programa que conterá a tabela e realiza o chamado da tabela. 26UFSJ – CAP © Edgar C. Furtado ... ORG 0X900 TAB_1 .... RETURN Tabela montada a partir do endereço 0X900 na memória de programa
Compartilhar