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.
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
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