Você está na página 1de 74

Microcontroladores PIC Famlia PIC18F Microchip

Autor: Fernando Simplicio de Sousa


Fabio Perkowitsch Mulero
Equipe Microgenios
Cursos e Treinamentos sobre Microcontroladores.
www.microgenios.com.br
www.portalwebaula.com.br
Fone: 11 5084-4518 | 3384-5598

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 1 de 74

Livro:
Microcontroladores PIC Famlia PIC18F Microchip
Todos os direitos reservados. Proibida a reproduo total ou parcial, por qualquer meio
ou
processo,
especialmente
por
sistemas
grficos,
microflmicos,
fotogrficos,
reprogrficos, fonogrficos, videogrficos, internet, e-books. Vedada a memorizao e/ou
recuperao total ou parcial em qualquer sistema de processamento de dados e a incluso
de qualquer parte da obra em qualquer programa jusciberntico. Essas proibies aplicamse tambm as caractersticas grficas da obra e a sua editorao. A violao dos direitos
autorais punvel como crime (art. 184 e pargrafos, do cdigo penal, cf. Lei n6. 895,
de 17.12.80) com pena de priso e multa, conjuntamente com busca e apreenso e
indenizaes diversas (artigos 102, 103 pargrafo nico, 104, 105, 106 e 107 itens 1, 2,
3 da lei n. 9.610, de 19/06/98, lei dos direitos autorais).
Eventuais erratas estaro disponveis no site da Microgenios para download.
Dedicatria:
Dedico esse livro a Minha famlia e a equipe Microgenios
Advertncia:
As informaes e o material contido neste livro so fornecidos sem nenhuma garantia quer
explcita, ou implcita, de que o uso de tais informaes conduzir sempre ao resultado
desejado. Tanto o editor quanto o autor no podem ser responsabilizados por qualquer tipo
de reivindicao atribuda a erros, omisses ou qualquer outra impreciso na informao
ou material fornecido neste livro, e em nenhuma hiptese podem ser incriminados direta ou
indiretamente por qualquer dano, perda, lucros cessantes, etc., devido ao uso destas
informaes.

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 2 de 74

Prefcio
Esta obra foi concebida com o intuito de preparar os estudantes, professores e
profissionais da rea tcnica para a criao de projetos com os microcontroladores da
famlia PIC, utilizando como ferramenta uma linguagem de programao de alto nvel, neste
material escolhemos para abordar a linguagem C, que uma das linguagens mais poderosas e
portveis, fato este que a tornou amplamente utilizada, primeiramente para a criao de
programas aplicativos para PC e mais tarde em sistemas embarcados microcontrolados.
Trabalhar com uma linguagem de alto nvel, como C, para criar programas para
microcontroladores, exige do profissional alm de um bom conhecimento de lgica de
programao e habilidade com a linguagem, um slido conhecimento da estrutura de hardware
do microcontrolador utilizado, de forma a extrair deste o mximo de funcionalidade de
seus perifricos internos.
Esta obra estuda paralelamente hardware e software, propiciando um conhecimento completo
ao profissional e tornando-o apto a desenvolver suas prprias aplicaes, alm disso,
vale a pena ressaltar a preocupao, por parte do Centro de Tecnologia Microgenios, em
priorizar um estudo gradual e prtico, para isso usamos os kits de desenvolvimento
PICgenios PIC18F, como base para a realizao de diversas experincias que complementam e
fixam o aprendizado.
Um ponto de destaque da abordagem do treinamento o uso e detalhamento da IDE de
desenvolvimento MikroC PRO (www.mikroe.com) a qual apesar das limitaes da verso de
demonstrao gratuita mostra-se uma excelente ferramenta de desenvolvimento e simulao.
De maneira alguma este material apresentado como nica fonte de estudo sobre o assunto,
devendo aqueles que necessitarem se aprofundar nos tpicos aqui estudados buscar outras
fontes de pesquisa.
Por fim a
projetos.

equipe

Microgenios

agradece

ateno

de

todos

deseja

bons

estudos

Fernando Simplicio de Sousa


Fabio Perkowitsch Mulero
Equipe Microgenios
Cursos e Treinamentos sobre Microcontroladores.
www.microgenios.com.br
www.portalwebaula.com.br
Fone: 11 5084-4518 | 3384-5598
Deus seja louvado!
Microgenios Treinamentos, Kits de desenvolvimento e muito mais...
Pgina 3 de 74

UNIDADE 1 - O MICROCONTROLADOR PIC ...................................................... 6


Desempenho da famlia PIC .............................................................
.............................................................6
.............................6
Tipos de Memria de Programa ......................................................... 7
Tipos de memrias de programas disponveis nos PICs: ................................ 7
O PIC18F4520................................
................................................................
..........................................................................
..........................................7
..........7
Veja em seguida as principais caractersticas do PI18F4520 ........................... 7
Tipos de encapsulamentos: ........................................................... 7
Estrutura interna do PIC18F4520 ...................................................... 9
Descrio das funes dos pinos do PI18F4520 ....................................... 10
Tipos de Memrias .................................................................. 11
Vamos exemplificar um processo de gravao na memria de programa do PIC. .......... 13
Introduo as portas de I/O ..........................................................
..........................................................16
..........................16
O PORTA.............................................................................. 17
Registrador PORTA .................................................................. 18
PORTA .............................................................................. 18
Registrador TRISA .................................................................. 18
Leitura do LATCH de um pino do PIC ................................................. 18
O PORTB.............................................................................. 19
O PORTC.............................................................................. 19
O PORTD.............................................................................. 20
O PORTE.............................................................................. 20
Reset................................................................................ 21
Os PICs possuem diversos tipos de reset: ........................................... 21
Ciclos de mquina.................................................................... 21
Qual a freqncia real de execuo das instrues do nosso microcontrolador? ..... 21
Os bits de configurao (fusveis) .................................................. 22
Mapa dos bits de configurao do PIC18F4520 ......................................... 23
Configurao de Clock................................................................ 24
Vamos conhecer cada um dos tipos de osciladores: ................................... 25
Configurao dos Fusveis de Energia ............................................... 27
UNIDADE 2 - CANAIS A/D ................................................................. 30
Conversor A/D do PIC ................................................................
.................................................................
................................. 30
Registrador ADCON0: ................................................................
..................................................................
..................................30
.. 30
ADCON0:.............................................................................. 30
Registrador ADCON1: ................................................................
..................................................................
..................................31
.. 31
ADCON1:.............................................................................. 31
Registrador ADCON2: ................................................................
..................................................................
..................................32
.. 32
ADCON2:.............................................................................. 32
Trabalhando com AD no MikroC ........................................................ 33
UNIDADE 3 CANAL PWM DO PIC ........................................................... 34
Introduo ................................................................
..........................................................................
..........................................34
.......... 34
Trabalhando com PWM no PIC .......................................................... 36
UNIDADE 4 - TIMERS/COUNTERS ............................................................ 38
Os Timers/Counters ................................................................
...................................................................
...................................38
... 38
TIMER0............................................................................... 38
Os Registradores relacionados ao TIMER0 so: ....................................... 39
T0CON: (TIMER0 Counter Register) ...................................................40
O registrador INTCON................................................................. 41
INTCON (Interrupt Control) ......................................................... 41
TIMER1............................................................................... 44
O TIMER1: .......................................................................... 44
T1CON: (TIMER1 CONTROL REGISTER): .................................................. 45
Programando o TIMER1 do PIC. ....................................................... 47
Configurao do TIMER1: ............................................................ 49
Calculo de Estouro do TIMER1: ...................................................... 49
TIMER2 :............................................................................. 49
T2CON (TIMER2 CONTROL REGISTER): Configura o setup do TIMER2; ...................... 50
Registradores de configurao do TIMER2: ........................................... 50
TIMER3............................................................................... 51
O TIMER3 : ......................................................................... 51
Registradores de configurao do TIMER3: ........................................... 52
Microgenios Treinamentos, Kits de desenvolvimento e muito mais...
Pgina 4 de 74

UNIDADE 5 PROGRAMANDO AS INTERRUPES DO PIC ......................................... 53


As Interrupes do PIC18F4520 ........................................................
........................................................53
........................ 53
Introduo........................................................................... 54
Como funciona as interrupes? ..................................................... 55
Registradores que so usados para controlar as interrupes; ....................... 56
UNIDADE 6 PROGRAMANDO A INTERRUPO EXTERNA .......................................... 61
INT0 ................................................................
................................................................................
................................................61
................ 61
Vamos conhecer os registradores relacionados a INT0: ................................ 62
Registradores responsveis pelas configuraes gerais das interrupes: ............ 62
Registradores responsveis pela habilitao da interrupo externa INT0 ............ 62
Registrador responsvel pelo tipo de disparo de INT0: .............................. 62
INT1 ................................................................
................................................................................
................................................62
................ 62
Programando a interrupo externa INT1 .............................................. 62
Vamos conhecer os registradores relacionados a INT1: ............................... 63
Registradores responsveis pelas configuraes gerais das interrupes: ............ 63
Registradores responsveis pela habilitao da interrupo externa INT1 ............ 63
INT2 ................................................................
................................................................................
................................................63
................ 63
Registrador responsvel pelo tipo de disparo de INT2: .............................. 63
Vamos conhecer os registradores relacionados a INT2: ................................ 64
Registradores responsveis pela habilitao da interrupo externa INT2 ............ 64
Registrador responsvel pelo tipo de disparo de INT2: .............................. 64
Interrupo por mudana de estado ....................................................
....................................................64
.................... 64
Vamos conhecer os registradores relacionados a interrupo RB: ...................... 65
Registradores responsveis pelas configuraes gerais das interrupes: ............ 65
Registradores responsveis pela habilitao da interrupo externa RB .............. 65
UNIDADE 7 EXEMPLOS DE PERIFRICOS .................................................... 66
Controle de display LCD ..............................................................
..............................................................66
..............................66
Projetos com displays LCD: .......................................................... 66
Varredura de displays de 7 segmentos .................................................
.................................................67
................. 67
Projetos com displays de 7 segmentos: ............................................... 67
Varredura de Teclado matricial .......................................................
.......................................................67
....................... 67
Projetos com teclados matriciais: ...................................................68
Acionamento de Leds ................................................................
..................................................................
..................................68
.. 68
Projetos com com Leds................................................................ 68
Conversor Analgico digital (A/D) ....................................................
....................................................68
.................... 68
Projetos com os conversores A/D do PIC .............................................. 69
Controle PWM................................
................................................................
.........................................................................
.........................................69
......... 69
Projetos com os PWM.................................................................. 69
UNIDADE 8 ANEXOS .................................................................... 70
Descrio das Pinagens(LCD) ..........................................................
..........................................................70
..........................70
Lista de cdigos dos Caracteres ..................................................... 70
Tabela com o conjunto completo de instrues: ....................................... 71
Tabela com as instrues mais comuns: ............................................... 72
Resumo com as instrues mais teis: ................................................ 72
Comandos LCD do mikroC PRO (LCD) .................................................... 73
UNIDADE 9 FIGURAS .................................................................... 73
UNIDADE 10 TABELAS ................................................................... 74

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 5 de 74

Unidade 1 - O Microcontrolador PIC


Os microcontroladores PIC so fabricados pela empresa Microchip. Existem basicamente
quatro famlias de PICs diferenciadas pelo tamanho da palavra de memria de programa: 12,
14 , 16 e 32 bits. Atualmente a Microchip lanou nesses ltimos anos uma nova famlia de
microcontroladores chamada DsPIC que possui barramento interno de 16 bits e 24 bits,
contrrio da tradicional famlia de 8 bits, e tambm a famlia PIC32, com barramento de
dados em 32 bits.
O PIC possui uma arquitetura interna do tipo Harvard. A diferena entre essa arquitetura
e as tradicionais, do tipo Von-Neumann, que ela possui um barramento para o programa e
outro para os dados, diferente da arquitetura tradicional em que um barramento tanto de
dados como de endereo.
O aumento no tamanho da palavra de programa possibilita um aumento no nmero de
instrues: os PICs de 12 bits (12C508, 12C509, 12CE518, 16C54, 16C55) possuem apenas 33
instrues, os de 14 bits (12C671, 12C672, 12CE673, 12C674, 14000, 16C55x) possuem 35
instrues e os de 16 bits (17C4x, 17C75X, 17C76X, 18C2XX, 18C4XX) possuem 77 instrues.

Nota:
As famlias PIC14 e PIC17 esto obsoletas.
Figura 1.1 Evoluo da Famlia PIC
Os PICs foram otimizados para trabalharem com execuo de pequeno conjunto de instrues
a grandes velocidades de processamento.

Desempenho da famlia PIC


Capacidade de pipeline (enquanto executa uma instruo, o processador busca a prxima
instruo na memria, de forma a acelerar a execuo do programa)
Execuo de uma instruo por ciclo de mquina, com exceo das instrues de desvios que
consomem dois ciclos de mquinas para serem executadas.
Um ciclo de mquina no PIC equivale a 4 ciclos de clock, ou seja, o sinal de clock
dividido por 4 antes de executar a instruo (falaremos mais sobre esse tpico adiante).
Cada Instruo ocupa uma posio de memria de programa (FLASH).
Tempo de execuo das instrues fixa, com exceo das instrues de desvios que consomem
dois ciclos de mquina.
Outra caracterstica importante da arquitetura PIC reside na semelhana e compatibilidade
entre os diversos microcontroladores membros de sua famlia. Isto facilita grandemente a
migrao de microcontrolador para outro, bastando mudar, em alguns casos, apenas alguns
comandos no programa, pois partes dos registradores internos no se diferem muito entre
si.
Microgenios Treinamentos, Kits de desenvolvimento e muito mais...
Pgina 6 de 74

Tipos de Memria de Programa


Os PICs da srie 12 e 16 armazenam o programa em sua memria interna. Membros da famlia
18 podem funcionar com memria de programa interna ou externa.

Tipos de memrias de programas disponveis nos PICs:


ROM:
Memria do tipo no voltil gravadas na fbrica pelo processo conhecido como
ROM
mscara. Os chips com esse tipo de memria normalmente possuem custos menores, mas
somente so viveis na fabricao de grandes quantidades.
OTP:
OTP Memria fabricadas do tipo PROM. Saem da fbrica "virgens" e permitem uma nica
gravao. So inviveis nas fases de implantao e desenvolvimento de equipamentos. Esses
chips so identificados pelo sufixo "C".
EEPROM:
EEPROM Podemos encontrar chips com memria do tipo EEPROM. Normalmente so mais caros
que os dispositivos ROM e OTP e podem ser identificados atravs do seu sufixo "JW" para
os dispositivos com encapsulamento DIP, ou "CL" para os dispositivos com encapsulamento
do tipo PLCC.
FLASH:
FLASH Os microcontroladores PIC que utilizam este tipo de memria so indicados para
etapas de desenvolvimento e testes at mesmo para implantaes finais. Permitem no mximo
1000 ciclos de gravaes/apagamento, possuem um custo relativamente mediano com relao
aos outros chips.

O PIC18F4520
O PIC18F4520 um microcontrolador que possui memria do tipo FLASH, que nos representa
uma grande facilidade em desenvolvimentos de projetos e prottipos pois no requer apaglo atravs de luz-ultravioleta como as verses antigas que utilizavam EEPROM, com
tecnologia CMOS (baixssimo consumo) fabricado pela empresa Microchip Technology.

Veja em seguida as principais caractersticas do PI18F4520


PI18F4520

Microcontrolador de 40 pinos;
Memria de programa FLASH de 32K ( 16384 bytes words)
Memria de dados RAM de 1536 bytes;
Memria EEPROM de 256 byte;
Processamento de at 10MIPS (milhes de instrues por segundo)
2 canais capture/compare/PWM - mdulo CCP
Master synchronous Serial Port (MSSP) module.
Usart
13 canais A/D de 10 bits
Permite at 100 000 ciclos de escrita e leitura na memria de programa Flash
Permite 1.000.000 ciclos de leitura e escrita na E2PROM
Reteno de dados na Flash de 40 anos
Detector de baixa voltagem programvel
Watchdog timer com oscilador prprio e programvel
Trs pinos de interrupo externa.
4 Temporizadores/contadores (TIMER0, TIMER1, TIMER2, TIMER3)

Tipos de encapsulamentos:
As primeiras verses do PIC eram baseadas em encapsulamentos do tipo DIP40, hoje os
dispositivos de 40 pinos ainda so muito comuns, porm de acordo com a aplicao e os
perifricos internos presentes no Chip eles podem ser encontrados em diversos
encapsulamentos como:

DIP Dual In-line Pin


PLCC Leadless Chip Carrier.
TQFP Thin Quad Flat Pack.

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 7 de 74

Figura 1.2 - Encapsulamentos

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 8 de 74

Nosso estudo ser baseado em microcontroladores com o encapsulamento DIP (Dual In-line
Pin), devido facilidade de utilizao e disponibilidade no mercado, porm no h
grandes dificuldades para se migrar para outros encapsulamentos, basta analisar o
datasheet do microcontrolador.

Estrutura interna do PIC18F4520

Figura 1.3 Diagrama interno do PIC18F4520

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 9 de 74

Descrio das funes dos pinos do PI18F4520


O PI18F4520 possui no total de 34 pinos de I/O divididos entre as PORTA, PORTB, PORTC,
PORTD e PORTE.
PORTA:
PORTA encontramos 7 pinos fsicos intitulados de RA0 a RA7 que podem ser utilizados como
I/O de uso geral ou como conversor analgico/ digital A/D, alm de possuir tambm a
funo de deteco de baixa tenso (LVD), referncia analgica do A/D e contador externo.
PORTB:
PORTB encontramos 8 pinos intitulados de RB0 a RB7 configurveis como I/O de uso geral.
Nesse port podemos trabalhar com
trs interrupes externas,
mdulo CCP e pinos de
gravao e debugger.
PORTC:
PORTC encontramos 8 pinos intitulados de RC0 a RC7 configurveis como I/O de uso geral,
sada do oscilador do timer, mdulo CCP, Clock e data para os modos SPI, I2C e UART.
PORTD:
PORTD encontramos 8 pinos intitulados de RC0 a RC7 que pode ser configurado como I/O de
uso geral ou ser configurado como PSP para ter sada TTL (por exemplo: interfaceamento
com microprocessadores ).
PORTE:
PORTE podemos utiliz-lo como PORT de I/O de uso geral ou utilizar os pinos de WR e CS
para acesso ao modo paralelo Slave Port (acesso a memria externa por exemplo).
Abaixo segue com detalhes a funo de cada pino do microcontrolador PIC18F4520.
Pino(DIP) Funo

