Vous êtes sur la page 1sur 124

PIC18

Sistemas Microcontrolados

Data Memory
8 wires

I/O Ports

31 X 21 Stack Memory
21 wires

Timers

Clock Generation

8-Bit CPU
8 wires 16 wires

Analog to Digital Converter

Program Memory

Com memrias de dados e programa separados (Arquitetura de Harvard) possvel se realizar pipelining

Serial Ports

Data EEPROM
8 wires

Other Peripherals

Data Memory
8 wires

I/O Ports

31 X 21 Stack Memory
21 wires

Timers

Clock Generation

8-Bit CPU
8 wires 16 wires

Analog to Digital Converter

Program Memory

Serial Ports

Data EEPROM
8 wires

Other Peripherals

Com memrias de dados e programa separados possvel se realizar pipelining

Memria de Programa

Memria de Programa 21 bits de endereo X 16 Program Counter: Registro de 21 bits Na famlia PIC18, a memria de programa comea no endereo 0x000000 e vai at 0x1FFFFF.

Ex: PIC18F4520 tem 32 K de memria de programa: 0x000000 at 0x007FFF ou 0x8000 posies

0x1FFFFF

External Program Memory

On-Chip Program Memory

4KB a 128KB (Flash ou PROMOTP)

0x000018 0x000008 0x000000

Low-Priority Interrupt Vector High-Priority Interrupt Vector Reset Vector

Jump

Memria de Dados

Data Memory (Register File): SRAM ou SRAM e EEPROM


SRAM Data Memory acessada via endereos de 12 bits (3968 Bytes) 0x000 at 0xF7F. A SRAM tambm contm endereos que so usados para programar funes especiais do microcontrolador: 0xF80 at 0xFFF (Registros de Funes Especiais SFR), 128 bytes mais altos da memria de dados. As outras posies (0x000 at 0xF7F) so chamadas de Registros de Funes Gerais (GFR) ou Register File Locations

Pilha

Pilha 31 posies de 21 bits Portas E/S nmero varia (A, B, C...). Registro TRIS determina direo da porta (TRISA, TRISB,..) Timers RTC, etc

Pinos E/S podem ser digitais ou analgicos. Registro ADCON1 usado para especificar se pinos das portas so digitais (1) ou analgicos (0), que a configurao default

Modelo de Programao

Modelos diferentes de PICs podem ter tamanho de memria de dados diferente

Todos modelos contm pelo menos Registro Geral de Arquivos no espao de endereamento de 0x000 at 0x07F, e ullm Registro de Funes Especiais no espao de 0xF80 at 0xFFF, ou 256 bytes de RAM

0xF7F 0xF7E 0xF7D

0x004

0x003
0x002 0x001 0x000

Register File (Data Memory) On-board SRAM

GPRs

8 bits

0xFE0

Bank Select Register (BSR) Accumulator (WREG)


Product High (PRODH) Product Low (PRODL)

0xFE8
0xFF4 0XFF3

0xFEA 0XFE9 0xFE2 0XFE1


0xFDA 0XFD9 0xFD8

File Select Register 0 High (FSR0H)


File Select Register 0 Low (FSR0L)

File Select Register 1 High (FSR1H) File Select Register 1 Low (FSR1L) File Select Register 2 High (FSR2H)
File Select Register 2 Low (FSR2L)

Status Register (SR)

Program Counter (PC)

Major Special Function Registers


8 bits

Endereo de 12 bits

4 bits

8 bits

No ou local do banco

Ponteiro para um dos 256 bytes

Banco 15 (256 bytes) 4 bits mais significativos dos 12 bits de endereo

Banco 14 (256 bytes) BSR -Bank Register (4 bits)

Banco 0 (256 bytes)

0xFFF Banco 15 (256 bytes) 0xF80

Access bank

Banco 14 (256 bytes)

No necessrio usar BSR na programao quando se usa o Acess bank

Banco 0 (256 bytes)

0x07

0x000

0xFFF Se a-bit = 0 Access bank

8-bit address 0xF80 0xF7F 0x12

0x07F

0x012

0x000

Bank Select Register (4 bits) + endereo 8 bits = endereo de 12 bits a-bit = 0 access bank a-bit = 1 uso do BSR a-bit um bit que faz parte da instruo

