Você está na página 1de 7

Programao Daniel Corteletti Aula 3 Parte III Pgina 1/7

LINGUAGEM DE PROGRAMAO - ASSEMBLY - PARTE I

Assembly - o que

"Assembly" significa montagem. "Assembler" significa montador. Montagem o ato de


transformar uma seqncia de cdigo fonte (texto) em cdigo objeto (linguagem de mquina), e
montador o programa que faz isso.
Observe no diagrama abaixo que o PROGRAMADOR escreve uma lista de comandos
em forma de texto, onde cada linha realiza uma funo especfica.
No entanto, para o microcontrolador no entende estes comandos em modo texto. Eles
precisam antes ser traduzidos para uma linguagem binria (linguagem de mquina), e isso
feito pelo programa montador (ASSEMBLER).

Programar diretamente em linguagem de mquina at possvel, mas muito, mas


muito mais difcil do que programar em assembly.
Usando esta linguagem e um programa montador, o programador no escreve em
linguagem de mquina, e sim em uma linguagem textual, facilitando a construo dos
programas. Embora fique mais fcil do que programar direto em linguagem de mquina,
programar em ASSEMBLY ainda uma das formas mais "difceis" de programao, sendo
conhecida como a linguagem de programao de "mais baixo nvel".
O arquivo fonte do diagrama acima (aquela lista de comandos digitada pelo
programador) composta de instrues (mnemnicos), parmetros, rtulos, comentrios e
diretivas, e aps so transformados em linguagem de mquina por um programa montador.
Vamos conhecer cada um destes componentes do programa.
INSTRUO : o nome dado a uma operao que o microcontrolador pode realizar. Por
exemplo, se o microcontrolador pode realizar a soma de dois valores, dizemos que existe no
mnimo uma instruo para soma. No caso do microcontrolador PIC, as instrues que
realizam soma so duas, a ADDWF e a ADDLW. Voc consegue descobrir que instrues esto
disponveis para programao assembly no datasheet do microcontrolador em questo.
MNEMNICO : uma representao textual de uma instruo. As instrues so, na
verdade, cdigos binrios, e para serem entendidos pelos programador devem ser
representados na forma textual. Se os mnemnicos no fossem utilizados, teramos que
programar assembly utilizando cdigos numricos difceis de memorizar. Desta forma, uma das
instrues de adio citadas anteriormente possui o mneumnico ADDWF, e sua representao
binria 000111xxxxxxxx onde x .
PARMETROS : So as informaes manipuladas por uma instruo. Isso necessrio
sempre que precisarmos informar instruo quais os elementos envolvidos na operao. Por
exemplo, se desejarmos somar dois valores, a instruo poder ser ADDWF ou ADDLW, mas
os valores a serem somados tambm devero ser informados, sendo estes ltimos os que
chamamos de "parmetros."

DIRETIVAS : So linhas que determinam como o programa montador ir trabalhar. No


geram efeito direto no cdigo binrio gerado. Por exemplo, a diretiva LIST p=16F877
determina qual o microcontrolador que ser usado.
RTULOS : So nomes dados as linhas do programa, e servem para que em uma
instruo de desvio possa se determinar o ponto para onde se deseja ir no programa. Os
Programao Daniel Corteletti Aula 3 Parte III Pgina 2/7

rtulos sempre so alinhados na coluna 0 (sem espaos antes do mesmo), enquanto que as
instrues devem ser escritas aps uma margem (obrigatoriamente aps a coluna 0).
COMENTRIOS : So trechos de texto escritos aps um sinal de ponto e vrgula (;). So
teis para que possamos adicionar pequenos lembretes no programa, facilitando a manuteno
futura. No interferem no tamanho do programa binrio gerado.
Outros termos importantes :
MONTADOR : o programa que transforma um programa fonte assembly em um
programa executvel. Um exemplo o MPASM, que faz parte do MPLAB, uma ferramenta de
desenvolvimento distribuda pela MicroChip (fabricante dos microcontroladores PIC)

