Você está na página 1de 6

Programao Daniel Corteletti Aula 3 Parte IV

LINGUAGEM DE PROGRAMAO ASSEMBLY (continuao) O WORK REGISTER

Pgina 1/6

Existem 3 tipos de informaes manipuladas pelas instrues do PIC: Registradores de uso geral (isso inclui memria RAM disponvel e registradores de acesso e configurao do hardware), constantes (que so dados provenientes da memria ROM) e o Registrador Principal (aqui chamado de Work Register). Muitas operaes somente podem ser realizadas com o uso do WORK REGISTER ou W. Se voc for bom observador, deve ter notado que as instrues no permitem a operao envolvendo diretamente duas posies de memria. Por exemplo, no possvel se movimentar um dado da memria RAM para outra posio da memria RAM com o uso de uma nica instruo. Ser necessrio movimentar este dado da posio de memria inicial para o W, e depois ser necessrio movimentar W para outra posio de memria.

Veja o exemplo comentado abaixo :


ROT1 BSF STATUS,RP0 MOVLW 0xFF MOVWF TRISB BCF STATUS,RP0 MOVF PORTB,W ADDLW 0x05 MOVWF PORTC GOTO ROT1 ... ; ; ; ; ; ; ; ; ; rtulo que identifica o inicio do programa muda para o banco de memria 01 carrega o valor 255 (em hexadecimal FF) em W descarrega o valor de W para o registrador TRISB volta para o banco de memria zero move o valor de PORTB para W adiciona 5 ao W move o valor de W para PORTC volta para o inicio do programa

As instrues em destaque utilizam o Work Register. Na segunda linha um valor constante (FFh) carregado no Work Register. Na linha seguinte, este valor transferido de W para o Registrador TRISB (Neste caso o Work Register est sendo usado para colocar um valor constante em um Registrador). Na quinta linha, uma instruo transferida de PORTB para W, e na linha seguinte um valor constante adicionado em W. Na ltima linha, o valor de W movido para o File Register PORTC.

Programao Daniel Corteletti Aula 3 Parte IV


DIRETIVAS DE MONTAGEM

Pgina 2/6

Nos programas podemos utilizar linhas de configurao do montador que servem para orientar a gerao do arquivo executvel. Estas linhas so chamadas de "diretivas de montagem", e no geram necessariamente cdigo executvel. As mais usadas : - DEFINE : Define um smbolo que ser substitudo por uma expresso no programa. Ex: #define TECLA PORTD, 3 Sempre que a palavra TECLA for utilizada no programa, ser substituda pela expresso PORTD,3. - END : (no usa sustenido e deve aparecer aps a primeira coluna) identifica que o final de um programa chegou. Ex: END - EQU : Cria uma definio de valores para o montador. Desta forma, podemos associar uma rea de memria (geralmente de uso geral) a um nome. Ex: DISP EQU 0x06 - INCLUDE : Inclui (ao montar) um outro arquivo. til para aproveitar o mesmo arquivo para vrios programas. Geralmente existe um INCLUDE obrigatrio, com informaes sobre a configurao do microcontrolador a ser utilizado. Ex : #INCLUDE <P16F877.INC> - ORG : Especifica qual o endereo inicial para montagem do programa (onde o programa comea). Ex: ORG 0x0000 Para saber mais sobre as diretivas de compilao do MPLAB, pesquise no livro [PIC02] na pgina 327. Exerccios de fixao :

1. Associe as colunas (a) OPTION_REG


(b) BSF (c) RLF (d) 20h at 7Fh (e) BTFSS (f) GOTO

(__) rea de memria para uso geral (__) Instruo que testa um bit de um registrador, pulando a prxima instruo se o bit estiver acionado. (__) Instruo que causa um desvio do programa. (__) Instruo que causa um deslocamento de bits de um registrador para a esquerda. (__) Instruo que aciona um bit de um registrador. (__) Registrador encontrado na posio de memria 81h

2. Cite 3 instrues que realizam operaes bit a bit.


......................................................................................................................................................... ......................................................................................................................................................... 3. Qual a largura, em bits, do registrador principal do microcontrolador estudado neste tpico? ( ) um bit ( ) 8 bits ( ) 16 bits ( ) 32 bits 4. Como pode ser realizado o acesso a um pino do microcontrolador para buscar o estado de um sensor ? ( ) Verificando o estado do bit correspondente ao pino no registrador adequado ( ) H uma instruo em assembly para cada pino do microcontrolador. Basta us-la. ( ) Atravs do registrador principal (W) ( ) No h como se testar um pino do microcontrolador

( ) Pela instruo BSF


RTULO e DESVIOS

Programao Daniel Corteletti Aula 3 Parte IV

Pgina 3/6