Tipo

Descrio

I/O
Entrada
I/O
Entrada
I/O
Entrada
Entrada
Sada
I/O
Entrada
Entrada
I/O
Entrada
Sada
I/O
Entrada
Entrada
Entrada
Saida
Entrada
Entrada
I/O
Sada
Sada
I/O
I/O
Entrada
Entrada
Entrada
I/O
Entrada
Entrada
I/O
Entrada
Entrada
I/O
Entrada
I/O
I/O
Entrada
I/O
I/O
Entrada
I/O
I/O
Entrada
I/O
I/O

Entrada e sada de uso geral


Entrada do conversor AD0
Entrada e sada de uso geral
Entrada do conversor AD1
Entrada e sada de uso geral
Entrada do conversor AD2
Entrada de referncia baixa do A/D
Sada de tenso da referencia do comparador
Entrada e sada de uso geral
Entrada do conversor AD3
Entrada de referncia alta do A/D
Entrada e sada de uso geral
Entrada de clock timer0
Sada do comparador 1
Entrada e sada de uso geral
Entrada do conversor AD4
Entrada de seleo SPI
Detector de alta/baixa voltagem.
Sada do comparador 2
Entrada do cristal oscilador
Entrada do clock externo
Entrada e sada de uso geral
Sada do cristal oscilador
Entrada do clock exteno
Entrada e sada de uso geral
Entrada e sada de uso geral
Interrupo externa 0
Entrada de erro PWM para CCP1
Entrada analgica 12
Entrada e sada de uso geral
Interrupo externa 1
Entrada analgica 10
Entrada e sada de uso geral
Interrupo externa 2
Entrada analgica 8
Entrada e sada de uso geral
Entrada analgica 9
Entrada de captura 2, sada de comparao 2 e sada PWM 2
Entrada e sada de uso geral
Pino de interrupo por mudana de nvel
Entrada analgica 11
Entrada e sada de uso geral
Interrupo por mudana de estado
Pino de habilitao ICSP baixa voltagem (In-Circuit Debugger)
Entrada e sada de uso geral
Interrupo por mudana de estado
Pino de clock do ICSP
Entrada e sada de uso geral

3
4

5
6
7

13
14
33

34
35
36
37
38
39
40

RA0
AN0
RA1
AN1
RA2
AN2
VrefCVref
RA3
AN3
Vref+
RA4
T0CKI
C1OUT
RA5
AN4
/SS
HLVDIN
C2OUT
OSC1
CLKI
RA7
OSC2
CLKO
RA6
RB0
INT0
FLT0
AN12
RB1
INT1
AN10
RB2
INT2
AN8
RB3
AN9
CCP2**
RB4
KBI0
AN11
RB5
KBI1
PGM
RB6
KBI2
PGC
RB7

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 10 de 74

Pino(DIP) Funo

Tipo

Descrio

12, 31

KBI3
PGD
RC0
T10S0
T1CKI
RC1
T10S1
CCP2**
RC2
CCP1
P1A
RC3
SCK
SCL
RC4
SDI
SDA
RC5
SD0
RC6
TX
CK
RC7
RX
DT
RD0
PSP0
RD1
PSP1
RD2
PSP2
RD3
PSP3
RD4
PSP4
RD5
PSP5
P1B
RD6
PSP6
P1C
RD7
PSP7
P1D
RE0
/RD
AN5
RE1
/WR
AN6
RE2
/CS
AN7
/MCLR
VPP
RE3
GND

Entrada
I/O
I/O
Sada
Entrada
I/O
Entrada
Sada
I/O
I/O
Saida
I/O
I/O
I/O
I/O
Entrada
I/O
I/O
Sada
I/O
Sada
I/O
I/O
Entrada
I/O
I/O
I/O
I/O
I/O
I/O
I/O
I/O
I/O
I/O
I/O
I/O
I/O
Sada
I/O
I/O
Sada
I/O
I/O
Sada
I/O
Entrada
Entrada
I/O
Entrada
Entrada
I/O
Entrada
Entrada
Entrada
Entrada
Entrada
Alimentao

Interrupo por mudana de estado


Pino de dados do ICSP
Entrada e sada de uso geral
Sada do clock do Timer 1
Clock externo Timer1 / Timer3
Entrada e sada de uso geral
Entrada de clock do Timer1
Mdulo CCP2(multiplexado com RB3 )
Entrada e sada de uso geral
Mdulo CCP1
Sada ECCP1
Entrada e sada de uso geral
Entrada e sada do clock serial para o modo SPI
Entrada e sada do clock serial para o modo I2C
Entrada e sada de uso geral
Entrada de dados SPI
Entrada e sada de dados I2C
Entrada e sada de uso geral
Sada de dados SPI
Entrada e sada de uso geral
Canal de transmisso UART
Clock de sincronismo UART
Entrada e sada de uso geral
Canal de recepo UART
Clock de sincronismo UART
Entrada e sada de uso geral
Porta de comunicao paralela
Entrada e sada de uso geral
Porta de comunicao paralela
Entrada e sada de uso geral
Porta de comunicao paralela
Entrada e sada de uso geral
Porta de comunicao paralela
Entrada e sada de uso geral
Porta de comunicao paralela
Entrada e sada de uso geral
Porta de comunicao paralela
Sada ECCP1
Entrada e sada de uso geral
Porta de comunicao paralela
Sada ECCP1
Entrada e sada de uso geral
Porta de comunicao paralela
Sada ECCP1
Entrada e sada de uso geral
Controle de leitura do port paralelo
Entrada analgica AD5
Entrada e sada de uso geral
Controle de escrita do port paralelo
Entrada analgica AD6
Entrada e sada de uso geral
Controle de seleo do port paralelo
Entrada analgica AD7
Entrada do RESET externo. Este pino ativo em nvel baixo
Pino de habilitao de alta voltagem ICSP
Entrada Digital
Negativo

11, 32

VCC

Alimentao positivo

15
16
17
18
23
24
25
26
19
20
21
22
27
28
29
30
8
9
10
1

Tabela 1.1 Descrio dos pinos do Microcontrolador PIC18F4520

Tipos de Memrias
No PIC18F4520 encontramos trs tipos de memrias:

Memria de Programa - FLASH


Memria de dados - RAM
Memria de dados EEPROM

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 11 de 74

Como ns sabemos, memria de programa (ROM, EPROM, FLASH) do tipo no voltil, ou seja,
podemos desenergizar nosso sistema microcontrolado e ele no perder o programa gravado.
Nosso microcontrolador estudado possui internamente 16Kbyte de memria de programa
(words) e possui um barramento de programa de 16 bits. Alm disso, existem 21 bits para
endereamento da memria de programa, o que permite que at 2 Mbyte sejam endereados
pelo microcontrolador da familia PIC18.
Memria de Programa
A memria de programa utilizada em nosso microcontrolador do tipo FLASH (sufixo "F")
que permite ser gravada/apagada no minimo 1000 vezes. Este tipo de memria utilizada
ideal para ser utilizada em desenvolvimento de projetos e at mesmo em produtos finais.

Figura 1.4 Memria


Memria de Programa FLASH do PIC18F45
PIC18F452
4520
Podemos perceber que a memria de programa do PIC18F4520 inicia-se no endereo 0000h e
atinge o valor mximo de 7FFFH, ou seja , 32767K byte (32Kbyte).
Nota:
No podemos confundir de forma alguma memria de programa e memria de dados. Sabemos que
memria de programa onde nosso programa estar gravado, enquanto memria de dados
onde os valores de nossas variveis sero salvas temporariamente.
O endereo inicial 0000h chamado de vetor de reset. A instruo de programa que estiver
nesse endereo de memria ser a primeira a ser executada pelo processador do PIC. Sempre
que energizarmos ou resetarmos o microcontrolador, o contador de programa PC apontar
sempre para este primeiro endereo da memria.

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 12 de 74

Em seguida temos os endereos 0008h e 0018h. Estes endereos so chamados de vetores de


interrupo. (veremos mais adiante em nosso curso sobre esses vetores de interrupo).

Vamos exemplificar um processo de gravao na memria de programa do PIC.