0xFFF Se a-bit = 1 bank selection

12-bit address 0xF80 3 2F

0x32F

Bank 8-bit Select address Register

0x000

Como local de memria 0x092 acessado? Bank Select Register (4 bits) + endereo 8 bits = endereo de 12 bits a-bit = 0 access bank a-bit = 1 uso do BSR

Registros com funes especiais (SFR)


WREG Acumulador (endereo 0xFE8)

BSR Bank Select Register

Formato de uma instruo que opera byte


15 10 9 8 0

Opcode

8-bit data memory address

a-bit a = 0 access bank a = 1 usa BSR

d-bit

Destino da instruo

d = 0 WREG d = 1 data memory address

Programao: Soma
a-bit MOVLW 0x06 ADDLW 0x02 MOVWF 0x00, ; OU MOVLW 0x06 ADDLW 0x02 MOVWF 0x00, 0 ; coloca um 0x06 em W ; soma 0x02 com W ; copia W para access bank register 0x00 outra verso usando palavra-chave ACCESS ; coloca 0X06 em W ; soma 0X02 com W ACCESS; copia W para registro access bank 0

Soma 6 com 2 e armazena soma no endereo do registro de banco 0X000. Letra L em MOVLW indica Literal. Instruo Literal usada para constantes.

Programao: Soma
Soma 6 com 2 e armazena soma no endereo 0X200 do banco de registro de dados
MOVLW 0x06 ADDLW 0x02 ; coloca 0x06 em W ; soma 0x02 com W

MOVLB 2
MOVWF 0x00, 1

; carrega BSR com banco 2, MOVL


; copia W para registro de dados 0x00 do ; banco 2 ou endereo 0x200

OU MOVLW 0x06 ADDLW 0x02 MOVLB 2 MOVWF 0x00,

outra verso usando palavra-chave BANKED ; coloca 0x06 em W ; soma 0x02 com W ; carrega BSR com banco 2 BANKED ; copia W para registro de dados 0x00 do ; banco 2 ou endereo 0x200

Programao: Soma (cont)


Soma 6 com 2 e armazena soma no endereo 0X200 do banco de registro de dados

OU MOVLW 0x06 ADDLW 0x02 MOVLB 2 MOVWF 0x00

outra verso sem indicao de banco ; coloca 0x06 em W ; soma 0x02 com W ; carrega BSR com banco 2 ; copia W para registro de dados 0x00 do ; banco 2 ou endereo 0x200

Programao I/O
Uso da Porta A: coloca um zero no bit 0 e um 1 no bit 1; bits ligados em LEDS

MOVLW 0x7F
MOVWF ADCON1 MOVLW 0x00 MOVWF TRISA MOVLW 0x02 MOVWF PORTA ; seleciona pinos como digitais ; coloca 0x00 no registro de direo de PORTA ; para selecionar operao de sada ; ; coloca 0x02 na porta A

Registro ADCON1 usado para indicar que pinos das portas so analgicos (default) ou digitais. Registro TRIS usado para indicar direo (1 - IN ou 0 -OUT) da porta.

Programao: Multiplicao
Multiplica 3 por 100 e armazena produto em 0x010 e 0x011. Registro especial necessrio porque o produto duas vezes o tamanho do multiplicador.

MOVLW 3 MULLW .100 MOVFF PRODL, 0x010 MOVFF PRODH, 0x011

; coloca 3 em W ; multiplica por decimal 100 ; salva low product em 0x010 ; salva low product em 0x011

Aps execuo, Data Register 0x010 contm 0x2C e 0x11 contm 0x01. 0x12C = 300 decimal.
A instruo MOVFF de 32 bits e no tem a-bit Os endereos da fonte e destino so armazenados na prpria instruo.

Programao: File Select Registers (FSR)


FSR usado para endereamento indireto ou indexador de dado de memria. Na famlia PIC18 existem 3 FSRs (FSR0, FSR1 e FSR2) e cada um armazena um local da memria de dado de 12 bits. Exemplo: Multiplica 3 por 100 e armazena produto em 0x010 e 0x011.

MOVLW 3 MULLW 0x64 LFSR 0, 0x010 MOVFF PRODL, POSTINC0 MOVFF PRODH, INDF0

