Escolar Documentos
Profissional Documentos
Cultura Documentos
Criando um Programa
Estruturando o Código-Fonte:
Esta, no entanto, é um pouco mais poderosa que a EQU, pelo fato de que
ela não substitui nomes somente por números, mas sim por expressões
inteiras.
Constantes e Definições: EQU e DEFINES
Essa diretriz é comumente utilizada para definirmos os pinos
de entrada e saída do sistema.
Por exemplo:
#DEFINE LED PORTB,1
Constantes e Definições: EQU e DEFINES
LED é o nome da definição, e PORTB,1 é o que será
considerado toda vez que o nome for utilizado durante o
programa.
Caso esse LED seja alterado para o pino RB2, basta alterarmos
o #DEFINE, sem precisarmos modificar o código inteiro.
Exemplo 0 - Estruturação
Vejamos agora um exemplo de estruturação completa.
Exemplo 0 – Estruturação
Arquivo EX0.ASM
Exemplo 0 - Estruturação
Algumas novas diretrizes de compilação aparecem no exemplo e
devem ser explicadas:
ORG:
Trata-se de um direcionamento para a posição de memória de
programação.
Observe que, como o vetor de reset do PIC16F628A é o endereço 0x00,
antes da escrita da primeira instrução é dada a diretriz ORG 0x00, para
que o programa comece neste ponto.
Logo em seguida, um pulo é dado para uma rotina localizada bem mais
à frente (GOTO INICIO).
Isso é necessário porque no endereço 0x00 deve ser iniciada a rotina de
interrupção.
Para tal, uma nova diretriz é especificada: ORG 0x04.
Exemplo 0 - Estruturação
END:
Essa diretriz deve ser sempre colocada ao final do programa,
pois, quando o compilador encontrá-la, a compilação será
terminada.
CBLOCK e ENDC:
É uma maneira simplificada de definirmos vários EQUs com
endereços sequenciais.
Observe que utilizamos esse recurso na definição das variáveis
do sistema, mas precisamos informar somente o endereço da
primeira variável (CBLOCK 0x20).
As demais são definidas na sequencia.
Trabalhando com a Memória
O objetivo deste tópico se refere a como guardar e
recuperar valores e também movê-los de um lugar para
outro.
Partindo dessa premissa e com o objetivo de tornar essa tarefa mais fácil, criamos dois
comandos virtuais chamados BANK0 E BANK1, que são definidos no arquivo modelo da
seguinte maneira:
#DEFINE BANK0 BCF STATUS, RP0 ;SETA BANK 0 DE MEMÓRIA
#DEFINE BANK1 BSF STATUS, RP0 ;SETA BANK 1 DE MEMÓRIA
Trabalhando com a Memória
Assim sendo, quando escrevemos BANK0, na verdade mandamos limpar o bit
RP0 do registrador STATUS; e quando escrevemos BANK1, mandamos setar este
mesmo bit.
É recomendado, no entanto, que após efetuada as alterações necessárias no
banco 1 o sistema retorne sempre para o banco 0.
Por exemplo, observe como foram ajustados alguns registradores do banco 1
no arquivo modelo:
Trabalhando com a Memória
Caso os comando BANK0 e BANK1 não existissem, o sistema ficaria assim:
Trabalhando com a Memória
Lidando com Dados (MOVLW, MOVWF, MOVF, CLRF E CLRW):
Os comandos mais utilizados no PIC são:
MOVLW = move (MOV) uma literal (L) para o registrador work (W).
MOVWF = move (MOV) o valor de work (W) para um registrador (F).
MOVF = move (MOV) o valor de um registrador (F) par um local de destino passado como
argumento (f ou w).
Por exemplo, veja como fica o código para escrevermos em TEMPO2 o mesmo valor
existente em TEMPO1:
MOVF TEMPO1,W ;MOVE O VALOR DE TEMPO 1 PARA O W (WORK)
MOVWF TEMPO2 ;MOVE O VALOR DE W (TEMPO1) PARA TEMPO2
Para limparmos um registrador, poderíamos mover 0 (zero) para ele, mas uma
operação de movimento de um número para um registrador exige duas instruções
(MOVLW e MOVWF), e portanto, dois ciclos de máquina.
Instruções
diversas ROT
Instruções
CALL ROT diversas
Instruções RETURN
diversas
GOTO MAIN
Trabalhando com Rotinas
Rotinas de desvio:
Desta forma, a rotina pode ser usada como uma função, que é
chamada de diversos pontos do programa sem gerar
problemas.
BTFSC = testa (T) o bit (B) do registrador (F) e pula (S) a próxima
linha se a resposta for 0 (C).
BTFSS = testa (T) o bit (B) do registrador (F) e pula (S) a próxima
linha se a resposta for 1 (S).
Tomando Decisões e Fazendo Desvios
As sintaxes dessas instruções são:
Uma porta pode ser lida de duas maneiras: como um conjunto, isto é,
todos os seus pinos de uma só vez, ou individualmente.
Então para sabermos qual valor está escrito no PORTB, basta lê-lo
integralmente:
No caso dos pinos do tipo saída, vamos ler o valor imposto pelo
próprio PIC.
Trabalhando com as Portas
A cada pino das portas é associada uma chave interna (latch) que é alterada toda
vez que escrevemos em um desses pinos.
Se o pino estiver configurado como saída, então seu estado também é afetado,
mas se ele for uma entrada, então só o latch é afetado.