curso de pic da labtools – mosaico didactic division

48
Curso PIC 1 Curso PIC 1 Desbravando o PIC Desbravando o PIC Eng. Diego Camilo Fernandes Labtools – Mosaico Didactic Division

Upload: nando

Post on 14-Jun-2015

1.079 views

Category:

Documents


14 download

DESCRIPTION

A Microchip adotou aarquitetura Harvard para asua linha demicrocontroladores. RISC – set de instruçõesreduzido, a linha 16 possui35 instruções. Possui dois tipos dememória, uma para dados eoutra para instruções. Barramento de dadosseparados para memória dedados e memória deprograma.

TRANSCRIPT

Page 1: Curso de PIC da Labtools – Mosaico Didactic Division

Curso PIC 1Curso PIC 1

Desbravando o PICDesbravando o PIC

Eng. Diego Camilo Fernandes

Labtools – Mosaico Didactic Division

Page 2: Curso de PIC da Labtools – Mosaico Didactic Division
Page 3: Curso de PIC da Labtools – Mosaico Didactic Division

O que fazemos ...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;

� Treinamentos em microcontroladores;

� Elaboração de materiais didáticos.

Page 4: Curso de PIC da Labtools – Mosaico Didactic Division

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

Com quem trabalhamos ...Com quem trabalhamos ...

Page 5: Curso de PIC da Labtools – Mosaico Didactic Division

PICPIC

EntradasEntradasEntradas SaídasSaSaíídasdasPICPICPIC

ProgramaProgramaPrograma

Page 6: Curso de PIC da Labtools – Mosaico Didactic Division

As famAs famíílias de PIC...lias de PIC...

Page 7: Curso de PIC da Labtools – Mosaico Didactic Division

Desempenho das famDesempenho das famíílias do PIClias do PIC

16Fxxx16Fxxx16Fxxx

10Fxxx10Fxxx10Fxxx 12Fxxx12Fxxx12Fxxx

18Fxxxx18Fxxxx18Fxxxx

0.75 kBytes0.75 kBytes

24 Bytes24 Bytes3.5 kBytes3.5 kBytes

128 Bytes128 Bytes14 kBytes14 kBytes

368 Bytes368 Bytes128 kBytes128 kBytes

3968 Bytes3968 BytesProgProg MemMem::

Data Data MemMem::

Pe

rform

ance

Pe

rform

ance

MemMemóóriaria

Page 8: Curso de PIC da Labtools – Mosaico Didactic Division

Arquitetura do Arquitetura do microcontroladormicrocontrolador

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

Page 9: Curso de PIC da Labtools – Mosaico Didactic Division

Arquitetura do Arquitetura do microcontroladormicrocontrolador

Page 10: Curso de PIC da Labtools – Mosaico Didactic Division

EstruturaEstruturaçção Internaão Interna

Page 11: Curso de PIC da Labtools – Mosaico Didactic Division

Os ciclos de mOs ciclos de mááquinaquina

Page 12: Curso de PIC da Labtools – Mosaico Didactic Division

Mapa da MemMapa da Memóória de Programaria de Programa

Page 13: Curso de PIC da Labtools – Mosaico Didactic Division

Mapa da MemMapa da Memóória de Dadosria de Dados

Page 14: Curso de PIC da Labtools – Mosaico Didactic Division

Set de instruSet de instruççõesõesInstrução

•[W] Work

•[F] File (Registrador)

•[L] Literal

•[B] Bit

•[T] Test

•[Z] Zero

•[S] Skip (Pula)

•[C] Clear (0)

•[S] Set (1)

Argumento

•[f] File (Endereço)

•[d] Destino (W/F)

•[b] Bit (Número)

•[k] Literal (Valor)

InstruInstruççãoão

••[W][W] WorkWork

••[F][F] File (Registrador)File (Registrador)

••[L][L] LiteralLiteral

••[B][B] BitBit

••[T][T] TestTest

••[Z][Z] ZeroZero

••[S][S] SkipSkip (Pula) (Pula)

••[C][C] ClearClear (0)(0)

••[S][S] Set (1)Set (1)

ArgumentoArgumento

••[f][f] File (EndereFile (Endereçço)o)

••[d][d] Destino (W/F)Destino (W/F)

••[b][b] Bit (NBit (Núúmero)mero)

••[k][k] Literal (Valor)Literal (Valor)

Instrução

•[ADD] Soma

•[AND] “E”

•[CLR] Limpar

•[COM] Complementa

•[DEC] Decrementa

•[INC] Incrementa

•[IOR] “OU”

•[MOV] Move

•[RL] Rotaciona Esq.

•[RR] Rotaciona Dir.

•[SUB] Subtrai

•[SWAP] Inverte

•[XOR] “OU” exclusivo

•[RET] Retornar

InstruInstruççãoão

••[ADD][ADD] SomaSoma

••[AND][AND] ““EE””

••[CLR][CLR] LimparLimpar

••[COM][COM] ComplementaComplementa

••[DEC][DEC] DecrementaDecrementa

••[INC][INC] IncrementaIncrementa

••[IOR][IOR] ““OUOU””

••[MOV][MOV] MoveMove