AS INSTRUES
Por se tratar de um microcontrolador RISC, o PIC oferece um nmero reduzido de
instrues. No entanto, ainda podemos dividir as instrues utilizadas pela famlia 16 dos
microcontroladores PIC em 6 grupos :
Instrues para manipulao de bytes de memria (B)
Instrues para manipulao de bits de memria (b)
Desvios incondicionais (Di)
Desvios condicionais (D)
Instrues com valores constantes (K)
Instrues de controle (G)
Instruo e
Bits de status
Parmetros Descrio Tipo Ciclos
afetados
Mneumnicos

ADDWF f, d Adio : W + F. B 1 C, DC, Z

ANDWF f, d E binrio (AND) entre W e F, bit a bit. B 1 Z

CLRF f Zera todos os bits de F. B 1 Z

CLRW Zera todos os bits de W. B 1 Z

COMF f, d Complemento de F. (bits com valores 1


B Z
invertidos no byte)

DECF f, d Decrementa F B 1 Z

DECFSZ f, d Decrementa F e pula prxima linha se 1 (2)


B,Dc
resultar zero

INCF f, d Incrementa F B 1 Z

INCFSZ f, d Incrementa F e pula prxima linha se 1 (2)


B,Dc
resultar zero

IORWF f, d OU inclusivo (OR) de W com F B 1 Z

MOVF f, d Move F (geralmente usado para mover F 1


B Z
para W)

MOVWF f Move W para F B 1

NOP Operao nula. Nada executado. G 1

RLF f, d Rotaciona F para esquerda com Carry Flag B 1 C

RRF f, d Rotaciona F para direita com Carry Flag B 1 C

SUBWF f, d Subtrai W de F : (f-W) B 1 C,DC,Z

SWAPF f, d Troca os nibbles de f. Ex: (0xA3, aps swap 1


B
fica, 0x3A)
Programao Daniel Corteletti Aula 3 Parte III Pgina 3/7

XORWF f, d Ou exclusivo (XOR) entre W e F B 1 Z

BCF f, b Apaga (clear) um bit de F b 1

BSF f, b Liga (set) um bit de F b 1

BTFSC f, b Testa um bit de F, pulando se for zero b,Dc 1 (2)

BTFSS f, b Testa um bit de F, pulando se for um b,Dc 1 (2)

ADDLW k Adiciona uma constante K em W B 1 C,DC,Z

ANDLW k E (and) lgico de uma constante com W B 1 Z

CALL k Faz uma chamada a uma subrotina Di 2

CLRWDT Limpa o Watchdog Timer (relgio do co de 1


G ~TO, ~PD
guarda)

GOTO k V para. Um desvio para um outro ponto do 2


Di
programa.

IORLW k Ou inclusivo (OR) de uma constante com W B 1 Z

MOVLW k Move uma constante para W B 1

RETFIE Retorna de uma interrupo Di 2

RETLW k Retorna de uma subrotina, movendo uma 2


B,Di
const. para W

RETURN Retorna de uma subrotina Di 2

SLEEP Vai para o modo standby G 1 ~TO, ~PD

SUBLW k Subtrai uma constante de W B 1 C,DC,Z

XORLW k Ou exclusivo (OR) entre W e uma constante B 1 Z

Como entender a tabela acima :

1 Coluna : INSTRUO - Descreve todas as instrues utilizadas pelo microcontrolador


PIC16F877. As instrues geralmente possuem nomes relacionados a suas funes. Por
exemplo, GOTO lembra GO TO, que em ingls significa V PARA ... J SLEEP significa
DORMIR. ADDLW lembra ADD que em ingls significa adicionar.... e assim por diante.

2 Coluna : PARMETROS - Descreve os operandos utilizados pela instruo. Nesta


