Vous êtes sur la page 1sur 36

Microcontrolador PIC16F873 1

MICROCONTROLADOR PIC16F873

1.0 - Descrio Geral

O microcontrolador PIC16F873 um componente de baixo custo e alto


desempenho construdo com tecnologia CMOS, pertencente famlia dos
microcontroladores de 8 bits.
Este microcontrolador foi desenvolvido empregando a avanada arquitetura
RISC. Com isto, o conjunto de instrues est reduzido a apenas 35 instrues e
ainda sim permitindo que todas sejam executadas em apenas um ciclo, exceto
para as instrues de salto, que requerem dois ciclos. Adicionalmente, a taxa de
compresso est em 2:1 e a velocidade em 4:1, quando comparado com outro
microcontrolador da mesma classe.
A memria RAM deste microcontrolador est limitada em 192 bytes e o
dispositivo possui 22 pinos de I/O, controlveis individualmente pelo programa.
Alm disto, este microcontrolador possui ainda vrios perifricos inclusos no
prprio chip: trs temporizadores/contadores, dois Mdulos PWM, duas portas
seriais e um conversor A/D de 10 bits com 5 canais de entrada.
O PIC16F873 possui caractersticas especiais que reduzem as necessidades
de componentes externos, reduzindo assim custos, consumo de potncia e
tamanho. Outras caractersticas deste componente incluem quatro tipos de
oscilador: RC - implementao de baixo custo, LP - baixo consumo de potncia,
XT - cristais osciladores at 10MHz e HS - cristais osciladores at 20MHz e
circuito de watchdog para preveno contra trava na execuo do software.
Devido s suas caractersticas e recursos internos, este microcontrolador
ideal para aplicaes, tais como: transmissores codificados, controle de
velocidade de motores, interfaces para automao, etc.

Prof. Srgio Ricardo de Jesus Oliveira


Microcontrolador PIC16F873 2
2 Arquitetura Interna

2.1 Encapsulamento

A figura 1 apresenta o encapsulamento DIP para o PIC16F873/876.

Figura 1 - Pinagem do PIC16F873/876.

2.2 - Caractersticas

O alto desempenho do microcontrolador PIC16F873 pode ser atribudo s


caractersticas comumente encontradas nos microprocessadores RISC. Entre
estas caractersticas pode-se ressaltar a arquitetura Havard, na qual o programa
e dados so armazenados em memrias separadas e acessadas por barramentos
distintos.
O PIC16F873 pode enderear diretamente ou indiretamente arquivos de
registro ou memria de dados. Todos os registradores de funo especial,
incluindo o contador de programa, so mapeados na memria de dados.

2.2.1 Unidade Lgica Aritmtica ULA e registrador W


O PIC16F873 possui uma unidade lgica aritmtica - ULA com funes
aritmticas e booleanas e um registrador acumulador (W). As operaes com a
ULA so realizadas entre o acumulador W e um registrador da memria de dados.
A ULA a componente mais complexa do PIC por conter todos os circuitos
destinados a desenvolver as funes de clculo e manipulao de dados durante

Prof. Srgio Ricardo de Jesus Oliveira


Microcontrolador PIC16F873 3
a execuo de um programa. A mesma est presente em todas as CPUs e dessa
depende diretamente a capacidade de clculo do microprocessador.
A ULA do PIC16F873/876 opera com 8 bits, ou seja, com valores
numricos entre 0 e 255. Existem processadores com a ULA de 16, 32, 64 bits e
at mais. A famlia Intel 80386, 486 e Pentium, por exemplo, dispe de uma
ULA de 32 bits. A capacidade de clculo presente nesses micros so notavelmente
superior em detrimento da complexidade dos circuitos internos de apoio e
conseqentemente do espao ocupado.
Todas as operaes da ULA so realizadas tendo sempre a participao de
um registrador em especfico, no caso o registro W, que por essa caracterstica
denominado de acumulador. Este registro consiste de uma locao de memria
destinada a conter valores de 8 bits.
A diferena entre o registrador W e outras locaes de memria consiste no
fato de que, por ser referenciado pela ULA, o mesmo no possui endereo para
acesso e, portanto, no pode ser acessado como a uma posio de memria. Essa
caracterstica torna o acesso a esse registrador significativamente mais rpido,
que aqueles registradores endereados como posio de memria.

2.2.2 Contador de Programa PC e Stack

Para que um software armazenado na memria de programa seja