••[RL][RL] RotacionaRotaciona Esq.Esq.

••[RR][RR] RotacionaRotaciona Dir.Dir.

••[SUB][SUB] SubtraiSubtrai

••[SWAP] Inverte[SWAP] Inverte

••[XOR][XOR] ““OUOU”” exclusivoexclusivo

••[RET][RET] RetornarRetornar

Page 15: Curso de PIC da Labtools – Mosaico Didactic Division

Comandos em Comandos em AssemblyAssembly

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 ;

Page 16: Curso de PIC da Labtools – Mosaico Didactic Division

Comandos em Comandos em AssemblyAssembly

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 ;

Page 17: Curso de PIC da Labtools – Mosaico Didactic Division

Comandos em Comandos em AssemblyAssembly

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 ;

Page 18: Curso de PIC da Labtools – Mosaico Didactic Division

Comandos em Comandos em AssemblyAssembly

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 ;

Page 19: Curso de PIC da Labtools – Mosaico Didactic Division

Comandos em Comandos em AssemblyAssembly

Lidando com os dados – pág. 85

CLRW – limpa o acumulador;

Sintaxe:

CLRW

Exemplo: limpar o acumulador

CLRW

Page 20: Curso de PIC da Labtools – Mosaico Didactic Division

Comandos em Comandos em AssemblyAssembly

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.

Page 21: Curso de PIC da Labtools – Mosaico Didactic Division

Comandos em Comandos em AssemblyAssembly

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

Page 22: Curso de PIC da Labtools – Mosaico Didactic Division

Comandos em Comandos em AssemblyAssembly

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

Page 23: Curso de PIC da Labtools – Mosaico Didactic Division

Comandos em Comandos em AssemblyAssembly

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

Page 24: Curso de PIC da Labtools – Mosaico Didactic Division

Comandos em Comandos em AssemblyAssembly

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

Page 25: Curso de PIC da Labtools – Mosaico Didactic Division

Comandos em Comandos em AssemblyAssembly

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

Page 26: Curso de PIC da Labtools – Mosaico Didactic Division

Comandos em Comandos em AssemblyAssembly

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

Page 27: Curso de PIC da Labtools – Mosaico Didactic Division

Comandos em Comandos em AssemblyAssembly

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

Page 28: Curso de PIC da Labtools – Mosaico Didactic Division

Comandos em Comandos em AssemblyAssembly

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

Page 29: Curso de PIC da Labtools – Mosaico Didactic Division

Comandos em Comandos em AssemblyAssembly

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)

Page 30: Curso de PIC da Labtools – Mosaico Didactic Division

Comandos em Comandos em AssemblyAssembly

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

Page 31: Curso de PIC da Labtools – Mosaico Didactic Division

Comandos em Comandos em AssemblyAssembly

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)

Page 32: Curso de PIC da Labtools – Mosaico Didactic Division

Comandos em Comandos em AssemblyAssembly

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

Page 33: Curso de PIC da Labtools – Mosaico Didactic Division

Comandos em Comandos em AssemblyAssembly

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

Page 34: Curso de PIC da Labtools – Mosaico Didactic Division

Comandos em Comandos em AssemblyAssembly

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

Page 35: Curso de PIC da Labtools – Mosaico Didactic Division

Comandos em Comandos em AssemblyAssembly

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

Page 36: Curso de PIC da Labtools – Mosaico Didactic Division

Comandos em Comandos em AssemblyAssembly

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)

Page 37: Curso de PIC da Labtools – Mosaico Didactic Division

Comandos em Comandos em AssemblyAssembly

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

Page 38: Curso de PIC da Labtools – Mosaico Didactic Division

Comandos em Comandos em AssemblyAssembly

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)

Page 39: Curso de PIC da Labtools – Mosaico Didactic Division

Comandos em Comandos em AssemblyAssembly

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)

Page 40: Curso de PIC da Labtools – Mosaico Didactic Division

Comandos em Comandos em AssemblyAssembly

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

Page 41: Curso de PIC da Labtools – Mosaico Didactic Division

Comandos em Comandos em AssemblyAssembly

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

Page 42: Curso de PIC da Labtools – Mosaico Didactic Division

Comandos em Comandos em AssemblyAssembly

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

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)

Page 43: Curso de PIC da Labtools – Mosaico Didactic Division

Comandos em Comandos em AssemblyAssembly

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

Page 44: Curso de PIC da Labtools – Mosaico Didactic Division

Comandos em Comandos em AssemblyAssembly

Comparando – pág. 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)

Page 45: Curso de PIC da Labtools – Mosaico Didactic Division

Comandos em Comandos em AssemblyAssembly

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

�Multiplicando

27 26 25 24 23 22 21 20

C

Page 46: Curso de PIC da Labtools – Mosaico Didactic Division

Comandos em Comandos em AssemblyAssembly

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)

Page 47: Curso de PIC da Labtools – Mosaico Didactic Division

Comandos em Comandos em AssemblyAssembly

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

�Dividindo

27 26 25 24 23 22 21 20

C

Page 48: Curso de PIC da Labtools – Mosaico Didactic Division

Comandos em Comandos em AssemblyAssembly

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 ;multiplica por 2 (X = X / 2)