Escolar Documentos
Profissional Documentos
Cultura Documentos
Microcontroladores PIC
on-line GRTIS!
Pgina 1 de 14
Indice
Sistema de desenvolvimento
Contacte-nos
CAPTULO 4
Programao em Linguagem Assembly
Introduo
Exemplo de como se escreve um programa
Directivas de controle
4.1 define
4.2 include
4.3 constant
4.4 variable
4.5 set
4.6 equ
4.7 org
4.8 end
Instrues condicionais
4.9 if
4.10 else
4.11 endif
4.12 while
4.13 endw
4.14 ifdef
4.15 ifndef
Directivas de dados
4.16 cblock
4.17 endc
4.18 db
4.19 de
4.20 dt
Configurando uma directiva
4.21 _CONFIG
4.22 Processor
Operadores aritmticos de assembler
Ficheiros criados ao compilar um programa
Macros
Introduo
A capacidade de comunicar da maior importncia nesta rea. Contudo, isso s possvel se ambas as partes
usarem a mesma linguagem, ou seja, se seguirem as mesmas regras para comunicarem. Isto mesmo se aplica
comunicao entre os microcontroladores e o homem. A linguagem que o microcontrolador e o homem usam
para comunicar entre si designada por linguagem assembly. O prprio ttulo no tem um significado
profundo, trata-se de apenas um nome como por exemplo ingls ou francs. Mais precisamente, linguagem
assembly apenas uma soluo transitria. Os programas escritos em linguagem assembly devem ser
traduzidos para uma linguagem de zeros e uns de modo a que um microcontrolador a possa receber.
Linguagem assembly e assembler so coisas diferentes. A primeira, representa um conjunto de regras
usadas para escrever um programa para um microcontrolador e a outra, um programa que corre num
computador pessoal que traduz a linguagem assembly para uma linguagem de zeros e uns. Um programa
escrito em zeros e uns diz-se que est escrito em linguagem mquina.
12/8/2003
Pgina 2 de 14
Fisicamente, Programa representa um ficheiro num disco de computador (ou na memria se estivermos a ler
de um microcontrolador) e escrito de acordo com as regras do assembly ou qualquer outra linguagem de
programao de microcontroladores. O homem pode entender a linguagem assembly j que ela constituda
por smbolos alfabticos e palavras. Ao escrever um programa, certas regras devem ser seguidas para alcanar
o efeito desejado. Um Tradutor interpreta cada instruo escrita em linguagem assembly como uma srie de
zeros e uns com significado para a lgica interna do microcontrolador.
Consideremos, por exemplo, a instruo RETURN que um microcontrolador utiliza para regressar de um
subprograma.
Quando o assembler a traduz, ns obtemos uma srie de uns e zeros correspondentes a 14 bits que o
microcontrolador sabe como interpretar.
Exemplo: RETURN 00 0000 0000 1000
Analogamente ao exemplo anterior, cada instruo assembly interpretada na srie de zeros e uns
correspondente.
O resultado desta traduo da linguagem assembly, designado por um ficheiro de execuo. Muitas vezes
encontramos o nome de ficheiro HEX. Este nome provm de uma representao hexadecimal desse ficheiro,
bem como o sufixo hex" no ttulo, por exemplo correr.hex". Uma vez produzido, o ficheiro de execuo
inserido no microcontrolador atravs de um programador.
Linguagem Assembly
Os elementos bsicos da linguagem assembly so:
Labels (rtulos)
Instrues
Operandos
Directivas
Comentrios
Um Label (rtulo) uma designao textual (geralmente de fcil leitura) de uma linha num programa ou de
uma seco de um programa para onde um microcontrolador deve saltar ou, ainda, o incio de um conjunto de
linhas de um programa. Tambm pode ser usado para executar uma ramificao de um programa (tal como
Goto....), o programa pode ainda conter uma condio que deve ser satisfeita, para que uma instruo Goto
seja executada. importante que um rtulo (label) seja iniciado com uma letra do alfabeto ou com um trao
baixo _. O comprimento de um rtulo pode ir at 32 caracteres. tambm importante que o rtulo comece na
primeira coluna.
12/8/2003
Pgina 3 de 14
Instrues
As instrues so especficas para cada microcontrolador, assim, se quisermos utilizar a linguagem assembly
temos que estudar as instrues desse microcontrolador. O modo como se escreve uma instruo designado
por "sintaxe". No exemplo que se segue, possvel reconhecer erros de escrita, dado que as instrues movlp e
gotto no existem no microcontrolador PIC16F84.
Operandos
Operandos so os elementos da instruo necessrios para que a instruo possa ser executada. Normalmente
so registos, variveis e constantes. As constantes so designadas por literais. A palavra literal significa
nmero.
Comentrios
Comentrio um texto que o programador escreve no programa afim de tornar este mais claro e legvel.
colocado logo a seguir a uma instruo e deve comear com uma semi-vrgula ";".
Directivas
Uma directiva parecida com uma instruo mas, ao contrrio desta, independente do tipo de
microcontrolador e uma caracterstica inerente prpria linguagem assembly. As directivas servem-se de
variveis ou registos para satisfazer determinados propsitos. Por exemplo, NIVEL, pode ser uma designao
para uma varivel localizada no endereo 0Dh da memria RAM. Deste modo, a varivel que reside nesse
endereo, pode ser acedida pela palavra NIVEL. muito mais fcil a um programador recordar a palavra NIVEL,
que lembrar-se que o endereo 0Dh contm informao sobre o nvel.
12/8/2003
Pgina 4 de 14
Uma vez que estes dados no interessam ao tradutor de assembly, so escritos na forma de comentrios.
Deve ter-se em ateno que um comentrio comea sempre com ponto e vrgula e pode ser colocado na linha
seguinte ou logo a seguir instruo.
Depois deste comentrio inicial ter sido escrito, devem incluir-se as directivas. Isto mostra-se no exemplo de
cima.
Para que o seu funcionamento seja correcto, preciso definir vrios parmetros para o microcontrolador, tais
como:
- tipo de oscilador
- quando o temporizador do watchdog est ligado e
- quando o circuito interno de reset est habilitado.
Tudo isto definido na directiva seguinte:
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
Logo que todos os elementos de que precisamos tenham sido definidos, podemos comear a escrever o
programa.
Primeiro, necessrio definir o endereo para que o microcontrolador deve ir quando se liga a alimentao.
esta a finalidade de (org 0x00).
O endereo para onde um programa salta se ocorrer uma interrupo (org 0x04).
Como este um programa simples, suficiente dirigir o microcontrolador para o incio de um programa com
uma instruo "goto Main" (Main = programa principal).
As instrues encontradas em Main, seleccionam o banco 1 (BANK1) de modo a poder aceder-se ao registo
TRISB, afim de que o porto B seja definido como uma sada (movlw 0x00, movwf TRISB).
O prximo passo seleccionar o banco de memria 0 e colocar os bits do porto B no estado lgico 1 e, assim,
o programa principal fica terminado.
preciso, no entanto, um outro ciclo (loop), onde o microcontrolador possa permanecer sem que ocorram
erros. Trata-se de um loop infinito que executado continuamente, enquanto a alimentao no for desligada.
12/8/2003
Pgina 5 de 14
Finalmente, necessrio colocar a palavra end" no fim de cada programa, de modo a informar o tradutor de
assembly de que o programa no contm mais instrues.
Directivas de controle
4.1 #DEFINE Troca de uma poro de texto por outra
Sintaxe:
#define<nome> [< texto atribudo a nome > ]
Descrio:
De cada vez que a palavra <nome> aparece no programa, vai ser substituda por <texto atribudo a nome>.
Exemplo:
#define ligado 1
#define desligado 0
Directivas similares: #UNDEFINE, IFDEF, IFNDEF
12/8/2003
Pgina 6 de 14
Instrues condicionais
12/8/2003
Pgina 7 de 14
12/8/2003
Pgina 8 de 14
endw
4.13 ENDW Fim da parte condicional do programa
Sintaxe:
endw
Descrio:
Esta directiva escrita no fim do bloco condicional correspondente a WHILE, assim, o assembler fica a saber
que o bloco condicional chegou ao fim.
Exemplo:
while i < 10
i=i+1
.
endw
Directivas similares: WHILE
Directivas de Dados
4.16 CBLOCK Definir um bloco para as constantes nomeadas
Sintaxe:
Cblock [< termo >]
<rtulo> [:<incremente>], <rtulo> [:<incremente>]......
endc
12/8/2003
Pgina 9 de 14
Descrio:
Esta directiva usada para atribuir valores s constantes a seguir nomeadas. A cada termo seguinte, atribudo
um valor superior em uma unidade ao anterior. No caso de <incremente> estar preenchido, ento o valor de
<incremente> que adicionado constante anterior.
O valor do parmetro <termo>, o valor inicial. Se no for dado, ento, por defeito, considerado igual a zero.
Exemplo:
cblock 0x02
primeiro, segundo ; primeiro = 0x02, segundo = 0x03
terceiro ;terceiro = 0x04
endc
cblock 0x02
primeiro : 4, segundo : 2 ; primeiro = 0x06, segundo = 0x08
terceiro ; terceiro = 0x09
endc
Directivas similares: ENDC
4.17 ENDC Fim da definio de um bloco de constantes
Sintaxe:
endc
Descrio:
Esta directiva utilizada no fim da definio de um bloco de constantes, para que o tradutor de assembly saiba
que no h mais constantes.
Directivas similares: CBLOCK
12/8/2003
Pgina 10 de 14
Esta directiva vai gerar uma srie de instrues RETLW, uma instruo para cada termo.
dt Mensagem , 0
dt primeiro, segundo, terceiro
Directivas similares: DB, DE
12/8/2003
Pgina 11 de 14
12/8/2003
Pgina 12 de 14
A seguir, apresenta-se o ficheiro list do programa deste captulo. No incio de cada pgina, encontra-se
informao acerca do nome do ficheiro, data em que foi criado e nmero de pgina. A primeira coluna, contm
o endereo da memria de programa, onde a instruo mencionada nessa linha, colocada. A segunda coluna,
contm os valores de quaisquer smbolos definidos com as directivas: SET, EQU, VARIABLE, CONSTANT ou
CBLOCK. A terceira coluna, tem, o cdigo da instruo que o PIC ir executar. A quarta coluna contm
instrues assembler e comentrios do programador. Possveis erros so mencionados entre as linhas, a seguir
linha em que o erro ocorreu.
12/8/2003
Pgina 13 de 14
No fim do ficheiro de listagem, apresentada uma tabela dos smbolos usados no programa. Uma caracterstica
til do ficheiro list a apresentao de um mapa da memria utilizada. Mesmo no fim, existe uma estatstica
12/8/2003
Pgina 14 de 14
Macros
As macros so elementos muito teis em linguagem assembly. Uma macro pode ser descrita em poucas
palavras como um grupo de instrues definido pelo utilizador que acrescentado ao programa pelo
assembler, sempre que a macro for invocada. possvel escrever um programa sem usar macros. Mas, se as
utilizarmos, o programa torna-se muito mais legvel, especialmente se estiverem vrios programadores a
trabalhar no mesmo programa. As macros tm afinidades com as funes nas linguagens de alto nvel.
Como as escrever:
<rtulo> macro
[<argumento1>,<argumento2>,.....,<argumentoN>]
.........
.........
endm
Pelo modo como so escritas, vemos que as macros podem aceitar argumentos, o que tambm muito til em
programao.
Quando o argumento invocado no interior de uma macro, ele vai ser substitudo pelo valor <argumentoN>.
Exemplo:
O exemplo de cima, mostra uma macro cujo propsito enviar para o porto B, o argumento ARG1, definido
quando a macro foi invocada. Para a utilizarmos num programa, basta escrever uma nica linha: ON_PORTB
0xFF e, assim, colocamos o valor 0xFF no porto B. Para utilizar uma macro no programa, necessrio incluir o
ficheiro macro no programa principal, por intermdio da instruo #include nome_da_macro.inc. O contedo
da macro automaticamente copiado para o local em que esta macro est escrita. Isto pode ver-se melhor no
ficheiro lst visto atrs, onde a macro copiada por baixo da linha #include bank.inc.
Pgina anterior
Tabela de contedos
Pgina seguinte
Copyright 2003. i-magazine e mikroElektronika. All Rights Reserved. For any comments contact
. webmaster
12/8/2003