Você está na página 1de 28

PROGRAMAO ASSEMBLER

PIC - Microchip

Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/07


1/28

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:

Fig. 1 Processo de formao de cdigo-fonte e gravao no MCU

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

ilegvel para ns humanos. Portanto, escrever o cdigo-fonte de uma aplicao um exerccio de


apresentao de texto.
Para facilitar o trabalho do programador, os programas para edio de cdigo-fonte trazem uma srie de
facilidades automticas tais como colorir o texto de acordo com a funo de cada palavra, mas no organiza
esse texto na tela. Isto funo do programador (trabalho braal).
Um cdigo-fonte bem elaborado (no aspecto visual, porque no aspecto lgico outro assunto) tem
apresentao tal que facilite a leitura, compreenso do funcionamento, correo (quando necessrio) e
evoluo por qualquer outro programador, ou pelo seu criador (um ano depois).

Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/07


3/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:

Fig. 2 Trecho da rea de Identificao no Cdigo-Fonte

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.

Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/07


4/28

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:

Fig. 3 Trecho da rea de Diretivas no Cdigo-Fonte

A quantidade de diretivas depende do nmero de variveis envolvidas no processo, quantidade de


constantes, nmero de entradas e sadas empregadas pelo controlador etc..

Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/07


5/28

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:

Fig. 4 Trecho da rea de Cdigo no Cdigo-Fonte

A extenso da rea de Cdigo dependente apenas da complexidade do sistema externo a ser


controlado, podendo possuir tabelas de valores e caracteres, sub-rotinas, interrupes, clculos
matemticos etc..

Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/07


6/28

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

; ARQUIVO PADRO DO CONTROLADOR


PORTB,1

; DEFINE NOME PARA BIT RB1 NO PORTB

Diretivas
CBLOCK
ENDC
ORG

- devem ser posicionados com um espao (mnimo) da coluna 1, preferencialmente com um


espao do tipo tab.
- separar o Endereo da Diretiva utilizando espaos ou tab.
EXEMPLO:

CBLOCK
0x20
W_TEMP
_TEMPORARIO
FLAGS
ENDC

; ENDEREO DE INCIO DAS VARVEIS


; REG. TEMPORRIO PARA VALOR DE W
; REG. TEMPORRIO
; REG. PARA FLAG DE CONTROLE
; FIM DO BLOCO DE VARIVEIS

ORG

; ENDEREO VETOR DE RESET

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.

Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/07


8/28

EXEMPLO:
a) Desvio Condicional
INICIO
BTFSS
GOTO
BSF
GOTO
DESLIGA_LED
BCF
GOTO

BOTAO
DESLIGA_LED
LED
INICIO

; VERIFICA O ESTADO DO BIT QUE REPRESENTA BOTAO


; BOTAO = 0 > VAI PARA DESLIGA_LED
; BOTAO = 1 > LIGA LED
; RETORNA PARA INICIO

LED
INICIO

; DESLIGA LED
; RETORNA PARA INICIO

b) Desvio ou Chamada de Sub-Rotina


CALL

SUB_ROTINA

; SEQUENCIA DE INSTRUES DE EXECUO


; NORMAL DO PROGRAMA

SUB_ROTINA

RETURN

; DESVIA PARA SUB-ROTINA

; SEQUENCIA DE INSTRUES DE EXECUO


; DA SUB-ROTINA
; SADA DA SUB-ROTINA

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

; COLOCA CONSTANTE CT_TEMPO NO REG. W

> Comentrio

> Espaos (3 x TAB)

> Operador (constante)

> Espaos (1 x TAB)

> Instruo
> Espaos (1 x TAB)

Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/07


9/28

MOVWF

TEMPO

; COLOCA O VALOR DE W NO REG. TEMPO

> Comentrio

> Espaos (3 x TAB)

> Operador (constante)

> Espaos (1 x TAB)

> 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).

- operadores mltiplos devem ser separados por vrgulas.


EXEMPLO:
MOVLW

CT_TEMPO

; COLOCA CONSTANTE CT_TEMPO NO REG. W

> Comentrio

> Espaos (3 x TAB)

> Operador (constante numrica)

> Espaos (1 x TAB)

> Instruo
> Espaos (1 x TAB)
MOVWF

