Você está na página 1de 48

Curso PIC 1

Desbravando o PIC
Eng. Diego Camilo Fernandes
Labtools Mosaico Didactic Division

O que fazemos ...







Desenvolvimento de projetos (hardware e software);


Consultoria em engenharia eletrnica e produo;
Servios completos: da idia ao produto;
Treinamentos em microcontroladores;
Elaborao de materiais didticos.

Com quem trabalhamos ...


A Mosaico HPS j desenvolveu projetos com
microcontroladores para diversas reas:







bioengenharia (mdicos / odontologia / esttica);


automao & controle (controladores / indicadores);
instrumentao (sensores);
sistemas de energia (estabilizadores / no breaks);
sistemas de segurana (alarmes);
telecomunicaes (telefonia).

PIC

Programa
Programa

Entradas
Entradas

PIC
PIC

Sa
das
Sadas

As famlias de PIC...

Performance

Desempenho das famlias do PIC

Prog Mem:
Mem:
Data Mem:
Mem:

10Fxxx
10Fxxx
0.75 kBytes
24 Bytes

12Fxxx
12Fxxx
3.5 kBytes
128 Bytes

16Fxxx
16Fxxx

14 kBytes
368 Bytes

Memria

18Fxxxx
18Fxxxx

128 kBytes
3968 Bytes

Arquitetura do microcontrolador


A Microchip adotou a
arquitetura Harvard para a
sua linha de
microcontroladores.
RISC set de instrues
reduzido, a linha 16 possui
35 instrues.
Possui dois tipos de
memria, uma para dados e
outra para instrues.
Barramento de dados
separados para memria de
dados e memria de
programa.

Arquitetura do microcontrolador

Estruturao Interna

Os ciclos de mquina

Mapa da Memria de Programa

Mapa da Memria de Dados

Set
de
instru

es
Instruo
Instruo

[W]
[W]
[F]
[F]
[L]
[L]
[B]
[B]
[T]
[T]
[Z]
[Z]
[S]
[S]
[C]
[C]
[S]
[S]
[f]
[f]
[d]
[d]
[b]
[b]
[k]
[k]

Instruo
Work
Work

Instruo
[ADD]
[ADD]Soma
Soma

File
File(Registrador)
(Registrador)
Literal
Literal

[AND]

[AND]E
E
[CLR]
[CLR] Limpar
Limpar

Bit
Bit
Test
Test

[COM]
[COM]Complementa
Complementa
[DEC]
[DEC] Decrementa
Decrementa

Zero
Zero
Skip
Skip(Pula)
(Pula)

[INC]
[INC] Incrementa
Incrementa
[IOR]

[IOR] OU
OU

Clear
Clear(0)
(0)
Set
Set(1)
(1)

[MOV]
[MOV]Move
Move
[RL]
[RL] Rotaciona
RotacionaEsq.
Esq.