Quando esboamos um programa, seja em descrio narrativa, seja em pesudocdigo ou mesmo atravs de um fluxograma, observamos a presena de estruturas condicionais e de repetio. Estas estruturas so implementadas atravs de DESVIOS condicionais. Em outras palavras, em determinados pontos do programa, temos que seguir um NOVO RUMO. Para identificar os pontos do programa para onde devero ser efetuados estes desvios, existem os RTULOS. No exemplo ao lado, os rtulos LABEL1, LABEL2 e ROTINA1 identificam pontos do programa para onde deve ser desviado o fluxo de execuo do programa no momento da execuo. Observe que a instruo de desvio (GOTO) e de chamada de subrotina (CALL) so usadas para promover os desvios incondicionais. No caso da instruo CALL, o retorno para o ponto de chamada realizado pela instruo RETURN, e o retorno ser automaticamente realizado para a linha seguinte do ponto de chamada, ou seja, abaixo do ltimo CALL realizado. Em todos os casos, o desvio realizado para um ponto do programa demarcado pelo rtulo especificado. Os rtulos devem sempre ser escritos na 1 coluna de texto (mais a esquerda), e as instrues devem comear em uma margem mais avanada (mais a direita). Podem ser usados dois pontos juntos ao nome dos rtulos, embora isso seja uma caracterstica relacionada com o programa montador escolhido. (no MPLAB isso opcional, e portando no usaremos dois pontos em nossos exemplos) Importante : Um rtulo deve ser determinado por um nico nome, ou seja, uma nica palavra. No use espaos no nome de um rtulo . Por exemplo, um rtulo chamado ABRIR VLVULA no vlido, mas um rtulo ABRIRVALVULA ou ABRIR_VALVULA vlido. Evite tambm usar cedilha, acentuao ou outros caracteres no alfabticos, pois isso pode gerar erros na montagem . As instruo de desvio incondicional em assembly mais utilizada o GOTO. Trata-se de um desvio onde sempre que esta instruo executada, a seqncia de execuo interrompida, e o programa sofre um desvio para um novo ponto. A instruo pode ser usada junto a um rtulo, como no exemplo acima citado, ou pode ser usada junto aos parmetros $-x ou $+x, onde x o nmero de instrues a deslocar. Por exemplo, a instruo GOTO $-3 causa um retorno de 3 linhas no programa. No exemplo anterior, a instruo GOTO $-1 retorna uma linha. Para o programa acima, poderamos usar a instruo GOTO $+3 no lugar da instruo GOTO LABEL2. Observe que esta tcnica s interessante quando forem executados saltos muito pequenos (de 2 ou 3 instrues), e que linhas em branco no so contadas. Para desvios maiores se aconselha o uso de rtulos, para no haver problemas nas possveis modificaes de programa. Para desvios condicionais, geralmente usamos as instrues BTFSS, BTFSZ, DECFSZ. Estas instrues permitem realizar desvios condicionais atravs do recurso de ignorar ou no a prxima instruo. Em poucas palavras, com estes testes, podemos ter o desvio para a segunda linha aps a instruo, ou podemos no ter o desvio. Por exemplo, se executarmos a instruo que testa se um bit est ativado, seguido de duas linhas com instrues de desvios incondicionais, da seguinte forma: BTFSS PORTD,1 GOTO ROTULO1 GOTO ROTULO2 Caso o primeiro teste seja verdadeiro, ou seja, caso o bit 1 do registrador PORTD esteja ativado, a segunda linha (GOTO ROTULO1) no ser executada, pulando-se a execuo do programa para a instruo GOTO ROTULO2.

Programao Daniel Corteletti Aula 3 Parte IV

Pgina 4/6

Porm, caso a instruo BTFSS PORTD,1 verifique que o bit testado est desativado, a segunda linha ser executada normalmente, e o programa desviar para o ROTULO1. ESCREVENDO PROGRAMAS ASSEMBLY Para melhor compreenso, apresentaremos inicialmente um programa descrito em linguagem alto-nvel (um fluxogama), e posteriormente a traduo do mesmo em linguagem assembly. Na seqncia, descreveremos as partes do programa.

Rotina principal. Este programa tem por objetivo causar um efeito visual nos LEDS conectados ao PORTC (sadas digitais da estao CUSCOPIC). Os valores so jogados no PORTC em hexadecimal, o que nos permite perceber que o efeito visual dado por todos os leds ligados (FF = 11111111), e aps um tempo os dois leds mais significativos so desligados (3F = 00111111), seguido de metade dos leds desligados (0F = 00001111), e finalmente os 6 leds mais significativos desligados (03 = 00000011). Rotina de tempo. Chamada a partir da Note tambm que o pino RE2 permanece um perodo funo principal, esta rotina tem por de tempo ativado. Como este pino est conectado ao objetivo causar um atraso de alguns BUZZER (alerta sonoro), deve-se esperar que o programa resulte tambm um beep intermitente. milisegundos

Programao Daniel Corteletti Aula 3 Parte IV


Transcrevendo o programa em assembly PROGRAMA
; ; ; ; ;

