HOME     VOLTAR

Microcontrolador PIC

Diferença básica entre as arquiteturas Sisc e Risc.

 

1)   Arquitetura Von Newman (SISC)

            

 

2) Arquitetura Harward (RISK)

                         

Obs: W = work ou acumulador.

Memória

O modelo estudado aqui é o PIC 16F628, muito semelhante ao PIC 16F84, a pinagem é a mesma porém alguns pinos possuem mais funções e possui 2K de memória, o dobro do PIC 16F84 que é somente de 1K. Veja figura abaixo:

A) Memória de Programa do PIC 16F84

 

B) Memória de Programa do PIC 16F628 e 627

Memória de Dados

Ciclo de Máquina

Nos microcontroladores da linha PIC, o sinal de clock externo, é dividido internamente por 4. Assim se tivermos um cristal de 4MHz, o clock internamente será de 1MHz e conseqüentemente o ciclo de máquina será de 1uS.

A divisão por 4 do clock forma 4 fases: Q1, Q2, Q3 e Q4, assim o contador de programa é incrementado automaticamente na fase Q1 e a próxima instrução é buscada na memória de programa e armazenada no registrador de instruções. Este procedimento de funcionamento é conhecido como PIPELINE. Simplificando Q1 faz a busca e verifica a próxima tarefa e de Q2 a Q4 executa-se a tarefa atual.

Exemplo:  (Pipeline – Q1 Q2 Q3 Q4 = 1 ciclo de máquina)

Cristal de 4MHz / 4 = 1MHz assim t =1/1MHz = 1uS.

 

Estudo da origem das Instruções

W

Work

acumulador

F

File (registrador)

8 bits (0 a 255)

K

Constante

Literal

d

Destino

Work ou File

B

Bit

 

T

Teste

 

S

Skip

salto

S

Set

Nível alto

C

Clear

Nível baixo

Z

Zero

Se registrador = 0

 

 

 

Exemplo de como ler uma instrução:

BTFSC      botao1   (Bit test file skip clear)

Testa se botao1 = 0, se for zero salta uma linha, se for um prossegue o programa na seqüência, sem saltar.

 

Operações Lógicas e Aritméticas.

 

ADD

Soma

 

AND

Função E

 

CLR

Limpa  registrador

 

COM

Complemento

 

DEC

Decrementa

Faz menos 1

INC

Incrementa

Soma 1

IOR

Função OU

 

MOV

Movimento

 

RL

Rotação a esquerda

 

RR

Rotação à direita

 

SUB

Subtração

 

XOR

OU exclusivo

 

 

 

Representação Numérica.

Para que o compilador do programa entenda qual a base numérica você está usando você devemos seguir os modelos abaixo.

Decimal – D’XX’ ou .XX

Hexadecimal – H’XX’ou 0xYY

Binário – B’11111111’

ASCII – A´A´

Soma:

INCF       F,d 

INCFSZ   F,d

ADDLW   K

ADDWF   F,d

 

Exemplos:

INCF   contador,F 

(faz contador = contador + 1)

INCFSZ   contador,f 

(quando contador for zero salta uma linha)

MOVLW   .10

ADDWF   soma,W

MOVWF   resultado

(soma o valor de W com a variável soma e guarda em resultado)

ADDLW   .10

(soma o valor literal 10 com o Work e o resultado fica guardado no Work)

 

Subtração:

DECF       F,d

DECFSZ   F,d

SUBWF    K

SUBLW    F,d

 

DECF   teste,F

(subtrai o arquivo teste de uma unidade)

 

DECF   teste,W

(subtrai o valor de Work em uma unidade)

SUBWF   aux,W

(faz o arquivo auxiliar menos o Work e guarda o resultado em Work)

 

SUBWF   aux,F

(faz o arquivo auxiliar menos o Work e guarda o valor em aux)

 

Multiplicação:

RLF   F,d

(rotacionamos o arquivo F um bit a esquerda, isso é igual a multiplicar por dois)

Obs: afeta o carry, o comando (BCF  status,C) limpa o carry.

Divisão:

RRF   F,d

(rotacionamos o arquivo F um bit a direita, isso é igual a dividirmos por 2)

Obs: afeta o carry.

 

Como definir uma variável.

V_Max   EQU .255

#Define  V_Max .255

Nos dois exemplos acima colocamos o valor 255(decimal) na variável V_Max

 

Criando Flags.

Flag pode ser entendido como um bit de sinalização.

 

#Define   Estado   Flag,0

#Define   Inicio     Flag,1

Se fizermos BSF  Estado, estaremos colocando o nosso Flag 0 em nível alto, e se fizermos BCF  Estado, estaremos colocando nosso Flag 0 em nível baixo.

Operações Booleanas  

Função ‘E’

ANDLW   K

ANDWF   file,d

 

Função ‘OU’

IORLW   K

IORWF   file,d

 

Função ‘OU exclusivo’

XORLW   K

XORWF   file,d

 

Complemento

COMF   f,d

(faz o complemento dos bits ou seja inverte seus valores, o que era um passa a ser zero e vice-versa)

 

SWAPF

SWAPF   F,d

(inverte os nibbles da parte alta com a parte baixa do byte contido em F)

 

Saltos

GOTO $ (fica preso nele mesmo)

GOTO $-1 (volta uma linha)

GOTO $+1 (avança uma linha)

GOTO inicio (salta para o label inicio)

Contando tempo no PIC

Com uso de TMR0 (contador de 8 bits que é implementado pelo ciclo de máquina).

Exemplo: se tivermos um cristal de 4MHz/4 = 1MHz

T= 1/F = 1uS cada ciclo de máquina, se o prescaler estiver setado em 1:1, o prescaler pode ser ajustado no registrador Option.

CM – ciclo de máquina

PS  - Prescaler

Ajustando o tempo do TMR0 para 1mS

 

CM

PS

TMR0

TEMPO

Prescaler

1uS

4

250

1000uS

1:4

 

Ex.

MOVLW   .256 - .250

MOVWF   TMR0

Contagem de tempo sem TMR0

Supondo o mesmo cristal utilizado no exemplo anterior, assim temos um ciclo de máquina de 1uS.

 

Tempo

        MOVLW   .250

        MOVWF   temp

DL1

        NOP

        DECFSZ   temp,f

        GOTO      DL1

        RETURN

 

Obs: a instrução NOP não faz nada só gasta um ciclo de máquina.

 

No exemplo acima, em DL1 os comandos NOP e DECFSZ gastam 1 ciclo de máquina cada e o comando GOTO gasta 2 ciclos de máquina. Assim temos 4 ciclos de máquina gastos no total multiplicado pelo valor contido em temp que inicialmente é 250 temos 1000uS.

 

Obs: A desvantagem desse modo de contar tempo é que o microcontrolador fica parado, serve somente para algumas aplicações e é recomendado seu uso em torno de alguns uS a mS.

 

Sub-rotinas

A sub-rotina é chamada pela instrução CALL e seu retorno é feito pela instrução RETURN.

Exemplo:

 

CALL   TEMPO (chama uma sub-rotina de nome tempo)

             NOP

             NOP

             RETURN (retorna a execução do programa principal)

 

Outros comandos

CLRW (limpa o Work)

CLRWDT (limpa o Watch Dog Timer para não resetar o PIC)

RETFIE (retorna de uma sub-rotina de interrupção)

CLRF (limpa o registrador F)

 

Pinagem do PIC 16F627/628

          

 

Características Elétricas

Links

www.microchip.com

www.mosaico-eng.com.br

www.vidal.com.br

www.artimar.com.br

 HOME     VOLTAR