AULA-09R00
26 pág.

AULA-09R00


DisciplinaAnálise Textual9.583 materiais293.992 seguidores
Pré-visualização2 páginas
Microprocessadores
Aula 09:
Programação Assembly \u2013 Parte 2: Organização Programação Assembly \u2013 Parte 2: Organização 
da rotina e criação de tabela de dados.
Referência para a aula:
1 \u2013 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 \u2013 CAP
© Edgar C. Furtado
16F877
RD0
VSS
VDD
RB0
BOTÃO
Botão Pressionado \ufffd RB0 = 0 \ufffd LED APAGADO
Botão Livre \ufffd RB0 = 1 \ufffd 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:
\u2022 Construa um FLUXOGRAMA de execução da rotina;
\u2022 ESTRUTURAR o código-fonte;
ORGANIZAÇÃO DO CÓDIGO-FONTE 
3UFSJ \u2013 CAP
© Edgar C. Furtado
\u2022 Comentar durante o processo de programação;
\u2022 Compor o arquivo código-fonte com caracteres em apenas uma
forma: MASIÚSCULO ou MINÚSCULO;
\u2022 ESQUECER que existe acentuação (exceto para comentários!);
\u2022 Usar TABULAÇÃO.
ORGANIZAÇÃO DO CÓDIGO-FONTE 
4UFSJ \u2013 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 \u2013 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 \u2013 CAP
© Edgar C. Furtado
P16F877.INC
Palavras-chave para:
\u2022 Definições dos registradores SFR;
\u2022 Definições dos bits dos registradores;
\u2022 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 \u2013 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 \u2013 CAP
© Edgar C. Furtado
ORGANIZAÇÃO DO CÓDIGO-FONTE 
9UFSJ \u2013 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 \u2013 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 \u2013 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 \u2013 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 \u2013 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 \u2013 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:
\u2022 Quando o microcontrolador é ligado;
\u2022 Aplicando-se nível lógico 0 ao terminal 1 (reset externo);
\u2022 Estouro do contador watchdog;
15UFSJ \u2013 CAP
© Edgar C. Furtado
\u2022 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 \u2013 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:
\u2022 Configuração dos registradores especiais: configuram-se os
registradores especiais de interesse, tais como INTCON,
OPTION_REG, TRISX, etc;
\u2022 Rotina principal.
17UFSJ \u2013 CAP
© Edgar C. Furtado
Para configuração dos registradores é necessário conhecimento das 
funções do microcontrolador:
\u2022 Temporizadores;
\u2022 Módulo de captura, comparação e geração PWM;
\u2022 Comparadores analógicos;
\u2022 Comunicação serial;
\u2022 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 \u2013 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\u201900000100\u2019
MOVWF TRISB
MOVLW B\u201900000001\u2019
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 \u2013 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 \u2013 CAP
© Edgar C. Furtado
CRIAÇÃO DE TABELAS DE DADOS
A utilização do PCL deve ser acompanhada de alguns cuidados:
\ufffd Verificar