Você está na página 1de 60

Projeto & Microcontrolador

Prof. Rogério Dumbá


MBA Eng. Sistemas
Características Micro controladores

Memória RAM e Registradores


A memoria RAM dos PICs possui uma implementação
um tanto peculiar quando comparada com outros
dispositivos.
De fato, a memoria RAM dos PICs é utilizada
essencialmente para abrigar os registradores de função
especial (SFR) e outra para abrigar os registradores de
proposito gerais (GPR).
A memória RAM é um tipo de tecnologia que
permite o acesso aos arquivos armazenados.

Diferentemente da memória do HD, a RAM


não armazena conteúdos permanentemente.

É responsável, no entanto, pela leitura dos


conteúdos quando requeridos.

Ou seja, de forma não-sequencial, por isso, a


nomenclatura em inglês de Random Access
Memory (Memória de Acesso Aleatório).
Características Micro controladores

Os registradores SFR (special Function Register -


registradores de função especial)
são utilizados para controlar os periféricos e
dispositivos internos,flags de estado do
processador, entre outras funções.

Os GPRs (General Purpose Registers -


registradores de proposito gerais) são utilizados
para o armazenamento temporário de dados e
informações do programa do usuário.
Características Micro controladores
Os registradores SFR(registradores de função especial)
e GPR (registradores de proposito gerais) são muitas
vezes referenciados simplesmente pela letra “f” por
causa da nomenclatura utilizada pela Microchip: file
registers, ou registradores de arquivo.
Lembre-se que os registradores “f” (SFR e GPR) são
mapeados dentro da memoria RAM dos chips.
Desta forma, o acesso aos registradores e feito pelo seu
endereço de localização na memória RAM.
Características Micro controladores
Um aspecto importante sobre a arquitetura dos nos PICs é
que a forma de implementação das instruções limita o
endereçamento a um máximo de 7 bits ou 128
registradores.

Para contornar esta limitação, a Microchip implementou


também na memoria RAM a filosofia de paginação, criando
bancos de memoria, cada um com 128 posições.

(Esta solução tornou possível o acesso a um conjunto muito


maior de registradores, ao mesmo tempo em que manteve
a compatibilidade de código entre os diversos chips da
família PIC).
Características Micro controladores
O controle da seleção do banco de memória em uso e feito por
meio dos bits RP0 e RP1 localizado no registrador STATUS.

Desta forma, a arquitetura da serie PIC esta limitada a um


conjunto de quatro bancos de memoria, o que totaliza um
máximo de 512 registradores (somando os registradores SFR e
os GPR).

Outra característica importante é o fato de que alguns


registradores SFR podem ser encontrados em dois ou ate nos
quatro bancos de memoria RAM, o que chamamos de
registradores espelhado que otimiza o acesso a registradores
como o de STATUS, INTCON etc.
Características Micro controladores
Registradores SFR (registradores de função especial) e
GPR (registradores de proposito gerais)
STATUS – Utilizado para armazenamento de flags
matemáticos e de estado de CPU, além dos bits de seleção
do banco de memoria RAM.
INTCON – Utilizado para controle de interrupções.
OPTION_REG – Utilizado para configurar o funcionamento
de alguns periféricos internos do PIC.
PORTx – Utilizado para a leitura ou escrita de informações
nos pinos externos do PIC.
TRISx – Utilizado para o controle da direção de
funcionamento de cada pino da porta (se entrada ou saída).
Características Micro controladores

Registradores de I/O

Os Registradores de I/O podem ser escritos ou


lidos sobre o controle do programa como
qualquer outro registrador.

Na condição Reset todos os I/Os são definidos


como entrada, assim como todos os
registradores de controle de I/O (TRIS e PORT)
são configurados com 1.
Características Micro controladores
PORTA

Esse registrador tem correspondência direta


com os pinos RA4:RA0 do microcontrolador.

Ele possui somente 5 bits (RA0 a RA4); os


demais 3 bits não são implementados e são
lidos como zero.
Características Micro controladores

Cada bit desse PORT pode ser individualmente


configurado como entrada ou saída.

O pino RA4/T0CK1 é uma entrada Schimitt


Trigger e uma saída com dreno aberto.

O port RA4 é multiplexado com a entrada de


clock T0Ck1. Todos os outros pinos de PORTA
tem níveis de entrada Schimmit Trigger e drivers
de saída CMOS completos.
Características Micro controladores
PORTB
Esse registrador tem correspondência 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 saída.
Cada pino PORTB tem um pull-up interno.
Características Micro controladores
Um bit de controle RBPU# (OPTION <7>) pode ligar os
pull-ups. O pull-up é automaticamente desligado quando
os pinos são configurados como saídas. Os pull-ups
também são desabilitados no Power-on Reset.