executado, as instrues que o compem devem ser executadas uma a uma. Para
isso, o C (microcontrolador) possui um contador, cujo nome contador de
programa (PC Program Counter), que tem a funo de gerar o endereo para
memria de programa, onde ser buscada a prxima instruo a ser executada.
Com isso, a busca de instrues para execuo segue uma seqncia definida
pelo PC. Quando o C inicializado, o valor inicial do PC 0000h. Isso significa
que a prxima instruo ser buscada no endereo 0000h, a seguinte no
endereo 0001h, 0002 e assim sucessivamente at que uma instruo de desvio
seja executada.Uma destas instrues o goto (do ingls go to, v para). Quando
o PIC encontra um goto, a seqncia normal de execuo quebrada (a instruo
armazenada no prximo endereo de memria no mais executada), desviando-
se diretamente para a locao de memria especificada na instruo goto.

Prof. Srgio Ricardo de Jesus Oliveira


Microcontrolador PIC16F873 4
Segue um exemplo :
ORG 0000h
Aps o RESET 0000h movlw 10
0001h Loop1: goto Loop1

No reset o PIC, executar a instruo movlw 10, armazenada no endereo


0000H, cuja tarefa colocar no acumulador o valor decimal 10. Em seguida
executar a goto Loop1. Esta instruo provocar um desvio incondicional para
locao de memria especificada pelo label Loop1, ou seja, a execuo ser
desviada novamente para o endereo 0000H. De acordo com exposto, a instruo
movlw 10 ser executada continuamente, uma vez que a instruo goto Loop1
ser desvia a execuo novamente para a instruo movlw 10.
Conforme pode-se observar, a instruo goto coloca um novo valor no
Program Counter o que, conseqentemente, provoca o desvio da execuo para
uma posio qualquer da rea de memria de programa do PIC.

2.2.3 Apontador de Pilha SP

Da mesma forma que a instruo goto desvia a execuo para uma outra
regio da memria de programa, existem situaes, na elaborao de programas,
onde necessrio quebrar a seqncia normal de execuo, sem, contudo, perder
o endereo da prxima instruo que seria executada, se o desvio no houvesse
ocorrido, de tal forma que em algum ponto do programa a execuo possa ser
retomada exatamente do ponto onde encontrava-se, caso a quebra de seqncia
no tivesse ocorrido. Esse tipo de situao no programa chamado de subrotina
e os C, em sua totalidade, oferecem recursos e instrues, permitindo que o
programador possa se beneficiar desse tipo de recurso de programao.
Para se implementar um desvio para uma subrotina a instruo utilizada
chama-se call e a instruo que permite o retorno para o ponto onde ocorreu o
desvio chama-se ret (return). No momento da execuo da chamada da instruo
call Uma outra instruo muito interessante o call ou seja a chamada a sub-
rotina. Esta instruo funciona de maneira muito similar ao goto com a nica
diferena que, a primeira, desvia para uma posio de memria especificada e

Prof. Srgio Ricardo de Jesus Oliveira


Microcontrolador PIC16F873 5
continua a execuo do programa, enquanto o call desvia o programa para uma
sub-rotina especificada e executar a mesma, retornando a execuo para a
instruo imediatamente aps a chamada call, quando a instruo ret for
executada.
Considere o exemplo a seguir:
ORG 0000h
0000h Loop1: movlw 10
0001h call Loop2
0002h goto Loop1

00B5 Loop2: movlw 11


00B6 ret

O valor imediatamente aps a chamada call ser armazenado em uma rea


particular da memria denominada Stack Pointer SP, cujo funcionamento
caracteriza-se por armazenar os endereos de retorno (endereo da memria
imediatamente aps o call) na forma de pilha, de tal maneira que o ltimo a ser
armazenado o primeiro a ser lido. Quando o endereo de retorno armazenado
na pilha (Stack), imediatamente o contador de programa PC carregado com o
valor do endereo definido pelo label Loop2, argumento da instruo call,
desviando assim a execuo para esse endereo. Essa caracterstica permite que
seja possvel efetuar vrios call, um dentro do outro, mantendo sempre o
endereo de retorno ao fluxo do programa, quando se encontra uma instruo ret.
Essa instruo far a tarefa contrria a instruo call, armazenando no PC o
valor contido no topo da pilha.
No caso do exemplo acima o PIC, aps ter executado movlw 10, passa a
executar o call Loop2. Antes de desviar memoriza no Stack o endereo 0002H, ou
seja, o endereo da prxima instruo aps o call. Passa ento a executar a
instruo movlw 11, que encontra-se no endereo do label Loop2, cujo valor
00B5h. Aps o termino da execuo dessa instruo, segue para a prxima
(endereo 00B6h) que uma instruo do tipo ret, indicando que a execuo
dever voltar para o endereo onde encontrava-se anteriormente (endereo

Prof. Srgio Ricardo de Jesus Oliveira


Microcontrolador PIC16F873 6
definido no topo do Stack). Esta operao denominada de: "chamada a sub-
rotina", ou seja, uma interrupo momentnea do fluxo normal de execuo do
programa para "chamar" a execuo de uma serie de instrues e em seguida
retornar a execuo normal do programa. Para retornar para o endereo onde
havia interrompido, o PIC utiliza o ltimo valor armazenado no Stack e o coloca
de novo no Program Counter.
Uma caracterstica importante da pilha no PIC que a mesma possui
somente 8 posies, o que significa um mximo de 8 chamada subseqentes de
subrotinas. Caso ocorra um nmero maior de 8 chamadas de subrotinas, uma
dentro da outra, o endereo de retorno da primeira ser perdido e no lugar ser
armazenado o endereo de retorno da nona chamada. Isto poder acarretar
problemas de mau funcionamento no programa e, portanto, deve ser uma
preocupao constante do programador nas chamadas de subrotinas.
A seguir apresentado um exemplo de chamada de subrotina uma dentro
da outra:
ORG 0000H
0000h Loop1: movlw 10
0001h call Loop2
0002h goto Loop1