TEMPO

; COLOCA O VALOR DE W NO REG. TEMPO

> Comentrio

> Espaos (3 x TAB)

> Operador (varivel)

> Espaos (1 x TAB)

> Instruo
> Espaos (1 x TAB)
GOTO

SET_UP

; DESVIA PARA ENDEREO SET_UP

> Comentrio

> Espaos (3 x TAB)

> Operador (endereo)

> Espaos (1 x TAB)

> Instruo
> Espaos (1 x TAB)

Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/07


10/28

SWAPF

W_TEMP , F

; TROCA NIB_LO C/ NI_HI EM W_TEMP COLOCA EM


; W_TEMP

> Comentrio


> Espaos (3 x TAB)

> Operador (registro de destino)

> Vrgula separando Operadores Mltiplos (os espaos entre operadores no existe)

> Operador (registro de origem)

> Espaos (1 x TAB)

> 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

; ENDEREO DE INCIO DAS VARVEIS


; REG. TEMPORRIO PARA VALOR DE W
; REG. TEMPORRIO
; REG. PARA FLAG DE CONTROLE
; FIM DO BLOCO DE VARIVEIS

Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/07


11/28

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
;
;
;
;
;
;
;
;
;
;
;
;
;

Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/07


12/28

; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
REA DE DIRETIVAS
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
ARQUIVO DE DEFINIES
#INCLUDE

<P16F628A.INC>

; ARQUIVO PADRO DO CONTROLADOR

; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
CONFIGURAO DO CONTROLADOR
__CONFIG B10000101001000
;
;
;
;
;
;
;
;
;
;
;
;

BIT
13
12
11
10
8
7
6
5
3
2
4,1,0

CDIGO
CP

; 3F50h REGISTRO DE CONFIGURAO


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

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

; ATIVA BANCO DE MEMRIA 0 (ZERO)


; ATIVA BANCO DE MEMRIA 1 (UM)

; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
VARIVEIS
CBLOCK

0X20

; ENDEREO INICIAL MEMRIA USO GERAL

W_TEMP
STATUS_TEMP
FLAG
CONT_1

; REGISTRO TEMPORRIO PARA W


; REGISTRO TEMPORRIO PARA STATUS
; REGISTRO PARA DESVIOS CONDICIONAIS
; REGISTRO CONTAGEM CONT_1

ENDC

; FIM BLOCO MEMRIA USO GERAL

; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
FLAG INTERNO
#DEFINE

F_CONT_1

FLAG,1

; DESVIO CONT_1 NO REG. FLAG, BIT 1

; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
CONSTANTES
CT_CONT_1

EQU

.250

; CONSTANTE DE INCO DO CONT_1

; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
ENTRADAS
#DEFINE

B1

PORTA,1

; BOTAO B1 LIGADO AO PINO RA1

; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
SADAS
#DEFINE

L1

PORTA,6

; LED L1 LIGADO AO PINO RA6

Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/07


13/28

; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
REA DE CDIGO
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
VETOR DE RESET
ORG
GOTO

0X00
SET_UP

; ENDEREO INICIAL DO CDIGO


; VAI PARA INCIO DO SET_UP CONTROLADOR

; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
VETOR DE INTERRUPO
ORG
MOVWF
SWAPF

0X04
W_TEMP
STATUS,W

MOVWF

STATUS_TEMP

; ENDEREO INICIAL DA INTERRUPO


; SALVA W EM W_TEMP
; TROCA NIB_HI POR NIB_LO EM STATUS E GRAVA
; EM W
; SALVA STATUS EM STATUS_TEMP

GOTO

SAI_INT

; VAI PARA FIM DA INTERRUPO

; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
TRATAMENTO DAS INTERRUPES
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
FIM DA INTERRUPO
SAI_INT
SWAPF

STATUS_TEMP,W

MOVWF
SWAPF

STATUS
W_TEMP,F

SWAPF

W_TEMP,W

RETFIE

; TROCA NIB_HI POR NIB_LO EM STATUS_TEMP E


; GRAVA EM W
; RECUPERA STATUS
; TROCA NIB_HI POR NIB_LO EM W_TEMP E
; GRAVA EM W_TEMP
; TROCA NIB_HI POR NIB_LO EM W_TEMP E
; RECUPERA EM W
; RETORNA DA INTERRUPO

; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
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

; RESISTORES PULL-UP DESABILITADOS


; TRANSIO RB0/INT NO UTILIZADA
; INCREMENTO TMR0 INTERNO (CM)
; TRANSIO T0CK1 NO UTILIZADA
; PRE SCALER SELECIONADO PARA TMR0
; DIVISO 1:16 NO PRE SCALER
; INTERRUPES NO HABILITADAS
; RA2:3 ENTRADA, DEMAIS SADAS
; TODOS OS BITS SADAS
; CHAMA VALOR EXISTENTE NO ENDEREO
; CALIBRADOR DO OSCILADOR LOCAL
; PGINA DE MEMRIA 0

B'00000111'
CMCON

; DESLIGA OS COMPARADORES ANALGICOS E


; HABILITA OS PINOS DO PORTA PARA I/O DIGITAL
Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/07
14/28

; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
INCIO DAS VARIVEIS
CLRF
CLRF

PORTA
PORTB

; COLOCA ZERO NO REGISTRO PORTA


; COLOCA ZERO NO REGISTRO PORTB

; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
ROTINA PRINCIPAL
ROT_PRINC
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
ROTINAS SECUNDRIAS
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
SUB-ROTINAS
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
FIM DO CDIGO
END

; FIM DO CDIGO

Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/07


15/28

ARQUIVO BASICO.asm - COMENTADO