Quatro pinos do PORTB, RB7:RB4 tem uma característica


de interrupção na mudança de estado. Apenas os pinos
configurados com entrada podem causar esta
interrupçaõ.

Os pinos de entrada (RB7:RB4) são comparados com o


valor antigo armazenado no latch, na última leitura do
PORTB.
Características Micro controladores

TRISA e TRISB
São os registradores referentes à configuração dos
pinos de I/O da PORTA e PORTB. Escrever 1’s nos
registradores TRISA e TRISB fazem dos bits entradas,
colocando o driver de saída em alta impedância.
Escrever 0’s nesses registradores fazem dos bits saídas,
colocando o conteúdo da saída nos latches dos PORTs
correspondentes. Após um Reset, todos os
registradores são configurados com 1’s, ou seja, todos
os pinos de I/O configurados como entrada.
Características Micro controladores
Interface de I/O
Todos os pinos de I/Os podem ser usados tanto como
entrada quanto saída. A sua direção é definida pelos
registradores de direção TRISA e TRISB.

Cada bit desses registradores corresponde a um pino de I/O


que, quando setado, corresponde à entrada e, quando
resetado, corresponde à saída.

Por exemplo, se quisermos setar o PORTB com o nibble


menos significativo como entrada e o mais significativo
como saída, então o valor a ser escrito em TRISB será
00001111 em binário, ou “0F” em hexadecimal
Características Micro controladores
Nota-se que o dado de saída se mantém
armazenado em um flip-flop independente do
pino de I/O estar configurado como entrada ou
saída.
Esse dado se mantém nessa condição 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 não é armazenada em flip-flops.
Características Micro controladores
Devido a essas características, o programador deve ter alguns cuidados
quando usar instruções do tipo “read and write modified” como BSF
ou BCF, que lêem o PORT de I/O, executam a operação no bit e
escrevem o resultado no PORT de I/O.

Por exemplo, uma instrução BSF no pino 5 do PORTB irá provocar a


leitura dos 8 pinos de I/O do PORTB. Então, a CPU irá executar a
operação 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 saída do
pino de I/º Se o pino estiver configurado como entrada não haverá
nenhum problema, mas se ele estiver configurado para saída, o dado
no latch de saída pode ser desconhecido.
Características Micro controladores

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 saída estiver
setado para “1”, com o pino e I/O configuradao
para saída, uma alta corrente irá circular, o que
danificará o componente.
Registrador de função especifica

Registrador W – O registrador W possui


características peculiares e únicas:
Pode ser utilizado como destino de
diversas operações aritmética e lógicas.
Não pode ser utilizado como fonte de
dados em diversas operações internas da
CPU (rotação de dados, incremento,
decremento etc.)
Ao contrario dos registradores SFR e GPR, o
W não esta mapeado na memoria RAM dos
PICs.
É utilizado principalmente como “ponte”
entre os registradores “f”.
Dentre as características citadas, as
importantes, sem duvida, é a utilização do
registrador W como intermediário para
troca de dados entre registradores “f” (SRF
e GPRs).
Contador de Programa – PC (Program Counter)
O registrador PC é responsável pela geração do
endereço de busca à instruções na memória de
programa.
Normalmente é incrementado de uma unidade
após a execução de uma instrução, com exceção
das instruções 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 estão armazenados no registrador
PCLATH.
Contador de Programa – PC (Program Counter)
Contador de Programa – PC (Program Counter)

O PC tem todos os bits resetados durante o


Reset. Durante a execução do programa ele é
auto incrementado juntamente com a execução
da instrução, a menos que o resultado da
instrução o altere. Uma rotina em software com
GOTO computado é acompanhada da adição de
um deslocamento (offset) ao contador de
programas (ADDWF PCL).
STACK: Pilha (Stack)
A família PIC implementa uma estrutura de pilha
de oito níveis de profundidade por 13 bits da
largura.

A área de pilha não faz parte da memória de


programa, nem da memória de dados e também
não pode ser lida ou escrita.

O empilhamento é feito quando é chamada uma


sub-rotina utilizando a instrução CALL.
O desempilhamento é feito utilizando-se a
instrução RETLW.
Dados não podem ser empilhados, prática muito
utilizada em outras famílias de
microcontroladores que não possuem arquitetura
RISC.
STACK: Pilha (Stack)
Por Exemplo:
Podemos comparar com com a estrutura de
dados normalmente localizado na memoria
RAM e que se caracteriza por apresentar apenas
um ponto de acesso aos seus dados,
denominado topo da pilha (em inglês TOS – Top
of Stack). Sendo que a estrutura utilizada para
implementar a pilha e chamada de memoria
LIFO (Last In Frist Out – ultimo a entrar, primeiro
a sair).
Interrupções

