Você está na página 1de 69

Curso PIC 1

Daniel Rodrigues de Sousa


LabTools – Mosaico Didactic Division
CURSO PIC 1 Slide 1
CURSO PIC 1 Slide 2
O que fazemos ...

 Desenvolvimento de projetos (hardware e software);


 Consultoria em engenharia eletrônica e produção;
 Serviços completos: da idéia ao produto;

CURSO PIC 1 Slide 3


O que fazemos ...

 Treinamento em microcontroladores;
 Elaboração e venda de materiais didáticos;

CURSO PIC 1 Slide 4


Com quem trabalhamos ...
A Mosaico HPS já desenvolveu projetos com
microcontroladores para diversas áreas:

 bioengenharia (médicos / odontologia / estética);


 automação & controle (controladores / indicadores);
 instrumentação (sensores);
 sistemas de energia (estabilizadores / no breaks);
 sistemas de segurança (alarmes);
 telecomunicações (telefonia).

CURSO PIC 1 Slide 5


O Conceito
“A Eletrônica é uma forma de
transformarmos idéias em realidade.”

“Os microcontroladores são ferramentas


para tornar este trabalho mais fácil.”

“O ensino moderno é o meio de acesso


à estas ferramentas.”

CURSO PIC 1 Slide 6


PIC

Programa
Programa

Entradas
Entradas PIC
PIC Saídas
Saídas

CURSO PIC 1 Slide 7


As famílias de PIC...

CURSO PIC 1 Slide 8


Desempenho das famílias do PIC

Performance

18Fxxxx
18Fxxxx
16Fxxx
16Fxxx
12Fxxx
12Fxxx
10Fxxx
10Fxxx

Prog Mem:
Mem: 0.75 kBytes 3.5 kBytes 14 kBytes 128 kBytes
Data Mem:
Mem: 24 Bytes 128 Bytes 368 Bytes 3968 Bytes

Memória

CURSO PIC 1 Slide 9


Arquitetura do microcontrolador
 A Microchip adotou a
arquitetura Harvard para a
sua linha de
microcontroladores.
 RISC – set de instruções
reduzido, a linha 16 possui
35 instruções.
 Possui dois tipos de
memória, uma para dados e
outra para instruções.
 Barramento de dados
separados para memória de
dados e memória de
programa.

CURSO PIC 1 Slide 10


Arquitetura do microcontrolador

CURSO PIC 1 Slide 11


Estruturação Interna

CURSO PIC 1 Slide 12


Os ciclos de máquina

CURSO PIC 1 Slide 13


Mapa da Memória de Programa

CURSO PIC 1 Slide 14


Mapa da Memória de Dados

CURSO PIC 1 Slide 15


Set de instruções
Instrução
Instrução Instrução
Instrução
•[W] Work •[ADD]
•[W] Work •[ADD]Soma
Soma
•[F] File
File(Registrador) •[AND]
•[F] (Registrador) •[AND]“E”
“E”
•[L] Literal •[CLR]
•[L] Literal •[CLR] Limpar
Limpar
•[B] Bit •[COM]
•[B] Bit •[COM]Complementa
Complementa
•[T] Test •[DEC]
•[T] Test •[DEC] Decrementa
Decrementa
•[Z] Zero •[INC]
•[Z] Zero •[INC] Incrementa
Incrementa
•[S] Skip
Skip(Pula) •[IOR]
•[S] (Pula) •[IOR] “OU”
“OU”
•[C] Clear
Clear(0) •[MOV]
•[C] (0) •[MOV]Move
Move
•[S] Set
Set(1) •[RL]
•[S] (1) •[RL] Rotaciona
RotacionaEsq.
Esq.
Argumento •[RR]
Argumento •[RR] Rotaciona
RotacionaDir.
Dir.
•[f] File
File(Endereço) •[SUB]
•[f] (Endereço) •[SUB] Subtrai
Subtrai
•[d] Destino
Destino(W/F) •[SWAP]
•[d] (W/F) •[SWAP]Inverte
Inverte
•[b] Bit
Bit(Número) •[XOR]
•[b] (Número) •[XOR]“OU”
“OU”exclusivo
exclusivo
•[k] Literal
Literal(Valor) •[RET]
CURSO PIC 1
•[k] (Valor)
Slide 16
•[RET] Retornar
Retornar
Configurando o MPLAB

CURSO PIC 1 Slide 17


Comandos em Assembly
Lidando com os dados – pág. 85

MOVLW – move uma constante (literal) para o


acumulador
Sintaxe:
MOVLW k ;onde k é uma constante
Exemplo: mover o número 10 para o acumulador
MOVLW .10 ;

CURSO PIC 1 Slide 18