00A2 Loop2: movlw 11


00A3 call Loop3
00A4 ret

03F0h Loop3: movlw 12


03F1h ret
No exemplo acima a rotina principal Loop1 promove a chamada do primeiro
call para sub-rotina Loop2, a sub-rotina Loop2 chama outra sub-rotina no caso
Loop3, este ultimo por sua vez, encontra um ret e retorna para Loop2 que
encontra o outro ret e retorna para a execuo da rotina Loop1 que no caso a
principal.

Prof. Srgio Ricardo de Jesus Oliveira


Microcontrolador PIC16F873 7
Todas estas caractersticas, bem como os perifricos que compem o
PIC16F873 podem ser observadas no diagrama de blocos apresentado na
figura 2.

Figura 2 - Diagrama de blocos do PIC16F873/876.

2.3 - Descrio dos Pinos do PIC16F873


Pino Pino Tipo de Tipo de Descrio
Nome Num. sada Buffer
OSC1/CLKIN 9 I ST/CMOS Entrada para o cristal oscilador/entrada para clock externo

Prof. Srgio Ricardo de Jesus Oliveira


Microcontrolador PIC16F873 8
OSC2/CLKOUT 10 O --- Sada para o cristal oscilador. Conecte o cristal ou ressonador
com a CPU no modo cristal oscilador. No modo RC, este pino
apresenta um freqncia igual a 1/4 da freqncia presente no
pino OSC1 e define o tempo do ciclo de instruo.
MCLR/Vpp 1 I/P ST Entrada para reset (master clear) ou entrada de tenso de
programao. Este pino est ativo em nvel baixo gerando o reset
para o microcontrolador.
PORTA: porta de I/O bi-direcional.
RA0/AN0 2 I/O TTL RA0 pode tambm ser a entrada analgica 0
RA1/AN1 3 I/O TTL RA1 pode tambm ser a entrada analgica 1
RA2/AN2/-VREF 4 I/O TTL RA2 pode tambm ser a entrada analgica 2 ou entrada negativa
de tenso de referncia para o conversor A/D
RA3/AN3/+VREF 5 I/O TTL RA3 pode tambm ser a entrada analgica 3 ou entrada positiva
de tenso de referncia para o conversor A/D.
RA4/T0CKI 6 I/O ST RA4 pode tambm ser a entrada de clock para o
temporizador/contador timer0. Esta sada do tipo coletor
aberto.
RA5/SS/AN4 7 I/O TTL RA5 pode tambm ser a entrada analgica 4 ou o seletor de
escravo para a porta serial sncrona.
PORTB: porta de I/O bi-direcional. A porta B possui resistores de
pull-up em todos os pinos e so habilitados por software.
RB0 tambm pode ser utilizado como pino de entrada para
RB0/INT 21 I/O TTL/ST interrupo externa..
RB1 22 I/O TTL
RB2 23 I/O TTL
RB3 24 I/O TTL Interrupo na mudana de estado.
RB4 25 I/O TTL Interrupo na mudana de estado.
RB5 26 I/O TTL Interrupo na mudana de estado.
RB6 27 I/O TTL/ST Interrupo na mudana de estado ou clock para programao
serial.
Interrupo na mudana de estado ou dados para programao
RB7 28 I/O TTL/ST
serial.
PORTB: porta de I/O bi-direcional.
RC0/T1OSO/T1CKI 11 I/O ST RC0 tambm pode ser a sada para o cristal oscilador do TIMER1
ou a entrada de clock do TIMER1.
RC1/T1OSI 12 I/O ST RC1 tambm pode ser a entrada para o cristal oscilador do
TIMER1 ou entrada do mdulo Capiture2/Compare2 ou sada
do PWM2.
RC2/CCP1 13 I/O ST RC2 tambm pode ser entrada do mdulo Capiture1/Compare1
ou sada do PWM1.
RC3/SCK/SCL 14 I/O ST RC3 pode tambm ser entrada de clock da porta serial sncrona
ou entrada/sada para ambos o modos SPI ou I2C.
RC4/SDI/DAS 15 I/O ST RC4 tambm pode ser entrada de dados serial no modo SPI ou
dados de I/O no modo I2C.
RC5/SDO 16 I/O ST RC5 pode tambm ser sada de dados no modo SPI
RC6/TX/CK 17 I/O ST RC6 tambm pode ser o sinal TX da USART assncrona ou clock
sncrono.