1- rea de Identificao
Esta rea foi criada para que o projetista possa identificar e descrever o tipo de cdigo-fonte que se encontra
no arquivo.
Como na abertura do programa a tela apresentada comea exatamente nesta posio, o programador
identifica a origem, destino, aplicao, datas etc. que interessam logo de incio.
Observar que o texto da rea de Identificao formado por Comentrios todas as linhas so iniciadas por
ponto-e-vrgula (;) logo, como so ignoradas pelo compilador, pode-se usar a acentuao normal da lngua
portuguesa.
Os comentrios expressos em cada captulo procuram orientar o programador para realizar o cdigo-fonte da
melhor maneira possvel.
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
REA DE IDENTIFICAO
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
;
PIMIL PICARETAGENS MIL LTDA. - SISTEMAS DE AUTOMAO
;
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
IDENTIFICAO DE PROJETO
;
; PROJETO .....................: [nome de identificao ou referencia do projeto]
; CLIENTE ......................: [nome do cliente ou mercado ou produto de aplicao]
; NOME ARQUIVO .......: [nome de localizao do arquivo no servidor principal ou outro meio de arquivo[
;
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
DATAS E VERSES
;
; [cada linha pode conter informaes desde o princpio do projeto, modificaes e descrio sucinta de cada modificao realizada]
;

; 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.

Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/07


16/28

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>

; ARQUIVO PADRO DO CONTROLADOR

> Comentrio

> Arquivo de Incluso do microcontrolador selecionado


> Diretiva
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
CONFIGURAO DO CONTROLADOR
[Neste captulo coloca-se a configurao que o controlador vai operar. O acesso ao registro de configurao s possvel durante a gravao ds
memria de programa. As opes de configurao dependem do modelo de controlador e devem ser estabelecidas com as informaes da folha
de dados do modelo escolhido no arquivo de incluso.]

__CONFIG B10000101001000

; 3F50h REGISTRO DE CONFIGURAO

> 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

Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/07


17/28

; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
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

; ATIVA BANCO DE MEMRIA 0 (ZERO)


; ATIVA BANCO DE MEMRIA 1 (UM)

> Comentrio

> Nome do bit controlado pela Instruo

> Nome do registro onde est o bit controlado pela Instruo

> Instruo substituda pelo Nome

> Nome que substitui a linha de instruo


> Diretiva de Definio
[No exemplo, utilizamos o nome BANK1 em substituio instruo BCF
STATUS,RP0 (colocar o valor zero no bit POR do registro STATUS
para ativar o Banco 1 da memria RAM). No cdigo-fonte, o programador escreve este nome sempre que for necessrio ativar o Banco 1 de
memria.]

; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
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

; ENDEREO INICIAL MEMRIA USO GERAL

> 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

; REGISTRO TEMPORRIO PARA W


; REGISTRO TEMPORRIO PARA STATUS
; REGISTRO PARA DESVIOS CONDICIONAIS
; REGISTRO CONTAGEM CONT_1

> Comentrio identificando funo da varivel


> Lista de Nomes das variveis (ateno ao nmero de registros disponveis a partir do endereo indicado)
[Os Nomes das variveis W_TEMP e STATUS_TEMP, bem como o seu uso, so recomendao do fabricante para cdigos-fonte que utilizam o
recurso da Interrupo. O programador pode alterar ou no esses nomes mas deve atender s recomendaes do fabricante no uso.]

ENDC

; FIM BLOCO MEMRIA USO GERAL

> Comentrio identificando funo da varivel


> Diretiva indicando que terminou a alocao de variveis na memria
; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
FLAG INTERNO
[Este captulo destinado descrio dos desvios condicionais flags que o sistema controlado necessita para operar A necessidade de
desvios condicionais determinada pelo programador. O Nome de cada flag deve ser tal que indique a sua funo no cdigo-fonte para facilitar
a compreenso do funcionamento.]

Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/07


18/28

#DEFINE

F_CONT_1

FLAG,1

; DESVIO CONT_1 NO REG. FLAG, BIT 1


> Comentrio

> Posio do bit associado ao Nome

> Nome do registro que contm o bit associado ao Nome

> Nome associado ao bit 1 do registro FLAG


> Diretiva de Definio
[Cada flag alocado em um bit de um registro Nome recomendado FLAG devidamente declarado no captulo das Variveis dentro da
diretiva CBLOCK.. No exemplo, o Nome F_CONT_1 est sendo associado ao bit 1 do registro FLAG. O programador usa o Nome F_CONT_1
no cdigo-fonte.]

; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
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

; CONSTANTE DE INCO DO CONT_1

> Comentrio

> Valor numrico da constante associado ao Nome CT_CONT_1

> Diretiva de Igualdade (Equal)


> Nome da Constante Numrica
[A utilizao de um Nome relacionado a uma constante numrica traz vantagens para o programador (no para o cdigo-fonte). A lista de
constantes est localizada em uma rea especfica do texto do cdigo-fonte captulo Constantes onde so especificadas as aplicaes destas
constantes. No cdigo-fonte, o programador vai utilizar sempre o Nome relacionado constante e no o valor numrico. Se houver necessidade
de se modificar o valor numrico para adequar a operao do cdigo-fonte, o programador faz a alterao no captulo Constantes. O
compilador se encarrega de fazer as alteraes no restante do cdigo-fonte.]

;-----------------------------------------------------------------------------------------------------------------------------------------------------------;
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

; BOTAO B1 LIGADO AO PINO RA1

> Comentrio

> Posio do bit associado ao Nome

> Nome do registro que contm o bit associado ao Nome

> Nome associado ao bit 1 do registro PORTA


> Diretiva de Definio
[Cada dispositivo de entrada alocado em um bit de um registro PORT. Ao se associar um Nome a um dispositivo externo, importante que
seja o mesmo Nome empregado tanto no diagrama de circuito quanto no fluxograma. No exemplo, o Nome B1 est sendo associado ao bit 1 do
registro PORTA. O programador usa o Nome B1 no cdigo-fonte.]

; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
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

; LED L1 LIGADO AO PINO RA6

> Comentrio

> Posio do bit associado ao Nome

> Nome do registro que contm o bit associado ao Nome

> Nome associado ao bit 6 do registro PORTA


> Diretiva de Definio
[Cada dispositivo de sada alocado em um bit de um registro PORT. Ao se associar um Nome a um dispositivo externo, importante que seja
o mesmo Nome empregado tanto no diagrama de circuito quanto no fluxograma. No exemplo, o Nome L1 est sendo associado ao bit 6 do
registro PORTA. O programador usa o Nome L1 no cdigo-fonte.]
Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/07
19/28

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

; ENDEREO INICIAL DO CDIGO

> Comentrio

> Endereo de memria do Vetor de Reset


> Diretiva indicando incio das instrues a partir do endereo da Memria de Programa indicado
GOTO

SET_UP

; VAI PARA INCIO DO SET_UP CONTROLADOR

> Comentrio

> Endereo de desvio para a rotina de SET_UP do controlador


> Instruo de Desvio Incondicional
[Normalmente existem 4 posies na Memria de Programa antes do Vetor de Interrupo (endereos 0x00 a 0x03) que podem ser ocupados
com instrues. No geral, costuma-se fazer um desvio para um endereo de memria onde est escrito o cdigo-fonte relativo ao SET_UP do
controlador, que ocupa mais que 4 posies de memria. Este espao inicial tambm pode ser utilizado para as instrues de teste das funes de
Brown-Out Detect e Power-On Reset.)

; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
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

; ENDEREO INICIAL DA INTERRUPO

> Comentrio

> Endereo de memria do Vetor de Interrupo


> Diretiva indicando incio das Interrupes a partir do endereo da Memria de Programa indicado
[A sequencia de instrues segue a recomendao da Microchip para manter inalterados os valores contidos nos registros STATUS e W quando
houver um desvio para Tratamento de Interrupes no caso, Salvar Contexto uma vez que estes dois registros so permanentemente
empregandos pela CPU. O objetivo destas instrues salvar os valores contidos nos registros STATUS (em STATUS_TEMP) e W (em
W_TEMP) enquanto o programa realiza o atendimento da Interrupo requisitada. Quando o tratamento da interrupo for conpletado, o
retorno rotina normal implica que os valores contidos nos dois registros no correspondem aos valores que existiam antes da requisio da
interrupo logo, a probabilidade de que o programa apresente solues erradas quase de 100%. O programador deve seguir esta
recomendao e, se houver outro registro que seja necessria a preservao do valor contido durante o tratamento da interrupo, deve ser
incluso na sequencia de Salvar Contexto. A sequencia Salvar Contexto pode ser considerada como padro em todos os cdigos-fonte realizados.]

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

; VAI PARA FIM DA INTERRUPO

; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
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

; TROCA NIB_HI POR NIB_LO EM STATUS_TEMP E


; GRAVA EM W
; RECUPERA STATUS
; TROCA NIB_HI POR NIB_LO EM W_TEMP E
; GRAVA EM W_TEMP
; TROCA NIB_HI POR NIB_LO EM W_TEMP E
; RECUPERA EM 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

Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/07


21/28

[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

; RA2:3 ENTRADA, DEMAIS SADAS

MOVLW
MOVWF

B'00000000'
TRISB

; TODOS OS BITS SADAS

; RESISTORES PULL-UP DESABILITADOS


; TRANSIO RB0/INT NO UTILIZADA
; INCREMENTO TMR0 INTERNO (CM)
; TRANSIO T0CK1 NO UTILIZADA
; PRE SCALER SELECIONADO PARA TMR0
; DIVISO 1:16 NO PRE SCALER

[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

; CHAMA VALOR EXISTENTE NO ENDEREO


; CALIBRADOR DO OSCILADOR LOCAL

[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

; DESLIGA OS COMPARADORES ANALGICOS E


; HABILITA OS PINOS DO PORTA PARA I/O DIGITAL

; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
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

; COLOCA ZERO NO REGISTRO PORTA


; COLOCA ZERO NO REGISTRO 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

Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/07


22/28

; ----------------------------------------------------------------------------------------------------------------------------------------------------------;
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

Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/07


23/28

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.

Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/07


24/28

ANEXO 2
COMPARATIVO DE CDIGO-FONTE DETALHADO COM SIMPLES (PARCIAL)

Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/07


25/28

-----------------------------------------------------------------------------------------------------------------; REA DE DIRETIVAS; ---------------------------------------------------------------------------------------------------------------------------------------------------------------

Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/07


26/28

ONT_1EQU.250 #DEFINEF_CONT_1FLAG,1ENDCCONT_1FLAGSTATUS_TEMPW_TEMPCBLOCK0X20#DEFINEBANK1BSFSTATUS,RP0#DEFINEBANK0BCFSTATUS,RP0__CONFIG B10000101001000#INCLUDE<P16F628A.INC>

Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/07


27/28

Bento Alves Cerqueira Cesar Filho - R 1.2 - JUN/07


28/28

Você também pode gostar