Comandos em Assembly
Lidando com os dados – pág. 85

MOVWF – move o conteúdo do acumulador para um


registrador (ou variável);
Sintaxe:
MOVWF f ;onde f é um registrador
Exemplo: mover o número 30 para registrador PORTB
MOVLW .30 ;
MOVWF PORTB ;

CURSO PIC 1 Slide 19


Comandos em Assembly
Lidando com os dados – pág. 85

MOVF – move o conteúdo de um registrador para o


acumulador ou para o próprio registrador;
Sintaxe:
MOVF f,d ;onde f é um registrador e d o destino
(W ou F)
Exemplo: mover o conteúdo do registrador PORTB
para o acumulador
MOVF PORTB,W ;

CURSO PIC 1 Slide 20


Comandos em Assembly
Lidando com os dados – pág. 85

CLRF – limpa um registrador;


Sintaxe:
CLRF f ;onde f é um registrador
Exemplo: limpar o registrador PORTB
CLRF PORTB ;

CURSO PIC 1 Slide 21


Comandos em Assembly
Lidando com os dados – pág. 85

CLRW – limpa o acumulador;


Sintaxe:
CLRW
Exemplo: limpar o acumulador
CLRW

CURSO PIC 1 Slide 22


Comandos em Assembly
Trabalhando com rotinas – pág. 91

GOTO – desvia o fluxo do programa para um


determinado ponto da memória de programa
Sintaxe:
GOTO nome ;onde o nome é uma identificação
para onde deseja pular.
Exemplo:
GOTO INICIO ; desvia programa para a label início.

CURSO PIC 1 Slide 23


Comandos em Assembly
Trabalhando com rotinas – pág. 91

CALL – desvia o fluxo do programa para um determinado


ponto da memória de programa e gasta um nível de pilha
Sintaxe:
CALL nome ;onde o nome é uma identificação
da rotina.
Exemplo:
CALL DELAY ; chama a rotina DELAY

CURSO PIC 1 Slide 24


Comandos em Assembly
Trabalhando com rotinas – pág. 91

RETURN – finaliza a execução de uma rotina voltando ao


último endereço guardado na pilha sem afetar o
acumulador
Sintaxe:
RETURN
Exemplo:
RETURN

CURSO PIC 1 Slide 25


Comandos em Assembly
Trabalhando com rotinas – pág. 91

RETLW – finaliza a execução de uma rotina voltando ao


último endereço 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

CURSO PIC 1 Slide 26


Comandos em Assembly
Tomando decisões e fazendo desvios – pág. 94
BTFSC – testa bit do registrador e pula a próxima linha se
o resultado for 0
Sintaxe:
BTFSC f,b ; onde f é um registrador e b o bit a ser
testado
Exemplo: testar o bit Z do registrador STATUS
BTFSC STATUS,Z ; testa bit Z de STATUS
GOTO RESULT_UM
GOTO RESULT_ZERO

CURSO PIC 1 Slide 27


Comandos em Assembly
Tomando decisões e fazendo desvios – pág. 94
BTFSS – testa bit do registrador e pula a próxima linha se
o resultado for 1
Sintaxe:
BTFSS f,b ; onde f é um registrador e b o bit a ser
testado
Exemplo: testar o bit 0 do registrador PORTA
BTFSS PORTA,0 ; testa bit 0 de PORTA
GOTO RESULT_ZERO
GOTO RESULT_UM

CURSO PIC 1 Slide 28


Comandos em Assembly
Tomando decisões e fazendo desvios – pág. 94
BSF – seta um bit do registrador
Sintaxe:
BSF f,b ; onde f é um registrador e b o bit a ser setado
Exemplo: setar um o bit 0 do registrador PORTA
BSF PORTA,0 ; seta bit 0 de PORTA

CURSO PIC 1 Slide 29


Comandos em Assembly
Tomando decisões e fazendo desvios – pág. 94
BCF – limpa um bit do registrador
Sintaxe:
BCF f,b ; onde f é um registrador e b o bit a ser limpado
Exemplo: limpar o bit 0 do registrador PORTA
BCF PORTA,0 ; limpa bit 0 de PORTA

CURSO PIC 1 Slide 30


Exemplo 1 – botão e LED

CURSO PIC 1 Slide 31


Comandos em Assembly
Fazendo operações aritméticas básicas – pág. 101
Somando
INCF – incremento unitário 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 próprio registrador
INCF PORTB,F ; incremento do PORTB

CURSO PIC 1 Slide 32


Comandos em Assembly
Fazendo operações aritméticas básicas – pág. 101
Somando
INCFSZ – incremento unitário do registrador e pula a
próxima linha se o resultado for igual a zero
Sintaxe:
INCFSZ f,d ; onde f é um registrador e d o destino
(W ou F)