coluna aparecem as letras f, d, b, k.
O (f) identifica que o parmetro deve ser uma posio da memria RAM interna ( que
chamaremos de registradores). Os registradores sero explicados em breve e expressos em
uma tabela.
O (d) identifica um parmetro de destino, e pode valer W ou F. W o registrador principal, e F
qualquer outro registrador.
O (b) um parmetro de identificao de um bit (0 a 7). Por exemplo, BSF PORTD,0 onde o
(b) vale 0 ativa o bit menos significativo (bit 0) do registrador PORTB.
O (k) identifica que o parmetro em questo uma constante (rtulo ou valor fixo). Por
exemplo, MOVLW 10 onde o valor de K 10, move a constante 10 para o registrador principal.

3 Coluna : DESCRIO - Descreve a funo dos operandos.

4 Coluna - TIPO. Define o grupo onde a instruo se encaixa. Veja a legenda no texto
acima da tabela.
Programao Daniel Corteletti Aula 3 Parte III Pgina 4/7

5 Coluna - CICLOS - Uma instruo pode consumir 1 ou 2 ciclos de mquina. Cada


ciclo de mquina, no caso dos microcontroladores PIC16F8xx, correspondem a 4 pulsos de
clock. Portanto, se o cristal utilizado no microcontrolador for de 4MHz, ocorrero 1MegaCiclos
por segundo, ou seja, 1 milho de ciclos por segundo (tambm usa-se 1mips - 1 milho de
instrues por segundo). Algumas instrues, portanto, demoraro 1/1000000 de segundos (1
microsegundo) para serem executadas, e outras demoraro 2/1000000 segundos (2
microsegundos). Algumas instrues (como os desvios condicionais) podem demorar 1 ou 2
ciclos, dependendo da condio avaliada pela instruo.

6 Coluna - BITS DE STATUS AFETADOS - Inicialmente, devemos entender o que so


BITS DE STATUS. De uma forma resumida, so "indicadores" existentes na memria do
microcontrolador que registram informaes sobre as operaes realizadas (Exemplo :se a
ltima operao resultou em zero ou no, se houve estouro no valor computado, etc...). Esta
coluna visa descrever quais destes BITS DE STATUS so afetados pela instruo. Para saber
mais sobre estes bits de status, procure bibliografia complementar.
Exerccio : Observando o trecho de programa abaixo, e tendo em mos a tabela a pouco
descrita, procure descobrir o que cada linha significa.
volta
btfss PORTA,1
goto deslig
ligado
movlw 0x0F
movwf PORTD
goto volta
deslig
movlw 0xAA
movwf PORTD
goto volta

REGISTRADOR

o nome utilizado para identificar uma posio de memria interna do microcontrolador.


No caso do microcontrolador PIC16F877, possumos capacidade de acesso interno a 512 bytes
de memria. Cada byte (8 bits) um registrador. Temos, portanto, 512 registradores. No
entanto, alguns destes registradores so utilizados para fins especficos, estando diretamente
relacionados a perifricos internos do microcontrolador (como conversores AD, entradas e
sadas digitais, configurao dos perifricos, etc...), e outros destes registradores no so
fisicamente implementados (so "buracos" deixados para futuras melhorias do projeto do
microcontrolador).
Outros registradores so os denominados "General Purpose Registers", ou
"Registradores de Uso Geral". So posies de memria livres, que podem ser utilizados para
armazenamento temporrio de valores (variveis). Como so parte da memria RAM do
microcontrolador, todos os dados armazenados nos registradores so volteis, ou seja,
so perdidos ao se desligar o mesmo.
Observe, na tabela que segue, os FILE REGISTERS (ou Arquivos Registradores) do
PIC16F877
Programao Daniel Corteletti Aula 3 Parte III Pgina 5/7

(Tabela retirada do datasheet do microcontrolador PIC16F877)


Programao Daniel Corteletti Aula 3 Parte III Pgina 6/7

Consideraes importantes sobre os registradores :

1.Esto divididos em BANCOS DE MEMRIA. Na programao em assembly,


