You are on page 1of 7

1.1.

Organizao da Memria de Dados

A memria de dados composta de registradores e RAM para uso


geral. Os registradores so divididos em 2 grupos funcionais: Registradores
de Funes Especiais (32 endereos iniciais de cada banco) e Registradores
de Uso Geral (endereos restantes de cada banco). Entre os registradores
de funes especiais esto: o registrador TMR0, o contador de programa
(PC), o registrador de Status (STATUS), os registradores I/O (ports) e o
registrador de seleo (FSR). Alm disso, os registradores de funes
especiais so usados para controlar a configurao dos ports de I/O e as
opes de pr-escala. Os registradores de uso geral so usados para dados
e controle de informao sob comando das instrues.

1.2.

Registradores de Funes Especiais

Figura 8 Mapa de registradores especiais

1.2.1. INDF : Registrador de Endereamento Indireto (Indirect


Data Addressing Register)
O registrador INDF no um registrador fisicamente alocado e
utilizado em conjunto com o registrador FSR para realizar endereamento
indireto. Qualquer instruo usando o registrador INDF acessa um dado
cujo endereo est contido no registrador FSR.
1.2.2. TMR0: Relgio de Tempo Real (Real Time Clock/Counter)
O contedo desse registrador sucessivamente incrementado
utilizando um clock, que tanto pode ser interno (derivado do sistema de
clock de microcontrolador) quanto externo (aplicado ao pino RA4/T0CKI).
Pode-se utilizar uma pr-diviso interna que permite ampliar (multiplicar) a
contagem.
1.2.3. PC(PCL e PCLATH): Contador de Programa (Program
Counter)
O registrador PC responsvel pela gerao do endereo de busca
instrues na memria de programa. Normalmente incrementado de uma
unidade aps a execuo de uma instruo, com exceo das instrues
que utilizavam desvios como GOTO e CALL. Como o PC tem 13 bits de
largura, o byte menos significativo vem do registrador PCL, que um
registrador de escrita e leitura e os 5 bits mais significativos esto
armazenados no registrador PCLATH.

Figura 9 Contador de programa

O PC tem todos os bits resetados durante o Reset. Durante a


execuo do programa ele auto-incrementado juntamente com a
execuo da instruo, a menos que o resultado da instruo o altere. Uma
rotina em software com GOTO computado acompanhada da adio de um
deslocamento (offset) ao contador de programas (ADDWF PCL).

1.2.4. STACK: Pilha (Stack)


A famlia PIC 16F84A implementa uma estrutura de pilha de oito nveis
de profundidade por 13 bits da lergura. A rea de pilha no faz parte da
memria de programa, nem da memria de dados e tambm no pode ser
lida ou escrita. O empilhamento feito quando chamada uma subrotina
utilizando a instruo CALL. O desempilhamento feito utilizando-se a
instruo RETLW. Dados no podem ser empilhados, prtica muito tuilizada
em outras famlias de microcontroladores que no possuem arquitetura
RISC.
1.2.5. STATUS
o registrador que possui os flags que indicam resultados de
operaes da unidade lgica e aritmtica (ULA), a condio de RESET e o bit
de pr-seleo do banco de memria de dados. Os bits C, D e Z (bits 0, 1 e
2) indicam o estado de uma operao aritmtica na ULA. Os bits PD# (bit 3)
e TO# (bit 4) indicam o estado de Reset. Os bits TO# e PD# so somente
para leitura, no so possveis de serem alterados por software. Quando na
apresentao do sistema de Reset e do Conjunto de Instrues iremos
detalhar mais esse registrador.
1.2.6. OPTION
O registrador OPTION tem 6 bits de largura e contm vrios bits de
controle para configurar a pr-escala que ser utilizada pelo TMR0 ou WDT.
Nele tambm definido o valor da pr-escala e o tipo de contagem. Aps
um Reset, todos os bits so configurados com 1.
1.2.7. Registrador de Trabalho
o registrador mais utilizado, pois toda a transferncia de dados
feita atravs dele. Alm disso, todas as operaes aritmticas e booleanas o
utilizam como sendo um dos operandos. Ele parecido com o acumulador
de outras famlias de microcontroladores. Este registrador no
enderevel.

1.2.8. Registrador de Seleo (File Select Register)