Prof. Srgio Ricardo de Jesus Oliveira


Microcontrolador PIC16F873 9
RC7/RX/DT 18 I/O ST RC7 tambm pode ser o sinal RX da USART assncrona ou dados
sncrono.
VSS(-) 8 e 19 P - Referncia de GND para os pinos lgicos e I/O
VDD(+) 20 P - Alimentao positiva para os pinos lgicos e I/O

I = entrada O= sada I/O = entrada/sada P = alimentao


- = No usado TTL = entrada TTL ST = entrada Schimitt Trigger

2.4 - Ciclo de Instruo

A freqncia do clock presente na entrada OSC1 internamente dividida


por quatro para gerar quatro pulsos de clock nomeados por Q1, Q2, Q3 e Q4.
Internamente, o contador de programa (PC) decrementado a cada pulso de Q1,
a instruo buscada na memria de programa e armazenada no registrador de
instruo em Q4. A instruo decodificada e executada durante o prximo ciclo
de Q1 a Q4. Os clocks e a execuo da instruo seguem como mostrado na
figura 3.

Figura 3 Ciclo de Instruo.

Prof. Srgio Ricardo de Jesus Oliveira


Microcontrolador PIC16F873 10
3 - Memria

3.1 - Memria de Programa

O PIC16F873 tem um contador de programa de 13 bits para enderear uma


memria de programa de 4k x 14 bits. O vetor de reset est implementado no
endereo 0000h e o vetor de interrupo est implementado no endereo 0004h.
A organizao da memria de programa juntamente com a pilha esto
apresentados na figura 4.

Figura 4 - Mapa da memria de programa e apontador de pilha (stack pointer).

Prof. Srgio Ricardo de Jesus Oliveira


Microcontrolador PIC16F873 11
3.1 - Organizao da Memria de Dados

A memria de dados est particionada em mltiplos bancos contendo


registradores de uso geral e registradores de funo especial. Os bits RP1 e RP0
do registrador de estado (STATUS) so os bits de seleo de banco. O PIC16F873
possui somente os bancos 0 e 1.
RP1:RP0 (STATUS<6:5>)
= 00 a Banco 0
= 01 a Banco 1
= 10 a Banco 2
= 11 a Banco 3
Cada banco possui 128 bytes de endereos. Os primeiros endereos so
reservados para os registradores de funo especial. Estes registradores so de
uso geral, implementados na memria RAM esttica. Todos os bancos
implementados possuem registradores de funo especial. Alguns registradores
de funo especial de alto uso em um banco so espelhados em outro banco para
reduo de cdigo e rapidez no acesso.

3.1.1 - Registrador de Arquivo de Uso Geral

Estes registradores podem ser acessados diretamente, ou indiretamente


atravs do Registrador de Seleo de Arquivo - FSR. A figura 4 mostra todos os
registradores da memria RAM.

3.2 - Registradores de Funo Especial

Os registradores de Funo Especial so utilizados pela CPU e pelos


Mdulos Perifricos para o controle de funcionamento do dispositivo. Estes
registradores so implementados na memria RAM. Os registradores de funo
podem ser classificados em dois conjuntos (central e perifrico). Estes
registradores associados com as funes centrais so descritos a seguir e
aqueles relativos s operaes com caractersticas perifricas esto descritas nos
itens dos captulos relativos a estas caractersticas.

Prof. Srgio Ricardo de Jesus Oliveira


Microcontrolador PIC16F873 12

Figura 5 - Registradores do PIC16F873/876.

Prof. Srgio Ricardo de Jesus Oliveira


Microcontrolador PIC16F873 13

Figura 6 - Registradores de funo especial.

Prof. Srgio Ricardo de Jesus Oliveira


Microcontrolador PIC16F873 14

Figura 7 - Registradores de funo especial (continuao).

Prof. Srgio Ricardo de Jesus Oliveira


Microcontrolador PIC16F873 15
3.3 Registrador STATUS

O registrador STATUS, mostrado a seguir, contm o estado aritmtico da


ltima operao realizada pela ULA (Unidade Lgica Aritmtica), o estado de
RESET e os bits de seleo de banco da memria de dados.
O registrador STATUS atualizado durante a execuo de uma instruo que
afete os bits Z, DC ou C. Estes bits so ativados ou no de acordo com o
resultado da operao definida pela instruo em execuo. Os bits TO e PD
definem o estado do RESET, onde pode-se verificar, por exemplo, o motivo do
ltimo RESET ocorrido.