Uma interrupção é um evento externo que


causa o processador parar a execução do
programa corrente e desviar a execução para um
bloco de código chamado rotina de interrupção
(normalmente são decorrentes de operações de
E/S).
Ao terminar o tratamento de interrupção o
controle retorna ao programa interrompido
exatamente no mesmo estado em que estava
quando ocorreu a interrupção.
Interrupções
Interrupções
Porém, para garantir o correto funcionamento
deste mecanismo de transferência de dados, é
preciso ter um sistema com uma organização de
E/S semelhante à da figura a seguir:
Execução das interrupções
A execução de interrupções necessita tanto de
ações de hardware como de software, as quais,
podem ser sumarizadas pelo seguinte
fluxograma:
Execução de interrupção

Porém, para uma explicação um pouco mais


didática, vamos nos atentar para as seguintes
figuras:
Retorno ao programa principal

Fontes de interrupção
Periféricos no-chip
A maioria dos processadores possui uma grande
variedade de periféricos no próprio chip, tais
como:
Timers, portas paralelas, porta seriais;
Interrupções ocorrem quando certas condições
previamente estabelecidas foram atingidas.
Linhas de interrupção externas
A maioria dos processadores possui uma ou
mais linhas de interrupção externas que podem
ser ativadas por um circuito externo.
Periféricos no-chip
Interrupções por software
Também chamadas exceções ou traps, estas
interrupções são geradas devido a um controle
de software ou devido a uma operação iniciada
por software.
Exemplos:
Divisão por zero, overflow, underflow, ....
Falha de hardware
Gerada por uma falha tal como falha de
alimentação ou erro de paridade em memória.
Características básicas das Interrupções
As interrupções possibilitam um tratamento
mais eficiente das operações de entrada e saída,
e permitem melhor atender aos requisitos de
aplicações em tempo real.

A requisição de interrupção pode ocorrer a


qualquer momento (assincronamente), sendo
ela indicada pela ativação de um "flag" pelo
dispositivo periférico.
O microprocessador reconhece a interrupção,
enviando sinais de controle, completa a
execução da instrução corrente, salva o
conteúdo dos registradores de interesse
(contador de programa, status, etc), e atende ao
dispositivo periférico que solicitou a
interrupção, transferindo o controle para a
rotina de tratamento da interrupção.
Características básicas das Interrupções
Ao término da execução desta rotina, o
microprocessador desativa o "flag" de indicação
de interrupção, restaura os registradores que
foram salvos, e transfere o controle para a
instrução seguinte ao ponto de interrupção do
programa.
Algumas aplicações de tempo real envolvem
módulos de programas críticos que não podem
ser interrompidos durante sua execução.
Características básicas das Interrupções
Algumas interrupções podem ter seu
tratamento postergado, enquanto que outras
necessitam de tratamento imediato (por
exemplo, coleta de dados e alarmes).

Em função disso, a maioria dos


microprocessadores apresentam interrupções
mascaráveis e interrupções não-mascaráveis.
Através de instruções apropriadas o programa
pode habilitar ou desabilitar uma interrupção
mascarável, enquanto que a não-mascarável
deverá ser sempre atendida, devendo ser
reservada, assim, apenas para eventos de alta
importância.
Interrupção Vetorada
Virtualmente cada processador reserva
uma área de memória especifica para
tratar cada uma das interrupções. Estas
localizações são chamadas vetores de
interrupção.
Este tipo exige a identificação do
dispositivo periférico que solicita
interrupção.
Essa identificação é utilizada para a
localização do endereço da subrotina de
tratamento da interrupção, em uma tabela
localizada em uma região determinada da
memória do microprocessador (vetor de
interrupções). Exemplo: interrupções
Interrupção Vetorada
Interrupção não vetorada
Sem vetor de interrupção, o programa deve
verificar cada possível fonte de interrupção para
ver quem causou a interrupção, aumentando
assim o tempo de resposta.
Em geral uma causa da interrupção é gerada e
colocado em um registrador causa. Como
resultado, o Sistema operacional (ou Kernel)
pode imediatamente determinar a identidade
do dispositivo que o interrompeu.
Interrupções simultâneas
Em sistemas com mais de uma interrupção,
existe a possibilidade de ocorrerem pedidos de
interrupção simultâneos, devendo existir algum
critério para a escolha de qual será atendida em
primeiro lugar.