Na famlia PIC 16F84X os Bits 0 a 6 selecionam um dos 128
registradores de uso geral disponveis no modo de endereamento indireto.
O mapa de registradores de uso geral pode ser acessado tanto diretamente
quanto indiretamente atravs do registrador de seleo (FSR). Uma
instruo utilizando o registrador INDF vai operar com o endereo que est
contido no registrador de seleo (FSR). Isto um endereamento indireto.
Por exemplo:

Registrador 05 contm o valor 10h

Registrador 06 contm o valor 0Ah

Carregue o valor 05 no registrador FSR

Uma leitura ao registrador INDF retornar o valor 10h

Incrementa o valor do registrador FSR de um (FSR = 06)

Uma leitura ao registrador INDF retornar o valor 0Ah

1.2.9. Registradores de I/O


Os Registradores de I/O podem ser escritos ou lidos sobre o controle
do programa como qualquer outro registrador. Na condio Reset todos os
I/Os so definidos como entrada, assim como todos os registradores de
controle de I/O (TRISA e TRIS) so configurados com 1.
1.2.10. PORTA
Esse registrador tem correspondncia direta com os pinos RA4:RA0 do
microcontrolador. Ele possui somente 5 bits (RA0 a RA4); os demais 3 bits
no so implementados e so lidos como zero. Cada bit desse PORT pode
ser individualmente configurado como entrada ou sada. O pino RA4/T0CK1
uma entrada Schimitt Trigger e uma sada com dreno aberto. O port RA4
multiplexado com a entrada de clock T0Ck1. Todos os outros pinos de
PORTA tem nveis de entrada Schimmit Trigger e drivers de sada CMOS
completos.
1.2.11. 16.9.2. PORTB
Esse registrador tem correspondncia direta com os pinos RB7:RB0 do
microcontrolador. Ele tem 8 bits de largura e bidirecional. Cada bit desse

PORT pode ser individualmente configurado como entrada ou sada. Cada


pino PORTB tem um pull-up interno.

Um bit de controle RBPU# (OPTION <7>) pode ligar os pull-ups. O


pull-up automaticamente desligado quando os pinos so configurados
como sadas. Os pull-ups tambm so desabilitados no Power-on Reset.
Quatro pinos do PORTB, RB7:RB4 tem uma caracterstica de interrupo na
mudana de estado. Apenas os pinos configurados com entrada podem
causar esta interrupa. Os pinos de entrada (RB7:RB4) so comparados
com o valor antigo armazenado no latch, na ltima leitura do PORTB.
1.2.12. TRISA e TRISB
So os registradores referentes configurao dos pinos de I/O da
PORTA e PORTB. Escrever 1s nos registradores TRISA e TRISB fazem dos
bits entradas, colocando o driver de sada em alta impedncia. Escrever 0s
nesses registradores fazem dos bits sadas, colocando o contedo da sada
nos latches dos PORTs correspondentes. Aps um Reset, todos os
registradores so configurados com 1s, ou seja, todos os pinos de I/O
configurados como entrada.
1.3.

Interface de I/O

Todos os pinos de I/Os podem ser usados tanto como entrada quanto
sada. A sua direo definida pelos registradores de direo TRISA e
TRISB. Cada bit desses registradores corresponde a um pino de I/O que,
quando setado, corresponde entrada e, quando resetado, corresponde
sada. Por exemplo, se quisermos setar o PORTB com o nibble menos
significativo como entrada e o mais significativo como sada, ento o valor a
ser escrito em TRISB ser 00001111 em binrio, ou 0F em hexadecimal.
Nota-se que o dado de sada se mantm armazenado em um flip-flop
independente do pino de I/O estar configurado como entrada ou sada. Esse
dado se mantm nessa condio at que um novo dado seja escrito. Para o
processo de leitura, o dado tem que estar estabilizado e o pino configurado
para entrada pois ela no armazenada em flip-flops.
Devido a essas caractersticas, o programador deve ter alguns
cuidados quando usar instrues do tipo read and write modified como
BSF ou BCF, que lem o PORT de I/O, executam a aoperao no bit e
escrevem o resultado no PORT de I/O. Por exemplo, uma instruo BSF no
pino 5 do PORTB ir provocar a leitura dos 8 pinos de I/O do PORTB. Ento,
a CPU ir executar a operao de setar o bit 5 e o resultado ser escrito no
PORTB. Se outro pino de I/O for usado como bidirecional, e nesse instante
estiver configurado para entrada o sinal presente ser lido e reescrito sobre
o dado que estivesse previamente escrito no latch de sada do pino de I/