Figura 8 - Registrador de STATUS.

Prof. Srgio Ricardo de Jesus Oliveira


Microcontrolador PIC16F873 16
3.4 Registrador OPTION

O registrador OPTION contm vrios bits de controle para configurar o


prescaler do TMR0/WDT, a interrupo externa INT, O TMR0 e o circuito de
"pull-ups" da porta B. Este registrador do tipo leitura/escrita.

Figura 9 - Registrador OPTION.

Prof. Srgio Ricardo de Jesus Oliveira


Microcontrolador PIC16F873 17
3.5 Registrador INTCON

O registrador INTCON contm vrios bits de habilitao e estado para as


interrupes de estouro do registrador TMR0, mudana na porta B e interrupo
externa no pino RB0/INT. Este registrador do tipo leitura/escrita.

Figura 10 - Registrador INTCON

Prof. Srgio Ricardo de Jesus Oliveira


Microcontrolador PIC16F873 18
3.6 Registrador PIE1

Este registrador contm os bits de habilitao individual para as


interrupes dos perifricos.

Figura 11 - Registrador PIE1.

Prof. Srgio Ricardo de Jesus Oliveira


Microcontrolador PIC16F873 19
3.7 Registrador PIR1

Este registrador contm os bits de estado para identificao da origem das


interrupes dos perifricos.

Figura 12 - Registrador PIR1.

Prof. Srgio Ricardo de Jesus Oliveira


Microcontrolador PIC16F873 20
3.8 Registrador PIE2

Este registrador contm o bit de habilitao individual para a interrupo


do perifrico CCP2.

Figura 13 - Registrador PIE2.

Prof. Srgio Ricardo de Jesus Oliveira


Microcontrolador PIC16F873 21
3.9 Registrador PIR2

Este registrador contm o bit de estado da interrupo do perifrico CCP2.

Figura 14 - Registrador PIR2.

Prof. Srgio Ricardo de Jesus Oliveira


Microcontrolador PIC16F873 22
3.10 Registrador PCON

O registrador de controle de energizao (PCON) contm um bit que


permite a diferenciao entre um "power-on reset" (POR) , um reset externo
(MCLR) e um reset proveniente do "watch dog" (WDT). E ainda um outro bit para
diferenciao se o ltimo reset foi provocado pelo "Brown-out reset" (BOR).

Figura 15 - Registrador PCON.

Prof. Srgio Ricardo de Jesus Oliveira


Microcontrolador PIC16F873 23

4 Portas de I/O

Alguns pinos das portas de I/O so multiplexados com algum pino de


funo de algum perifrico do dispositivo. Em geral, quando um perifrico est
habilitado, os pinos relativos a este perifrico no so utilizados como pinos de
I/O de uso geral.

4.1 Registradores PORTA e TRISA

A PORTA um latch de 6 bits. O pino RA4/T0CKI uma entrada com


Schimitt Trigger e do tipo coletor aberto. Todos os outros pinos da PORTA tm
nveis de entrada padro TTL e drivers de sada CMOS. Todos os pinos tm
controle de direo de dados (registrador TRIS) podendo-se configur-los como
entrada ou sada. Gravando-se nvel 1 em algum bit do registrador TRISA o bit
correspondente na PORTA ser configurado como entrada. Por outro lado,
gravando-se nvel 0 em algum bit do registrador TRISA o bit correspondente na
PORTA ser configurado como sada.
Lendo-se o registrador PORTA obtm-se o estado dos pinos no momento da
leitura, independente se os mesmos esto configurados como sada ou entrada.
Todas as operaes de escrita so operaes do tipo L-Modifica-Escreve.
Portanto, uma operao de escrita para uma porta implica que os pinos desta
porta sero lidos, o valor obtido modificado e ento rescrito para o latch de
dados da porta.
O pino RA4 multiplexado com a entrada de clock do mdulo Timer0,
tornando-se, portanto, pino RA4/T0CKI. Os outros pinos da PROTA so
multiplexados com as entradas analgicas de tenso do conversor A/D e entradas
de tenso para as referncias positivas de negativas do A/D (+VREF e VREF). A
operao de cada pino selecionada gravando-se 1 ou 0 nos bits de controle do
registrador ADCON1 (registrador 1 de controle do A/D).
O registrador TRISA controla a direo dos pinos RA, mesmo eles sendo
utilizados como entradas analgicas. Desta forma, deve-se garantir nvel 1 para
os bits do registrador TRISA, cujos correspondentes na PORTA estejam sendo
utilizados como entradas analgicas. As figuras a seguir apresentam os

Prof. Srgio Ricardo de Jesus Oliveira


Microcontrolador PIC16F873 24
diagramas de blocos dos pinos da PORTA e em seguida os registradores
envolvidos com esta porta.