Argumento
Argumento
File
o)
File(Endere
(Endereo)

[RR]
[RR] Rotaciona
RotacionaDir.
Dir.
[SUB]
[SUB] Subtrai
Subtrai

Destino
Destino(W/F)
(W/F)
Bit
mero)
Bit(N
(Nmero)

[SWAP]
[SWAP]Inverte
Inverte
[XOR]
exclusivo
[XOR]OU
OU
exclusivo

Literal
Literal(Valor)
(Valor)

[RET]
[RET] Retornar
Retornar

Comandos em Assembly
Lidando com os dados pg. 85

MOVLW move uma constante (literal) para o


acumulador
Sintaxe:
MOVLW

k ;onde k uma constante

Exemplo:

mover o nmero 10 para o acumulador

MOVLW

10 ;

Comandos em Assembly
Lidando com os dados pg. 85

MOVWF move o contedo do acumulador para um


registrador (ou varivel);
Sintaxe:
MOVWF

f ;onde f um registrador

Exemplo:

mover o nmero 30 para registrador PORTB

MOVLW

30 ;

MOVWF

PORTB ;

Comandos em Assembly
Lidando com os dados pg. 85

MOVF move o contedo de um registrador para o


acumulador ou para o prprio registrador;
Sintaxe:
MOVF

f,d ;onde f um registrador e d o destino


(W ou F)

mover o contedo do registrador PORTB


Exemplo:
para o acumulador
MOVF

PORTB,W ;

Comandos em Assembly
Lidando com os dados pg. 85

CLRF limpa um registrador;


Sintaxe:
CLRF

f ;onde f um registrador

Exemplo:

limpar o registrador PORTB

CLRF

PORTB ;

Comandos em Assembly
Lidando com os dados pg. 85

CLRW limpa o acumulador;


Sintaxe:
CLRW
Exemplo:
CLRW

limpar o acumulador

Comandos em Assembly
Trabalhando com rotinas pg. 91

GOTO desvia o fluxo do programa para um


determinado ponto da memria de programa
Sintaxe:
GOTO

nome ;onde o nome uma identificao


para onde deseja pular.

Exemplo:
GOTO

INICIO ; desvia programa para a label incio.

Comandos em Assembly
Trabalhando com rotinas pg. 91

CALL desvia o fluxo do programa para um determinado


ponto da memria de programa e gasta um nvel de pilha
Sintaxe:
CALL

nome ;onde o nome uma identificao


da rotina.

Exemplo:
CALL

DELAY ; chama a rotina DELAY

Comandos em Assembly
Trabalhando com rotinas pg. 91

RETURN finaliza a execuo de uma rotina voltando ao


ltimo endereo guardado na pilha sem afetar o
acumulador
Sintaxe:
RETURN
Exemplo:
RETURN

Comandos em Assembly
Trabalhando com rotinas pg. 91

RETLW finaliza a execuo de uma rotina voltando ao


ltimo endereo guardado na pilha e com um valor
guardado no acumulador;
Sintaxe:
RETLW

k ; onde k uma constante (literal)

Exemplo:
RETLW
10 ; retorna de uma rotina com o valor 10 no
acumulador

Comandos em Assembly
Tomando decises e fazendo desvios pg. 94
BTFSC testa bit do registrador e pula a prxima linha se
o resultado for 0
Sintaxe:
BTFSC
testado

f,b ; onde f um registrador e b o bit a ser

Exemplo:

testar o bit Z do registrador STATUS

BTFSC

STATUS,Z

GOTO

RESULT_UM

GOTO

RESULT_ZERO

; testa bit Z de STATUS

Comandos em Assembly
Tomando decises e fazendo desvios pg. 94
BTFSS testa bit do registrador e pula a prxima linha se
o resultado for 1
Sintaxe:
BTFSS
testado

f,b ; onde f um registrador e b o bit a ser

Exemplo:

testar o bit 0 do registrador PORTA

BTFSS

PORTA,0

GOTO

RESULT_ZERO

GOTO

RESULT_UM

; testa bit 0 de PORTA

Comandos em Assembly
Tomando decises e fazendo desvios pg. 94
BSF seta um bit do registrador
Sintaxe:
BSF

f,b ; onde f um registrador e b o bit a ser setado

Exemplo:
BSF

setar um o bit 0 do registrador PORTA

PORTA,0

; seta bit 0 de PORTA

Comandos em Assembly
Tomando decises e fazendo desvios pg. 94
BCF limpa um bit do registrador
Sintaxe:
BCF

f,b ; onde f um registrador e b o bit a ser limpado

Exemplo:
BCF

limpar o bit 0 do registrador PORTA

PORTA,0

; limpa bit 0 de PORTA

Comandos em Assembly
Fazendo operaes aritmticas bsicas pg. 101
Somando
INCF incremento unitrio do registrador
Sintaxe:
INCF f,d ; onde f um registrador e d o destino
(W ou F)
Exemplo:
incrementar o registrador PORTB e o
resultado no prprio registrador
INCF PORTB,F

; incremento do PORTB

Comandos em Assembly
Fazendo operaes aritmticas bsicas pg. 101
Somando
INCFSZ incremento unitrio do registrador e pula a
prxima linha se o resultado for igual a zero
Sintaxe:
INCFSZ

f,d ; onde f um registrador e d o destino


(W ou F)

Comandos em Assembly

Exemplo:
incrementar o registrador PORTB e o
resultado no prprio registrador
INCFSZ

PORTB,F

; incremento do PORTB

GOTO

DIF_DE_ZERO

GOTO

IGUAL_A_ZERO

Comandos em Assembly
Fazendo operaes aritmticas bsicas pg. 101
Somando
ADDWF soma o contedo do acumulador ao
registrador.
Sintaxe:
ADDWF

f,d ; onde f um registrador e d o destino


(W ou F)

Comandos em Assembly

Exemplo:
Somar 50 ao contedo do registrador A e
resultado deve ser guardado em A (A = A + 50).
MOVLW

50 ;

move 50 em W

ADDWF

A,F;

soma W em A e resultado em A

Comandos em Assembly

Exemplo:
Somar o contedo do registrador B ao
contedo do registrador A e resultado deve ser guardado
em C (C = A+B).
MOVF

B,W ; move o contedo de B para W

ADDWF

A,W ; soma W com A e resultado em W

MOVWF

C;

move contedo de W em C

Comandos em Assembly
Fazendo operaes aritmticas bsicas pg. 101
Somando
ADDLW soma uma constante ao contedo do
acumulador.
Sintaxe:
ADDLW

k ; onde k uma constante

Exemplo:
Somar 50 ao contedo do registrador
acumulador
ADDLW

50 ;

soma 50 com o contedo de W

Comandos em Assembly
Fazendo operaes aritmticas bsicas pg. 101
Subtraindo
DECF decremento unitrio do registrador
Sintaxe:
DECF f,d ; onde f um registrador e d o destino
(W ou F)
Exemplo:
decrementar o registrador PORTB e o
resultado no prprio registrador
DECF PORTB,F

; incremento do PORTB

Comandos em Assembly
Fazendo operaes aritmticas bsicas pg. 101
Subtraindo
DECFSZ decremento unitrio do registrador e pula a
prxima linha se o resultado for igual a zero
Sintaxe:
DECFSZ

f,d ; onde f um registrador e d o destino


(W ou F)

Comandos em Assembly

Exemplo:
decrementar o registrador PORTB e o
resultado no prprio registrador
DECFSZ

PORTB,F

; decremento do PORTB

GOTO

DIF_DE_ZERO

GOTO

IGUAL_A_ZERO

Comandos em Assembly
Fazendo operaes aritmticas bsicas pg. 101
Subtraindo
SUBWF subtrai o contedo do acumulador ao
registrador.
Sintaxe:
SUBWF

f,d ; onde f um registrador e d o destino


(W ou F)

Comandos em Assembly

Exemplo:
Subtrair 50 ao contedo do registrador A e
resultado deve ser guardado em A (A = A - 50).
MOVLW

50 ;

move 50 em W

SUBWF

A,F;

subtrai W em A e resultado em A
(A = A - W)

Comandos em Assembly

Exemplo:
Subtrair o contedo do registrador B ao
contedo do registrador A e resultado deve ser guardado
em C (C = A-B).
MOVF

B,W ; move o contedo de B para W

SUBWF

A,W ; subtrai W com A e resultado em W


(W = A - W)

MOVWF

C;

move contedo de W em C

Comandos em Assembly
Fazendo operaes aritmticas bsicas pg. 101
Subtraindo
SUBLW subtrai uma constante ao contedo do
acumulador.
Sintaxe:
SUBLW

k ; onde k uma constante (W = k - W)

Exemplo:

subtrair 50 ao contedo do acumulador

SUBLW

50 ;

subtrai 50 do contedo de W

Comandos em Assembly
Comparando pg. 105
Com as operaes aritmticas, especialmente a
subtrao conseguimos realizar comparaes como
maior que menor que igual
Exemplo 1 - comparar se X >= 50
MOVF

X,W

; move X para o acumulador

SUBLW

50

; W = 50 - W

BTFSC

STATUS,C

; testa o bit C de STATUS

GOTO

MAIOR_IG

; se X >= 50 (result. negativo)

GOTO

MENOR

; se X < 50 (result. positivo)

Comandos em Assembly
Comparando pg. 105
Exemplo 2 - comparar se X = 50
MOVF

X,W

; move X para o acumulador

SUBLW

50

; W = 50 - W

BTFSS

STATUS,Z

; testa o bit Z de STATUS

GOTO

DIFERENTE ; se X != 50

GOTO

IGUAL

; se X = 50

Comandos em Assembly
Comparando pg. 105
Exemplo 3 - comparar se X > Y
MOVF

X,W

; move X para o acumulador

SUBWF

Y,W

;W=Y-W

BTFSC

STATUS,C

; testa o bit C de STATUS

GOTO

MENOR

; se X < Y (result. negativo)

BTFSS

STATUS,Z

; testa o bit Z de STATUS

GOTO

MAIOR

; se X > Y (result. positivo)

GOTO

IGUAL

; se X = Y

(result. zero)

Comandos em Assembly
Fazendo operaes aritmticas bsicas pg. 101
Multiplicando
27

26

25

24

23

22

21

20

Comandos em Assembly
Fazendo operaes aritmticas bsicas pg. 101
Multiplicando
RLF Rotaciona o registrador esquerda
Sintaxe:
RLF

f,d ; onde f um registrador e d o destino


(W ou F)

Exemplo: Multiplicar o registrador X por 2


BCF

STATUS,C

RLF

X,F

;multiplica por 2 (X = X * 2)

Comandos em Assembly
Fazendo operaes aritmticas bsicas pg. 101
Dividindo
27

26

25

24

23

22

21

20

Comandos em Assembly
Fazendo operaes aritmticas bsicas pg. 101
Dividindo
RRF Rotaciona o registrador direita
Sintaxe:
RRF f,d ; onde f um registrador e d o destino
(W ou F)
Exemplo: Dividir o registrador X por 2
BCF

STATUS,C

RRF X,F

;multiplica por 2 (X = X / 2)

Você também pode gostar