Pgina 5/6

COMENTRIOS Linhas iniciadas por um ponto e vrgula so "comentrios", ou seja, servem de documentao para que possamos registrar idias (texto) no programa, sem interferir na montagem do cdigo. Este recurso impacta diretamente sobre a manutenibilidade do programa.

OBJETIVO : EFEITO VISUAL NO PORTD, COM BEEP AUTOR : DANIEL CORTELETTI FEVEREIRO DE 2003 REVISADO E MODIFICADO EM JULHO DE 2009 CENTRO TECNOLGICO DE MECATRONICA SENAI

LIST p=16F877 #include "P16F877.INC"

Esta linha indica o microcontrolador alvo Aqui, solicitada a incluso (que acontece no momento da montagem) do arquivo P16f877.INC, onde esto princludas algumas instrues bsicas. Define os fuses

__config _CP_OFF & _PWRTE_OFF & _WDT_OFF & _XT_OSC VAR1 VAR2 VAR3 equ equ equ 0X20 0X21 0X22

Aqui so definidas 3 variveis de 8 bits (VAR1, VAR2 e VAR3 usando os endereos de memria 20H a 22H. Verifique que estas posies da RAM do Microcontrolador esto livres. Esta linha aparentemente intil poder ser necessria quando utilizarmos rotinas de interrupo. Aqui se define em que posio da memria ROM o programa (cdigo executvel) comea. Esta linha causa um desvio para o incio do programa propriamente dito, pulando a rotina abaixo descrita. Aqui est descrita a rotina de "tempo". Como foi descrito anteriormente no fluxograma, esta rotina tem por objetivo "queimar tempo", ou seja, ao executar esta rotina, o microcontrolador ir perder ciclos de execuo do programa para executar 3 laos aninhados, resultando aproximadamente 50.000 iteraes (voltas). Para cada uma destas "voltas" executadas nesta rotina, o microcontrolador perde aproximadamente 2 microsegundos, totalizando em um atraso (para a rotina) de aproximadamente 100.000 microsegundos. A partir daqui inicia a rotina principal do programa. Esta parte executada somente uma vez, e se destina preparao dos PORTs do microcontrolador. Para isso, teremos que acessar o banco de memria 1 do microcontrolador (ao executada atravs da manipulao dos bits STATUS RP0 e RP1.
No banco de memria 1, acessamos os registradores relativos configurao de direo, definindo se um pino entrada ou sada. So registradores de direo TRISA, TRISB, TRISC, TRISD e TRISE. Estes registradores configuram, respectivamente, o PORTA, PORTB, PORTC, PORTD e PORTE. Ao final do processo, o registrador STATUS reconfigurado, de forma a retornar o acesso ao banco de memria padro (banco 0).

org

goto tempo temp1 temp2 movlw movwf movlw movwf movlw movwf decfsz goto decfsz goto decfsz goto return bsf bcf

inicio 0x03 VAR1 0x3F VAR2 0xFF VAR3 VAR3,F $-1 VAR2,F temp2 VAR1,F temp1

inicio

STATUS, RP0 STATUS, RP1

movlw movwf movlw movwf movwf bcf comeco bsf movlw movwf call bcf movlw movwf call movlw movwf call movlw movwf call goto END

0xff TRISD 0x00 TRISC TRISE STATUS, RP0 PORTE,2 0xff PORTC tempo PORTE,2 0x3f PORTC tempo 0x0f PORTC tempo 0x03 PORTC tempo comeco

Esta a parte "cclica" do programa, onde se encaixa a traduo do fluxograma. Este cdigo ser executado ininterruptamente, em um lao infinito. Observe que, entre as instrues aqui definidas, existem algumas chamadas a subrotina tempo (atravs da instruo call). Observe tambm que no final do programa surge a diretiva END, indicando o final do texto do programa. Este END no indica que o programa termina, mas sim que o arquivo onde est escrito o programa termina. Em outras palavras, todo o programa dever possuir a diretiva END no final, mesmo que o programa no tenha fim.

Programao Daniel Corteletti Aula 3 Parte IV

Pgina 6/6

Exerccios : 1. 2. 3. 4. 5. 6. 7. Para que serve a instruo goto que aparece em vrios programas ? Algumas linhas no inicio do programa comeam com um ponto e vrgula. Por que ? Que tipos de informaes so manipuladas por instrues dos microcontroladores PIC? Alguns operandos possuem nomes como PORTC, PORTD, PORTE. O que eles so ? E o que representam ? No programa 4, existe uma linha " movlw 0x03". Em outra linha, aparece " movlw 0xFF". O que significa este operando (parmetro) que comea por um ZERO e um X ? O que faz a instruo GOTO $-1 presente na rotina de tempo? Para que serve a instruo BSF PORTE,2? (qual o efeito na estao CUSCOPIC)

Bom trabalho.

Você também pode gostar