Figura 16 PORTA.

Figura 17 - Registradores da PORTA.

Prof. Srgio Ricardo de Jesus Oliveira


Microcontrolador PIC16F873 25
4.2 Registradores PORTB e TRISB

A PORTB um registrador bi-direcional de 8 bits, onde a direo de cada


pino desta porta definida pelo registrador TRISB.
Cada pino desta porta possui um circuito interno de pull-up. Esta
caracterstica ativada quando o bit 7 do registrador OPTION (RBPU) for zerado.
O circuito de pull-up automaticamente desativado quando o pino
configurado como sada. Todos os circuitos de pull-up so desativados na
ocorrncia de um Power-on Reset.
O pino RB0/INT tem a caracterstica de gerar uma interrupo sempre que
ocorrer uma mudana de estado (degrau) vlida nesta entrada. O degrau pode ser
programado para subida INEDG = 1 (OPTION<6>) ou descida INTEDG = 0.
Quando ocorrer um degrau vlido no pino RB0/INT, o bit INTF (INTCON <1>)
ativado.
Os quatro pinos da PORTB, RB7:RB4, tm a caracterstica de gerar uma
interrupo quando ocorre a mudana de estado em qualquer destes pinos.
Somente os pinos configurados como entrada podem gerar pedido de interrupo
na mudana de estado. Os pinos de entrada (RB7:RB4) so comparados com o
ltimo valor lido da PORTB e se houver diferena o bit RBIF (INTCON <0>)
ativado. As figuras a seguir apresentam os diagramas de blocos dos pinos da
PORTB e em seguida os registradores envolvidos com esta porta.
Trs pinos da PORTB so multiplexados com os pinos envolvidos na funo
de programao em baixa tenso: RB3/PGM, RB6/PGC e RB7/PGD.

Prof. Srgio Ricardo de Jesus Oliveira


Microcontrolador PIC16F873 26

Figura 18 PORTB.

Figura 19 - Registradores da PORTB.

Prof. Srgio Ricardo de Jesus Oliveira


Microcontrolador PIC16F873 27
4.3 Registradores PORTC e TRISC

A PORTC um registrador bi-direcional de 8 bits, onde a direo de cada


pino desta porta definida pelo registrador TRISC. A PORTC multiplexada com
vrios perifricos, conforme mostrado na figura 21. Todos os pinos da PORTC
possuem um buffer de entrada do tipo Schimitt Trigger.
Quando uma funo de algum perifrico estiver habilitada, cuidados devem
ser tomados na definio da direo dos dados (Registrador TRISC) nos pinos da
PORTC. Alguns perifricos so prioritrios na definio da direo dos dados nos
pinos relativos a este perifrico e estes somente controlam a direo dos dados
nos pinos da PORTC quando esto habilitados. Portanto, deve-se configurar os
bits do registrador TRISC, de acordo com a direo definida pelos perifricos que
estiverem sendo utilizados no projeto. As figuras a seguir apresentam os
diagramas de blocos dos pinos da PORTC e em seguida os registradores
envolvidos com esta porta.

Figura 20 - PORTC.

Prof. Srgio Ricardo de Jesus Oliveira


Microcontrolador PIC16F873 28

Figura 21 - Registradores da PORTC.

Prof. Srgio Ricardo de Jesus Oliveira


Microcontrolador PIC16F873 29
5 Caractersticas Especiais da CPU

Os microcontroladores PIC16F873/876 possuem caractersticas que


maximizam sua confiabilidade, minimizam custo, economizam energia eltrica e
protegem o cdigo (programa armazenado). Essas caractersticas so:

Seleo do tipo de oscilador;


RESET
o Power-on Reset (POR);
o Power-up Timer (PWRT);
o Oscillator Start-up Timer (OST);
o Brown-out Reset (BOR);
Interrupes;
Watchdog Timer (WDT);
SLEEP;
Proteo de cdigo;
ID Locations (Identificao do componente);
Etc;

O PIC16F873/876 possui um Watchdog Timer (co de guarda) cuja


funo monitorar a ocorrncia de falhas de processamento do C (ex.
trava de execuo) acionando o RESET para restabelecimento do
processamento. O mesmo constitudo por um temporizador interno, o
qual dever ser reinicializado periodicamente pelo software, antes que a
temporizao seja concluda. Caso a temporizao seja atingida,
subentende-se que houve uma falha na execuo do software, quando
ento o RESET acionado.
O controle do Watchdog Timer atravs do software feito por uma
instruo especfica que dever ser inserida em pontos estratgicos do
programa, com o objetivo de reiniciar a temporizao antes que a mesma
seja concluda.
Por questes de confiabilidade, o Watchdog Timer possui um circuito
prprio de temporizao independente do oscilador da CPU.