CURSO PIC 1 Slide 33


Comandos em Assembly

Exemplo: incrementar o registrador PORTB e o


resultado no próprio registrador
INCFSZ PORTB,F ; incremento do PORTB
GOTO DIF_DE_ZERO
GOTO IGUAL_A_ZERO

CURSO PIC 1 Slide 34


Comandos em Assembly
Fazendo operações aritméticas básicas – pág. 101
Somando
ADDWF – soma o conteúdo do acumulador ao
registrador.
Sintaxe:
ADDWF f,d ; onde f é um registrador e d o destino
(W ou F)

CURSO PIC 1 Slide 35


Comandos em Assembly

Exemplo: Somar 50 ao conteúdo 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

CURSO PIC 1 Slide 36


Comandos em Assembly

Exemplo: Somar o conteúdo do registrador B ao


conteúdo do registrador A e resultado deve ser guardado
em C (C = A+B).
MOVF B,W ; move o conteúdo de B para W
ADDWF A,W ; soma W com A e resultado em W
MOVWF C; move conteúdo de W em C

CURSO PIC 1 Slide 37


Comandos em Assembly
Fazendo operações aritméticas básicas – pág. 101
Somando
ADDLW – soma uma constante ao conteúdo do
acumulador.
Sintaxe:
ADDLW k ; onde k é uma constante
Exemplo: Somar 50 ao conteúdo do registrador
acumulador
ADDLW .50 ; soma 50 com o conteúdo de W

CURSO PIC 1 Slide 38


Comandos em Assembly
Fazendo operações aritméticas básicas – pág. 101
Subtraindo
DECF – decremento unitário 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 próprio registrador
DECF PORTB,F ; incremento do PORTB

CURSO PIC 1 Slide 39


Comandos em Assembly
Fazendo operações aritméticas básicas – pág. 101
Subtraindo
DECFSZ – decremento unitário do registrador e pula a
próxima linha se o resultado for igual a zero
Sintaxe:
DECFSZ f,d ; onde f é um registrador e d o destino
(W ou F)

CURSO PIC 1 Slide 40


Comandos em Assembly

Exemplo: decrementar o registrador PORTB e o


resultado no próprio registrador
DECFSZ PORTB,F ; decremento do PORTB
GOTO DIF_DE_ZERO
GOTO IGUAL_A_ZERO

CURSO PIC 1 Slide 41


Comandos em Assembly
Fazendo operações aritméticas básicas – pág. 101
Subtraindo
SUBWF – subtrai o conteúdo do acumulador ao
registrador.
Sintaxe:
SUBWF f,d ; onde f é um registrador e d o destino
(W ou F)

CURSO PIC 1 Slide 42


Comandos em Assembly

Exemplo: Subtrair 50 ao conteúdo 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)

CURSO PIC 1 Slide 43


Comandos em Assembly

Exemplo: Subtrair o conteúdo do registrador B ao


conteúdo do registrador A e resultado deve ser guardado
em C (C = A-B).
MOVF B,W ; move o conteúdo de B para W
SUBWF A,W ; subtrai W com A e resultado em W
(W = A - W)
MOVWF C; move conteúdo de W em C

CURSO PIC 1 Slide 44


Comandos em Assembly
Fazendo operações aritméticas básicas – pág. 101
Subtraindo
SUBLW – subtrai uma constante ao conteúdo do
acumulador.
Sintaxe:
SUBLW k ; onde k é uma constante (W = k - W)
Exemplo: subtrair 50 ao conteúdo do acumulador
SUBLW .50 ; subtrai 50 do conteúdo de W

CURSO PIC 1 Slide 45


Comandos em Assembly
Comparando – pág. 105
Com as operações aritméticas, especialmente a
subtração conseguimos realizar comparações como
maior que menor que é igual
Exemplo 1 - comparar se X ≥ 50
MOVLW .50 ; move 50 para o acumulador
SUBWF X,W ;W=X-W
BTFSS STATUS,C ; testa o bit C de STATUS
GOTO MENOR ; se X < 50 (result. negativo)
GOTO MAIOR_IG ; se X ≥ 50 (result. positivo)

CURSO PIC 1 Slide 46


Comandos em Assembly
Comparando – pág. 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

CURSO PIC 1 Slide 47


Comandos em Assembly
Comparando – pág. 105
Exemplo 3 - comparar se X > Y
MOVF Y,W ; move Y para o acumulador
SUBWF X,W ;W=X-W
BTFSS 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)

CURSO PIC 1 Slide 48


Comandos em Assembly
Fazendo operações aritméticas básicas – pág. 101
Multiplicando

