Escolar Documentos
Profissional Documentos
Cultura Documentos
Programacao Assembler
Programacao Assembler
PIC - Microchip
PROGRAMAO ASSEMBLER
s vezes, as coisas que nos so mais importantes permanecem desconhecidas, escondidas por trs da sua familiaridade.
Ldwig Wittgenstein, filsofo
A arte de criar um programa ou algoritmo para controlar alguma coisa envolve muito mais que o conhecimento de uma linguagem
de programao com suas instrues e recursos. Envolve o conhecimento do que deseja controlar. Como opera, funciona, responde,
envia e recebe informaes. A maioria dos problemas no envolve exclusivamente informaes digitais, mas informaes
analgicas que devem ser manipuladas para atingir valores que podem ser lidos pelo sistema de controle. Envolve, ainda, a
compreenso destes valores e o que representam para o sistema controlado. Pior, o programador deve ter conhecimento dos valores
representados para transform-los em valores digitais e interpret-los adequadamente para que os sinais de controle enviados de
retorno para o sistema tenham o correto desempenho.
Em suma, o programador no deve e no pode ser um simples organizador de instrues, mas um profundo conhecedor do
processo para que o programa ou algoritmo desenvolvido seja o menor e o mais eficiente possvel.
Assim como diz a frase do filsofo, o programador deve pensar o impensvel, ver o invisvel, imaginar o inimaginvel para
produzir uma obra de arte.
INTRODUO
Assembler uma linguagem de programao usada para desenvolver o cdigo-fonte para uma determinada
aplicao que utilize microcontroladores.
uma linguagem com cdigos e mnemnicos (baixo nvel) que permitem o controle do processamento no
nvel de um bit de um registro portanto, aproxima o usurio da manipulao da informao dentro do ncleo
de processamento e das memrias de programa e dados individualmente.
Ainda assim, o Assembler uma linguagem para compreenso humana e no da mquina. A mquina s
compreende informaes na forma binria, que de compreenso impossvel pelo humano. Logo, deve
existir um elemento tradutor da linguagem Assembler (humana) para a linguagem de mquina (binria). O
tradutor um programa residente elaborado pelo fabricante do dispositivo microcontrolador (compilador)
que reconhece os comandos e mnemnicos da linguagem Assembler (que normalmente exclusiva para cada
fabricante) um arquivo code.asm - e converte em linguagem de mquina um arquivo code.hex que ser
gravado na memria de programa do microcontrolador atravs de um dispositivo gravador adequado. A fig.1
mostra, esquemticamente, o processo:
CDIGO-FONTE (.asm)
Os programas usados para criar um cdigo-fonte so, essencialmente, editores de texto. Enquanto o cdigo
est sendo escrito, todas as facilidades encontradas nos editores de texto esto presentes.
O cdigo s ser transformado em um arquivo executvel aps a compilao bem sucedida do cdigo-fonte.
Mesmo aps a compilao, o que apresentado para o programador na tela continua sendo um texto.
Lembre-se que o arquivo executvel (aquele que gravado na memria de programa do controlador)
Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/07
2/28
APRESENTAO
A apresentao utilizada do cdigo-fonte ser aquela mostrada no arquivo BSICO.asm, desenvolvido a partir
de aplicaes prticas e facilita as explicaes e informaes de como utilizar as diretivas e instrues do
microcontrolador bem como a maneira de escrever de tal forma que o compilador seja capaz de interpretar e
produzir o arquivo executvel sem erros.
A formatao do texto do cdigo-fonte foi organizada para permitir o fcil sequenciamento do procedimento
de programao utilizando, bsicamente, tres grandes captulos:
1- rea de Identificao
Nesta rea so colocadas as informaes que identificam o cdigo-fonte.A fig.2 mostra parte da
rea de Identificao do arquivo BSICO.asm:
claro que a fig.2 mostra apenas uma sugesto, visto que o tipo de informao constante na rea de
Identificao depende exclusivamente dos objetivos do programador.
2- rea de Diretivas
Nesta rea o programador coloca as instrues que orientam o compilador na formao do arquivo
executvel. A fig.3 mostra parte da rea de Diretivas do arquivo BSICO.asm:
3- rea de Cdigo
Nesta rea escrito o programa efetivo que ser gravado na memria do controlador. O compilador
monta o arquivo executvel com as instrues desta re a partir das diretivas dadas na rea de
Diretivas.
A fig.4 mostra parte da rea de Cdigo do arquivo BSICO.asm:
REGRAS BSICAS
Para escrever o cdigo-fonte algumas regras bsicas devem ser observadas. Como o cdigo-fonte um editor
de texto, a formatao do texto pode seguir algumas regras simples comuns a todo o cdigo-fonte:
-
no se usa acentuao do Portugues (acentos, til, cedilha etc.) lembre-se que a lngua de origem
do Assembler o Ingles que no tem nenhum tipo de acentuao.
para evitar possveis problemas de identificao do tamanhodo caixa da letra, utilizar sempre letras
maisculas (caixa alta) para qualquer texto no cdigo-fonte o processador tem cdigos diferentes
para identificar a mesma letra quando maiscula (caixa alta) ou minscula (caixa baixa), o que
pode causar erro de compilao e este erro no identificado como tamanho do caixa da letra, mas
como Nome (label) inexistente.
Nas figuras 2, 3 e 4 podemos ver como a apresentao do texto do cdigo-fonte atendendo a estas regras
bsicas - trabalho braal feito pelo programador. No entanto, essa preocupao facilita a leitura e
interpretao do cdigo-fonte pelo programador a qualquer tempo.
Para escrever na linguagem de cdigo-fonte utilizamos os seguintes elementos:
-
Nomes (labels)
So criados e utilizados para identificar:
Endereos
Variveis
Constantes
Registros
Bits
Os elementos especiais de um controlador (Registros de Funo Especial e seus respectivos Bits)
so identificados por Nomes fornecidos pelo fabricante. Normalmente so mnemnicos ou
abreviaturas da funo deste elemento na operao do controlador.
Os elementos de uso geral (Registros e Bits) so identificados por Nomes criados pelo
programador e que, preferencialmente, devem ser relacionados funo proposta de cada um deles.
Os Nomes empregados no cdigo-fonte no so interpretados pelo compilador so apenas para
interpretao humana durante a compilao sero substitudos pelos endereos fsicos das
memrias (registros, bits e endereos).
Regras
- um Nome no pode ser repetido para elementos diferentes uma vez criado um Nome,
ele nico e individual para aquele cdigo-fonte.
- deve ser iniciado por um carcter alfabtico ou under-line (no deve ser um carcter
numrico ou dois . under-line).
- pode ser formado por letras e nmeros desde que o primeiro carcter no seja numrico.
- nomes compostos devem ser separados sempre por under-line (no usar hfen ( - )ou
espao).
- no deve conter smbolos grficos ou gramaticais.
EXEMPLO:
ROTINA
W_TEMP
_TEMPORARIO
FLAGS
CONTADOR_2
Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/07
7/28
Diretivas
So comandos Assembler que so colocados no cdigo-fonte mas, normalmente, no so
transformados em cdigos operacionais (opcodes) pelo compilador.
Atravs das diretivas o programador informa como o compilador deve proceder para interpretar as
informaes escritas na rea de Cdigo e relacionar com as informaes do controlador usado
atravs do arquivo de incluso ([ arquivo ].inc).
Regras
Diretivas
#INCLUDE
#DEFINE
- devem ser posicionados sempre a partir da coluna 1 (junto lateral esquerda da tela).
EXEMPLO:
#INCLUDE
P16F628A.INC
#DEFINE
L1_ALTA
Diretivas
CBLOCK
ENDC
ORG
CBLOCK
0x20
W_TEMP
_TEMPORARIO
FLAGS
ENDC
ORG
0x00
Endereos (label)
So nomes criados pelo programador para indicar o destino de desvios condicionais do programa
ou incio de sub-rotinas.
Regras
- o nome do Endereo no pode ser repetido para destinos diferentes uma vez criado um
Endereo para um destino de desvio, ele nico e individual para aquele destino.
- deve ser iniciado por um carcter alfabtico (no deve ser um carcter numrico).
- Endereos compostos devem ser separados sempre por under-line (no usar hfen ( - )ou
espao).
- deve ser sempre posicionado na coluna 1 (junto lateral esquerda da tela) uma nica vez a partir do Endereo inicia-se a sequencia de instrues do desvio.
- um Endereo pode ser repetido inmeras vezes dentro do cdigo-fonte desde que
precedido pela instruo GOTO ou CALL.
EXEMPLO:
a) Desvio Condicional
INICIO
BTFSS
GOTO
BSF
GOTO
DESLIGA_LED
BCF
GOTO
BOTAO
DESLIGA_LED
LED
INICIO
LED
INICIO
; DESLIGA LED
; RETORNA PARA INICIO
SUB_ROTINA
SUB_ROTINA
RETURN
Instrues (mnemnicos)
As instrues informam ao processador as operaes que devem ser realizadas com os registros e
bits dentro do cdigo-fonte.
O termo mnemnico indica que cada instruo a abreviatura de um texto indicativo da funo
da instruo.
Regras
- as instrues devem ser posicionadas a partir da coluna 2 ou mais adiante (interessante
que se utilize um espao TAB).
- separar os operadores das instrues com um ou mais espaos ou vrios TAB.
EXEMPLO:
MOVLW
CT_TEMPO
> Comentrio
> Instruo
> Espaos (1 x TAB)
MOVWF
TEMPO
> Comentrio
> Instruo
> Espaos (1 x TAB)
-
Operadores
Os Operadores informam a instruo sobre os dados que sero usados e a localizao dos registros
onde os dados se encontram.
Os Operadores podem ser registros, variveis ou constantes, normalmente identificados por um
Nome (existente, no caso dos Registros Especiais ,ou criado, no caso dos Registros de Usurio).
Regras
- operadores devem seguir instrues separados por espaos (utilizar um ou mais espaos
TAB).
CT_TEMPO
> Comentrio
> Instruo
> Espaos (1 x TAB)
MOVWF
TEMPO
> Comentrio
> Instruo
> Espaos (1 x TAB)
GOTO
SET_UP
> Comentrio
> Instruo
> Espaos (1 x TAB)
SWAPF
W_TEMP , F
> Comentrio
> Espaos (3 x TAB)
> Vrgula separando Operadores Mltiplos (os espaos entre operadores no existe)
> Instruo
> Espaos (1 x TAB)
-
Comentrios
Comentrios so textos explicativos da operao de um cdigo-fonte, uma linha de comando ou
linhas de comando.
Podem ser escritos utilizando quaisquer caracteres inclusive com acentuao (Portugues).
Regras
- comentrios devem comear sempre por ponto-e-vrgula (;) o compilador ignora todo e
qualquer carcter aps o ponto-e-vrgula (;) at o fim da linha.
- comentrios que continuam na linha seguinte devem ser precedidos, tambm, por ponto-evrgula (;), mesmo se precedidos por espaos.
- podem ser colocados em qualquer posio do texto do cdigo-fonte (separados ou no por
um ou mais espaos ou TABs, antes ou depois de linhas de instruo).
EXEMPLO:
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
DEFINIO DE VARIVEIS
CBLOCK
0x20
W_TEMP
_TEMPORARIO
FLAGS
ENDC
ARQUIVO BASICO.asm
Para escrever um cdigo-fonte vamos utilizar o arquivo BSICO.asm como referencia. Este arquivo foi
desenvolvido para facilitar o incio de qualquer desenvolvimento novo, apresentando ao programador uma
tela que no esteja em branco. A extenso do nome do arquivo j .asm, logo, o texto ser como um cdigofonte vlido.
O texto apresenta uma sequencia de atividades atravs de captulos indicando o qu o programador deve
fazer durante a criao do cdigo-fonte. Os captulos podem ser excludos (quando no usados), ou novos
podem ser acrescentados (de acordo com a necessidade).
Algumas sequencias de instrues e Nomes de variveis de uso geral j se encontram listadas no texto. So
baseados na experiencia de uso e recomendaes do fabricante logo, facilitam ao programador lembrar dos
detalhes necessrios antes de encontrar dificuldades durante simulao. As instrues e Nomes no utilizados
podem ser descartados.
Recomenda-se que, antes de escrever o cdigo-fonte, o programador desenvolva detalhamente a sequencia
lgica de funcionamento do projeto em um fluxograma.
Inicialmente o texto BSICO.asm ser apresentado sem comentrios no mesmo formato encontrado no arquivo
quando aberto pelo MPLAB Microchip.
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
REA DE IDENTIFICAO
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
;
PIMIL PICARETAGENS MIL LTDA. - SISTEMAS DE AUTOMAO
;
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
IDENTIFICAO DE PROJETO
;
; PROJETO .....................:
; CLIENTE ......................:
; NOME ARQUIVO .......:
;
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
DATAS E VERSES
;
; INCIO.... 00/00/0000
VERSO..... 00.00
RESPONSVEL.....
; INCIO.... 00/00/0000
VERSO..... 00.00
RESPONSVEL.....
; INCIO.... 00/00/0000
VERSO..... 00.00
RESPONSVEL.....
; INCIO.... 00/00/0000
VERSO..... 00.00
RESPONSVEL.....
;
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
DESCRIO OPERACIONAL
;
;
;
;
;
;
;
;
;
;
;
;
;
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
REA DE DIRETIVAS
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
ARQUIVO DE DEFINIES
#INCLUDE
<P16F628A.INC>
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
CONFIGURAO DO CONTROLADOR
__CONFIG B10000101001000
;
;
;
;
;
;
;
;
;
;
;
;
BIT
13
12
11
10
8
7
6
5
3
2
4,1,0
CDIGO
CP
LVP
BOREN
MCLRE
PWTERN
WDTEN
FOSC2:FOSC0
VALOR
1
Desligado
0
0
0
0
1
Desligado
0
Ligado
0
RA5 entrada digital
0
Ligado
0
Desligado
100
Oscilador Interno
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
PGINA DE MEMRIA
#DEFINE
#DEFINE
BANK0
BANK1
BCF
BSF
STATUS,RP0
STATUS,RP0
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
VARIVEIS
CBLOCK
0X20
W_TEMP
STATUS_TEMP
FLAG
CONT_1
ENDC
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
FLAG INTERNO
#DEFINE
F_CONT_1
FLAG,1
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
CONSTANTES
CT_CONT_1
EQU
.250
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
ENTRADAS
#DEFINE
B1
PORTA,1
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
SADAS
#DEFINE
L1
PORTA,6
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
REA DE CDIGO
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
VETOR DE RESET
ORG
GOTO
0X00
SET_UP
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
VETOR DE INTERRUPO
ORG
MOVWF
SWAPF
0X04
W_TEMP
STATUS,W
MOVWF
STATUS_TEMP
GOTO
SAI_INT
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
TRATAMENTO DAS INTERRUPES
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
FIM DA INTERRUPO
SAI_INT
SWAPF
STATUS_TEMP,W
MOVWF
SWAPF
STATUS
W_TEMP,F
SWAPF
W_TEMP,W
RETFIE
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
INCIO DO SET_UP DO CONTROLADOR
SET_UP
BANK1
; PGINA DE MEMRIA 1
MOVLW
MOVWF
B'10000011'
OPTION_REG
MOVLW
MOVWF
B'00000000'
INTCON
MOVLW
MOVWF
MOVLW
MOVWF
B'00001100'
TRISA
B'00000000'
TRISB
CALL
MOVWF
3FFh
OSCCAL
BANK0
MOVLW
MOVWF
B'00000111'
CMCON
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
INCIO DAS VARIVEIS
CLRF
CLRF
PORTA
PORTB
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
ROTINA PRINCIPAL
ROT_PRINC
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
ROTINAS SECUNDRIAS
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
SUB-ROTINAS
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
FIM DO CDIGO
END
; FIM DO CDIGO
; INCIO.... 00/00/0000
VERSO..... 00.00
RESPONSVEL..... [nome ou sigla do programdor]
; INCIO.... 00/00/0000
VERSO..... 00.00
RESPONSVEL.....
; INCIO.... 00/00/0000
VERSO..... 00.00
RESPONSVEL.....
; INCIO.... 00/00/0000
VERSO..... 00.00
RESPONSVEL.....
;
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
DESCRIO OPERACIONAL
;
[Descrever a operao do cdigo-fonte com informaes suficientes para a correta compreenso do funcionamento. Deve existir documentao
com diagramas eltricos detalhados, lista de materiais e manual de instrues/operao/manuteno em outros tipos de documentos que podem
e devem ser referenciados neste captulo. Procurre no se apoiar em documentao exclusivamente eletronica.]
;
;
;
;
;
;
; -----------------------------------------------------------------------------------------------------------------------------------------------------------
2- rea de Diretivas
Nesta rea o programador define todos os parametros de uso do controlador, identificando o modelo de
controlador, a configurao, os Nomes dos Registros e Bits de Uso Geral, a correlao existente entre os
Nomes dos dispositivos de Entrada/Sada e os Registros Especiais.
Essas informaes sero utilizadas pelo compilador para transformar o arquivo do cdigo-fonte (code.asm) em
um arquivo na linguagem de mquina (code.hex).
O compilador no interpreta a forma de captulos agrupando as diretivas por funo ou destinao. Durante a
execuo da compilao do cdigo-fonte, apenas as diretivas so buscadas e interpretadas. A sequencia em
que esto escritas e a distribuio organizada ignorada sua utilidade reside apenas na facilidade de leitura
e interpretao pelo programador. O Anexo 2 mostra uma comparao da rea de Diretivas comentada e
simples onde se pode ver a diferena de tamanho de texto com a compreenso deste mesmo texto.
Outros captulos, alm dos apresentados, podem ser acrescentados para melhorar o detalhamento das
diretivas bem como podem ser excludos quando no utilizados no projeto.
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
REA DE DIRETIVAS
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
ARQUIVO DE DEFINIES
[Neste captulo o programador deve definir os arquivos de incluso com o modelo do microcontrolador usado e as macros com sequencias de
instrues j estabelecidas sub rotinas.]
#INCLUDE
<P16F628A.INC>
> Comentrio
__CONFIG B10000101001000
> Comentrio
> Valor numrico do Registro de Configurao que representa as opes escolhidas (ver Nota)
> Instruo MPASM
[Nota: o valor numrico colocado aps a instruo CONFIG pode assumir qualquer representao, isto , decimal ou binria ou hexadecimal.
Para melhor compreenso das opes determinadas pelo programador, recomenda-se a utilizao do formato binrio, compatvel com a pgina
da folha de dados do componente O Anexo 1 mostra a cpia da folha do datasheet que contm as informaes de aplicao das opes de uso
do controlador 16F628A..]
[Descrever as opes do registro CONFIG torna mais fcil interpretar as escolhas de funcionamento do componente. Para cada modelo de
controlador existe um registro especfico, que o programador deve buscar na folha de dados.]]
;
;
;
;
;
;
;
;
;
;
;
;
BIT
13
12
11
10
8
7
6
5
3
2
4,1,0
CDIGO
CP
LVP
BOREN
MCLRE
PWTERN
WDTEN
FOSC2:FOSC0
FUNO
Code Protection
No implementado
No implementado
No implementado
No implementado
Low Voltage Programming
Brown-out Reset Enable
RA5/Master Clear Enable
Power-up Time Enable
Watchdog Timer Enable
Oscillator Selection
VALOR
1
Desligado
0
0
0
0
1
Desligado
0
Ligado
0
RA5 como entrada digital
0
Ligado
0
Desligado
100
Oscilador Interno sem sada de clock
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
PGINA DE MEMRIA
[O processo de substituio de uma linha de instruo por um Nome pode ser interessante quando a linha se torna comum e repetitiva dentro do
cdigo-fonte. Observar que este procedimento s possvel para a substituio de uma nica linha de instruo. Para a substituio de duas ou
mais linhas de instruo (sequencia) deve-se criar uma Macro.]
#DEFINE
#DEFINE
BANK0
BANK1
BCF
BSF
STATUS,RP0
STATUS,RP0
> Comentrio
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
VARIVEIS
[Neste captuloo programador declara todas as variveis (registros) que vai empregar no cdigo-fonte, com exceo dos Registros Especiais j
existentes. A diretiva CBLOCK pode ser empregada diversas vezes no cdigo-fonte para alocar variveis em diversas posies de memria. O
programador deve verificar no datasheet do componente as reas disponveis para uso geral nos diversos bancos de memria, bem como os
endereos disponveis, e distribuir as variveis adequadamente. O controlador no muda de banco de memria automticamente funo a
ser determinada pelo programador (ver Paginao de Memria).]
[A diretiva CBLOCK orienta o compilador no relacionamento entre o Nome da varivel e o endereo de memria de uso geral onde ser
colocado.]
CBLOCK
0X20
> Comentrio
> Endereo de memria de uso geral a partir do qual sero includas as variveis
> Diretiva indicando incio das varveis a partir do endereo de memria indicado
W_TEMP
STATUS_TEMP
FLAG
CONT_1
ENDC
#DEFINE
F_CONT_1
FLAG,1
> Comentrio
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
CONSTANTES
[Constantes so valores numricos que o cdigo-fonte emprega para iniciar contadores, temporizadores, realizar comparaes lgicas, acionar
sadas etc..Neste captulo o programador relaciona um Nome a um valor numrico que pode ser representado na forma decimal, binria ou
hexadecimal, ou ainda na forma de uma expresso aritmtica.]
CT_CONT_1
EQU
.250
> Comentrio
;-----------------------------------------------------------------------------------------------------------------------------------------------------------;
ENTRADAS
[Neste captulo so relacionados os Nomes associados aos dispositivos externos de controle que enviam sinais ao controlador entradas (input)
onde cada entrada corresponde a um bit de um registro PORT.]
#DEFINE
B1
PORTA,1
> Comentrio
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
SADAS
[Neste captulo so relacionados os Nomes associados aos dispositivos externos que so comandados pelo controlador sidas (output) onde
cada sada corresponde a um bit de um registro PORT.]
#DEFINE
L1
PORTA,6
> Comentrio
3- rea de Cdigo
Nesta rea o programador escrever as instrues que devem controlar os dispositivos externos de acordo com
o projeto eletro-eletronico de automao.
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
REA DE CDIGO
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
VETOR DE RESET
[O endereo 0X00 relativo ao Vetor de Reset. Quando o controlador ligado fonte ou quando ocorre um reset interno (por qualquer motivo)
o programa inicia sempre neste endereo. O programador deve verificar no datasheet do controlador a disponibilidade de endereos livres para
colocao de instrues antes da ocorrencia de outro Vetor automtico.]
[A diretiva ORG avisa o compilador que o texto seguinte refere-se s instrues que devero ser gravadas na Memria de Programa a partir do
endereo indicado.}
ORG
0X00
> Comentrio
SET_UP
> Comentrio
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
VETOR DE INTERRUPO
[O endereo 0X04 relativo ao Vetor de Interrupo. Quando interrupes so habilitadas, o programa desviado para este endereo sempre
que ocorre uma interrupo. O programador pode iniciar a sequencia de instrues para tratamento das interrupes a partir deste endereo ou
fazer um desvio para um endereo da Memria de Programa a partir do qual estar escrito o cdigo-fonte relativo ao tratamento das
interrupes.]
[O programador deve estar ciente de que o desvio para o Vetor de Interrupo ocorre para qualquer tipo de interrupo, bastando que esteja
habilitada (bit relativo habilitao enable com valor 1 (um))]
ORG
0X04
> Comentrio
MOVWF
SWAPF
W_TEMP
STATUS,W
MOVWF
STATUS_TEMP
; SALVA W EM W_TEMP
; TROCA NIB_HI POR NIB_LO EM STATUS E GRAVA
; EM W
; SALVA STATUS EM STATUS_TEMP
Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/07
20/28
[Aps escrever a sequencia Salvar Contexto, o programador deve verificar qual foi a interrupo requisitada testando os bits referentes aos flags
de sinalizao existentes nos registros adequados. Na existencia de um flag habilitado, o programa deve fazer o desvio para a rotina de
tratamento da interrupo requisitada. Lembre-se sempre que a CPU no tem um mecanismo de desvio automtico para a interrupo
requisitada, apenas para o Vetor de Interrupo.]
[Depois de realizar todos os testes nos respectivos flags de sinalizao das interrupes para verificar qual foi requisitada e na possibilidade de
nenhum flag habilitado (o desvio para o Vetor de Interrupo pode ter ocorrido devido a um rudo no controlador), o programa deve conter a
instruo de desvio para a rotina de Recuperar Contexto SAI_INT]
GOTO
SAI_INT
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
TRATAMENTO DAS INTERRUPES
[Neste captulo, o programador deve escrever o cdigo-fonte para o tratamento de cada interrupo habilitada e que tenha um teste de flag com
desvio para esta rea. Cada interrupo deve ter seu prprio cdigo-fonte completo e deve terminar sempre com a instruo de desvio para a
rotina de Recuperar Contexto SAI_INT]
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
FIM DA INTERRUPO
[A sequencia de instrues segue a recomendao da Microchip para recuperar os valores contidos nos registros STATUS_TEMP e W_TEMP
quando houvero retorno do Tratamento de Interrupes no caso, Recuperar Contexto. O objetivo destas instrues recuperar os valores
contidos nos registros STATUS_TEMP (em STATUS) e W_TEMP (em W) aps o atendimento da Interrupo requisitada. Quando o tratamento
da interrupo for conpletado, o retorno rotina normal implica na necessidade de se recuperar os valores existentes nos registros STATUS e W
antes da interrupo. O programador deve seguir esta recomendao e, se houver outro registro que seja necessria a recuperao do valor
contido, deve ser incluso na sequencia de Recuperarr Contexto.]
[A sequencia Recuperar Contexto pode ser considerada como padro em todos os cdigos-fonte realizados.]
SAI_INT
SWAPF
STATUS_TEMP,W
MOVWF
SWAPF
STATUS
W_TEMP,F
SWAPF
W_TEMP,W
[A sada do Tratamento das Interrupes s completada com a instruo abaixo. O cdigo-fonte retorna rotina principal aps a execuo da
instruo RETFIE.]
RETFIE
; RETORNA DA INTERRUPO
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
INCIO DO SET_UP DO CONTROLADOR
[Este captulo de grande importancia. Aqui o programador deve estabelecer as condies que o controlador vai operar. Consiste em colocar
valores (constantes) dentro de deteminados registros especiai para ativar/desativar recursos no controlador. Normalmente, os registros especiais
envolvidos neste captulo so:
OPTION_REG: resisitores de pull-up, transio do TMR0 e definio do Pre Scaler
INTCON: habilitao ou no das interrupes
TRIS: identificao de Entrada/Sada utilizda pelo registro PORT
CMCON: escolha de aplicao dos Comparadores Analgicos (quando existentes no controlador escolhido)
OSCCAL: emprego do valor de calibrao do oscilador interno (quando existente no controlador e habilitado no CONFIG)
O programador deve observar a paginao de memria para ter acesso a estes registros.]
[O endereo para incio do SET_UP deve ser escrito na forma mostrada. Lembre-se que o nome do endereo dado pelo programador e est
direcionado no Vetor de Reset utilizando um desvio incondicional - GOTO.]
SET_UP
[Verificar a pgina de memria onde esto os registros que sero operados ver folha de dados do controlador. No caso de alterao da pgina
de memria, utilizar o Nome definido no captulo Paginao de Memria para a ativao da rea correspodente. No exemplo, os registros
especiais que sero operados esto localizados no BANK1.]
BANK1
; PGINA DE MEMRIA 1
[O direcionemento para a pgina de memria BANK1 permite o acesso aos registros especiais OPTION_REG, INTCON, TRISA e TRISB. O
programador dever colocar em cada registro os valores necessrios para que o controlador opere dentro das caractersticas exigidas pelo
cdigo-fonte e pela utilizao externa (circuito controlado)].
[A representao das constantes literais neste captulo devem ser no formato binrio para visualizao do estado lgico de cada bit do registro.
Nos registros especiais, cada bit tem uma funo operacional no controlador.]
MOVLW
MOVWF
B'10000011'
OPTION_REG
MOVLW
MOVWF
B'00000000'
INTCON
; INTERRUPES NO HABILITADAS
MOVLW
MOVWF
B'00001100'
TRISA
MOVLW
MOVWF
B'00000000'
TRISB
[Se no CONFIG foi escolhida a opo de uso do oscilador interno, verificar se o modelo possui um valor de calibrao gravado pelo fabricante
no ltimo endereo da memria de programa. Se houver, utilizar a sequencia de instrues para colocar o valor da memria no registro
OSCCAL.]
CALL
MOVWF
3FFh
OSCCAL
[Encerradas as operaes nos registros especiais na pgina de memria 1, retornar pgina de memria 0 (zero).]
BANK0
; PGINA DE MEMRIA 0
[O registro CMCON controla a configurao dos comparadoras analgicas do controlador. O fabricante inicia o controlador com os
comparadores habilitados por questo de menor consumo do componente. Se o programa elaborado para o controlador no usa os
comparadores, para deslig-los e utilizar as entradas analgicas como I/O digitais, carregar a constante B00000111no registro CMCON, que
desliga as entradas analgicas dos comparadores.]
MOVLW
MOVWF
B'00000111'
CMCON
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
INCIO DAS VARIVEIS
[Por segurana, o fabricante recomenda que os registros PORT sejam iniciados em valores conhecidos do programador antes de se iniciar a
Rotina Principal de comandos. No existe garantia de que os bits destes registros sejam iniciados com valor 0 (zero) na energizao do
controlador ou aps um RESET de qualquer natureza. Para evitar acidentes, seguir a recomendao do fabricante. Observar que o comando
CLRF utilizado faz com que o registro contenha o valor 0 (zero), isto , todos os bits estaro no nvel lgico baixo. O programador deve ter
certeza de que estes valores so adequados para o cdigo-fonte escrito.]
CLRF
CLRF
PORTA
PORTB
[Outras variveis que podem ser iniciadas de um determinado valor conhecido pelo programador podem ser includas neste captulo.]
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
ROTINA PRINCIPAL
[Neste captulo o programador escreve todas as sequencias de instrues necessrias ao correto funcionamento do projeto. O programdor pode
estabelecer a lgica funcional principal neste captulo e direcionar as rotinas secundrias e sub-rotinas para outros captulos. O compilador no
considera esta organizao em captulos desde que os endereos e retornos estejam corretamente colocados.]
ROT_PRINC
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
ROTINAS SECUNDRIAS
[Os desvios incondicionais ou condicionais existentes na Rotina Principal ou mesmo dentro das Rotinas Secundrias podem ser escritos neste
captulo. O programador deve ter o cuidado de estabelecer os Nomes dos endereos de desvio para evitar erros no cdigo-fonte.]
[Mesmo dentro das Rotinas Secundrias, o uso de Sub-Rotinas importante. Os Nomes dos endereos de desvio no podem ser repetidos para
posies de memrias diferentes.]
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
SUB-ROTINAS
[Escrever sub-rotinas em separado das demais rotinas facilita a interpretao do cdigo-fonte. Este captulo deve conter apenas as sub-rotinas
empregadas tanto pela Rotina Principal quanto pelas Rotinas Secundrias.]
[Toda a sub-rotina deve comear com um Nome de endereo (que dever ser chamado a partir da instruo CALL), e deve terminar com a
instruo RETURN. ]
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
FIM DO CDIGO
[A instruo END indica para o compilador que as sequencias de instrues encerrou. de uso obrigatrio no final do cdigo-fonte.]
END
; FIM DO CDIGO
ANEXO 1
REGISTRO DE CONFIGURAO PIC 16F628A
A figura uma cpia da pgina da folha de dados (datasheet) do controlador mostrando o registro de
Configurao do dispositivo. Em todos os controladores este registro dispe de 14 bits, e cada bit (ou
conjunto de bits) determina o modo de operao do modelo. Como o acesso a esse registro est fora do
alcance dos endereos disponveis de memria, a gravao dos valores em cada bit deve ser realizada no
momento da gravao da memria de programa.
Portanto, o programador deve colocar a diretiva de configurao ( __CONFIG ) na rea de Diretivas do
cdigo-fonte.
ANEXO 2
COMPARATIVO DE CDIGO-FONTE DETALHADO COM SIMPLES (PARCIAL)