Prof. Srgio Ricardo de Jesus Oliveira


Microcontrolador PIC16F873 30
Existem dois temporizadores no C que atuam na energizao do
chip. Um deles mantm o componente na condio de RESET at que o
oscilador estabilize. O outro gera um tempo atraso fixo de 72ms, mantendo
o chip em RESET como forma de aguardar a estabilizao da tenso da
fonte de alimentao.
O modo SLEEP foi projetado para garantir um consumo de corrente
muito baixo quando o C estiver no modo Power-down. Neste modo todas
as atividades da CPU so desativadas e o restabelecimento da operao
obtido atravs de um RESET externo, atuao do Watchdog Timer ou uma
interrupo externa.
O PIC16F873/876 possui ainda vrios tipos de osciladores, como
forma de melhor ajustar seu funcionamento em funo de uma aplicao
especfica. A opo de oscilador RC reduz custo, enquanto que a opo
cristal LP economiza energia. Cada uma das opes podem ser selecionadas
atravs dos bits de configurao.

5.1 Bits de Configurao

Quando os bits de configurao so programados, assumem valor 0


e quando deixados desprogramados assumem valor 1, selecionando assim as
vrias configuraes do dispositivo. Quando apagados todos os bits so
desprogramados, com isso a palavra de configurao assume o valor 3FFFh
(todos os bits em 1). O endereo de memria no qual essa palavra armazenada,
situa-se na posio 2007h da memria de programa. Esse endereo fica alm do
espao da memria de programa definida pelo usurio, o qual poder ser
acessado somente durante a programao.

Prof. Srgio Ricardo de Jesus Oliveira


Microcontrolador PIC16F873 31

CONFIGURATION WORD (ADDRESS 2007h)


CP1 CP0 DEBUG WRT CPD LVP BODEN CP1 CP0 PWRTE WDTE F0SC1 F0SC0
bit13 bit0

bit 13-12, CP1:CP0: FLASH Program Memory Code Protection bits(2)


bit 5-4 11 = Code protection off
10 = 1F00h to 1FFFh code protected (PIC16F877, 876)
10 = 0F00h to 0FFFh code protected (PIC16F874, 873)
01 = 1000h to 1FFFh code protected (PIC16F877, 876)
01 = 0800h to 0FFFh code protected (PIC16F874, 873)
00 = 0000h to 1FFFh code protected (PIC16F877, 876)
00 = 0000h to 0FFFh code protected (PIC16F874, 873)
bit 11 DEBUG: In-Circuit Debugger Mode
1 = In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins
0 = In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the debugger.
bit 10 Unimplemented: Read as 1
bit 9 WRT: FLASH Program Memory Write Enable
1 = Unprotected program memory may be written to by EECON control
0 = Unprotected program memory may not be written to by EECON control
bit 8 CPD: Data EE Memory Code Protection
1 = Code protection off
0 = Data EEPROM memory code protected
bit 7 LVP: Low Voltage In-Circuit Serial Programming Enable bit
1 = RB3/PGM pin has PGM function, low voltage programming enabled
0 = RB3 is digital I/O, HV on MCLR must be used for programming
bit 6 BODEN: Brown-out Reset Enable bit(3)
1 = BOR enabled
0 = BOR disabled
bit 3 PWRTE: Power-up Timer Enable bit(3)
1 = PWRT disabled
0 = PWRT enabled
bit 2 WDTE: Watchdog Timer Enable bit
1 = WDT enabled
0 = WDT disabled
bit 1-0 FOSC1:FOSC0: Oscillator Selection bits
11 = RC oscillator
10 = HS oscillator
01 = XT oscillator
00 = LP oscillator

Note 1: The erased (unprogrammed) value of the configuration word is 3FFFh.


2: All of the CP1:CP0 pairs have to be given the same value to enable the code protection scheme listed.
3: Enabling Brown-out Reset automatically enables Power-up Timer (PWRT), regardless of the value of bit PWRTE.
Ensure the Power-up Timer is enabled any time Brown-out Reset is enabled.

Figura 22 - Bits de Configurao.

Prof. Srgio Ricardo de Jesus Oliveira


Microcontrolador PIC16F873 32
5.2 Configuraes do Oscilador

O PIC16F873/876 pode operar em quatro modos diferentes de oscilador. A


seleo do modo de oscilao feita atravs de dois bits de configurao (FOSC1
e FOSC2). Esses modos so:
LP Low Power Crystal
XT Crystal/Ressonator
HS High Speed Crystal/Ressonator
RC Resistor/Capacitor

Nos modos XT, LP ou HS, um cristal ou ressonador cermico dever ser


conectado aos pinos OSC1/CLKIN e OSC2/CLKOUT para estabelecer a oscilao.
Em algumas aplicaes poder ser necessrio utilizar um resistor em srie com o
pino OSC2/CLKOUT como forma de estabilizar melhor a freqncia de oscilao
no valor definido para o cristal, como indicado na figura 23.