Conta: 5 x 2 = 10

CURSO PIC 1 Slide 49


Comandos em Assembly
Fazendo operações aritméticas básicas – pág. 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)

CURSO PIC 1 Slide 50


Comandos em Assembly
Fazendo operações aritméticas básicas – pág. 101
Dividindo

Conta: 13 : 2 = 6 (resto 1)

CURSO PIC 1 Slide 51


Comandos em Assembly
Fazendo operações aritméticas básicas – pág. 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 ;divide por 2 (X = X : 2)

CURSO PIC 1 Slide 52


Comandos em Assembly

Exemplo 2 – contador simplificado

CURSO PIC 1 Slide 53


Comandos em Assembly
Trabalhando diretamente com bytes – pág. 113

A B A.B A+B A⊕B


0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0

CURSO PIC 1 Slide 54


Comandos em Assembly
Trabalhando diretamente com bytes – pág. 113
E
ANDWF – Operação “E” entre dois bytes
Sintaxe:
ANDWF f,d ; onde f é um registrador e d o destino
(W ou F)
Exemplo: Fazer A = A . B;
MOVF B,W ; mover B para W
ANDWF A,F ; A = A . W (A = A . B)

CURSO PIC 1 Slide 55


Comandos em Assembly
Trabalhando diretamente com bytes – pág. 113
E
ANDLW – Operação “E” entre o W e uma constante
Sintaxe:
ANDLW k ; onde k é uma constante
Exemplo: Fazer W = W . B’11110000’;
ANDLW B’11110000’

CURSO PIC 1 Slide 56


Comandos em Assembly
Trabalhando diretamente com bytes – pág. 113
OU
IORWF – Operação “OU” entre dois bytes
Sintaxe:
IORWF f,d ; onde f é um registrador e d o destino
(W ou F)
Exemplo: Fazer W = A + B;
MOVF B,W ; mover B para W
IORWF A,W ;W=A+W

CURSO PIC 1 Slide 57


Comandos em Assembly
Trabalhando diretamente com bytes – pág. 113
OU
IORLW – Operação “OU” entre o W e uma constante
Sintaxe:
IORLW k ; onde k é uma constante
Exemplo: Fazer W = W + B’00001111’;
IORLW B’00001111’

CURSO PIC 1 Slide 58


Comandos em Assembly
Trabalhando diretamente com bytes – pág. 113
XOR
XORWF – Operação “XOR” entre dois bytes
Sintaxe:
XORWF f,d ; onde f é um registrador e d o destino
(W ou F)
Exemplo: Fazer PORTA = A ⊕ B;
MOVF B,W ; mover B para W
XORWF A,W ;W=A⊕W
MOVWF PORTA

CURSO PIC 1 Slide 59


Comandos em Assembly
Trabalhando diretamente com bytes – pág. 113
XOR
XORLW – Operação “XOR” entre o W e uma constante
Sintaxe:
XORLW k ; onde k é uma constante
Exemplo: Fazer W = W ⊕ b’11110000’;
XORLW B’11110000’

CURSO PIC 1 Slide 60


Comandos em Assembly
Trabalhando diretamente com bytes – pág. 113
COMF
COMF – Faz o complemento de um registrador
Sintaxe:
COMF f,d ; onde f é um registrador e d o destino
(W ou F)
Exemplo: Fazer PORTA = A;
COMF A,W ; complementa A
MOVWF PORTA ; move resultado

CURSO PIC 1 Slide 61


Comandos em Assembly
Trabalhando diretamente com bytes – pág. 113
SWAPF

CURSO PIC 1 Slide 62


Comandos em Assembly
Trabalhando diretamente com bytes – pág. 113
SWAPF
SWAPF – Troca os nibbles de um registrador
Sintaxe:
SWAPF f,d ; onde f é um registrador e d o destino
(W ou F)
Exemplo: Trocar os nibbles do registrador A
SWAPF A,F ;

CURSO PIC 1 Slide 63


Interrupções
 Interrupção externa
 Interrupção por mudança de estado
 Interrupção de transmissão da USART
 Interrupção de recepção da USART
 Interrupção do CCP1 (Compare, Capture)
 Interrupção dos Comparadores
 Interrupção de TMR0
 Interrupção de TMR1
 Interrupção de TMR2
 Interrupção de fim de escrita na memória EEPROM

CURSO PIC 1 Slide 64


Lógica de interrupção

CURSO PIC 1 Slide 65


CURSO PIC 1 Slide 66
Interrupções

CURSO PIC 1 Slide 67


Timer 0

CURSO PIC 1 Slide 68


Timer 0

CURSO PIC 1 Slide 69

Você também pode gostar