precisamos selecionar o banco de memria antes de acessar um determinado registrador. Isso
pode ser feito atravs do registrador STATUS (que aparece em todos os bancos de memria).
Nele existem 2 bits que permitem definir qual o banco de memria que est ativo (paginao).
2.Alguns registradores so de uso geral, liberados para uso com variveis. Ex :
registradores 20h a 7Fh do BANK 0.
3.Registradores como o STATUS e o OPTION_REG so utilizados para configurao de
caractersticas do MC, como mudana de banco de memria, velocidade de incremento de
temporizadores, etc... Recomenda-se um aprofundamento maior, atravs da bibliografia
sugerida.
4.Para uma boa programao assembly, o conhecimento sobre estes registradores
indispensvel.

OS REGISTRADORES QUE MAIS UTILIZAREMOS NESTA FASE DO CURSO SO :

PORTA, PORTB, PORTC, PORTD e PORTE = Registradores que representam o estado


dos pinos do PIC. Por exemplo, se voc desejar acionar o pino RC3 do microcontrolador,
dever ligar o bit 3 do registrador PORTC.
Obs: Nem todos os bits dos registradores citados possuem representao fsica. Ex : PORTE,
bit 4.
STATUS : este registrador possui 2 bits que servem para definir o BANCO DE MEMRIA
(VEJA TABELA ACIMA) que ser usado nas prximas operaes. Tambm possui informaes
referentes a sinalizadores de erro, estouro de memria, etc...
TRISA, TRISB, TRISC, TRISD, TRISE = Serve para definir se um determinado PINO
ser de entrada ou sada. Isso importante, pois desta forma que o PIC ir saber se voc
quer LER sinal de um pino (que flutuar conforme tenso de entrada) ou se quer ENVIAR um
sinal para este pino (mantendo assim o nvel de tenso desejado).
ADCON1 = Serve para configurar o conversor AD (ligar ou desligar, especificar o padro
de conerso, etc.)

Exerccios :
1 - Aponte as instrues, os registradores, parmetros, rtulos, comentrios e diretivas
encontrados no programa abaixo.
; AUTOR : DANIEL CORTELETTI
; FEVEREIRO DE 2003
; CENTRO TECNOLGICO DE MECATRONICA SENAI

LIST p=16F877
#include "P16F877.INC"
__config _CP_OFF & _PWRTE_OFF & _WDT_OFF & _XT_OSC
VAR1 equ 20
VAR2 equ 21
VAR3 equ 22
CONT equ 23
org 0
goto inicio

inicio
bcf STATUS, RP0
bcf STATUS, RP1
clrf PORTA
bsf STATUS, RP0
movlw 0x06
movwf ADCON1
movlw 0xff
movwf TRISA
movlw 0x00
Programao Daniel Corteletti Aula 3 Parte III Pgina 7/7

movwf TRISD
bcf STATUS, RP0

comeco movlw 0x01


movwf PORTD
movlw 0x07
movwf CONT
volta1 call tempo
rlf PORTD,f
decfsz CONT,f
goto volta1
movlw 0x07
movwf CONT
volta2 call tempo
rrf PORTD,f
decfsz CONT,f
goto volta2
goto comeco

tempo movlw 0x03


movwf VAR1
temp1 movlw 0x3F
movwf VAR2
temp2 movlw 0xFF
movwf VAR3
decfsz VAR3,F
goto $-1
decfsz VAR2,F
goto temp2
decfsz VAR1,F
goto temp1
return

2 - Para que serve o registrador TRISD ?

3 - Para que serve o registrador PORTD ?

4 - Que instrues deveria ser executadas pra que o pino RD5 fosse acionado ?

5 - A memria do microcontrolador PIC segmentada em quantos bancos ?

7 - Que tipo de programa voc vai precisar para programar em assembly ?


( ) Um editor de textos como o WORD
( ) Um editor de imagens como o PAINT
( ) Um montador como o MPLAB
( ) Um navegador como o INTERNET EXPLORER
( ) Uma planilha eletrnica como o Excel

8 - Ao escrever um programa assembly, possvel se realizar anotaes (trechos


de texto) no meio do programa. Como isso possvel ? Isso aumenta o tamanho do
programa binrio (arquivo HEX) gerado ?

Você também pode gostar