Figura 23 - Conexo do cristal/ressonador.

Prof. Srgio Ricardo de Jesus Oliveira


Microcontrolador PIC16F873 33
Quando operando nos modos XT, LP e HS o dispositivo poder receber um
clock externo (independente do oscilador interno) pelo pino OSC1/CLKIN. A
figura 24 ilustra essa forma de conexo.

Figura 24 Conexo do clock externo.

5.3 Configuraes do Oscilador

Conforme mostrado na figura 23 para conexo do cristal/ressonador faz-se


necessrio a conexo de dois capacitores, cujos valores dependes da freqncia
de oscilao e do tipo de oscilador (cristal ou ressonador). As tabelas a seguir
apresentao os diversos valores de capacitores em funo do tipo de conexo.

Modo Freqncia OSC1 OSC2


XT 455 kHz 68 - 100 pF 68 - 100 pF
2.0 MHz 15 68 pF 15 68 pF
4.0 MHz 15 68 pF 15 68 pF
HS 8.0 MHz 10 68 pF 10 68 pF
16 MHz 10 22 pF 10 22 pF

Tabela 1 Tabela de seleo de capacitores - Ressonador.

Prof. Srgio Ricardo de Jesus Oliveira


Microcontrolador PIC16F873 34
Modo Freqncia OSC1 OSC2
LP 32 kHz 33 pF 33 pF
200 kHz 15 pF 15 pF
XT 200 kHz 47 - 68 pF 47 - 68 pF
1 MHz 15 pF 15 pF
4 MHz 15 pF 15 pF
HS 4 MHz 15 pF 15 pF
8 MHz 15 33 pF 15 33 pF
20 MHz 15 33 pF 15 33 pF

Tabela 2 - Tabela de seleo de capacitores - Cristal.

Em aplicaes onde no h uma grande exigncia com relao a preciso e


estabilidade na freqncia de oscilao, o modo RC o mais recomendado por ser
simples e de baixo custo. O mesmo constitudo por um resistor (REXT) e um
capacitor (CEXT). A freqncia de oscilao funo da fonte de alimentao, do
conjunto resistor/capacitor e da temperatura, da a razo da oscilao no ser
to estvel quanto um cristal/ressonador, contudo, ajustando-se adequadamente
o valor do capacitor (capacitores de valores mais altos so mais precisos), pode-se
obter oscilaes mais estveis. A figura 25 apresenta a forma de conexo do
conjunto capacitor/resistor no modo RC.

Figura 25 - Conexo do resistor/capacitor no modo RC.

Prof. Srgio Ricardo de Jesus Oliveira


Microcontrolador PIC16F873 35
5.4 RESET

O PIC16F873/876 diversos tipos RESET:


Power-on Reset (POR) (energizao)
MCLR Reset (durante operao normal)
MCLR Reset (durante o modo SLEEP)
WDT Reset (durante operao normal)
WDT Wake-up (durante o modo SLEEP)
Brown-out Reset (BOR)
Alguns registradores no so afetados em nenhuma condio de RESET. O
estado deles desconhecido aps o POR e no so modificados por ocasio de um
RESET. Outros registradores possuem seus valores reajustados na ocorrncia de
um dos RESET supra citados, excetuando-se o WDT Wake-up, o qual visto
como uma condio normal de operao. Os bits TO e PD so ativados ou
desativados em funo do tipo de RESET ocorrido, como mostrado na tabela 3.
Esses bits podem ser utilizados pelo software para determinao na natureza do
RESET ocorrido. Os valores dos registradores internos do PIC aps a ocorrncia
de um RESET podem ser obtidos no manual do fabricante (tabela 12-6).
O PIC16F873/876 possui um filtro de rudo na entrada do pino MCLR, cuja
funo detectar e ignorar pequenos pulsos de RESET. A figura 26 apresenta um
diagrama de blocos simplificado do circuito de RESET do componente.

POR BOR TO PD DESCRIO


0 x 1 1 Power-on Reset

0 x 0 x Illegal, TO is set on POR

0 x x 0 Illegal, PD is set on POR

1 0 1 1 Brown-out Reset

1 1 0 1 WDT Reset

1 1 0 0 WDT Wake-up

1 1 u u MCLR Reset during normal operation

1 1 1 0 MCLR Reset during SLEEP or interrupt wake-up from SLEEP

Legend: x = dont care, u = unchanged

Tabela 3 - Estado dos bits de RESET e seus significados.

Prof. Srgio Ricardo de Jesus Oliveira


Microcontrolador PIC16F873 36

Figura 26 - Diagrama simplificado do circuito de RESET.

Prof. Srgio Ricardo de Jesus Oliveira