; coloca 3 em W ; multiplica por 100 ; posio de endereo 0x010 em FSR0 ; salva low product e incrementa FSR0 ; salva high product em 0x011

FSR0 contm endereos 0x010 e 0x011. POSTINC0 em MOVFF incrementa FSR0 aps us-lo para enderear posio de memria. Operandos INDF0, INDF1 e INDF2 so usados para especificar endereos indiretos 0, 1 ou 2, respectivamente de FSR0, FSR1 e FSR2.

Programando E/S
Dois LEDs conectados aos bits 0 e 1 da Porta A devem ser ativados

MOVLW 0x7F MOVWF ADCON1 MOVLW 0, 0x00 MOVWF TRISA MOVLW 0x02 MOVWF PORTA

; ; programa toda porta com digitais ; programa porta A como sada ; aciona LEDs dos bits 0 e 1

Registro de Status
0

OV

DC

Carry: 0 - no carry; 1 - carry Digital Carry: 0 - no carry; 1 - carry

Zero: 0 - no zero; 1 - zero

Overflow: 0 - no overflow 1 - overflow Negative: 0 positive 1 - negative

Osciladores no PIC

Programados atravs do registro Configuration Register 1H, via bits:

Nos modos de Osciladores XT, LP, HS ou HSPLL, um cristal ou ressonador de cermica conectado aos pinos OSC1 e OSC2.

Operao com entrada de clock externo (HS OSC configuration)

HSPLL
Usado com PLL interno e apropriado quando questes de EMI esto em jogo

Entrada de Clock Externa EC e ECIO

Oscilador RC

Oscilador RCIO

Bloco Oscilador Interno


Gera dois sinais de clock diferentes, ou pode ser usado como fonte de clock do sistema Sada principal (INTOSC) uma fonte de clock de 8MHz que pode drivar diretamente o sistema (ver figura para mais opes) A outra fonte de clock um oscilador RC interno (INTRC) com sada de 31 KHz. Habilitado quando bloco oscilador interno selecionado como fonte de clock, ou quando um dos seguintes habilitado: Power-up Timer, FailSage Clock Monitor, Watchdog Timer ou TwoSpeed Start-Up

Bloco Oscilador Interno: Modos INTIO


Usando-se bloco oscilador interno como fonte de clock pode-se eliminar a necessidade de pinos OSC externos, os quais podem ser usados com I/O. Duas configuraes podem ser usadas:
1.No modo INTIO1, pino OSC2 fornece Fosc/4 e OSC1 funciona como RA7 2.No modo INTIO2, OSC1 funciona com RA7 e OSC2 funciona como RA6