Acompanhe o programa exemplo de programa abaixo:
/*'****************************************//**********************************
'Microgenios | MicroControladores
*
'Site: www.Microgenios.com.br
*
'Autor: Fernando Simplicio de Sousa
*
' ***************************************//***********************************
'Programa exemplo: PISCA_PISCA.c
'Cristal: 8MHz - modo HS
*
'Microcontrolador PIC18F4520 Microchip
*
'Tools: Kit PICgenios PIC18F Mdulo Profissional Microgenios
'Configurao: DIP1 - Chave O9 -ON
'****************************************//***********************************
'Objetivo:
'Este simples programa inverte todo os pinos do PORTD em intervalos
'de 1 segundo
'****************************************//**********************************/
void main(){

//funo principal do programa

TRISD = 0;
PORTD = 0;

//configura portd como saida


//zera todos os pinos do portd

while
whil
e(1){
PORTD = 0B11111111;
Delay_ms(1000);
PORTD = 0;
Delay_ms(1000);
}

//seta todos os pinos do PORTD


//delay de 1 segundo
//zera todo o portd
//delay de 1 segundo

Ao compilarmos o programa acima com o MikroC PRO teremos como resultado o seguinte cdigo
de mquina (descrito somente algumas linhas do cdigo gerado):

Figura 1.5 - Opcode gerado aps compilao do programa


A partir da imagem acima, podemos verificar os valores que sero gravados na memria de
programa aps gravao do programa exemplo acima. Esses valores so teis para o
programador experiente, pois permite visualizar e acompanhar a execuo por completo da
compilao dos arquivos.

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 13 de 74

Nota:
Os cdigos em assembly visualizado na figura acima foi gerado pelo compilador MikroC PRO
aps a compilao de um programa escrito em C.

Figura 1.6 Cdigo Hexadecimal


Memria de dados - EEPROM
Como estudamos anteriormente, sabemos que as memrias do tipo EEPROM so muito parecidos
com a memria RAM, sua diferena que as distingue devido ao fato da memria EEPROM
reter as informaes salvas quando a desenergizarmos. Podemos salvar nesta memria dados
no-volteis durante o decorrer da execuo de nosso programa.
O PIC18F4520 possui internamente 256 bytes de memria de dados EEPROM. O endereo inicial
da memria de dados EEPROM 00h seu ltimo endereo FFh.
Memria de dados - RAM
Chegamos a uma das partes mais importantes do estudo referente ao nosso microcontrolador
PIC, neste tpico apresentaremos toda a estrutura de memria de dados RAM.
Aprenderemos a trabalhar com ela e tambm onde esto localizados os bits que
ligam/desligam, configuram e controlam os perifricos internos do PIC, ou seja, os SFRs
(Registradores de Funes Especiais).
A memria de dados RAM dividida em dois grupos: os chamados GPRs (Registradores de
Propsito Geral) e os SFRs ( Registradores de Funes Especiais).
Os GFRs tem a funo de armazenar dados de uso geral que utilizamos e criamos durante a
execuo do nosso programa. Podemos guardar nesse regio da memria RAM dados volteis de
variveis, tabelas, constantes, entre outras.
Os SFR's so a parte principal do microcontrolador, nesta rea da memria RAM que esto
armazenados todos os setups de funcionamento do PIC. A partir desses registradores
podemos configurar o modo de trabalho dos timers/counters, USART, conversores analgicos
digitais, etc.
O PIC18F4520 em estudo possui internamente 1536 bytes de memria de dados RAM.
O banco de memria RAM da famlia PIC18F dividido em 16 bancos que contm 256 bytes de
memria cada, pois a forma de implementao das instrues limita o endereamento a um
mximo de 7 bits ou 128 registradores. Por esse motivo, a Microchip usa a filosofia de
pginao de memria, criando bancos de memria a cada 128 posies. Acompanhe a figura
abaixo:

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 14 de 74

Figura 1.7 Diagrama da memria RAM interna


Vamos examinar o mapa de registradores dos SFR's. (endereo 0F80h FFFh):
Registradores de Funes Especiais SFRs

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 15 de 74

Figura 1.8 Registradores de Funes Especiais SFRs


Atravs da configurao desses registradores especiais, podemos monitorar o status do
microcontrolador em determinados momentos e situaes. Estudaremos a funo desses
registradores quando estivermos trabalhando com projetos, pois dessa maneira ficar mais
claro seu funcionamento.

Introduo
Introduo as portas de I/O
Os microcontroladores PIC possuem pinos fsicos destinados comunicao de dados com os
circuitos externos. Atravs desses pinos podemos enviar nveis lgicos (0 ou 1) para, por
exemplo, acender ou apagar um LED, acionar displays LCD, ler botes e sensores, etc.
O microcontrolador PIC18F45200 da Microchip possue 34 pinos de escrita e leitura (I/O),
os quais esto divididos em quatro portas chamadas: PORTA, PORTB, PORTC, PORTD e PORTE.

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 16 de 74

Figura 1.9 PIC18F4520


Os registradores PORTB, PORTC e PORTD possuem 8 pinos de I/O cada, enquanto o PORTE
possue 4 pinos de I/O e PORTA 6 pinos de I/O.
Cada porta de I/O possui trs registradores que controlam suas funes: um registrador
PORT, LAT e um registrador TRIS.
Os registradores PORT (PORTA, PORTB, PORTC, PORTD, PORTE) pertencem aos SFRs e armazema
os dados das portas paralelas (I/O's) do microcontrolador. Qualquer escrita realizada em
um desses registros automaticamente altera todo o contedo presente na sada do chip.
O registrador TRIS utilizado para configurar cada pino da respectiva porta como entrada
ou sada. Assim, cada bit desse registrador corresponde a um pino da porta. Se o bit
estiver em 1 (um), o pino correspondente esta configurado como entrada de dados, e se
estiver em 0 (zero) configuramos este pino como sada de dados.
As portas de comunicao paralela do PIC so utilizadas para efetuar diversas tarefas:

O PORTA
PORTA
A primeira porta a ser estudada o PORTA. Alm das funes de entrada e sada de dados
encontramos tambm diversas outras funes multiplexadas aos seus pinos:
Vamos conhecer as funes de cada pino do PORTA:
Tabela 1.2 Pinos PORTA
Pino(DIP)

Funo

Tipo

Descrio

RA0
AN0
RA1
AN1
RA2
AN2
VrefCVref
RA3
AN3
Vref+
RA4
T0CKI
C1OUT
RA5
AN4
/SS
HLVDIN
C2OUT
OSC1
CLKI
RA7
OSC2
CLKO
RA6

I/O
Entrada
I/O
Entrada
I/O
Entrada
Entrada
Sada
I/O
Entrada
Entrada
I/O
Entrada
Sada
I/O
Entrada
Entrada
Entrada
Saida
Entrada
Entrada
I/O
Sada
Sada
I/O

Entrada e sada de uso geral


Entrada do conversor AD0
Entrada e sada de uso geral
Entrada do conversor AD1
Entrada e sada de uso geral
Entrada do conversor AD2
Entrada de referncia baixa do A/D
Sada de tenso da referencia do comparador
Entrada e sada de uso geral
Entrada do conversor AD3
Entrada de referncia alta do A/D
Entrada e sada de uso geral
Entrada de clock timer0
Sada do comparador 1
Entrada e sada de uso geral
Entrada do conversor AD4
Entrada de seleo SPI
Detector de alta/baixa voltagem.
Sada do comparador 2
Entrada do cristal oscilador
Entrada do clock externo
Entrada e sada de uso geral
Sada do cristal oscilador
Entrada do clock exteno
Entrada e sada de uso geral

3
4

5
6
7

13
14

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 17 de 74

Registrador PORTA

Figura
Figura 1.10 - PORTA
O registrador PORTA esta localizado na memria RAM do PIC e possui o endereo (0XF80).
Este registrador ir acessar os pinos da PORTA da seguinte maneira:

PORTA
RA7
Bit7

RA6
Bit6

RA5
Bit5

RA4
Bit4

RA3
Bit3

RA2
Bit2

RA1
Bit1

RA0
Bit0

Toda a porta de I/O possui internamente um latch de sada para cada pino. Dessa forma,
uma escrita no registrador PORTA ir na realidade escrever em cada latch do PORTA. O lat
da PORTA chamado de LATA.
Para ler um dado um dado no PORTA, basta ler o contedo do registrador PORTA.
Nota:
O registrador PORTA o "espelho" dos pinos do PORTA do PIC, para lermos ou escrevermos
nesse registrador estamos na verdade atuando sobre os pinos do port respectivamente. No
podemos esquecer que o registrador TRISD tambm afeta a leitura e escrita no port.

Registrador TRISA
O registrador TRISA utilizado para o controle da direo de atuao de cada pino de I/O
do PORTA. Atravs desse registradores definimos e configuramos o modo de trabalho do pino
do microcontrolador como entrada ou sada de dados.
Este registrador define os pinos do PORTA da seguinte maneira:
TRISA
RA7
Bit7

RA6
Bit6

RA5
Bit5

RA4
Bit4

RA3
Bit3

RA2
Bit2

RA1
Bit1

RA0
Bit0

Se o bit do registrador TRISA estiver em nvel lgico 1, o pino correspondente a este bit
do PORTA estar configurado como entrada.
Se o bit do registrador TRISA estiver em nvel lgico 0, o pino correspondente a este bit
do PORTA estar configurado como sada.

Leitura do LATCH de um pino do PIC


Para ler o LATCH de sada do microcontrolador ao invs dos pinos utilizamos o registrador
LATA, referente ao PORTA, ou LATB, referente ao PORTB. O latch de sada encontra-se antes
do buffer de sada do pino, e por esse motivo podemos ler seu estado.

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 18 de 74

O PORTB
O PORTB, tal qual o PORTA, implementa diversas outras funes multiplexadas aos seus
pinos, acompanhe:
Pino(DIP)

Funo

Tipo

Descrio

33

RB0
INT0
FLT0
AN12
RB1
INT1
AN10
RB2
INT2
AN8
RB3
AN9
CCP2**
RB4
KBI0
AN11
RB5
KBI1
PGM
RB6
KBI2
PGC
RB7
KBI3
PGD

I/O
Entrada
Entrada
Entrada
I/O
Entrada
Entrada
I/O
Entrada
Entrada
I/O
Entrada
I/O
I/O
Entrada
I/O
I/O
Entrada
I/O
I/O
Entrada
I/O
I/O
Entrada
I/O

Entrada e sada de uso geral


Interrupo externa 0
Entrada de erro PWM para CCP1
Entrada analgica 12
Entrada e sada de uso geral
Interrupo externa 1
Entrada analgica 10
Entrada e sada de uso geral
Interrupo externa 2
Entrada analgica 8
Entrada e sada de uso geral
Entrada analgica 9
Entrada de captura 2, sada de comparao 2 e sada PWM 2
Entrada e sada de uso geral
Pino de interrupo por mudana de nvel
Entrada analgica 11
Entrada e sada de uso geral
Interrupo por mudana de estado
Pino de habilitao ICSP baixa voltagem (In-Circuit Debugger)
Entrada e sada de uso geral
Interrupo por mudana de estado
Pino de clock do ICSP
Entrada e sada de uso geral
Interrupo por mudana de estado
Pino de dados do ICSP

34
35
36
37
38
39
40

Assim como no PORTA, o PORTB possui dois registradores que definem o modo de trabalho dos
seus pinos de I/O: so eles: PORTB e TRISB.
Tanto o registrador PORTB quanto o registrador TRISB esto localizados na memria RAM do
PIC e pertencem aos SFR'S (Registradores de Funes Especiais).
O registrador TRISB tem as mesmas funes que o registrador TRISA estudado anteriormente,
que programar os pinos do PIC para serem entradas ou sadas para uso geral.
O registrador PORTB funciona da mesma maneira descrita no PORTA.

O PORTC
O PORTC, tal qual o PORTA, implementa diversas outras funes multiplexadas aos seus
pinos, acompanhe:
Pino(DIP)

Funo

Tipo

Descrio

15

RC0
T10S0
T1CKI
RC1
T10S1
CCP2**
RC2
CCP1
P1A
RC3
SCK
SCL
RC4
SDI
SDA
RC5
SD0
RC6
TX
CK
RC7
RX
DT

I/O
Sada
Entrada
I/O
Entrada
Sada
I/O
I/O
Saida
I/O
I/O
I/O
I/O
Entrada
I/O
I/O
Sada
I/O
Sada
I/O
I/O
Entrada
I/O

Entrada e sada de uso geral


Sada do clock do Timer 1
Clock externo Timer1 / Timer3
Entrada e sada de uso geral
Entrada de clock do Timer1
Mdulo CCP2(multiplexado com RB3 )
Entrada e sada de uso geral
Mdulo CCP1
Sada ECCP1
Entrada e sada de uso geral
Entrada e sada do clock serial para o modo SPI
Entrada e sada do clock serial para o modo I2C
Entrada e sada de uso geral
Entrada de dados SPI
Entrada e sada de dados I2C
Entrada e sada de uso geral
Sada de dados SPI
Entrada e sada de uso geral
Canal de transmisso UART
Clock de sincronismo UART
Entrada e sada de uso geral
Canal de recepo UART
Clock de sincronismo UART

16
17
18
23
24
25
26

Assim como no PORTA, o PORTC possui dois registradores que definem o modo de trabalho dos
seus pinos de I/O: so eles: PORTC e TRISC.
Tanto o registrador PORTC quanto o registrador TRISC esto localizados na memria RAM do
PIC e pertencem aos SFR'S (Registradores de Funes Especiais).

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 19 de 74

O registrador TRISC tem as mesmas funes que o registrador TRISA estudado anteriormente,
que programar os pinos do PIC para serem entradas ou sadas.
O registrador PORTC funciona da mesma maneira descrita no PORTA.
As funes especiais de cada pino sero vistas quando estudarmos suas aplicaes reais
atravs dos projetos que vamos desenvolver durante nosso curso.

O PORTD
O PORTD, tal qual o PORT A, PORTB
multiplexadas aos seus pinos, acompanhe:

PORTC

implementa

Pino(DIP)

Funo

Tipo

Descrio

19

RD0
PSP0
RD1
PSP1
RD2
PSP2
RD3
PSP3
RD4
PSP4
RD5
PSP5
P1B
RD6
PSP6
P1C
RD7
PSP7
P1D

I/O
I/O
I/O
I/O
I/O
I/O
I/O
I/O
I/O
I/O
I/O
I/O
Sada
I/O
I/O
Sada
I/O
I/O
Sada

Entrada e sada de uso geral


Porta de comunicao paralela
Entrada e sada de uso geral
Porta de comunicao paralela
Entrada e sada de uso geral
Porta de comunicao paralela
Entrada e sada de uso geral
Porta de comunicao paralela
Entrada e sada de uso geral
Porta de comunicao paralela
Entrada e sada de uso geral
Porta de comunicao paralela
Sada ECCP1
Entrada e sada de uso geral
Porta de comunicao paralela
Sada ECCP1
Entrada e sada de uso geral
Porta de comunicao paralela
Sada ECCP1

20
21
22
27
28
29
30

diversas

outras

funes

Assim como nas outras portas, o PORT D possui dois registradores que definem o modo de
trabalho dos seus pinos de I/O: so eles: PORTD e TRISD.
Tanto o registrador PORT D quanto o registrador TRISD esto localizados na memria RAM do
PIC e pertencem aos SFR'S (Registradores de Funes Especiais).
O registrador TRISD tem a funo de programar os pinos do PIC para serem entradas ou
sadas.
O registrador PORTD o "espelho" dos pinos do PORTD do PIC, para lermos ou escrevermos
nesse registrador estamos na verdade atuando sobre os pinos do port respectivamente. No
podemos esquecer que o registrador TRISD tambm afeta a leitura e escrita no port.
As funes especiais de cada pino sero vistas quando estudarmos suas aplicaes reais
atravs dos projetos que vamos desenvolver durante nosso curso.

O PORTE
O PORTE, tal qual as outras portas, implementa diversas outras funes multiplexadas aos
seus pinos, acompanhe:
Pino(DIP)

Funo

Tipo

Descrio

RE0
/RD
AN5
RE1
/WR
AN6
RE2
/CS
AN7
/MCLR
VPP
RE3

I/O
Entrada
Entrada
I/O
Entrada
Entrada
I/O
Entrada
Entrada
Entrada
Entrada
Entrada

Entrada e sada de uso geral


Controle de leitura do port paralelo
Entrada analgica AD5
Entrada e sada de uso geral
Controle de escrita do port paralelo
Entrada analgica AD6
Entrada e sada de uso geral
Controle de seleo do port paralelo
Entrada analgica AD7
Entrada do RESET externo. Este pino ativo em nvel baixo
Pino de habilitao de alta voltagem ICSP
Entrada Digital

9
10
1

Assim como nas outras portas, o PORTE possui dois registradores que definem o modo de
trabalho dos seus pinos de I/O: so eles: PORTE e TRISE.
Tanto o registrador PORTE quanto o registrador TRISE esto localizados na memria RAM do
PIC e pertencem aos SFR'S (Registradores de Funes Especiais).
O registrador TRISE tem a funo de programar os pinos do PIC para serem entradas ou
sadas.

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 20 de 74

O registrador PORTE o "espelho" dos pinos do PORTE do PIC, para lermos ou escrevermos
nesse registrador estamos na verdade atuando sobre os pinos do port respectivamente. No
podemos esquecer que o registrador TRISE tambm afeta a leitura e escrita no port.
As funes especiais de cada pino sero vistas quando estudarmos suas aplicaes reais
atravs dos projetos que vamos desenvolver durante nosso curso.

Reset
Sempre que energizamos nosso circuito microcontrolado interessante que o PIC seja
resetado, para isso necessrio a insero de um circuito eletrnico bem simples, mas
capaz de realizar esse procedimento que costumamos chamar de POWER ON RESET.
RESET
Alm disso interessante que exista um boto para que o usurio possa reiniciar o
sistema sempre que for necessrio (reset manual), a seguir indicamos um exemplo de
circuito para o reset.

Figura 1.11 Circuito de Reset

Os PICs possuem diversos tipos de reset:

POR - Power On Reset - o reset que ocorre quando o chip ligado.


Reset do MCLR durante a operao normal
Reset do MCLR durante o modo SLEEP
Reset do watchdog durante operao normal
Reset do detector de Brown-out (BOR)
Instruo de Reset
Reset do Stack Pointer

Ciclos de mquina
A contagem de tempo no medida diretamente pela freqncia de oscilao do cristal e
sim atravs do que chamamos de CICLO DE MQUINA.
Internamente no microcontroladores PIC a freqncia do cristal dividida por 4, o que
nos resulta que a freqncia real de trabalho :
freqncia de trabalho real

= freqncia oscilador / 4

Conclumos ento que: a cada 1 ciclo de mquina corresponde a 4 pulsos do oscilador.


Para exemplificar vamos supor que temos conectado ao microcontrolador um cristal de
quartzo de 8 MHz.

Qual a freqncia real de execuo das instrues do nosso microcontrolador?


muito simples, acompanhe:
Sabemos que a freqncia do cristal utilizado de 8 MHz, e que cada instruo leva
exatamente 1 ciclo de mquina para ser executada; Basta dividir o valor do cristal por 4
para sabermos o valor real de trabalho do PIC.
freqncia de trabalho real

= 8 MHz / 4

=> 2 MHz

Conclumos ento que nosso microcontrolador PIC com cristal de 8 MHz esta trabalhando
efetivamente a 2 MHz, ou seja , cada instruo de programa leva 0.5 us para ser
executada.
Pois:
Frequencia = 1 / periodo
Logo:

Periodo = 1/ 2MHz

-> 0.5us

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 21 de 74

Nota:
Temos que lembrar que nosso microcontrolador em estudo pode operar em 10MHz (ciclo de
mquina)

Os bits de configurao (fusveis)


Os microcontroladores PIC possui internamente regies
que so resposveis por determinar o modo de trabalho
configurao ou fusveis. de grande importncia que
desses bits, caso contrrio teremos srios problemas no

de memrias no volteis (Flash)


do chip. So chamados de bits de
venhamos entender o funcionamento
funcionamento do nosso projeto.

Os bits de configurao do PIC esto armazenados em uma rea reservada do PIC. Podemos
configurar diversas funes atravs desses bits:

OSC Selection (seleo do oscilador)


RESET (tipos de acionamento de reset)
POWER -on Reset (POR)
Power -up Timer (PWRT)
Oscillator Start-up Timer (OSC)
Brown-out Reset (BOR) (verificador de tenso de alimentao)
Interrupts
Watchdog Timer (WDT)
SLEEP
Code Protection
ID Locations
In-Circuit Serial Programming

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 22 de 74

Mapa dos bits de configurao do PIC18F4520


Tabela 1.3 Bits de configurao do PIC18F4520

Tabela 1.4 Bits de configurao do PIC18F4520(Detalhado)


Apresentamos a seguir uma tabela com a descrio de todos os bits de configurao do
PIC18F4520:
Oscilador
Fail-Safe Clock Monitor Enable
Internal External Switch Over Mode
Power Up Timer
Brown Out Detect
Brown Out Voltage
Watchdog Timer
Watchdog Postscaler
CCP2MX
PortB A/D Enable
Low Power Timer1 Osc Enable
Mster Clear Enable
Stack Overflow Reset
Low Voltage Program
Extended Instruction Enable Bit
Background Debug
Code Protect 0x0800 A 0x1fff
Code Protect 0X2000 A 0X3FFF
Code Protect 0X4000 A 0X5FFF
Code Protect 0X6000 A 0X7FFF
Code Protect Boot
Data EEPROM Code Protect
Table Write Protect 0x2000 A 0x1fff
Table Write Protect 0x2000 A 0x3fff
Table Write Protect 0x4000 A 0x5fff
Table Write Protect 0x6000 A 0x7fff
Config Write Protect
Table Write Protect Boot
Data Ee Write Protect
Table Read Protect 0x0800 A 0x1fff
Table Read Protect 0x2000 A 0x3fff
Table Read Protect 0x4000 A 0x5fff
Table Read Protect 0x6000 A 0x7fff
Table Read Protect Boot

RC, EC, LP, XT, HS, HS-PLL, RC-SOC2 com RA6,


EC-OSC2 com RA6
Habilitado ou Desabilitado
Habilitado ou Desabilitado
Habilitado ou Desabilitado
Habilitado ou Desabilitado
2.5V, 2.7V, 4.5V ou 4.7V
Habilitado ou Desabilitado
1:1 , 1:2, 1:4, 1:8, 1:16, 1:32, 1:64, ou
1:128
Pino RC1 ou RB3
PortB configurado como I/O Digital no reset
ou configurado como A/D no reset
Habilitado ou Desabilitado
MCLR Habilitado ou RE3 Habilitado
Habilitado ou Desabilitado
Habilitado ou Desabilitado
Habilitado ou Desabilitado
Habilitado ou Desabilitado
Habilitado ou Desabilitado
Habilitado ou Desabilitado
Habilitado ou Desabilitado
Habilitado ou Desabilitado
Habilitado ou Desabilitado
Habilitado ou Desabilitado
Habilitado ou Desabilitado
Habilitado ou Desabilitado
Habilitado ou Desabilitado
Habilitado ou Desabilitado
Habilitado ou Desabilitado
Habilitado ou Desabilitado
Habilitado ou Desabilitado
Habilitado ou Desabilitado
Habilitado ou Desabilitado
Habilitado ou Desabilitado
Habilitado ou Desabilitado
Habilitado ou Desabilitado

Acompanhe:
Microgenios Treinamentos, Kits de desenvolvimento e muito mais...
Pgina 23 de 74

No painel de configurao do MikroC PRO, podemos visualizar e configurar os bits de


configurao referente ao nosso microcontrolador PIC18F4520.

Figura 1.12 Configurao dos fusiveis no MikroC PRO


Podemos configurar os bits de configurao de duas maneiras:
Atravs do MikroC PRO, no momento da criao ou desenvolvimento do projeto ou atravs dos
programas de gravao dos gravadores de PIC (WinPIC800, IC-Prog etc.)
No primeiro campo de configurao dos fusiveis do MikroC PRO encontramos o campo de
seleo de clock. Atravs desses campos podemos informar vrios tipos de osciladores e
circuitos de oscilao:

Configurao de Clock
Todo microcontrolador requer um circuito de oscilao pois quem d o sinal de "partida"
e "sincronismo" para qualquer atividade interna da chip. A freqncia de operao de
oscilao um dos agentes que determinam a velocidade de execuo das instrues do
microcontrolador.
O PIC18F4520 pode funcionar com diversas fontes de osciladores:
LP
XT
HS
HS + PLL
RC
RCIO
EC
ECIO

Low-power cristal
Cristal ou ressonador
High-Speed cristal (cristal de alta velocidade) ou ressonador
High-Speed cristal ou ressonador com PLL habilitada
Resistor / Capacitor externo
Resistor / Capacitor externo com pino de I/O
Clock externo
Clock exteno com pino de I/O

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 24 de 74

Vamos conhecer cada um dos tipos de osciladores:


Oscilador

RC com pino RA6 como sada de clock

Este o tipo de oscilador mais simples que existe e tambm o mais barato, mas, por outro
lado, o menos preciso, variando muito a tenso de trabalho, temperatura e tolerncias.
O circuito RC deve ser ligado conforme a figura seguinte:

Oscilador

RC com pino RA6 como I/O de uso geral

Este o tipo de oscilador mais simples que existe e tambm o mais barato, mas, por outro
lado, o menos preciso, variando muito a tenso de trabalho, temperatura e tolerncias.
O circuito RC deve ser ligado conforme a figura seguinte:
Nesta configurao o pino RA6 pode ser utilizado como I/O de uso geral
Modo HSPLL
HSPLL na verdade um modo em que podemos multiplicar o valor da freqncia de entrada do
cristal oscilador por 4. ideal para ambientes em que o dispositivo no pode gerar EMI
(interferncia Eletromagntica). Este modo deve ser habilitado nos "fusveis de
configuraes" no momento em que formos gravar o chip.

Figura 1.13 - Modo HSPLL


Por exemplo:
Caso venhamos conectar ao PIC um cristal de 10 MHz entre os pinos OSC1 e OSC2 e ativarmos
o modo HSPLL no momento em que gravarmos o chip, executando seu ciclo de mquina a 10MHz
(10 MIPS - milhes de instrues por segundo).
Exemplo:
Frmula do ciclo de mquina com HSPLL ativado cristal de 8MHz
Ciclo de mquina = (Fosc / 4 ) * 4
Microgenios Treinamentos, Kits de desenvolvimento e muito mais...
Pgina 25 de 74

Ciclo de mquina

= 8 MHz

ou

0.125us

Circuito de Oscilao EC com pino RA6 como I/O de uso geral


Este modo de configurao utilizado quando temos uma fonte de clock em nosso circuito
eletrnico.
Obs: A fonte de clock dever estar livre de ruidos e deformaes.

Figura 1.14 Modo EC com pino RA6 como I/O de uso geral
Circuito de Oscilao EC com pino RA6 como sada de clock
clock
Este modo de configurao utilizado quando temos uma fonte de clock em nosso circuito
eletrnico.
Percebam que a sada de clock Fosc/4, ou
microcontrolador, a partir desse clock de
microcontroladores no circuito.

seja, o prprio ciclo de mquina do


sada, poderemos sincronizar outros

Obs: A fonte de clock dever estar livre de ruidos e deformaes.

Figura 1.15 Modo EC com pino RA6 como sada de clock


Osciladores LP , XT ou HS - Cristal de quartzo
quartzo ou Ressonador
Para utilizarmos cristal ou ressonadores em nosso chip, devemos conect-lo da seguinte
maneira:

Figura 1.16 Clock gerado a partir de um cristal de quartzo


Nota:
Quando projetamos um circuito com microcontrolador, a regra colocar o oscilador to
perto quanto possvel do microcontrolador, de modo a evitar qualquer interferncia nas
linhas que ligam o oscilador ao chip.
Note que existe dois capacitores ligados em paralelo com o cristal. O valor desses
capacitores variam de acordo com a frquencia do cristal utilizado. Segue uma tabela
apresentando os valores dos capacitores:
Freqncia
cristal

Tipo de oscilador
LP
(cristal
freqncia)

de

baixa 32kHz
200KHz

Valores
tipicos
do capacitor
C1
33pF
15pF

C2
33pF
15pF

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 26 de 74

para

XT (cristal)
HS
(cristal
freqncia)

de

200KHz
1.0MHz
4.0MHz
4.0MHz
alta 8.0 MHz
20.0MHz
25MHz

22-68pF
15pF
15pF
15pF
15-33pF
15-33pF
15-33pF

22-68pF
15pF
15pF
15pF
15-33pF
15-33pF
15-33pF

Para quem no se recorda de como um cristal de quartzo ou cermico, segue suas fotos:

Ressonador cermico
cristal de quartzo
Figura 1.17 Osciladores
Os ressonadores cermicos so comercializados em dois tipos: com
dois terminais e com trs terminais.
Os mais utilizados so os
ressonadores com trs terminais pois no precisam de capacitores
externos. O ressonador com dois terminais obedecem a ligao da
figura 5.4, enquanto no de trs o pino central deve ser aterrado.
segue abaixo o esquema de ligao do ressonador com trs
terminais:
Os ressonadores cermicos uma segunda opo. No to barato
quanto um RC mas bem mais estvel e preciso.
Nota:
Antes de gravarmos um programa no microcontrolador PIC devemos "queimar" os fusivel de
configurao informando qual o tipo de oscilador estamos utilizando em nosso hardware.
Nos projetos do nosso curso iremos utilizar cristal de quartzo de 8 MHz pois garantimos
maior preciso nas rotinas de tempo nas execues das instrues.
OSCSEN (SYSTEM CLOCK SWITCH BIT)
Atravs desse bit de configurao, podemos selecionar o modo de acionamento do segundo
oscilador de baixa frequncia do PIC, mas para isso faz necessrio habilitarmos o T1OSCEN
no TIMER1.
Obs: Caso desejemos utilizar o segundo oscilador (T1OSO e T1OSI), e no venhamos a
programar
o TIMER1 corretamente, automaticamente o bit de configurao do OSCSEN ser
desabilitado.

Configurao dos Fusveis de Energia


PWRTEN
PWRTEN (SYSTEM CLOCK SWITCH BIT)
Atravs desse bit, podemos configurar o modo POWER para o acionamento do PIC, quando este
bit estiver acionado o modo POWER-UP TIMER estar habilitado. O temporizador de power-up
pode ser utilizado para fazer com que o chip permanea em reset por aproximadamente 72ms
aps o chip ter sido ligado. E deve ser utilizado nos casos em que o chip no inicializa
corretamente devido a um tempo muito elevado para a estabilizao da fonte de alimentao
ou do circuito de reset externo.
BROWNBROWN-Out
O detector de brown-out utilizado para provocar o reset da CPU no caso de a tenso de
alimentao cair abaixo de um determinado limite. Uma vez que a tenso retorne ao seu
valor nominal, o circuito de reset liberado e o programa reiniciado.
No PIC18F4520 podemos selecionar 4 tipos de tenses para o BROWN-OUT: 2.0V, 2.7V, 4.2V ou
4.5V.

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 27 de 74

Podemos habilitar ou desabilitar o detector de brown-out, basta selecionar o bit de


configurao caso desejemos habilitar o brown-out.
WDT - Watchdog Timer Enable
Enable (co de guarda)
O watchdog timer ou co de guarda um sistema interno ao microcontrolador que evita que
o programa pare em um determinado ponto. Imagine que voc desenvolveu uma aplicao e que
por um erro de software em certo momento o seu programa pra (entra em loop infinito).
Caso o watchdog dog no seja resetado de tempos em tempos ele ir "estourar", ou seja,
chegar ao final da sua contagem fazendo com que o microcontrolador resete e reinicie
todo o processo.
O tempo mnimo para estouro do watchdog de 18 ms, porm podemos estender esse tempo
atravs do postscale. Com essa funo podemos multiplicar o tempo mnimo de 18 ms com os
seguintes multiplicadores do prescaler: 1:1; 1:2, 1:4, 1:8, 1:16, 1:32, 1:64, 1:128.
CCP2MX
Podemos atravs desse bit definir se queremos multiplexar o mdulo CCP2 com o pino RC1
(CCP2MX = 0) ou com o pino RB3 (CCP2MX = 1)
Debug
Atravs desse bit , podemos habilitar o modo DEBUGGER no PIC. Nesse modo possvel
emular um programa na prpria placa de testes. Emular consiste no processo de, junto com
o computador, testar passo a passo o funcionamento do programa que est rodando no
microcontrolador. Se esta opo estiver ativa, os pinos de gravao RB6 e RB7 deixam de
funcionar como I/O's; caso contrrio, o funcionamento desses pinos fica normal.
LVP (Low Voltagem Programming)
Normalmente quando o PIC gravado, acionado uma tenso de 13Vcc no pino MCLR. Se a
opo LVP estiver ativa, para gravar o PIC basta ter nivel lgico 1 no pino MCLR, mas
neste modo, aps a gravao o pino RA5 do PIC no poder ser utilizado como I/O.
STVREN (Stack Full/Underflow Reset Enable Bit)
O PIC18F4520 possui internamente 31 endereos de pilha. Quando habilitamos esse bit
STVREN, toda vez que ultrapassarmos o limite da pilha o microcontrolador ser resetado.
rea de Protees contra leitura e escrita
Code Protect 0x0800 a 0x1FFF
Caso este bit esteja habilitado, protege contra leitura a memria de programa de 0x0800 a
0x1FFF.
Code Protect 0x2000 a 0x3FFF
Caso este bit esteja habilitado, protege contra leitura a memria de programa de 0x2000 a
0x3FFF.
Code Protect 0x4000 a 0x5FFF
Caso este bit esteja habilitado, protege contra leitura a memria de programa de 0x4000 a
0x5FFF.
Code Protect 0x6000 a 0x7FFF
Caso este bit esteja habilitado, protege contra leitura a memria de programa de 0x6000 a
0x7FFF.
Data EE Read Protect
Caso este bit esteja habilitado, protege contra leitura os 256 bytes da memria EEPROM
(memria no voltil).
Code Protect Boot
Caso este bit esteja habilitado, protege contra leitura a regio de memria Boot (rea da
memria de programa) 0x0000 at 0x0FF0.
Table Write Protect 0x0200 a 0x1FFF
Caso este bit esteja habilitado, protege a memria de programa contra escrita por tabela
no endereo especificado.
Table Write Protect 0x2000 a 0x3FFF
Caso este bit esteja habilitado, protege a memria de programa contra escrtita por tabela
no endereo especificado.
Table Write Protect 0x4000 a 0x5FFF
Caso este bit esteja habilitado, protege a memria de programa contra escrtita por tabela
no endereo especificado.
Table Write Protect 0x6000 a 0x7FFF
Microgenios Treinamentos, Kits de desenvolvimento e muito mais...
Pgina 28 de 74

Caso este bit esteja habilitado, protege a memria de programa contra escrtita por tabela
no endereo especificado.
Data Write Protect
Caso este bit esteja habilitado, protege contra escrita os 256 bytes da memria EEPROM
(memria no voltil).
Table Write Protect Boot
Caso este bit esteja habilitado, protege contra escrtita por tabela a rea de boot.
Config Write Protect
Caso este bit esteja
microcontrolador.

habilitado,

protege

contra

escrita

rea

de

configurao

do

Table Read Protect 0x0800 a 0x1FFF


Caso este bit esteja habilitado, protege a memria de programa contra leitura por tabela
no endereo especificado.
Table Read Protect 0x2000 a 0x3FFF
Caso este bit esteja habilitado, protege a memria de programa contra leitura por tabela
no endereo especificado.
Table Read Protect 0x4000 a 0x5FFF
Caso este bit esteja habilitado, protege a memria de programa contra leitura por tabela
no endereo especificado.
Table Read Protect 0x6000 a 0x7FFF
Caso este bit esteja habilitado, protege a memria de programa contra leitura por tabela
no endereo especificado.

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 29 de 74

Unidade 2 - Canais A/D


Conversor A/D do PIC
O PIC18F4520 possui internamente 12 canais de A/D com resoluo de 10 bits cada. Atravs
de um conversor A/D com resoluo de 10 bits e tenso de referncia de 5V, podemos obter
um valor de 4,8876.. mV, pois 5V/ (2E10 - 1) = 4,8876... mV.
Os conversores A/D dos PICs utilizam uma tcnica de aproximao sucessivas, normalmente
com resoluo de 10 bits, com clock selecionvel pelo usurio e mltiplas entradas
multiplexadas.

Figura 2.1- Canais AD multiplexados


Os registradores que participam da configurao do conversor A/D so: ADCON0, ADCON1 e
ADCON2.
Nosso A/D possui resoluo de 10 bits (8 + 2 bits), onde os valores das converses so
armazenados nos registradores ADRESH e ADRESL.

Registrador ADCON0:
Vejamos o funcionamento de cada bit desse registrador:

ADCON0:

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 30 de 74

Tabela 2.1 ADCON0


CHS3
CHS2
Bit7
Bit6
Bit5
Bit4
CHS3
CHS0: Bit de seleo de canal A/D
HS3 .. CHS0

CHS1
Bit3

CHS0
Bit2

GO_DONE
Bit1

ADON
Bit0

PCFG0

Figura 2.2 Seleo A/D


GO/DONE:
GO/DONE Bit de status da converso A/D
0 - Converso A/D no est sendo realizada
1 - Converso A/D

est sendo realizada

ADON:
ADON Liga ou desliga o A/D
0 - Conversor A/D desligado
1 - Conversor A/D ligado

Registrador ADCON1:
Vejamos o funcionamento de cada bit desse registrador:

ADCON1:
Bit7

Bit6

VCFG1

VCFG0

PCFG3

PCFG2

PCFG1

Bit5

Bit4

Bit3

Bit2

Bit1

VCFG1:
VCFG1 Bit de configurao de tenso de referencia (VREF-)
0 VREF-(AN2)
1 - VSS
VCFG0
VCFG0: Bit de configurao de tenso de referencia (VREF+)
0 VREF+(AN3)
1 - VDD
PCFG3, PCFG2, PCFG1, PCFG0:

bits configurao do A/D


Tabela 2.2 Configurao Pinos A/D

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 31 de 74

Bit0

Registrador ADCON2
ADCON2:
Vejamos o funcionamento de cada bit desse registrador:

ADCON2
ADCON2:
ADFM
Bit7

ACQT2

ACQT1

ACQT0

ADCS2

ADCS1

Bit5

Bit4

Bit3

Bit2

Bit1

Bit6

ADFM : Ajusta o formato do resultado da converso A/D


1 - Justifica a direita
0 - Justifica a esquerda
ACQT2 .. ACQT0:Seleo
de tempo de aquisio
ACQT0

ADCS2 .. ADCS0:Seleo
do Clock do Conversor A/D
ADCS0

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 32 de 74

ADCS0
Bit0

O bit de ADFM tem a funo de organizar o resultado da converso A/D, de forma que o os
valores convertidos sejam justificados a direita ou a esquerda nos registradores ADRESH e
ADRESL. Caso venhamos configurar ADFM = 1, organizamos o valor da converso a direita,
ou seja, os oitos bits menos significativo ser armazendo em ADRESL, e os 2 bits mais
significativo sero armazenados em ADRESH.
Caso ADFM = 0, justificaremos a esquerda os valores de converso, desta forma os oitos
bits mais significativos ficaro em ADRESH e os 2 menos significativo ficar em ADRESL.
Frmula de converso analgico para digital:
Rad = ( Vin - Vref-) * 1023 / (Vref+ - Vref-)
onde:
Rad = Resultado da converso
Vref+ e Vref- = valor de tenso de referncia mxima e mnima
Vin = Tenso de entrada no pino A/D
obs: 1023 o valor mximo de converso do A/D, lembrando que o valor de 0 a 1023.

Trabalhando com AD no MikroC


No MikroC utilizamos os seguinte funo para leitura do conversor A/D do PIC:
Sintaxe:
Adc_Read (canal_ AD)
Na qual 'canal_AD' o canal do conversor AD do PIC que desejamos ler. O nmero do canal
AD depende do tipo de PIC usado.
Exemplo:
unsigned int leitura_ad;
leitura_ad = Adc_Read(0);

//'cria varivel leitura_ad com ranger 0 a 65535


//'l canal ad0 do PIC e salva na varivel leitura_ad

A funo Adc_read salva o valor da converso AD (canal 0


leitura_ad.

pino RA0) na varivel

Lembre-se que o valor da resoluo do AD do PIC18F45200 de 10 bits, e por esse motivo


devemos utilizar uma varivel do tipo inteiro para armazenar o valor do A/D.

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 33 de 74

Unidade 3 Canal PWM do PIC


Introduo
Os controles de potncia, inversores de freqncia, conversores para servomotor, fonte
chaveadas e muitos outros circuitos utilizam a tecnologia do PWM (Pulse Width Modulation)
ou Modulao de Largura de Pulso como base de seu funcionamento.

Fonte Chaveada

ServoMotores

Inversores de Freqncia
PWM a abreviao de Pulse Width Modulation ou Modulao de Largura de Pulso. Para que
se entenda como funciona esta tecnologia no controle de potncia, partimos de um circuito
imaginrio formado por um interruptor de ao muito rpida e uma carga que deve ser
controlada, conforme a figura abaixo:

Quando o interruptor est aberto no h corrente na lmpada e a potncia aplicada nula.


No instante em que o interruptor fechado, a carga recebe a tenso total da fonte e a
potncia aplicada mxima.
Como fazer para obter uma potncia intermediria, digamos 50%, aplicada carga? Uma
idia fazermos com que a chave seja aberta e fechada rapidamente de modo a ficar 50% do

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 34 de 74

tempo aberta e 50% fechada. Isso significa que, em mdia, teremos metade do tempo com
corrente e metade do tempo sem corrente.
A potncia mdia e, portanto, a prpria tenso mdia aplicada carga neste caso 50% da
tenso de entrada.

Figura 3.1 Largura de Pulsos


Veja que o interruptor fechado pode definir uma largura de pulso pelo tempo em que ele
fica nesta condio, e um intervalo entre pulsos pelo tempo em que ele fica aberto. Os
dois tempos juntos definem o perodo e, portanto, uma freqncia de controle. A relao
entre o tempo em que temos o pulso e a durao de um ciclo completo de operao do
interruptor nos define ainda o ciclo ativo.
Variando-se a largura do pulso e tambm o intervalo de modo a termos ciclos ativos
diferentes, podemos controlar a potncia mdia aplicada a uma carga. Assim, quando a
largura do pulso varia de zero at o mximo, a potncia tambm varia na mesma proporo
(duty cycle), conforme est indicado na figura abaixo:

Figura 3.2 Variao mnima ao mximo do duty Cicle do PWM.


Este princpio usado justamente no controle PWM: modulamos (variamos) a largura do
pulso de modo a controlar o ciclo ativo do sinal aplicado a uma carga e, com isso, a
potncia aplicada a ela.

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 35 de 74

Figura 3.3 Variao do duty cicle do sinal PWM

Trabalhando
Trabalhando com PWM no PIC
O microcontrolador PIC18F45200 possui internamente 2 mdulos CCP (Capture/Compare/PWM
Module), CCP1 e CCP2. Podemos manipular com grande facilidade as instrues para gerao
de sinal PWM no MikroC. Acompanhe:
Os comandos para manipular o mdulo CCP1 so os seguintes:

PWM1_Init
PWM1_Set_Duty
PWM1_Start
PWM1_Stop

Funo de Inicializao da gerao do sinal PWM:


No MikroC utilizamos a funo Pwm1_Init()

para informar a freqncia do sinal PWM:

Sintaxe
PWM1_Init (valor_da_freqncia em Hz)
onde:
valor_da freqncia: fator da freqncia em Hz do sinal PWM.
PS.: Consultar datasheet do PIC utilizado para saber a freqncia de oscilao.
Exemplo:
PWM1_Init (4000)

//inicia pwm com freqncia de 4khz

Funo de duty Cycle:


Atravs da funo PWM1_Set_Duty () podemos controlar o duty cycle do sinal PWM. O valor
do duty cycle varia de 0 a 255, onde "0" igual a 0%, "127" igual a 50% e "255" igual a
100%.
Sintaxe:
PWM1_Set_Duty (valor_duty_cycle)
onde:
valor_duty_cycle: valor do tipo char (0 255) que determina a porcentagem do duty cycle
PWM.
Exemplo:
PWM1_Set_Duty (192);

// carrega duty cycle para 75%

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 36 de 74

Figura 3.4 Variao do duty Cicle


Para outros valores de duty cycle calculamos atravs da formula: (Percentual * 255) /100
No caso de configurarmos o duty conforme a figura acima, devemos carregar o seguinte
valor para:
Duty de 10%
PWM1_Set_Duty(25);
// carrega valor 26 pois : (10% * 255) / 100 = 25,5 , como somente
podemos colocar valores inteiros entre 0 a 255, o valor ser arrendondado para 25
Duty de 50%
PWM1_Set_Duty(127);
// carrega valor 127 pois : (50% * 255) / 100 = 127,50 , como
somente podemos colocar valores inteiros entre 0 a 255, o valor ser arrendondado para
127
Duty de 90%
PWM1_Set_Duty(229);
// carrega valor 229 pois : (90% * 255) / 100 = 229,50 , como
somente podemos colocar valores inteiros entre 0 a 255, o valor ser arrendondado para
229
Funo de Start e Stop:
Atravs da funo Pwm_Start, damos incio a gerao do sinal PWM no PIC, e atravs da
funo Pwm_Stop finalizamos a gerao do sinal Pwm.
Sintaxe:
Pwm_Start
Pwm_Stop

inicial a gerao do sinal PWM no mdulo CCP1 do PIC


interrompe a gerao do sinal PWM no mdulo CCP1 do PIC

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 37 de 74

Unidade 4 - TIMERS/COUNTERS
Os Timers/Counters
Timers/Counters
Os timers so ferramentas internas dos microcontroladores em
contagem de tempo, eventos, temporizao entre outras funes.

geral

que

servem

para

O PIC18F4520 possui internamente 4 TIMERS:

TIMER0
TIMER1
TIMER2
TIMER3

Vamos conhecer cada um desses temporizadores:

TIMER0
O TIMER0 um temporizador/contador de 8 ou 16 bits que possuem duas funes bsicas:
Contagem de
RA4/T0CKI;

eventos

externos

(quando

entrada

de

clock

feita

por

meio

do

pino

Temporizao (contagem de tempo) quando os pulsos de contagem proveniente do clock


interno do PIC (temporizao baseado no ciclo de mquina).
O TIMER0 pode ser configurado para trabalhar com prescaler dedicado. O prescaler nada
mais do que um contador/divisor programvel que utilizado para reduzir a freqncia
do sinal de clock aplicado ao TIMER0 por um fator conhecido.

Figura 4.1 Diviso do Prescaler


O valor do prescaler pode ser configurado a partir dos bits T0PS2, T0PS1 e T0PS0 do
registrador T0CON (TIMER0 CONTROL REGISTER);
O prescaler passa a ser uma importantssima ferramentas do timer, pois atravs dele
conseguimos gerar tempos muito maiores.
Quando o TIMER0 configurado para operar no modo de 8 bits, podemos efetuar contagens de
0 a 255 (limite da capacidade para 8 bits). Quando a contagem chega at seu valor mximo
de 255, o prximo pulso acarretaria o que chamamos de "estouro de contagem", fazendo com
que o valor de contagem de incio novamente a partir do 0 (zero).
No caso anterior, caso tenhamos a interrupo do TIMER0 habilitada, no momento que ocorre
o "estouro de contagem", seria gerado um pedido de interrupo do TIMER0.
No modo 16 bits do TIMER0, seu funcionamento igual ao modo de 8 bits, porm neste cado
a faixa de contagem de 0 a 65535.
Os valores de iniciais de temporizao/contagem devem ser carregados nos registradores
especiais intitulado de TMR0L (TIMER0 Module Low Byte Register) e TMR0H (TIMER0 Module
Hight Byte Register);
Quando programamos os timers para atuarem como temporizadores, estamos considerando que
os pulsos que incrementam os registradores de contagem so proveniente do valor do
oscilador / 4, ou seja, caso estivermos utilizando um cristal de 4MHz, iremos incrementar
em uma unidade os registradores de contagem a cada 1 us, pois 4Mhz/4
= 1MHz = 1us
(microsegundos).
Dica:
Repare que a unidade resultante da diviso da Frequencia do oscilador / 4 (ciclo de
mquina) esta em MHz ( unidade de frequncia), neste caso para sabermos o tempo
(periodo), basta dividir 1 / seu valor.
Ex:

1 / (Fosc / 4 )

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 38 de 74

Para um cristal de 8 MHz teremos o seguinte tempo de ciclo de mquina:


1 / (8 / 4) = 0,5 us

(microsegundos).

Os Registradores relacionados ao TIMER0 so:


Tabela 4.1- Registrador relacionados com o TIMER0

TMR0L um registrador de contagem de 8 bits que possui a funo de armazenar a parte


baixa do valor de contagem programada do TIMER0.
TMR0H um registrador de contagem de 8 bits que possui a funo de armazenar a parte
alta do valor de contagem programada do TIMER0.
Os registradores TMR0L e TMR0H juntos formam um nico registrador de 16 bits, que nos
permite uma contagem mxima de 0 a 65535.
INTCON um registrador de 8 bits responsvel pela configurao do modo de operao do
TIMER0. Podemos definir atravs desse registrador o valor do prescaler que desejamos
acionar, o modo de operao de contagem de 8 ou 16 bits, seleo da fonte de clock
(interna ou externa) para o timer, seleo de disparo do timer atravs de borda de subida
ou borda de descida do clock externo no pino RA4/T0CK1.
Abaixo segue o diagrama esquemtico do Timer0.

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 39 de 74

Figura 4.2 Diagrama interno do TIMER0


O registrador T0CON responsvel pela configurao pelo modo de operao do Timer0, de
vital importncia conhecer todas as funes de seus bits.

T0CON: (TIMER0 Counter Register)


Tabela 4.2 T0CON
TMR0ON
Bit7

T08BIT
Bit6

T0CS
Bit5

T0SE
Bit4

PSA
Bit3

T0PS2
Bit2

T0PS1
Bit1

T0PS0
Bit0

TMR0ON: Bit de controle para ligar e desligar a contagem do TIMER0;


0 desabilita a contagem do TIMER0
1 - Habilita a contagem do TIMER0
T08BIT: Bit de seleo de funcionamento do TIMER0 em 8 ou 16 bits;
0 - TIMER0 configurado para funcionar como contador/temporizador em 16 bits;
1 - TIMER0 esta configurado para funcionar como contador /temporizador de 8 bits;
T0CS:

Bit de seleo de fonte de clock para o TIMER0;

0 - A fonte de clock proveniente do meio interno do chip


1 - A fonte de clock proveniente do pino T0CKI (meio externo)
T0SE: Bit de seleo de borda (vlido somente caso a fonte de clock seja pelo meio
externo ao chip)
0 - Contagem do timer ocorre por borda de subida no Pino T0CKI
1 - O incremento do timer ocorre na borda de descida no pino T0CKI
/PSA: Bit de seleo da utilizao do prescaler;
1 - TIMER0 no utiliza prescaler. A cada alterao do pulso de clock, corre incremento de
uma unidade nos registradores de contagem.
Microgenios Treinamentos, Kits de desenvolvimento e muito mais...
Pgina 40 de 74

0 - TIMER0 utiliza prescaler.


T0PS2; T0PS1; T0PS0 : Bits de seleo de fonte de prescaler
Tabela 4.3 - Bits de seleo de fonte de prescaler(Timer 0)
T0PS2
1
1
1
1
0
0
0
0

T0PS1
1
1
0
0
1
1
0
0

T0PS0
1
0
1
0
1
0
1
0

Prescaler
1:256
1:128
1:64
1:32
1:16
1:8
1:4
1:2

Configurao do Prescaler:
Como sabemos, atravs do prescaler conseguimos tempos maiores
entendermos melhor sua utilizao acompanhe o exemplo abaixo:

com

os

timers,

para

Digamos que o ciclo de mquina no PIC sej de 1us e o TIMER0 esteja configurado no modo 8
bits (contagem de 0 a 255) e sem o presacaler. O TIMER0 ira "estourar" sua contagem em
256us.
Agora digamos que para o mesmo anunciado anterior, configuramos e acionamos o prescaler
para 1:2. Nosso intervalo de "estouro" do TIMER0 no mais ser 256us mas sim 512us.
Se ao invs de prescaler de 1:2 utilizarmos prescaler 1:32, o tempo agora ser de 256us x
32 = 8192us.
Como calcular o tempo de estouro do TIMER0?
Para calcular o tempo de "estouro" do TIMER com prescaler, utilizamos a seguinte frmula:
Tempo de estouro:

ciclo de mquina x prescaler x (modo 8 /16bits valor de Contagem ).

Em que:
Ciclo de mquina: o valor da relao entre: 1 / (Fosc / 4 ), onde Fosc justamente a
frequencia do cristal.
Obs: manter modo PLL desabilitado, iremos estudar esta funo mais adiante.
Prescaler : o fator de diviso programado no prescaler.
Modo 8/16bits: o modo de contagem programado no TIMER0, para 8 bits o valor 256, e
para 16 bits, o valor ser de 65536.
Valor de contagem: o valor de carregagem no registrador de contagem TMR0H eTMRL.
Exemplo:
Precisamos ligar e desligar um rel a cada 1 segundo ( um segundo ligado e um segundo
desligado), estamos utilizamdo um cristal de 8Mhz, utilizaremos para isso os recursos do
Temporizador Timer0, acompanhe:
Calculo do tempo de estouro do Timer0:
T0CON = 0b10000110;
TMR0L = 0xF7;
TMR0H = 0xC2;

//modo 16 bits, com prescaler 1:128, fonte de clock interno


//carrega valores de contagem C2F7 equivale a

Formula:
Ciclo de Mquina x prescaler x (modo 8 /16 bits valor de carregem nos registradores de
contagem)
Tempo de estouro: 0.5us
Tempo de estouro:

x 128 x

(65536 49911 )

1.000.000 us (microsegundos) ou 1 segundo.

O registrador INTCON
O registrador INTCON possui diversar funes, entre elas a de habilitar algumas
interrupes do PIC (veremos mais adiante no nosso curso) e de armazenar os bits de
estatus de estouro do TIMER0:

INTCON (Interrupt Control)

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 41 de 74

Tabela 4.4 INTCON


GIE/GIEH
Bit7

PEIE/GIEL
Bit6

TMR0IE
Bit5

INT0IE
Bit4

RBIE
Bit3

TMR0IF
Bit2

INT0IF
Bit1

RBIF
Bit0

Iremos estudar todos esses bits mais adiante em nosso curso, pois eles tratam das
configuraes das interrupes, e neste momento no importante conhecer alguns deles.
Vamos apresentar somente os bits que so utilizados nos TIMERS.
INTCON. GIEH = bit de acionamento da "chave geral das interrupes" e habilitao das
interrupes de alta prioridade
0 -

liga a chave geral das interrupes

1 -

desliga a chave geral das interrupes

INTCON. GIEL = bit de habilitao das interrupes de baixa prioridade


0 - TIMER0 no ocorreu estouro de contagem (overflow)
1 - TIMER0
software.

ocorreu

INTCON.TMR0IE = bit
contagem.

estouro

de

contagem

(overflow).

Este

bit

deve

ser

apagado

por

que habilita interrupo do TIMER0 na ocorrncia do estouro de

0 - Desabilita interrupo do TIMER0 por ocorrencia de estouro de contagem (overflow)


1 - Habilita interrupo do TIMER0 por ocorrncia de estouro de contagem (overflow).
INTCON. TMR0IF = bit sinalizador de estouro do TIMER0
0 - TIMER0 no ocorreu estouro de contagem (overflow)
1 - TIMER0
software.

ocorreu

estouro

de

contagem

(overflow).

Este

bit

deve

ser

apagado

por

Aprendendo a programar os TIMER0:


Conhecemos os registradores responsveis pela configurao do TIMER0 do PIC, agora vamos
configur-los:
Vamos nos recordar da frmula do TIMER0:
Tempo de estouro:

ciclo de mquina x prescaler x (modo 8 /16bits valor de contagem).

Exemplo 1 :
Se tivermos conectado ao nosso PIC um cristal de 8 MHz e o TIMER0 seja programado como
temporizador, com prescaler de 1:4, modo 8 bits e contagem inicial em TMR0L = 0, teremos
ento:
Tempo de estouro:

ciclo de mquina x prescaler x (modo 8 /16bits valor de contagem).

Tempo de estouro: 0,5us * 4 *(255 - 0)


Tempo de estouro: 510us
Exemplo 2 :
Se tivermos conectado ao nosso PIC um cristal de 8 MHz e o TIMER0 seja programado como
temporizador, com prescaler de 1:256, modo 16 bits e contagem inicial em TMR0L = 0 e
TMR0H = 0, teremos
ento:
Tempo de estouro:

ciclo de mquina x prescaler x (modo 8 /16bits valor de contagem).

Tempo de estouro: 0,5us * 256 * (65536 - 0)


Tempo de estouro: 8.388.608us, ou seja, 8, 388 segundos
Obs:
Repare que este o tempo mximo de estouro do TIMER0
Modo contador do TIMER0 do PIC:
Neste novo exemplo de programa, vamos programar o TIMER0 do PIC para trabalhar como
contador de pulsos externos. Neste modo, os pulsos externos, so aplicados no pino
RA0/T0CK1 do PIC. Devemos contar apenas 10 pulsos externos, que neste caso,
configuraremos o TIMER0 do PIC no modo 8 bits com prescaler 1 : 1, e os pulsos sero
lidos por borda de descida. Ao completar a contagem de 10 pulsos, o led conectado ao pino
RB1 do PIC dever acender para sinalizar o fim da contagem.
Esquema eltrico:

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 42 de 74

Figura
Figura 4.3 Aplicao com o modo contador do TIMER0
Para realizar o seguinte desafio necessrio configurar os seguintes registradores do
TIMER0:
INTCON.TMR0IF (Bit de estouro do TIMER0)
TMR0L (registrador de contagem do TIMER0)
T0CON (registrador de configurao do modo de operao do TIMER0)

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 43 de 74

Programa:
/*'****************************************//**********************************
'Microgenios | MicroControladores
*
'Site: www.Microgenios.com.br
*
'Autor: Fernando Simplicio de Sousa
*
' ***************************************//**********************************
'Programa exemplo: TIMER0_Contador.c
'Cristal: 8MHz - modo HS
*
'Microcontrolador PIC18F45200 Microchip
*
'Tools: Kit PICgenios PIC18F Mdulo Profissional Microgenios
'Configurao: DIP1 - Chave 09 -ON
'****************************************//**********************************
'Objetivo:
'Este programa tem por objetivo ativar o modo contador do Timer0
'OBS: ESTE PROGRAMA PARA FINS DE ESTUDOS. NO H COMO SIMULAR MODO DE
'CONTAGEM COM O TIMERO NO KIT PICGENIOS, POIS O SENSOR INFRAVERMELHO ESTA LIGADO
'NO PINO T1CKI, AO INVS DE T0CKI
'****************************************//**********************************/
void main(){
TRISD = 0;
PORTD = 0;

// 'define portd como sada


// 'zera portd

TRISA.RA4 = 1; //'pino contador T0CKI configurado como entrada


/*'obs: este pino naturalmente dreno aberto, neste caso necessrio pull-up
'ou pull-down externo
'******************************calculo temporizao 1 segundo ***************
'calculo de temporizao de 1 segundo:
'tempo = ciclo_maquina * prescaler * (modo 8/16 - valor inicial)
'logo
'1000.000us = 0.5us * 128 * (65536 - valor_inicial)
'valor inicial = 49911 ou
C2F7h
*/
T0CON = 0B11101000;//'modo contador, prescaler off, borda descida, modo 8bits
TMR0L = 246; //'contar 10 pulsos | 256 - 10 = 246 carrega valores de contagem
INTCON.TMR0IF = 0; //'apaga flag de estou do timer0
while (1){
if (INTCON.TMR0IF==1){
PORTD.RD0 = ~ PORTD.RD0; // 'inverte o valor do led1
TMR0L = 246; //'recarga do timer0
INTCON.TMR0IF = 0; //'apaga flag de estou do timer0
}
}
}

Estudo detalhado do programa:


Repare que o nos comandos abaixo que o registrador T0CON foi configurado como contador de
pulsos externos, modo de operao do TIMER0 de 8 bits, com prescaler 1:1.
O registrador de contagem TMR0L o registrador onde ser armazenado os valores de
contagem dos pulsos externos, e neste caso ele foi pr configurado com o valor 246,
devido a necessidade de contarmos apenas 10 pulsos. Devemos lembrar que os registradores
de contagem do TIMER0 so incrementados em 1 unidade e contam para cima, neste caso, como
desejamos programar o TIMER0 para que a cada 10 pulsos no pino RA0/T0CK1 seja gerado um
estouro, devemos carregar em TMR0L o valor da diferena entre o valor mximo de contagem
para o modo 8 bits, que 256, pelo valor da quantidade de pulsos a ser contado, que
neste cado 10. Ento teremos:
256 - 10 = 246
Utilizaremos modo contador no Kit PICgenios quando utilizarmos o TIMER1 nos projetos.
Mais adiante Iremos utilizar interrupes com nossos TIMERS/COUNTERS.

TIMER1
O TIMER1:
Realizamos nas unidades passadas um estudo no muito aprofundado sobre as funes e
caractersticas dos TIMERS do PIC. Agora chegou o momento de estudarmos mais
Microgenios Treinamentos, Kits de desenvolvimento e muito mais...
Pgina 44 de 74

profundamente os recursos e a programao dos registradores e modos de trabalho desses


temporizadores e contadores.
O TIMER1 pode operar como temporizador ou como contador de 16 bits, suas caractersticas
so muito parecida com a do TIMER0.
Dizemos que o timer est operando como temporizador quando a referncia do clock de
incremento da contagem realizada pelo clock interno do PIC, e dizemos que o timer esta
operando como contador quando a referncia do
clock de incremento da contagem
proveniente de um clock externo ao PIC. (pulso aplicado no pino RB6/T1OSO/T1CK1).
Registradores de configurao do TIMER1:
Tabela 4.5 Registrador relacionados com o TIMER1 (as clulas em branco)

P1R1: um registrador onde armazenado os bits de status das interrupes e estouro dos
timers.
P1E1: um registrador de 8 bits onde habilitado as interrupes do PIC.
TMR1L um registrador de contagem de 8 bits que possui a funo de armazenar a parte
baixa do valor de contagem programada do TIMER0.
TMR1H um registrador de contagem de 8 bits que possui a funo de armazenar a parte
alta do valor de contagem programada do TIMER0.
Os registradores TMROL e TMR0H juntos formam um nico registrador de 16 bits, que nos
permite uma contagem mxima de 0 a 65535.
T1CON
TIMER1.
acionar,
(interna
ou borda

um registrador de 8 bits responsvel pela configurao do modo de operao do


Podemos definir atravs desse registrador o valor do prescaler que desejamos
o modo de operao de contagem de 8 ou 16 bits, seleo da fonte de clock
ou externa) para o timer, seleo de disparo do timer atravs de borda de subida
de descida do clock externo no pino RB6/T10S0/T1CK1.

T1CON: (TIMER1 CONTROL REGISTER):


Tabela 4.6 T1CON
RD16
Bit7

--Bit6

T1CKPS1
Bit5

T1CKPS0
Bit4

T10SCEN
Bit3

T1SYNC
Bit2

TMR1CS
Bit1

TMR1ON
Bit0

RD16: bit de leitura e escrita em 16bits (utilizado para o modo comparador do canal CCP)
1 leitura e escrita em 16 bits habilitada
0 leitura e escrita em 16 bits desabilitada
T1CKPS1; T1CKPS0: Bits de seleo de fonte de prescaler
Tabela 4.7 Bits de seleo de fonte de prescaler
T1CKPS1
1
1
0
0
T1OSCEN:

T1CKPS0
1
0
1
0

Prescaler
1:8
1:4
1:2
1:1

Habilitao do oscilador externo de baixa frequencia nos pinos T1OSO e T1OSI

0 - Oscilador desligado
1 - Oscilador Ligado
T1SYNC: Controle do sincronismo interno. Caso TMR1CS = 0, esse bit descartado
0 - Sincronismo ligado

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 45 de 74

1 - Sincronismo desligado
TMR1CS: Bit de seleo de clock;
0 - A base de clock para o TIMER1 interna (Fosc/4);
1 - Clock externo no pino RC0/T1CK1;
TMR1ON: Habilita TIMER1;
0 - TIMER1 desligado
1 - TIMER1 ligado
Obs: Bit6 no implementado, lido como "0"
Abaixo o diagrama simplificado do Timer1:

Figura 4.4 Diagrama interno do TIMER1


O TIMER1 opera de maneira idntica a do timer anterior, suas diferenas bsicas que
este novo timer pode operar como temporizador para o modo Capture/Compare para o modo
CCP. Foi implementado neste novo Timer a possibilidade de ligarmos um outro cristal
oscilador, de forma que nos permite ligar cristais de baixa freqncia, tais como 32,768
KHz, para maiores preciso na temporizao.
Nota:
Obs: Este segundo cristal dever ser ligado entre os pinos RC0 e RC1. Em hiptese alguma
poderemos dispensar o uso do cristal oscilador principal Fosc.
A figura apresenta o diagrama de funcionamento do TIMER1 operando com o oscilador de
baixa freqncia.

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 46 de 74

Figura 4.5 Circuito interno do modo RTC


A figura seguinte mostra para ns claramente
oscilador conectado ao nosso microcontrolador.

uma

aplicao

em

hardware

do

segundo

Figura 4.6 Ligao do segundo oscilador ao microcontrolador PIC

Programando o TIMER1 do PIC.


Para exemplificar a utilizao do TIMER1 do PIC vamos analizar um exemplo de programa:
O Hardware:

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 47 de 74

Figura 4.7 Esquema Eletrnica


Programa:

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 48 de 74

/*'****************************************//**********************************
'Microgenios | MicroControladores
*
'Site: www.Microgenios.com.br
*
'Autor: Fernando Simplicio de Sousa
*
' ***************************************//**********************************
'Programa exemplo: TIMER1.c
'Cristal: 8MHz - modo HS
*
'Microcontrolador PIC18F45200 Microchip
*
'Tools: Kit PICgenios PIC18F Mdulo Profissional Microgenios
'Configurao: DIP1 - Chave 09 -ON
'****************************************//**********************************
'Objetivo:
'Este programa tem por objetivo ativar a temporizao mxima do TIMER1
'utilizando cristal de 8Mhz
'****************************************//**********************************/
void main(){
/*'******************************calculo temporizao timer1 ***************
'calculo de temporizao mxima do timer1
'tempo = ciclo_maquina * prescaler * (modo 16 - valor inicial)
'logo
'Tempo = 0.5us * 8 * (65536 - 0)
'Tempo = 262.144 us ou 262ms */
TRISD = 0;
PORTD = 0;

//'define portb como saida


//'apaga todos os leds conectados ao portd

T1CON = 0b10110001; //'liga TIMER1, prescaler 1:8, modo 16bits.


TMR1L = 0;
//'carrega valor de contagem baixa do TIMER1
TMR1H = 0;
//'carrega valor de contagem alta do TIMER1
PIR1.TMR1IF = 0;
//'apaga flag de estouro do TIMER1
while (1){
if (PIR1.TMR1IF == 1) {
PORTD.RD0 = ~PORTD.RD0; //'inverte o valor do led1
TMR1L = 0;
//'carrega valor de contagem baixa do TIMER1
TMR1H = 0;
//'carrega valor de contagem alta do TIMER1
PIR1.TMR1IF = 0;
//'apaga flag de estouro do TIMER1
}
}
}
O programa acima configura o TIMER1 para operar em 16bits com prescaler 1:8, clock
interno. A cada estouro do TIMER1, o led conectado o portd.rd0 invertido.
Anlise detalhado do programa:
Sabendo que nosso microcontrolador esta trabalhando com um cristal externo de 8MHz, vamos
calcular o tempo de estouro do TIMER1:

Configurao do TIMER1:
Modo de Operao: 16 bits (timer1 somente opera no modo 16 bits)
Fonte de oscilao: Ciclo interno.
Prescaler: 1:8

Calculo de Estouro do TIMER1:


Frmula:
Tempo: ciclo de mquina * prescaler * (modo 16bits valor de carga)
Portanto
Tempo: 0.5

* 8

* (65536 0) = 262.144us ou 262ms

TIMER2 :
O TIMER2 um timer de 8 bits com recarga automtica. Esse TIMER tem um registrador de
configurao, um de contagem e outro de comparao. Ele possui um registrador de contagem
de 8 bits ( 0 a 255) chamado TMR2. Diferentemente dos outros timers, o TIMER2 possui um
prescale e um postscaler. Os registradores especiais responsvel pela configurao de
temporizao do TIMER2 so:

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 49 de 74

T2CON (TIMER2 CONTROL REGISTER): Configura


Configura o setup do TIMER2;
TMR2: Registrador de contagem do TIMER2 (8 bits);
PR2: Registrador de comparao do TIMER2
Dizemos que o TIMER2 um timer com recarga automtica pois quando o valor carregado em
PR2 igual ao de contagem TMR2, o valor de TMR2 zerado e inicia-se uma nova contagem,
ou melhor dizendo, temporizao.
Os registradores relacionados com o TIMER2 so:
Tabela 4.8 Registradores responsveis pela configurao do TIMER2

Atravs do registrador T2CON, podemos configurar o modo de operao do TIMER2, tais como:
valor do prescale e postcale e ligar ou desligar o timer2.
Veja o diagrama esquemtico de construlo do TIMER2: (procure sempre comparar um TIMER
com o outro, pois dessa forma voc saber qual mais adequado para sua aplicao).

Figura 4.8 Diagrama de construo interna do TIMER2

Registradores de configurao do TIMER2:


T2CON: (TIMER2 CONTROL REGISTER):
Microgenios Treinamentos, Kits de desenvolvimento e muito mais...
Pgina 50 de 74

Tabela 4.9 T2CON


--Bit7

TOUTPS3
Bit6

TOUTPS2
Bit5

TOUTPS1
Bit4

TOUTPS0
Bit3

TMR2ON
Bit2

T2CKPS1
Bit1

T2CKPS0
Bit0

TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0: Bits de ajuste do postcale:


Tabela 4.10 Bits de ajuste do postcale
TOUTPS3
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1

TOUTPS2
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1

TOUTPS1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1

TOUTPS0
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1

Postscale
1:1
1:2
1:3
1:4
1:5
1:6
1:7
1:8
1:9
1:10
1:11
1:12
1:13
1:14
1:15
1:16

O funcionamento do postcale muito semelhante ao prescaler, sua diferena bsica est na


contagem. Em vez de contar pulsos de ciclos de mquina, o postscale conta n comparaes
do TMR2 com PR2. Aps n comparaes, o flag de estouro do TIMER2 sinalizado com nvel
lgico 1.
TMR2ON: Habilitao do TIMER2;
0 - TIMER2 desligado
1 - TIMER 2 ligado
T2CKPS1 T2CKPS0: Bits responsveis pelo ajuste de prescaler:
Tabela 4.11 Bits responsveis pelo ajuste de prescaler(TIMER 2)
T2CKPS1
0
0
1

T2CKPS0
0
1
x

Prescaler
1:1
1:4
1:16

X pode ser 1 ou 0
Tempo mximo do TIMER2 com cristal de 8Mhz:
Tempo = ciclo de maquina * prescaler * postscale * (PR2 + 1)
Tempo = 0.5us * 16 * 16 * (255 +1)
Tempo = 32.768us ou 32ms
A partir disso voc sabe que no tem como programar tempos maiores que 32 milisegundos
com seu TIMER2, neste caso necessrio repetir n ciclos de estouros, utilizando
variveis de incrementos.
OBS: Quando utilizamos a funo PWM do mdulo CCP os registradores de contagem do TIMER2
so comprometidos, por esse motivo no podemos utilizar a funo de temporizador do
TIMER2 e PWM ao mesmo tempo nos nossos projetos.

TIMER3
O TIMER3 :
O TIMER3 um temporizador e contador de 16 bits. Possui internamente dois registradores
de 8 bits, TMR3L e TMR3H, que juntos formam um registrador de 16 bits (contagem de 0 a
65535). Diferente do TIMER1, o TIMER3 somente pode operar no modo 16 bits.
Os registradores relacionados com o TIMER3 so:
Tabela 4.12 Registradores relacionados com o TIMER3

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 51 de 74

Atravs do registrador T3CON, podemos configurar o modo de operao do TIMER3, tais como:
valor do prescale ,
ligar ou desligar o TIMER3, seleo de clock interno ou externo
(contador) e fonte do timer para o mdulo CCP do PIC.

Figura 4.9 Estrutura interna do TIMER3

Registradores de configurao do TIMER3:


O registrador de controle do TIMER3;
T3CON: (TIMER3 CONTROL REGISTER);
Tabela 4.13 T3CON
RD16
Bit7

T3CCP2
Bit6

T3CKPS1
Bit5

T3CKPS0
Bit4

T3CCP1
Bit3

T3SYNC
Bit2

TMR3CS
Bit1

RD16: bit de leitura e escrita em 16bits


0 leitura e escrita em 16 bits desabilitada (utilizado no modo CCP)
1 leitura e escrita em 16 bits habilitada (utilizado no modo CCP)

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 52 de 74

TMR3ON
Bit0

T3CCP2 T3CCP1: Habilita a fonte de timer para o mdulo CCP;


Tabela 4.14 Habilita a fonte de timer para o mdulo CCP
T3CCP2
0
0
1
1

T3CCP1
0
1
0
1

Prescaler
TIMER1 fonte
TIMER1 fonte
TIMER3 fonte
TIMER3 fonte

de
de
de
de

timer
timer
timer
timer

para
para
para
para

os mdulos CCP
o mdulo CCP1
o mdulo CCP2
os mdulos CCP

T3CKPS1 T3CKPS0: bits de ajuste do prescaler do TIMER3;


Tabela 4.15 bits de ajuste do prescaler do TIMER3
T3CKPS1
0
0
1
1

T3CKPS0
0
1
0
1

Prescaler
1:1
1:2
1:4
1:8

/T3SYNC: Controle de sincronismo interno. Caso TMR3CS = 0, este bit descartado;


obs: este bit somente utilizado para trabalhar com o perifrico RTC (segundo oscilador
ligado aos pinos T1OSO e T1OSI).
0 - Sincronismo ligado
1 - Sincronismo desligado
TMR3CS: Seleo de Clock
0 - Clock Interno -TIMER3 programado como Temporizador
mquina)
1 - clock externo no pino T1CK1

( clock baseado no ciclo de

- Habilitar modo contador do TIMER1

TMR3ON: Habilitao do TIMER3;


0 - TIMER3 desligado
1 - TIMER3 ligado
Para exemplificar a utilizao do TIMER3, vamos efetuar algumas pequenas modificaes no
programa exemplo anterior, cuja finalidade piscar um Led conectado ao pino RB0 do PIC
em intervalos de 1 segundo. (ligado e desligado).
Primeiramente devemos programar o TIMER3:
Para este exemplo, vamos programar o TIMER3 no modo 16 bits (contagem de 0 a 65535
lembre-se que TIMER3 somente opera em 16 bits), prescaler de 1:8, clock interno, cristal
de 8Mhz
e modo HSPLL desativado (multiplicador do ciclo de mquina), temos ento a
seguinte formla de temporizao:
Tempo de estouro do TIMER3 =
carga inicial)

ciclo de mquina

* prescaler * (modo 16bits - valor de

Antes de comearmos a programar nossa temporizao de 1 segundo, vamos descobrir


temporizao mxima suportada pelo TIMER3. (com cristal de 8MHz)
Tempo TIMER3 =

0.5us * 8 * (65536 0)

Logo
Tempo TIMER3 = 262.144us ou 262ms (valor igual ao do TIMER1)
Nota:
Faa a comparao entre o TIMER1 com o TIMER3
e repare que suas estruturas so muito
semelhantes, inclusive seus modos contadores compartilham o mesmo pino RC0 (T1CKI) para
leitura dos pulsos externos.
Como desejamos que o estado do Led pisque a cada 1 segundo, somos obrigados a criar uma
rotina em C para multiplicar n vezes o estouro do TIMER3, pois nossa temporizao mxima
de 262ms (com cristal de 8MHz).
Vamos prograr o TIMER3 para estourar a cada 250ms, e atravs de alguns comandos em C
vamos mutiplicar esta temporizao em 4x para que tenhamos 1 segundo (4 * 250ms = 1
segundo).

Unidade 5 Programando as Interrupes do PIC


As Interrupes do PIC18F4520

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 53 de 74

Introduo
Diferente da famlia PIC16F da Microchip, essa nova famlia PIC18F implementa prioridades
nas interrupes.
Na memria FLASH do PIC18F4520 possui dois endereos de interrupo: um chamado de vetor
de alta prioridade, cujo endereo 0008h, e outro chamado de vetor de baixa prioridade,
cujo endereo 0018h.

Figura 5.1 Vetor de Alta Prioridade e Baixa Prioridade de Interrupo srie PIC18F
No PIC18F4520 existem diversos tipos de interrupes, segue algumas:

Interrupo
Interrupo
Interrupo
Interrupo
Interrupo
Interrupo
Interrupo
Interrupo
Interrupo
Interrupo
Interrupo
Interrupo
Interrupo
Interrupo

do TIMER0
do TIMER1
do TIMER2
do TIMER3
por mudana de estado (pinos RB4, RB5, RB6, RB7)
externa INT0
externa INT1
externa INT2
na converso AD
na recepo serial
na transmisso serial
do mdulo CCP
de escrita na EEPROM/FLASH
por queda de tenso.

As prioridades de interrupo funcionam da seguinte maneira: Caso venhamos programar


interrupes de alta e baixa prioridade em nosso programa, e por um determinado momento
seja solicitado ao mesmo tempo as duas interrupes, a interrupo de alta prioridade
ser atendida primeiro. Ao trmino da execuo da rotina de interrupo de alta
prioridade, automaticamente a rotina de baixa prioridade comea o seu tratamento. Quando
uma rotina de baixa prioridade estiver sendo executada e ocorrer uma interrupo de alta
prioridade, a interrupo de alta prioridade ser atendida priomeiro, e ao seu trmino, a
interrupo de baixa prioridade continuar a sua execuo do ponto seguinte onde parou.
Se formos traar um grfico sobre as prioridades de interrupo e seus acionamentos,
teremos:

Figura 5.2 Diagrama de Interrupo


Interrupo x Tempo
Atravs do grfico ficou fcil perceber que uma rotina de interrupo de alta prioridade
pode interromper a qualquer momento qualquer rotina de menor prioridade de interrupo ou
execuo.

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 54 de 74

Como funciona as interrupes?


Podemos resumidamente comparar as interrupes
instalao eltrica de uma residncia qualquer.

do

nosso

microcontrolador

com

uma

Repare no diagrama:

Figura 5.3 Exemplo para compreeno das Interrupes do PIC


Repare que temos em nosso exemplo uma chave geral, esta chave geral habilita ou
desabilita todas as interrupes interna do nosso microcontrolador, mas o fato dela estar
ativado no representa que as interrupes dos perifricos esto habilitadas. Caso
necessitarmos habilitar a interrupo de algum perifrico interno do PIC, como exemplo, o
TIMER0, faz necessrio ligar a chave geral e o interruptor de parede, ou seja, o IE do
TIMER0.
Iremos apartir de agora apresentar os comandos responsveis pela configurao geral das
interrupes.
//Configurao Geral das interrupes
INTCON.GIEH = 1; /*habilita a chave geral das interrupes e habilita o vetor de alta
prioridade de interrupo*/
INTCON.GIEL = 1; //habilita o vetor de baixa prioridade de interrupo
RCON.IPEN = 1; //define caracterstica da famlia PIC18F com 2 level de prioridade de
interrupo
Diferente da famlia PIC16F, a famlia PIC18F possui dos vetores de interrupo. Pensando
nos projetos da famlia PIC16F, a Microchip criou uma estrutura interna nos PIC18F de
forma a permitir a micrao de software com facilidade.
Caso venhamos a colocar nvel lgico zero em rcon.ipen herdamos caractersticas
famlia PIC16F que possui apenas 1 vetor de interrupo (endereo 0004h da Flash).
Caso necessitarmos trabalhar com dois nveis de prioridade de interrupo
programa somos obrigados a habiltar o bit rcon.ipen = 1 e intcon.giel = 1.

em

da

nosso

Bom, agora que j programamos as configuraes gerais de interrupo do nosso


microcontrolador,
podemos habilitar a
interrupo particular
de um
determinado
perifrico. Para exemplificar vamos programar a interrupo do TIMER0:
Primeiro de tudo devemos conhecer a nomenclatura utilizado pela Microchip.
Nomenclatura:
Para habilitarmos a interrupo de qualquer perifrico precisamos configurar 3 bits:
(alm das configuraes gerais que j conhecemos)

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 55 de 74

Bit com final: IF, IP e IE:


IF Flag de interrupo
IP Prioridade de interrupo
IE Habilitao de Interrupo
Logo a interrupo do TIMER0 ser:
_________.TMR0IF = 0 'configurao inicial, flag de estouro do TIMER0 apagado (voc no
quer programar um timer com seu alarme j tocando, no ?)
_________.TMR0IP = 1 'define a prioridade de interrupo do TIMER0, neste caso, alta
prioridade.
_________.TMR0IE = 0 'habilita a chave individual de interrupo do TIMER0 lembre-se
do interruptor de parede
O que foi nos apresentado o nome do BIT, falta ainda colocar o nome do byte, mas antes
disso vamos habilitar mais uma interrupo, neste caso INT3. (interrupo externa 3);
_________.INT3IF = 0 'configurao inicial, flag de sinalizao de INT3 apagado
_________.INT3IP = 0 'define a prioridade de interrupo de INT3, neste caso, BAIXA
prioridade.
_________.INT3IE = 0 'habilita a chave individual de interrupo do INT3
Nota parte 1/2:
Para habilitar qualquer
interrupes, que so:

interrupo

precisamos

garantir

as

configuraes

gerais

das

//Configurao Geral das interrupes


INTCON.GIE = 1
INTCON.GIEL = 1
RCON.IPEN = 1
E habilitar os 3 bits individuais de interrupo de qualquer perifrico, por exemplo:
INT2
Ento teremos:
_________.INT2IF = 0 'configurao inicial, flag de sinalizao de INT2 apagado
_________.INT2IP = 1 'define alta prioridade de interrupo de INT2
_________.INT2IE = 0 'habilita a chave individual de interrupo do INT2
Para descobrirmos o nome
registradores seguintes

do

byte

apresentado

com

um

_______,

basta

consultar

os

Registradores que so usados para controlar as interrupes;

RCON
INTCON
INTCON2
INTCON3
PIR1, PIR2
PIE1 , PIE2
IPR1, IPR2

Estudo dos Registradores


Registradores de Configurao das Interrupes do PIC
Uma das funo do registrador RCON na interrrupo definir as prioridades altas e
baixas das interrupes (0x0008 e 0x0018), vetor nico (modo normal, compatvel com a
familia PIC16 em que somente h um vetor de interrupo) do PIC ou modo com dois nveis
de prioridade, presente na famlia PIC18F.
O bit do registrador RCON responsvel pela seleo de habilitao do modo de interrupo
chama-se: IPEN.
RCON (CONTROL REGISTER)
Tabela 5.1 - RCON
IPEN
Bit7

--Bit6

---Bit5

/RI
Bit4

/T0
Bit3

/PD
Bit2

/POR
Bit1

IPEN: Habilita as prioridades de interrupes do PIC

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 56 de 74

/BOR
Bit0

1 - Habilitao do modo de alta e baixa prioridades do PIC (presente na familia PIC18)


0 Desabilita o Modo de alta e baixa prioridade (modo compatvel com familia PIC16)
Demais bits consultar datasheet do microcontrolador PIC18F45200.
Os registradores INTCON, INTCON2 e INTCON3
so responsveis pela habilitao das
interrupes de baixa e alta prioridade, alm de definir se algumas interrupes externas
sero utilizadas.
INTCON (Interrupt Control)
Tabela 5.2 INTCON
Bit
INTCON.GIE (INTCON <7>) = 1
INTCON.PEIE (INTCON <6>) = 1
INTCON.TMR0IE (INTCON <5>) =
INTCON.INT0IE (INTCON <4>) =
INTCON.RBIE (INTCON <3>) = 1
INTCON.TMR0IF (INTCON <2>) =
INTCON.INT0IF (INTCON <1>) =
INTCON.RBIF (INTCON <0>) = 1

1
1
1
1

Evento
Habilitao geral das interrupes
Habilitao Interrupo dos perifricos
Habilitao Interrupo doTIMER0
Habilitao Interrupo INT0 externa
Habilitao Interrupo por mudana de estado
Bit de sinalizao de estouro do TIMER0
Bit de sinalizao de interrupo externa INT0
Bit de sinalizao de interrupo por mudana de estado

No registrador INTCON, os registradores marcados em amarelo na tabela acima so bits de


sinalizao de interrupo
INTCON2 (Interrupt Control 2)
Tabela 5.3 INTCON2
Bit
INTCON2.RBPU (INTCON2 <7>) = 0
INTCON2.RBPU (INTCON2 <7>) = 1
INTCON2.INTEDG0 (INTCON2 <6>) = 1
INTCON2.INTEDG0 (INTCON2 <6>) = 0
INTCON2.INTEDG1 (INTCON2 <5>) = 1
INTCON2.INTEDG1 (INTCON2 <5>) = 0
INTCON2.INTEDG2 (INTCON2 <4>) = 1
INTCON2.INTEDG2 (INTCON2 <4>) = 0
INTCON2.TMR0IP (INTCON2 <2>)
INTCON2.TMR0IP (INTCON2 <2>)
INTCON2.RBIP (INTCON2 <0>) =
INTCON2.RBIP (INTCON2 <0>) =

= 1
= 0
1
0

Evento
Habilita resistores de pull-up do portb
desabilita resistores de pull-up do portb
Configura interrupo externa INT0 por borda de Subida
Configura interrupo externa INT0
por borda de
descida
Configura interrupo externa INT1 por borda de Subida
Configura interrupo externa INT1
por borda de
descida
Configura interrupo externa INT2 por borda de Subida
Configura interrupo externa INT2
por borda de
descida
Alta prioridade da Interrupo do TIMER0
Baixa prioridade da Interrupo do TIMER0
Alta prioridade da Interrupo por mudana de estado
Baixa prioridade da Interrupo por mudana de estado

INTCON3 (Interrupt Control 3)


Tabela 5.4 INTCON3
Bit
Evento
INTCON3.INT2IP (INTCON3 <7>) = 1 Alta prioridade na Interrupo externa INT2
INTCON3.INT2IP (INTCON3 <7>) = 0 Baixa prioridade na Interrupo externa
INT2
INTCON3.INT1IP (INTCON3 <6>) = 1 Alta prioridade na Interrupo externa INT1
INTCON3.INT1IP (INTCON3 <6>) = 0 Baixa prioridade na Interrupo externa
INT1
INTCON3.INT2IE (INTCON3 <4>) = 1 Habilita interrupo externa INT2
INTCON3.INT2IE (INTCON3 <4>) = 0 desabilita interrupo externa INT2
INTCON3.INT1IE (INTCON3 <3>) = 1 Habilita interrupo externa INT1
INTCON3.INT1IE (INTCON3 <3>) = 0 desabilita interrupo externa INT1
INTCON3.INT2IF (INTCON3 <1>) = 1 Bit de sinalizao de Interrupo INT2
INTCON3.INT2IF (INTCON3 <1>) = 0 Bit de sinalizao de Interrupo INT2
INTCON3.INT1IF (INTCON3 <0>) = 1 Bit de sinalizao de Interrupo INT1
INTCON3.INT1IE (INTCON3 <0>) = 0 Bit de sinalizao de Interrupo INT1
Dica:
Sempre quando voc estiver estudando e se deparar Bits finalizados com IF, IP e IE, j
interprete eles da seguinte maneira:
IF = bit de sinalizao de algum perifrico
Microgenios Treinamentos, Kits de desenvolvimento e muito mais...
Pgina 57 de 74

IE = bit de hablitao de interrupo de algum perifrico


IP = bit de habilitao da prioridade de algum perifrico.
No se esquea disso!!!
Os registradores P1R1 e P1R2 so responsveis em armazenar os estados das interrupes.
Quando uma interrupo foi programada, atravs dos bits desse registrador que poderemos
monitorar o estado da interrupo (acionada ou no acionada).
PIR1 (sinaliza Interrupo dos Perifricos 1)
Tabela 5.5 PIR1
Bit
PIR1.PSPIF (PIR1 < 7 > ) = 1
PIR1.ADIF (PIR1 < 6 > ) = 1
PIR1.RCIF (PIR1 < 5 > ) = 1
PIR1.TXIF ( PIR1 < 4 > ) = 1
PIR1.SSPIF (PIR1 < 3 > ) = 1
PIR1.CCP1IF (PIR1 < 2 > ) = 1
PIR1.TMR2IF (PIR1 < 1 > ) = 1
PIR1.TMR1IF (PIR1.< 0 > ) = 1

Evento
bit de
bit de
bit de
bit de
bit de
bit de
bit de
bit de

status
status
status
status
status
status
status
status

da
da
da
da
da
da
do
do

Interrupo da porta Parallel Port Slave


Interrupo do conversor A/D
Dado recebido pela USART
Dado transmitido pela USART
interrupo do mdulo SSP
Interrupo do mdulo CCP
estouro do TIMER2
estouro do TIMER1

PIR2 (sinaliza Interrupo dos Perifricos 2)


Tabela 5.6 PIR2
Bit
PIR2.EEIF (PIR2 < 4 >) = 1
PIR2.BCLIF (PIR2 < 3 >) = 1
PIR2.LCDIF (PIR2 < 2 >) = 1
PIR2.TMR3IF (PIR2 < 1 >) = 1
PIR2.CCP2IF (PIR2 < 0 >) = 1

Evento
Bit
de
sinalizao
da
Interrupo
de
escrita
na
EEPROM/Flash
Bit de sinalizao da Interrupo por coliso de dados
Bit de sinalizao da Interrupo do mdulo de baixa
voltagem LDV
Bit de sinalizao da Interrupo de estouro do TIMER3
Bit de sinalizao da Interrupo do mdulo CCP2

PIE1 (Habilitao das interrupo dos perifricos )


Tabela 5.7 PIE1
Bit
PIE1.PSPIE (PIE1 < 7 > ) = 1
PIE1.ADIE (PIE1 < 6 > ) = 1
PIE1.RCIE (PIE1 < 5 > ) = 1
PIE1.TXIE ( PIE1 < 4 > ) = 1
PIE1.SSPIE (PIE1 < 3 > ) = 1
PIE1.CCP1IE (PIE1 < 2 > ) = 1
PIE1.TMR2IE (PIE1 < 1 > ) = 1
PIE1.TMR1IE (PIE1.< 0 > ) = 1

Evento
habilita
habilita
habilita
habilita
habilita
habilita
habilita
habilita

Interrupo
Interrupo
Interrupo
Interrupo
interrupo
Interrupo
interrupo
interrupo

da
do
da
da
do
do
do
do

porta Parallel port Slave


conversor A/D
recepo serial
transmisso serial
mdulo SSP
mdulo CCP
TIMER2
TIMER1

PIE2 (Habilitao das Interrupo dos Perifricos)


Tabela 5.8 PIE2
Bit

Evento
Bit
de
sinalizao
de
Interrupo
de
escrita
na
PIE2.EEIF (PIE2 < 4 >) = 1
EEPROM/Flash
PIE2.BCLIF (PIE2 < 3 >) = 1 Bit de sinalizao de Interrupo por coliso de dados
Interrupo do mdulo de baixa
PIE2.LCDIF (PIE2 < 2 >) = 1 Bit de sinalizao de
voltagem LDV
PIE2.TMR3IF (PIE2 < 1 >) = 1 Bit de sinalizao de Interrupo do TIMER3
PIE2.CCP2IF (PIE2 < 0 >) = 1 Bit de sinalizao de Interrupo do mdulo CCP2
IPR1 (registrador de prioridade de interrupes)
Atravs dos registradores IPR1 e IPR2 definimos
interrupes, caso esse sistema seja utilizado.

as

prioridades

altas

Tabela 5.9 IPR1


Bit

Evento

IPR1.PSPIP (BIT < 7 >) = 1

Alta prioridade na interrupo paralela

IPR1.PSPIP (BIT < 7 >) = 0

Baixa prioridade na interrupo paralela

IPR1.ADIP (BIT < 6 >) = 1

Alta prioridade na interrupo converso AD

IPR1.ADIP (BIT < 6 >) = 0

Baixa prioridade na interrupo converso AD

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 58 de 74

baixas

das

IPR1.RCIP (BIT < 5 >) = 1

Alta prioridade na interrupo de recepo serial

IPR1.RCIP (BIT < 5 >) = 0

Baixa prioridade na interrupo de recepo serial

IPR1.TXIP (BIT < 4 >) = 1

Alta prioridade na interrupo de transmisso serial

IPR1.TXIP (BIT < 4 >) = 0

Baixa prioridade na interrupo de transmisso serial

IPR1.SSPIP (BIT < 3 >) = 1

Alta prioridade na interrupo MSSP

IPR1.SSPIP (BIT < 3 >) = 0

Baixa prioridade na interrupo MSSP

IPR1.CCPIP (BIT < 2 >) = 1

Alta prioridade na interrupo do mdulo CCP

IPR1.CCPIP (BIT < 2 >) = 0

Baixa prioridade na interrupo do mdulo CCP

IPR1.TMR2IP (BIT < 1 >) = 1 Alta prioridade na interrupo do TIMER2


IPR1.TMR2IP (BIT < 1 >) = 0 Baixa prioridade na interrupo do TIMER2
IPR1.TMR1IP (BIT < 0 >) = 1 Alta prioridade na interrupo do TIMER1
IPR1.TMR1IP (BIT < 0 >) = 0 Baixa prioridade na interrupo do TIMER1
IPR2 (registrador de prioridade de interrupes 2)
Atravs dos registradores IPR1 e IPR2 definimos
interrupes, caso esse sistema seja utilizado.

as

prioridades

altas

baixas

das

Tabela 5.10 IPR2


Bit

Evento

IPR2.EEIP (BIT < 4 >) = 1

Alta prioridade na interrupo EEPROM

IPR2.EEIP (BIT < 4 >) = 0

Baixa prioridade na interrupo EPROM

IPR2.BCLIP (BIT < 3 >) = 1

Alta prioridade na interrupo por coliso no barramento

IPR2.BCLIP (BIT < 3 >) = 0

Baixa prioridade na interrupo por coliso no barramento

IPR2.LVDIP (BIT < 2 >) = 1

Alta prioridade na interrupo por queda de tenso

IPR2.LVDIP (BIT < 2 >) = 0

Baixa prioridade na interrupo por queda de tenso

IPR2.TMR3IP (BIT < 1 >) = 1 Alta prioridade na interrupo do TIMER3


IPR1.TMR3IP (BIT < 1 >) = 0 Baixa prioridade na interrupo do TIMER3
IPR1.CCP2IP (BIT < 0 >) = 1 Alta prioridade na interrupo CCP2IP
IPR1.CCP2IP (BIT < 0 >) = 0 Baixa prioridade na interrupo CCP2IP
Nota parte 2/2:
Consultando as tabelas descobrimos que para habilitar a interrupo INT2 necessrio
programar:
//Configurao Geral das interrupes
INTCON.GIE = 1;
INTCON.GIEL = 1;
RCON.IPEN = 1;
//Configurao de habilitao individual da interrupo externa INT2
INTCON3.INT2IF = 0; //configurao inicial, flag de sinalizao de INT2 apagado
INTCON3.INT2IP = 1; //define alta prioridade de interrupo de INT2
INTCON3.INT2IE = 0; //habilita a chave individual de interrupo do INT2

Resumo:
1 - bit para habilitar a interrupo desejada, finalizadas com o nome IE.
Ex:

INTCON3.INT2IE

1;

// habilita interrupo externa INT2

1 - bit para monitorar o estado da interrupo, tambm chamado de bit de sinalizao ou


flag, finalizadas com o nome IF.
Ex: INTCON3.INT2IF = 1; // flag de sinalizao da interrupo externa INT2 (setada por
hardware do microcontrolador aps o acionamento de INT2).
1 - bit de definio de prioridade de interrupo (alta ou baixa prioridade), finalizadas
com o nome IP

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 59 de 74

Ex:
INTCON3.INT2IP = 1;
INT2.

// bit de habilitao de prioridade de interrupo externa

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 60 de 74

Unidade 6 Programando a Interrupo externa


INT0
A interrupo interna INT0 do PIC18F4520 est multiplexada com o pino RB0. Segue um
diagrama estrutural de INT0, acompanhe:

Figura 6.1 Diagrama estrutural da interrupo externa INT0


Sabemos que todas as interrupes que ocorre dentro do nosso microcontrolador so geradas
por causa dos flags de sinalizao (bit com final IF na Microchip). A interrupo externa
INT0 no diferente dos demais perifricos,
ela internamente possui um bit de
sinalizao de status que informa ao microcontrolador que ocorreu uma mudana de nvel
lgico no pino de interrupo.
Podemos programar a interrupo externa por borda de descida ou por borda de subida:

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 61 de 74

Figura 6.2 Tipos de disparo das interrupes externa INT0, INT1 e INT2
Importante:
A interrupo externa INT0 somente pode operar como alta prioridade de interrupo, ou
seja, no existe registrador INT0IP para INT0, as demais interrupes externa INT1 e INT2
permite serem programadas em baixa prioridade.

Vamos conhecer os registradores relacionados a INT0:


Registradores responsveis pelas configuraes gerais das interrupes:
INTCON.GIEH: habilita ou desabilita a chave geral das interrupes e as interrupes de
alta prioridade
INTCON.GIEL: habilita ou desabilita as interrupes de baixa prioridades
RCON.IPEN : habilita ou desabilita
pertencente a famlia PIC18F

as

interrupes

de

baixa

ou

alta

prioridades

Registradores responsveis pela habilitao da interrupo externa INT0


INTCON.INT0IE : bit de habilitao da interrupo externa INT0
INTCON.INT0IF : bit de sinalizao da interrupo externa INT0
TRISB.RB0 = 1

: somos obrigados a programar pino RB0/INT0 como entrada

Registrador responsvel pelo tipo de disparo de INT0:


INTCON2.INTEDG0 : bit de configurao do modo de disparo da interrupo externa INT0
1 = Aciona interrupo externa por borda de subida
0 = aciona interrupo externa por borda de descida
Obs: A interrupo INT0 somente pode ser programada em alta prioridade, ou seja, no
existe o registrador TMR2IP. Esta limitao est presente no microcontrolador PIC18F4520
e PIC18F45200.

INT1
INT1
Programando a interrupo externa INT1
O funcionamento da interrupo externa INT1 parecida com a interrupo INT0, sua nica
diferena esta no fato de INT1 permitir ser acionado por baixa prioridade de interrupo.
Segue um diagrama estrutural de INT1, acompanhe:

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 62 de 74

Figura 6.3 Diagrama estrutural da interrupo externa INT1

Vamos conhecer os registradores relacionados a INT1:


Registradores responsveis pelas configuraes gerais das interrupes:
INTCON.GIEH: habilita ou desabilita a chave geral das interrupes e as interrupes de
alta prioridade
INTCON.GIEL: habilita ou desabilita as interrupes de baixa prioridades
RCON.IPEN : habilita ou desabilita
pertencente a famlia PIC18F

as

interrupes

de

baixa

ou

alta

prioridades

Registradores responsveis
responsveis pela habilitao da interrupo externa INT1
INTCON3.INT1IE : bit de habilitao da interrupo externa INT1
INTCON3.INT1IF : bit de sinalizao da interrupo externa INT1
INTCON3.INT1IP : bit de habililitao de alta ou baixa prioridade de interrupo externa
INT1
TRISB.RB1 = 1

: somos obrigados a programar pino RB1/INT1 como entrada

INT2
INT2
Registrador responsvel pelo tipo de disparo de INT2:
INTCON2.INTEDG1 : bit de configurao do modo de disparo da interrupo externa INT0
1 = Aciona interrupo externa por borda de subida
0 = aciona interrupo externa por borda de descida
Diagrama estrutural de INT2:

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 63 de 74

Figura 6.4 Diagrama estrutural da interrupo externa INT2.

Vamos conhecer os registradores


registradores relacionados a INT2
INT2:
Registradores responsveis pelas configuraes gerais das interrupes:
INTCON.GIEH: habilita ou desabilita a chave geral das interrupes e as interrupes de
alta prioridade
INTCON.GIEL: habilita ou desabilita as interrupes de baixa prioridades
RCON.IPEN : habilita ou desabilita
pertencente a famlia PIC18F

as

interrupes

de

baixa

ou

alta

prioridades

Registradores responsveis pela habilitao da interrupo externa INT2


INTCON3.INT2IE : bit de habilitao da interrupo externa INT2
INTCON3.INT2IF : bit de sinalizao da interrupo externa INT2
INTCON3.INT2IP : bit de habililitao de alta ou baixa prioridade de interrupo externa
INT2
TRISB.RB2 = 1

: somos obrigados a programar pino RB2/INT2 como entrada

Registrador responsvel
responsvel pelo tipo de disparo de INT2:
INTCON2.INTEDG2 : bit de configurao do modo de disparo da interrupo externa INT2
1 = Aciona interrupo externa por borda de subida
0 = aciona interrupo externa por borda de descida

Interrupo por mudana de estado


estado
Os microcontroladores PIC (alguns modelos) possuem uma interrupo externa chamada
Interrupo por mudana de estado
(tambm chamado de RB ou interrupo de teclado)
ligado aos pinos RB4, RB5, RB6 e RB7.

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 64 de 74

Diferente das interrupes externas INT0, INT1 e INT2 que somente podem ser acionadas por
borda de subida ou por borda de descida, as interrupes por mudana de estado acontece
nos dois estados.
Analise o grfico de acionamento da interrupo:

Figura 6.5 - Grfico de acionamento de interrupo externa RB

Vamos conhecer os registradores relacionados


relacionados a interrupo RB:
Registradores responsveis pelas configuraes gerais das interrupes:
INTCON.GIEH: habilita ou desabilita a chave geral das interrupes e as interrupes de
alta prioridade
INTCON.GIEL: habilita ou desabilita as interrupes de baixa prioridades
RCON.IPEN : habilita ou desabilita
pertencente a famlia PIC18F

as

interrupes

de

baixa

ou

alta

prioridades

Registradores responsveis pela habilitao da interrupo externa RB


INTCON.RBIF

bit responsvel pelo flag de status da interrupo por mudana de estado

INTCON.RBIE : bit de habilitao da interrupo por mudana de estado


INTCON2.RBIP : bit de configurao de alta ou baixa prioridade de interrupo
TRISB = $1111xxxx

: somos obrigados a programar os pinos RB4, RB5, RB6 e RB7como entrada

INTCON.RBPU = 1 : desabilita resistores de pull up interno do PORTB (obrigatrio)

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 65 de 74

Unidade 7 Exemplos de Perifricos


Controle de display LCD
Iremos no decorrer das unidades programar o PIC para controlar e escrever mensagens
publicitrias nos display LCD 16X2 alfanumrico:

Figura 7.1 Aplicaes com display LCD


Os displays LCD so amplamente utilizados em diversos equipamentos e aparelhos. No
decorrer dos estudos iremos explorar as funes do MikroC PRO em linguagem C para
controle de displays LCD.
Estudaremos passo a passo como escrever mensagens de textos
nos modos 4 e 8 bits.

Projetos com displays LCD:

Equipamentos
industriais

Equipamentos
domsticos

Equipamentos de
Informtica

CLPs e
controladores
industriais

Figura 7.2 Projetos com displays LCD

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 66 de 74

Equipamentos
portteis

Varredura de displays de 7 segmentos


Os displays de 7 segmentos so largamente utilizados em equipamentos como: balana,
painis de mquinas industriais, equipamentos mdicos, eletrodomsticos entre outros.
Podemos controlar os displays de 7 segmentos atravs de conversores BCD, como por exemplo
o 74HC247 (decodificador BCD) ou desenvolver cdigos BCD pelo microcontrolador. Em nosso
caso, os displays esto sendo acionados por varredura.
Para acionar os displays de 7 segmentos, iremos utilizar o sistema de varredura, que
permite atravs de um barramento de dados de 8 bits e mais 4 pinos de acionamento,
"escrever" o valor correspondente ao dado que deve ser mostrado no visor.

Projetos com displays de 7 segmentos:

Painis de equipamentos industriais


Balanas
Figura
Figura 7.3 Projetos com displays de 7 segmentos

Varredura de Teclado matricial


O sistema de varredura de teclado matricial permite que o microcontrolador leia muitas
teclas ligadas aos seus pinos. O teclado matricial muito utilizado para economizar
pinos fsicos do microcontrolador. Equipamentos de diversos tipos usam o teclado
matricial para inserir dados ao microcontrolador.

Figura 7.4 Teclado Matricial

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 67 de 74

Projetos
Projetos com teclados matriciais:

Equipamentos Eletrodomsticos

Aparelhos de som
CLPs

Figura 7.5 Projetos com teclados matriciais

Acionamento de Leds
Os leds so utilizados praticamente em quase todas as aplicaes eletrnicas. Atravs dos
leds podemos visualizar o status de uma mquina, "desenhar"
mensagens de textos,
iluminar objetos, criar animaes visuais, entre outras aplicaes.
Iremos estudar os recursos de programao em C para controle das portas de sada
disponveis no microcontroladores PIC utilizando os leds como barramento de dados visual.

Projetos com com Leds


Os leds so utilizados em diversos equipamentos no mercado para as mais variadas
aplicaes. Muitas das aplicaes o microcontrolador responsvel pelo controle desses
leds.

Letreiros com leds

Letreiros

Controle de Iluminao de
painis

Figura 7.6 Projetos com Leds

Conversor Analgico digital (A/D)


A aplicao bsica do microcontrolador PIC trabalhando com o conversor A/D abaixo
simples, mas possui um grande contedo educativo para ns neste momento.
No exemplo
abaixo utilizamos dois simples trimpots para variarmos o valor de tenso no pino A/D do
PIC. Este exemplo na verdade representa inmeras aplicaes prticas de equipamentos do
mercado, tais como: aparelhos de medio, leitores de sensores de temperatura, atuadores,
entre outros. Criaremos programas para controle e leitores de tenso nas unidades
seguintes.

Figura 7.7 Conversores A/D

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 68 de 74

Veremos tambm como ler e interpretar valores analgicos vindo de sensores de temperatura
(LM35) utilizando os recursos da linguagem BASIC.

Projetos com os conversores A/D do PIC

Sensores de proximidade

Sondas e termopares
Equipamentos de medio

Figura 7.8 Projetos com Conversores A/D

Controle PWM
Iremos simular programas de controle de largura de pulsos. Atravs do canal PWM
disponvel no PIC, podemos controlar diversos equipamentos, tais como: inversores de
freqncia, estabilizadores, fonte chaveada, controle de velocidade de motores DC, entre
outras.
Em nossos laboratrios, iremos controlar a velocidade
controlar o aquecimento de uma carga resistiva via PWM.

de

giro

de

uma

ventoinha

Figura 7.9 Acionamento PWM

Projetos com os PWM

Inversores de freqncia
Fontes chaveadas

Drive de Motores
Figura 7.10 Projetos com PWM

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 69 de 74

Unidade 8 Anexos
Descrio das Pinagens(LCD)
Pinagens(LCD)
Pino
1
2

Funo
Alimentao
Alimentao

V0

4
5
6
7
8
9
10
11
12
12
14
15
16

RS Seleo:
R/W seleo
E chip Select
D0
D1
D2
D3
D4
D5
D6
D7
A (display c/ back)
K (display c/ back)

Descrio
Terra ou GND
VCC ou +5V
Tenso para ajuste de contraste (ver
figura1)
1 - dado, 0 - instruo
1 - Leitura, 0 - Escrita
1 ou (1 - 0) Habilita, 0 - desabilita

barramento de dados

Anodo p/ LED backlight


Catodo p/ LED backlight

Lista de cdigos dos Caracteres


A seguir o cdigo que devemos enviar para o LCD a fim de obtermos
caracter:

Figura 8.1 Lista de cdigos dos Caracteres no LCD

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 70 de 74

um determinado

Tabela com o conjunto completo de instrues:

Figura 8.2 Conjunto completo de instrues do LCD

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 71 de 74

Tabela
Tabela com as instrues mais comuns:

Figura 8.3 Instrues mais comuns do LCD

Resumo com as instrues mais teis:

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 72 de 74

Comandos LCD do mikroC PRO (LCD)


Comandos

_LCD_FIRST_ROW
_LCD_SECOND_ROW
_LCD_THIRD_ROW
_LCD_FOURTH_ROW
_LCD_CLEAR
_LCD_RETURN_HOME
_LCD_CURSOR_OFF
_LCD_UNDERLINE_ON
_LCD_BLINK_CURSOR_ON
_LCD_MOVE_CURSOR_LEFT
_LCD_MOVE_CURSOR_RIGHT
_LCD_TURN_ON
_LCD_TURN_OFF
_LCD_SHIFT_LEFT
_LCD_SHIFT_RIGHT

Descrio

Move cursor para primeira linha do LCD


Move cursor para segunda linha do LCD
Move cursor para a terceira linha do LCD
Move cursor para a quarta linha do LCD
Apaga todo o display
Retorna cursor Home (1 coluna da 1 linha do LCD)
Desliga cursor
Cursor aparecer no visor como underline
Ativa o modo piscante do cursor
Move cursor para a esquerda sem movimentar os textos
Move cursor para a direita sem movimentar os textos
Liga todo o visor do LCD
Apaga todo o visor do LCD, sem perder os dados no visor
Movimenta todos os textos do LCD para a esquerda
Movimenta todos os textos do LCD para a direita

Unidade 9 Figuras
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura

1.1 Evoluo da Famlia PIC .................................................... 6


1.2 - Encapsulamentos ............................................................ 8
1.3 Diagrama interno do PIC18F4520 ............................................. 9
1.4 Memria de Programa FLASH do PIC18F4520 ................................... 12
1.5 - Opcode gerado aps compilao do programa ................................. 13
1.6 Cdigo Hexadecimal ........................................................ 14
1.7 Diagrama da memria RAM interna ........................................... 15
1.8 Registradores de Funes Especiais SFRs ................................ 16
1.9 PIC18F4520 ................................................................ 17
1.10 - PORTA .................................................................... 18
1.11 Circuito de Reset ........................................................ 21
1.12 Configurao dos fusiveis no MikroC PRO .................................. 24
1.13 - Modo HSPLL ............................................................... 25
1.14 Modo EC com pino RA6 como I/O de uso geral ............................. 26
1.15 Modo EC com pino RA6 como sada de clock ............................... 26
1.16 Clock gerado a partir de um cristal de quartzo ........................... 26
1.17 Osciladores .............................................................. 27
2.1- Canais AD multiplexados .................................................... 30
2.2 Seleo A/D ............................................................... 31
3.1 Largura de Pulsos ......................................................... 35
3.2 Variao mnima ao mximo do duty Cicle do PWM. ........................... 35
3.3 Variao do duty cicle do sinal PWM ....................................... 36
3.4 Variao do duty Cicle .................................................... 37
4.1 Diviso do Prescaler ...................................................... 38
4.2 Diagrama interno do TIMER0 ................................................ 40
4.3 Aplicao com o modo contador do TIMER0 ................................... 43
4.4 Diagrama interno do TIMER1 ................................................ 46
4.5 Circuito interno do modo RTC .............................................. 47
4.6 Ligao do segundo oscilador ao microcontrolador PIC ...................... 47
4.7 Esquema Eletrnica ........................................................ 48
4.8 Diagrama de construo interna do TIMER2 .................................. 50
4.9 Estrutura interna do TIMER3 ............................................... 52
5.1 Vetor de Alta Prioridade e Baixa Prioridade de Interrupo srie PIC18F ... 54
5.2 Diagrama de Interrupo x Tempo ........................................... 54
5.3 Exemplo para compreeno das Interrupes do PIC .......................... 55
6.1 Diagrama estrutural da interrupo externa INT0 ........................... 61
6.2 Tipos de disparo das interrupes externa INT0, INT1 e INT2 ............... 62
6.3 Diagrama estrutural da interrupo externa INT1 ........................... 63
6.4 Diagrama estrutural da interrupo externa INT2. .......................... 64
6.5 - Grfico de acionamento de interrupo externa RB .......................... 65
7.1 Aplicaes com display LCD ................................................ 66
7.2 Projetos com displays LCD ................................................. 66
7.3 Projetos com displays de 7 segmentos ...................................... 67
7.4 Teclado Matricial ......................................................... 67
7.5 Projetos com teclados matriciais .......................................... 68
7.6 Projetos com Leds ......................................................... 68
7.7 Conversores A/D ........................................................... 68
7.8 Projetos com Conversores A/D .............................................. 69

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 73 de 74

Figura
Figura
Figura
Figura
Figura

7.9 Acionamento PWM ........................................................... 69


7.10 Projetos com PWM ......................................................... 69
8.1 Lista de cdigos dos Caracteres no LCD .................................... 70
8.2 Conjunto completo de instrues do LCD .................................... 71
8.3 Instrues mais comuns do LCD ............................................. 72

Unidade 10 Tabelas
Tabela
Tabela
Tabela
Tabela
Tabela
Tabela
Tabela
Tabela
Tabela
Tabela
Tabela
Tabela
Tabela
Tabela
Tabela
Tabela
Tabela
Tabela
Tabela
Tabela
Tabela
Tabela
Tabela
Tabela
Tabela
Tabela
Tabela
Tabela
Tabela
Tabela
Tabela

1.1 Descrio dos pinos do Microcontrolador PIC18F4520 ........................ 11


1.2 Pinos PORTA ............................................................... 17
1.3 Bits de configurao do PIC18F4520 ........................................ 23
1.4 Bits de configurao do PIC18F4520(Detalhado) ............................. 23
2.1 ADCON0 .................................................................... 31
2.2 Configurao Pinos A/D .................................................... 31
4.1- Registrador relacionados com o TIMER0 ...................................... 39
4.2 T0CON ..................................................................... 40
4.3 - Bits de seleo de fonte de prescaler(Timer 0) ............................ 41
4.4 INTCON .................................................................... 42
4.5 Registrador relacionados com o TIMER1 (as clulas em branco) ............ 45
4.6 T1CON ..................................................................... 45
4.7 Bits de seleo de fonte de prescaler ..................................... 45
4.8 Registradores responsveis pela configurao do TIMER2 .................... 50
4.9 T2CON ..................................................................... 51
4.10 Bits de ajuste do postcale ............................................... 51
4.11 Bits responsveis pelo ajuste de prescaler(TIMER 2) ...................... 51
4.12 Registradores relacionados com o TIMER3 .................................. 51
4.13 T3CON .................................................................... 52
4.14 Habilita a fonte de timer para o mdulo CCP .............................. 53
4.15 bits de ajuste do prescaler do TIMER3 .................................... 53
5.1 - RCON ...................................................................... 56
5.2 INTCON .................................................................... 57
5.3 INTCON2 ................................................................... 57
5.4 INTCON3 ................................................................... 57
5.5 PIR1 ...................................................................... 58
5.6 PIR2 ...................................................................... 58
5.7 PIE1 ...................................................................... 58
5.8 PIE2 ...................................................................... 58
5.9 IPR1 ...................................................................... 58
5.10 IPR2 ..................................................................... 59

Microgenios Treinamentos, Kits de desenvolvimento e muito mais...


Pgina 74 de 74