Esse critério, normalmente por prioridade, pode


ser implementado de diversas formas: "daisy
chain" ou circuitos de prioridade.
Interrupções simultâneas
Daisy Chain
Nesse esquema, os dispositivos periféricos que
podem solicitar interrupção são interligados,
através de sinais de controle, em uma cadeia
conhecida como "daisy chain", sendo o primeiro
elemento ligado ao microprocessador.
Em caso de pedido de interrupção, o
microprocessador envia um sinal ao primeiro
elemento; caso seja ele o autor do pedido, ele
responde com o endereço da subrotina de
tratamento; caso contrário, ele repassa o pedido
ao próximo dispositivo periférico, que repetirá o
procedimento descrito.
Dessa maneira, o primeiro elemento da cadeia
deverá corresponder ao de maior prioridade, e
assim sucessivamente.
Interrupções simultâneas
Interrupções simultâneas
Circuitos de Prioridade
Nesse esquema, um codificador de prioridades é
utilizado (por exemplo, de 8 para 3), fornecendo
em sua saída o código do pedido da interrupção
de maior prioridade presente na entrada.
Esse código pode ser inspecionado pelo
microprocessador para descobrir qual
interrupção atender.

Muitas vezes são disponíveis esquemas para o


mascaramento individual das interrupções,
permitindo que uma interrupção alocada em
uma linha de maior prioridade não seja atendida
quando outra de menor prioridade ocorrer.
Interrupções simultâneas
Muitos processadores apresentam uma de suas
interrupções como sendo não-mascarável, de
forma que sempre que ela ocorrer, o
microprocessador deverá atendê-la.

Ela deve ser utilizada com muito cuidado,


devendo ser alocada a eventos de muita
importância, como por exemplo, queda da
alimentação, sinal de emergência, alarme, etc.
Instruções

CICLO DE INSTRUÇÃO (para os


microcontroladores PIC) Para a família PIC, cada
ciclo de instrução dura quatro pulsos de clock.

Os microcontroladores PIC fazem uso do


pipeline para aumentar a velocidade de
execução das instruções.
Pipeline é uma técnica utilizada pelos
processadores mais modernos e consiste em
dividir a execução das instruções em partes e
cada uma destas partes pode ser executada
em paralelo em um formato semelhante a
uma linha de montagem de carros.
Instruções
No caso dos microcontroladores PIC pode-se
visualizar a execução das instruções como sendo
dividida em dois estágios: busca (fetch) e
executa (execute), onde cada estágio gasta 4
ciclos de clock.
O pipeline permite que quase todas as
instruções possam ser executadas em um
ciclo de máquina, com exceção das que
alteram o contador de programa, como
chamadas de rotinas e seus retornos.

Nestes casos, o pipeline sofre uma


penalidade de um ciclo de clock devendo
descartar a instrução que já havia sido
buscada para então carregar a instrução no
endereço correto, consumindo, portanto,
dois ciclos de instrução.
Instruções
Figura Pipeline de um trecho de código
Instruções
No ciclo 0, o código da instrução MOVLW 55h é
buscado da memória (desconsiderando a
instrução que é executada neste ciclo).

No ciclo 1, a instrução MOVLW 55h é executada


e a instrução MOVWF PORTB é buscada da
memória.

No ciclo 2 a instrução MOVWF PORTB é


executada e é buscada da memória a instrução
CALL SUB_1.
A chamada da sub-rotina SUB_1 e a leitura da
instrução BSF PORTA, BIT3 são feitas no ciclo 3.

Como a instrução BSF PORTA, BIT3 não é a que


será executada no momento e sim a primeira
instrução da sub-rotina SUB_1, deve ser feita
outra busca de instrução.
Instruções
Esta situação mostra porque as instruções de
chamada de sub-rotina consomem dois ciclos de
máquina, já que a instrução BSF PORTA, BIT3
terá que ser lida novamente ao término da sub-
rotina.
O ciclo 4 é usado somente para ler a primeira
instrução da sub-rotina e nenhuma instrução é
executada. A primeira instrução da sub-rotina é
então executada no ciclo 5.
Instruções
Exemplo
A entrada de clock (pino OSC1/CLKIN) é
internamente dividida por quatro para gerar
quatro clocks em quadratura sem sobreposição,
nomeados Q1, Q2, Q3, e Q4.
Internamente, o Contador de Programa (PC) é
incrementado em Q1 e a instrução é retirada da
memória de programa e colocada no registrador
de instruções em Q4.
Ela é decodificada e executada no ciclo seguinte
de Q1 até Q4.
Instruções

Você também pode gostar