Dispositivos permitem que a fonte de clock do sistema possa ser chaveada do oscilador principal para uma fonte de clock de baixa frequncia. Essencialmente existem trs fontes de clock para os dispositivos 1. Osciladores primrios: Modo Cristais e Ressonadores Externos; Modos RC Externo; Modos Clock Externos e Bloco Oscilador Interno. O modo definido em POR pelo contedo do Configuration Register 1H 2. Osciladores Secundrios: Fontes externas no conectadas a OSC1 e OSC2. Essas fontes podem continuar a operar mesmo aps o controlador se colocado em um modo de gerenciamento de energia. No PIC18F1220/1320 existe a opo o oscilador do Timer1 (em todos os modos de gerenciamento de energia Timer1 funciona como base de tempo para funes como real-time clock 3. Bloco Oscilador Interno: alm de ser uma fonte de clock primria, pode ser usado como fonte de clock no modo de gerenciamento de energia. A fonte INTRC tambm usada como fonte de clock em WDT e Fail-Sage Clock Monitor

Conversor Analgico Digital


Canal 0
Canal 1 Sinal convertido digital

Canal 2
Canal 3 Canal 4 Canal 5 Canal 6 Canal 7 multiplexador

Conversor A/D

Pinos de PORTA usados - Conversor 8 e 10 bits

Diagrama de blocos do A/D

Tenso de referncia tpica 5V

10 bits resoluo igual a 0,00488 V ou 48mV 8 bits - resoluo igual a 19,53 mV


Conversor controlado por ADCON0 e ADCON1

ADCS1

ADCS0

CHS2

CHS1

CHS0

GO/DONE

NOT USED

ADON

00 External clock/2 01 External clock/8 10 External clock/32

ADON (A/D On bit): 1 enabled; 0 disabled GO/DONE(A/D conversion Status bit; 1 in progress 0 idle CHS2:CHS0 (Analog Channel Select bits): 111 (no valid)

011 Internal RC clock

ADRESL registro guarda 8 bms do resultado ADRESH registro guarda 2 bMs do resultado ADCON1 8 bits - resoluo igual a 19,53 mV

Conversor controlado por ADCON0 e ADCON1

ADRESL registro guarda 8 bms do resultado ADRESH registro guarda 2 bMs do resultado ADCON1 8 bits - resoluo igual a 19,53 mV

Conversor controlado por ADCON0 e ADCON1


ADFM0 Seletor de formato da sada do conversor ADFM = 0 sada do conversor justificada para direita ADFM = 1 sada do conversor justificada para esquerda Modo dos pinos da porta A e seleo do nvel de tenso FCFG3 PCFG2 PCFG1 PCFG0

Mdulo de Converso A/D


Tempo de aquisio programvel Permite usurio selecionar um novo canal para converso e setar (GO/DONE) imediatamente Quando bit GO/DONE setado, o canal selecionado amostrado pelo tempo de aquisio programado antes que a converso seja efetivamente iniciada (otimizao do firmware)

Registros

Registro ADCON0 controla a operao do mdolo A/D Registro ADCON1 configura as funes dos pinos das portas Registro ADCON2 configura a fonte do clock A/D, tempo de aquisio e justificao

Para fazer uma converso A/D 1. Configure o mdulo A/D 1.1 Configure os pinos analgicos, referncia da tenso e I/O digital (ADCON1) 1.2 Selecione o canal de entrada (ADCON0) 1.3 Selecione o tempo de aquisio (ADCON2) 1.4 Selecione o Clock de converso (ADCON2) 1.5 Ligue o mdulo A/D (ADCON0) 2. Configure a interrupo A/D (se desejado) 2.1 Zere o bit ADIF 2.2 Coloque em 1 o bit ADIE 2.3 Coloque em 1 o bit GIE 3. Espere o tempo de aquisio requisitado (se requisitado) 4. Comece a converso: 4.1 Set bit GO/DONE (ADCON0) 5. Espere

Interrupes
Alta prioridade: Vetor de Interrupo 000008H Baixa Prioridade: Vetor de Interrupo 0000018H Uso de GOTO Programao controlada por 10 registros: RCON, INTCON, INTCON2, INTCON3, PIR1, PIR2, PIE1, PIE2, IPR1, IPR2 Microchip recomenda que se utilize os header files do MPLAB-IDE para os nomes simblicos dos bits desses registros (isso permite que o assemblador/compilador automaticamente coloque os valores desses bits em seus respectivos registros)

Fontes de Interrupo

Interrupes
Em geral, cada fonte de interrupo tem trs bits para controlar sua operao. As funes desses bits so:
Bit de flag (IF) para indicar que ocorreu uma interrupo provinda da fonte; Bit de habilitao (IE) de interrupo da fonte Bit indicador de prioridade (IP) da interrupo (setado alta prioridade; resetado baixa prioridade)

BIT IPEN em RCON (bit 7) habilita funo de prioridade (setado habilita; resetado desabilita; default desabilitado)

Prioridade de Interrupes Habilitada (IPEN = 1 )


Quando prioridade est habilitada, dois bits habilitam as interrupes globalmente. O bit GIEH (bit 7 de INTCON) habilita todas as interrupes que tm o bit de prioridade setado (alta prioridade) O bit GIEL (bit 6 de INTCON) habilita todas as interrupes que tm o bit de prioridade resetado (baixa prioridade)

Prioridade de Interrupes Desabilitada: Modo Default (IPEN = 0 )


Bits de prioridade para cada fonte no tm efeito Bit 6 de INTCON tem agora o nome de PIEIE que habilita/desabilita todas as fontes de interrupes de perifricos Bit 7 de INTCON tem agora o nome de GIE e habilita/desabilita as interrupes de todas as fontes Todas interrupes usam vetor 000008H

Atendimento da interrupo
Bit que habilita globalmente as interrupes resetado (se IPEN = 0, esse bit GIE; se IPEN = 1, esse bit ser ou GIEH ou GIEL) Interrupo de prioridade mais alta pode interromper uma de prioridade mais baixa Endereo de retorno colocado na pilha e vetor de interrupo carregado em PC Registro WREG, Status e BSR so salvos na pilha de rpido retorno (fast return stack). Se uma instruo fast return from interrupt no estiver sendo usada, o programa deve salvar esses registros no inicio da ISR A fonte da interrupo pode ser descoberta fazendo um polling nos bit de flags de interruo Os bits dos flags de interrupo devem ser resetados por software A instruo RTIFIE retorna da interrupo e seta o bit GIE (GIEH ou GIEL se prioridade esta habilitada) rehabilitando as interrupes

Salvando reigistros WREG, Status e BSR

Registro RCON
Contm bits usados para determinar a causa do ltimo Reset ou Wake-up do modo de baixo consumo de energia Tambm contm o bit que habilita as prioridades das interrupes (IPEN)

Registros INTCON
Os Registros INTCON podem ser lidos ou escritos e contm vrios bits de habiliao, prioridade e flag Bits de Flag so setados quando ocorre uma interrupo, no importando o estado do bit de habilitao correspondente (do dispositivo). O software do usurio deve se assegurar que os bits de flag de interrupo apropriados estejam resetados antes de habilitar uma interrupo. Essa estatgia permite se realizar um polling por software.

Registros PIR (Peripheral Interrupt Request - Flag)


Contm bits individualizados para interrupo de cada perifrico do PIC. Devido ao nmero de perifricos contidos no PIC, existe mais de um registro PIR Bits de Flag so setados quando ocorre uma interrupo, no importando o estado do bit de habilitao correspondente (do dispositivo). O software do usurio deve se assegurar que os bits de flag de interrupo apropriados estejam resetados antes de habilitar uma interrupo. Essa estatgia permite se realizar um polling por software.

Registro PIE: Peripheral Interrupt Enable Register


Contm bits individualizados para interrupo de cada perifrico do PIC. Devido ao nmero de perifricos contidos no PIC, existe mais de um registro PIE Quando IPEN =0, bit PEIE deve ser setado para habilitar qualquer uma das interrupes desses perifricos

PIE1: Peripheral Interrupt Enable1

PIR2: Peripheral Interrupt Enable (Flag) 2

Registros IPR: Peripheral Interrupt Priority Register


Contm bits individualizados para interrupo de cada perifrico do PIC. Devido ao nmero de perifricos contidos no PIC, existe mais de um registro IPR O Uso dos bits de prioridade requer que o bit IPEN (Interrupt Priority Enable) =1

Interrupes externas (pinos) INTn


Interrupes nos pinos RB0/INT0, RB1/INT1 e RB2/INT2 Ativada na subida do sinal (bit INTEDGx = 1 no registro INTCON2) ou na descida do sinal (bit INTEDGx = 0 no registro INTCON2) Quando uma borda de sinal vlida aparece no pino RBx/INTx, o bit de flag correspondente (INTxF) setado. Interrupo pode ser desabilitada resetando o bit de habilitao de interrupo correspondente (INTxE) O bit de Flag (INTFx0) deve ser resetado por software na ISR antes da reabilitao das interrupes

Interrupes externas (pinos) INTn


Todas as interrupes externas (INT0, INT1 e INT2) podem acordar o processador do modo de baixo consumo, caso o bit INTEx esteja setado antes dele ir para esse modo Se o bit Global Interrupt Enable (GIE) estiver setado, o processador ir executar a partir do verot de interrupo aps acordar. A prioridade de interrupo para INT1 e INT2 determinada pelo valor contido nos bits de prioridade de interrupo, INT1lP (bit 6 em INTCON3) e INT2lP (bit 7 em INTCON3) No existe nenhuma prioridade associada com INT0 (ela sempre uma fonte de interrupo de alta prioridade)

Interrupo em TMR0
No modo 8-bits (default) do contador, um overflow (FFh->00h) no registro TMR0 ir setar o bit de flag TMR0IF No modo 16-bits, um overflow (FFFFh->0000h), um overflow nos registro TMR0H:TMR0L ir setar o flag TMR0IF Esta interrupo pode ser habilitada/desabilitada setando/resetando o bit de enable (TMR0IE, bit 5 de INCTCON) A prioridade para Timer0 determinada pelo valor contido no bit de prioridade da interrup (TMR0IP, bit 2 de INTCON2)

PORTB Interrupt-on-Change
Uma mudana de estado nos bits 4 a 7 de PORTB seta um flag de interrupo (RBIF, bit 0 de INTCON) A interrupo pode ser habilitada/desabilitada setando/resetando o bit de habilitao de interrupo (RBIE, bit 3 de INTCON) A prioridade de interrupo para PORTB interrupt-on-change determinada pelo valor contido no bit de prioridade (RBIP, bit 0 de INTCON2)

TIMER 0
Contador/Temporizador programvel de 8/16 bits Pode ser lido e escrito Possui um pre-escaler programvel de 8 bits Fonte de clock selecionvel interno ou externo Gera interrupo em overflow Borda selecionvel quando usa clock externo

TIMER 1
Contador (sincrono ou assincrono)/Temporizador programvel de 16 bits (dois registros: TMR1L e TMR1H) Pode ser lido e escrito Resetvel por um trigger de evento especial em CCP Fonte de clock selecionvel interno ou externo Gera interrupo em overflow Status da operao do clock do sistema (pode ser usado como Real-time clock)

TIMER 2
Temporizador de 8 bits (RegistroTMR2) Registro de Perodo de 8 bits (PR2) Pode ser lido ou escrito (ambos registros) Pre-escaler selecionvel por software Post-escaler selecionvel por software Interrompe na contagem TMR2 quando atinge tempo PR2 Pode ser usado como tempo base PWM para o modo PWM do mdulo CCP

Mdulo Enhanced Capture/Compare/PWM (ECCP)

Operao de uma porta de E/S Genrica

Tipos de Reset

Master Clear Reset (MCLR) (PICF1220/1320)


Inicado quando pino MCLR ativado, o que faz que PIC faa um FETCH da posio 0000H (reset address vector) Se a fonte de tenso tem um tempo de subida de 0,05 V/ms, um resistor de 1 Kohm a 10Kohm deve ser conetado entre MCLR e VCC. Se este tempo no poder ser garantido, usar um capacitor (1microfarad)

Power-on Reset (POR)


1. Gerado on-chip quando subida de VDD detetada
2. Colocar resistor de 1K a 10K para VDD (elimina necessidade de circuito RC usado para criar delay no POR) 3. Para situao em que a subida de VDD lenta, usar circuito abaixo (uma taxa de subida mnima especificada)

Power-up Timer (PWRT) (PICF1220/1320)


Contador de 11 bits (no PIC18F1220/1320) que usa clock INTRC como clock de entrada Ele fornece uma contagem de 2048 X 32 microsegundos = 65,6 ms Enquanto PWRT est contando, o dispositivo mantido em Reset O delay do power-up varia conforme o chip PWRT habilitado zerando o bit de configurao PWRTEN

Brown-out Reset (BOR)(PICF1220/1320)


Chip reinicia se VDD cair abaixo de um nvel programado, VBOR, por um tempo (programado) maior que TBOR (a CPU s voltar a executar quando a tenso voltar ao nvel maior que VBOR) Evita erros no software em situaes de baixa energia Programado em C por um #PRAGMA

Watchdog Timer (WDT)(PICF1220/1320)


Contador interno que reinicia o chip aps um tempo programado Programado em C por um #PRAGMA WDT iniciado quando o PIC resetado Re-engatilhado por um CLRWDT (assembly) ou ClrWdt( ), em C

Stack Reset (PICF1220/1320)


Causado por underflow ou overflow na pilha se estiver habilitado Programado em por um #PRAGMA STVR = ON/OFF

Instruo RESET (PICF1220/1320)


Funciona como um Master Clear

Sleep (PICF1220/1320)
O oscilador da CPU desativado e o programa para de executar Uso da funo Sleep ( ), em C. O WDT pode ser usado para acordar o processador Interrupes podem acordar o processador Vantagem: economia de energia

pode ser desabilitado com o bit MCLRE no registro de configurao

Reset Control Register (RCON)

Vous aimerez peut-être aussi