Se o pino estiver configurado como entrada no haver nenhum problema,


mas se ele estiver configurado para sada, o dado no latch de sada pode
ser desconhecido. O que o programador deve ter em mente nunca
provocar um curto-circuito nos pinos de I/O . Por exemplo, se no pino de
I/O estiver conectado a GND e no latch de sada estiver setado para 1,
com o pino e I/O configuradao para sada, uma alta corrente ir circular, o
que danificar o componente.
1.4.

Temporizador

O mdulo temporizador/contador (TMR0) tem as seguintes


caractersticas:

Temporizador/contador de 8 bits

Pode-se utiliz-lo para leitura e escrita

Pr-escala de 8 bits programvel por software

Seleo de clock interno ou externo

Seleo do tipo de borda para clock externo

Interrupo no estouro de FFH para 00H

O modo temporizador selecionado fazendo o bit T0CS = 0 (Timer 0


Chip Select OPTION <5>). No modo temporizador, o registrador TMR0
ser incrementado a cada ciclo de mquina (sem pr-escala). Se ocorrer
uma escrita em TMR0, o incremento ser inibido pelos dois ciclos de
mquina seguintes. O modo contador selecionado fazendo o bit T0CS = 1.
Nesse modo, TMR0 ser incrementado a cada borda de subida ou descida
do pino RA4/T0CK1. A borda responsvel pelo incremento determinada
pelo bit T0SE (Timer 0 Select Edge OPTION <4>). O bit T0SE = 0
seleciona borda de subida e T0SE seleciona borda de descida.
A pr-escala compartilhada entre o mdulo TMR0 e o Watch-Dog
Time (WDT). A pr-escala controlada no software pelo bit de controle PSA
(PreScaler Assignmet OPTION <3>). Quando o bit PSA= 1, a pr-escala
fica sob controle do TMR0 e a pr-escala do WDT selecionada para 1:1. A
pr-escala setada por software atravs dos bits PS2:PS0 (OPTION <2:0>)
com valores de seleo que variam de 1:2, 1:4, ..., 1:256. O uso da prescala pode ser para o WDT ou para o TMR0, mas nunca simultneo. Nada
impede que na primeira fase do programa se utiliza a pr-escala para o
WDT e na segunda fase para o TMR0.
O WDT tem oscilador prprio
capaz de gerar um tempo 18ms de perodo sem a pr-escala. Com prescala de 1:128 o tempo sobe para 2,5 segundos. A interrupo do Timer 0
gerada quando o contedo do registrador TMR0 passar de FFH para 00H.
Esse estouro faz T0IF =1. A interrupo pode ser mascarada fazendo T0IE
= 0 (Timer 0 Interrupt Enable INTCO<5>). O bit T0IF deve ser resetado
por software na rotina de servio da interrupo antes de reabilitar a

interrupo. A interrupo do Timer 0 no pode acordar o processador do


mod SLEEP porque o timer desligado antes de entrar no estado de
dormncia.
1.5.

Interrupes

As interrupes disponveis nas famlias PIC 16/17 variam de


componente para componente, dependendo das caractersticas de hardware
implementadas. As famlias PIC 16/17 possuem 3 fontes de interrupo
implementadas. So elas:

Interrupo Externa RB0/INT

Interrupo Temporizador TMR0 (estouro na contagem)

Interrupo por mudana no PortB(pinos RB7:RB4)

O registrador de controle de interrupo (INTCON) armazena os


pedidos individuais de interrupo em seus bits. Ele tambm contm bits de
habilitao individual e global de interrupes. O bit de hebilitao global de
interrupes, GIE (INTCON <7>) habilita (se setado) todas as interrupes
no mascaradas ou desabilita (se resetado) todas as interrupes. As
interrupes individuais podem ser desabilitadas atravs do seu
correspondente bit de habilitao no registrado INTCON. O bit GIE
resetado durante o Reset.
A instruo Retorno da Interrupo, RETFIE, sai da rotina para
desabilitar futuras interrupes, o endereo de retorno colocado na pilha e
o registrador PC carregado com 0004H. Uma vez na rotina de servio da
interrupo a(s) fonte(s) de interrupo podem ser determinadas pelo teste
das flags correspondente no registrador INTCON. O bit da interrupo
atendida deve ser resetado no software antes de reabilitar as interrupes
para evitar interrupes recursivas.