Você está na página 1de 57

Sistemas Microprocessados

ELE30053
DAE01228

AULA 03
Fundamentos
Definições Básicas

• Um µC é um sistema computacional completo, no qual estão


incluídos uma CPU, memória, um sistema de clock, sinais de I/O
(Input/Output), além de outros possíveis periféricos, tais como,
módulos de temporização e conversores A/D entre outros, integrados
em um mesmo componente (chip).
• As partes integrantes de qualquer computador, e que também estão
presentes, em menor escala, nos microcontroladores são:
• Unidade Central de Processamento (CPU);
• Sistema de Clock para dar seqüência às atividades da CPU;
• Memória para armazenamento de instruções e manipulação de dados;
• Entradas para interiorizar na CPU informações do mundo externo;
• Saídas para exteriorizar as informações processadas pela CPU para o
mundo externo;
• Programa (Firmware) para que o sistema faça alguma coisa útil.
Arquiteturas de Microcontroladores

• A arquitetura de um sistema digital define quem são e como as


partes que compõe o sistema estão interligadas. As duas
arquiteturas mais comuns para sistemas computacionais digitais
são as seguintes:
• Arquitetura de Von Neuman : A CPU é interligada à memória por um
único barramento (bus). O sistema é composto por uma única memória
onde são armazenados dados e instruções;
• Arquitetura de Harvard: A Unidade Central de Processamento é
interligada a memória de dados e a memória de programa por
barramento específico.
• O PIC possui arquitetura Harvard.
• Este tipo de arquitetura permite que, enquanto uma instrução é
executada, outra seja “buscada” da memória, o que torna o
processamento mais rápido.
• Microcontrolador “Mid-Range” de 8 bits.
• A memória de dados é do tipo RAM (volátil) e , no caso do 16F877,
a memória de programa é do tipo Flash (letra F no código).
• O barramento de dados é de 8 bits e o de instruções é composto de
16 bits.
Filosofia RISC

• Como o barramento de instruções é maior do que 8 bits, o


OPCODE da instrução já inclui o dado e o local onde ela vai
operar (quando necessário), o que significa que apenas uma
posição de memória é utilizada por instrução, economizando
assim muita memória de programa.
• Dessa forma, podemos observar que dentro da palavra do
OPCODE, que pode ser de 12, 14 ou 16 bits, não sobra muito
espaço para o código da instrução propriamente dito.
• Por isso, os PICs utilizam uma tecnologia chamada RISC, que
significa Reduced Instruction Set Computer (Computador
com Set de Instruções Reduzido).
PIC 16F877A

RISC
•Cerca de 35 instruções
•Execução em pipeline:
• 1 ciclo/instrução sequencial e 2 ciclos/instruç̧ão de desvio
• 1 ciclo = 4 pulsos de clock
•Operação com clock de até 20 MHz (5 MIPS)
•Arquitetura de memória Harvard:
• Memória de Programa: 8k x 14 bits (Flash)
• Memória de Dados: 368 Bytes (RAM)
•Memória auxiliar EEPROM (não volátil) de 256 Bytes, regravável por
software.
•Aprendizado mais fácil e dinâmico
•Desvantagem com a ausência de determinadas funções
(Ex: Funções de multiplicação e divisão devem ser implementadas)
• 4 encapsulamentos disponíveis:
 PDIP 40
 PLCC 44
 QFN 44
 TQFP 44
• Encapsulamento PDIP 40 (adotado): 4 pinos de alimentação;
• 2 pinos de clock;
• 1 pino de gravação/reset
• 33 pinos de entrada/saída configuráveis;
• Fácil prototipagem em Protoboards.
• Opção para proteção de código executável:
 Uma vez ativada, impossibilita a leitura da memória de programa,
evitando a pirataria do código para outros microcontroladores;
• Tensão de trabalho de 2 a 5.5V;
• Modo SLEEP:
 Coloca o uC para “dormir”, reduzindo drasticamente o consumo de
energia;
• Sistema integrado de programação e depuração “in circuit”:
 Programação e depuração serial: apenas 2 pinos;
 Programação e depuração possível sem a necessidade
desconectar o uC do circuito;
• Conversor AD de 10 bits x 8 canais;
• Dois comparadores analógicos configuráveis;
• 2 pinos para captura, comparação e PWM
• Uma porta serial síncrona com SPI (mestre) e I2C
(mestre/escravo);
• Uma porta serial universal (USART); Uma porta paralela de 8
bits (escrava);
• Sistema de interrupções com 14 fontes diferentes (por hardware
e por software);
• Sistema monitor capaz de reiniciar automaticamente o uC caso
alguma anormalidade seja detectada, evitando o travamento do
sistema.
Estruturação Interna do PIC 16F877

• ULA (Unidade Lógica Aritmética);


• Registrador W (work = trabalho);
• Memória de Programa – Bus de 14 bits;
• Memória de Dados RAM – Bus de 8 bits;
• Portas: PORTA, B, C, D e E – Pinos de I/O;
• EEPROM (Memória de Dados Não volátil);
• Timers: TIMER0, TIMER1 e TIMER2
• Comparador - Módulo CCP (Capture, Compare e PWM);
• Porta Serial – USART;
• Registrador STATUS;
• Contador de Linha de Programa – PC (Program Counter);
• Pilha de 8 Níveis – STACK;
• Circuitos Internos: Reset, Osciladores, Watchdog Timer (WDT),
Power-up e Brown-out.
Arquitetura do PIC 16F877: Diagrama
Simplificado

Stack

Memória
de Programa PC
(Flash)
IR
M UNIDADE DE
Memória U CONTROLE
X
FSR
de Dados
(RAM)
STATUS
SISTEMAS DE
EEPROM SUPORTE
W MUX ● Programação

PERIFÉRICOS ● Depuração

● ADC ● Temporização

● Timers ● Reset
● etc.

ULA 3
PORTAS de E/S
A B C D E
Diagrama de Blocos do PIC 16F877
Address Bus Para Memoria de Input/
Memória Memoria Programa Dados Output
de Programa
Data Bus para
Memória de Programa,
Diagrama de Blocos do PIC 16F877
Address Bus Para
Levando a Memoria Dados
Instruction Word

Endereço obtido
Data Bus para
da Instruction Word Data Memory
e Periféricos
Dado obtido da
Instruction Word

CPU
• Unidade Lógica Aritmética (ULA): é onde todas as
operações lógicas (funções lógicas booleanas: e ou, exclusivo e
complemento) e aritméticas (soma e subtração) são efetuadas. O
registrador W sempre estará envolvido de alguma forma em toda
operação lógica ou aritmética. Existem dois destinos possíveis para
estas operações: o W (work) ou um registrador (posição da
memória de dados) definido no argumento da instrução.
• Timer: O PIC possui internamente um recurso de hardware
denominado Timer0. Trata-se de um contador de 8bits
incrementado internamente pelo ciclo de máquina ou por um sinal
externo (borda de subida ou descida), sendo esta opção feita por
software durante a programação (SFR). Como o contador possui 8
bits ele pode assumir 256 valores distintos (0 até 255). Caso o ciclo
de máquina seja de 1µs, cada incremento do Timer corresponderá
a um intervalo de 1µs. Caso sejam necessário intervalos de tempos
maiores para o mesmo Ciclo de Máquina, utilizamos o recurso de
PRE-SCALE.
Ciclos de Máquina
• Nos µC PIC, o sinal de clock é internamente dividido por
QUATRO. Portanto, para um clock externo de 4MHz, temos um
clock interno de 1MHz e, consequentemente, cada ciclo de
máquina será de 1μs;
• A divisão do clock por quatro forma as fases Q1, Q2, Q3 e Q4.

Program Counter

• PC – (Program Counter) contador de programa. É o registrador


especial que guarda o endereço da instrução na memória de
programa, que será executada.
• O PC é incrementado automaticamente na fase Q1 do ciclo de
máquina e a instrução seguinte é buscada da memória de
programa e armazenada no registrador de instruções no ciclo
Q4.
• Ela é decoficada e executada no próximo ciclo, no intervalo de
Q1 e Q4. Essa característica de buscar a informação em um
ciclo de máquina e executá-la no próximo é chamada de
PIPELINE

• Ela permite que quase todas as instruções sejam executadas


em apenas um ciclo, gastando assim 1 μs (para um clock de 4
MHz) e tornando o sistema muito mais rápido. As únicas
exeções referem-se às instruções que geram “saltos” no
program counter, como chamadas de rotinas e retornos.

• No reset o PC será sempre zerado, determinando o início da


execução no endereço 0000h.
Ciclos de Máquina
Um ciclo de máquina = 4 períodos de CLK

ciclo de máquina

• Toda instrução do PIC demanda um Ciclo de Máquina para ser


executada, exceto aquelas que provocam desvio no programa
(demandam dois Ciclos de Máquina).
Pipeline

Quando uma instrução está sendo executada em um ciclo de


maquina, e uma outra instrução é buscada no mesmo ciclo de
maquina e executa no próximo ciclo a chamamos de Pipeline.
Desta maneira as instruções são executadas mais rapidamente
e em maior quantidade. Pipeline é implementado na arquitetura
Harvard
Pipeline em Detalhe!

• O circuito interno do microcontrolador divide o sinal de relógio


em quatro fases, Q1, Q2, Q3 e Q4 que não se sobrepõem;
• A execução de uma instrução, é antecedida pela extração da
instrução que está na linha seguinte;
• O código da instrução é extraído da memória de programa em
Q1 e é escrito no registo de instrução em Q4;
• A decodificação e execução dessa mesma instrução, faz-se
entre as fases Q1 e Q4 seguintes;
• O PC guarda o endereço da próxima instrução a ser executada.
• A extração do código de uma instrução da memória de programa, é
feita num ciclo de instrução, enquanto que a sua descodificação e
execução, são feitos no ciclo de instrução seguinte.
• Contudo, devido à sobreposição - pipelining (o microcontrolador ao
mesmo tempo que executa uma instrução extrai simultaneamente da
memória o código da instrução seguinte), podemos considerar que,
para efeitos práticos, cada instrução demora um ciclo de instrução a
ser executada.
• No entanto, se a instrução provocar uma mudança no conteúdo do
PC, ou seja, se o PC não tiver que apontar para o endereço seguinte
na memória de programa, mas sim para outro (como no caso de
saltos ou de chamadas de sub-rotinas), então deverá considerar-se
que a execução desta instrução demora dois ciclos.
• Isto acontece, porque a instrução vai ter que ser processada de novo,
mas, desta vez, a partir do endereço correto.
• O ciclo de chamada começa na fase Q1, escrevendo a instrução no
registro de instrução (Instruction Register - IR). A decodificação e
execução continua nas fases Q2, Q3 e Q4 do clock.

OBS: nem todas as instruções podem ser realizadas usando a


pipeline. As instruções de saltos no contador de programa, levam o
contador de programa a ser zerado, pois estas instruções levam 2
ciclos de maquinas.
• TCY0: é lido da memória o código da instrução MOVLW 55h;
• TCY1: é executada a instrução MOVLW 55h e é lida da memória
a instrução MOVWF PORTB.
• TCY2: é executada a instrução MOVWF PORTB e lida a
instrução CALL SUB1.
• TCY3: é executada a chamada (call) de uma sub-rotina CALL
SUB1 e é lida a instrução BSF PORTA,BIT3. Como esta
instrução não é a que nos interessa, ou seja, não é a primeira
instrução da sub-rotina SUB1, cuja execução é o que vem a
seguir, a leitura de uma instrução tem que ser feita de novo (este
é um exemplo de uma instrução a precisar de mais que um ciclo).
• TCY4: este ciclo de instrução é totalmente usado para ler a
primeira instrução da sub-rotina no endereço SUB1.
• TCY5: é executada a primeira instrução da sub-rotina SUB1 e
lida a instrução seguinte.
Memória de Programa

• A memória de programação é onde as instruções do programa


são armazenadas. No caso do 16F877 esta memória é de 8192
palavras (words) (8Kb) de 14 bits cada uma.
• Pode ser alterada aplicando-se 13V ao pino VPP (5V no modo
LVP).
• Parte destes 14 bits informam o OPCODE (código da instrução)
e o restante traz consigo o argumento da instrução
correspondente. Na família PIC existem três tipos de memória
de programa: EPROM (O.T.P. – One Time Programable),
EEPROM (janelado) e FLASH.
• Existem duas posições da memória do programa que recebem
nomes especiais: vetor de reset e vetor de interrupção.
• O vetor de reset é para onde o programa vai quando ele é
inicializado, enquanto que o vetor de interrupção é a posição da
memória de programa para onde o processamento é desviado
quando ocorre uma interrupção.
Memória de Programa

• Vetor de Reset: Trata-se do primeiro endereço de programa


que será executado quando o PIC começar a funcionar (após a
alimentação ou um reset). Aponta para o endereço 0x00.

• Vetor de Interrupção: As rotinas de interrupções serão


armazenadas na área de programação, juntamente com todo
resto do programa. No, entanto existe um endereço que é
reservado para o início do tratamento de todas as interrupções.
Vetor de Interrupção aponta para o endereço 0x04.
Memória de Programa

Stack – Pilha
•A pilha é um local, totalmente separado da memória de
programação, em que serão armazenados os endereços de
retorno quando utilizarmos instruções de chamadas de rotinas.
•Memória interna composta por 8 registros de 13 bits destinada a
armazenar endereços da memória de programa.
•Quando uma sub-rotina é chamada ou na ocorrência de uma
interrupção, o endereço para onde o PC deveria apontar (caso não
houvesse desvio), é salvo automati- camente na pilha (stack) e
recuperado ao final da execução da sub-rotina.
•É escrita de forma circular, isto é, após 8 chamadas aninhadas, a
nona irá sobrescrever o endereço da primeira (naturalmente isto
deve ser evitado)
15/08/2019
Memória de Dados

• Armazena dados do programa e registradores da CPU


• A memória de dados é uma memória volátil do tipo RAM
(Random Access Memory).
• O mapa de memória é divido em duas partes:
 Registadores especiais (Special Function Register - SFR);
 Registradores de uso geral (General Purpose Register - GPR -
368 bytes);.
• Como o ponteiro da memória de programa tem capacidade de
endereçar somente 128 posições de memória de cada vez (7
bits), a memória de programa é dividida em 4 bancos (banco
0,1,2 e 3 no 16F877).
• Esta divisão implica em termos posições de memória que
somente poderão ser acessadas caso o banco a que ela
pertença seja previamente selecionado através de um bit
específico do SFR STATUS.
Mapas das Memórias

MEMÓRIA DE DADOS
SFRs - Banco 0
13-bit
Mapas das Memórias Program Counter
Endereçamento 8K

MEMÓRIA DE PROGRAMA

Reset Vector

Interrupt Vector

8K
locações

Opcode=14 bits
Interrupção

• As Interrupções são causadas através de eventos assíncronos


(podem ocorrer a qualquer momento) que causam um desvio
no processamento. Este desvio tem como destino o vetor de
interrupção.
• Um boa analogia para melhor entendermos o conceito de
interrupção é a seguinte: você está trabalhando digitando uma
carta no computador quando o seu ramal toca. Neste momento
você, interrompe o que está fazendo, para atender ao telefone e
verificar o que a pessoa do outro lado da linha está precisando.
Terminada a conversa, você coloca o telefone no gancho
novamente e retoma o seu trabalho do ponto onde havia
parado. Observe que não precisamos verificar a todo instante,
se existe ou não alguém na linha, pois quando o ramal é
chamado, o telefone toca avisando que existe alguém querendo
falar com você.
Interrupções no PIC

• Interrupções de TIMERS (3);


• Interrupção de fim de escrita na EEPROM;
• Interrupção de comparador;
• Interrupções de USART (2);
• Interrupção de CCP;
• Interrupção externa: Essa interrupção é gerada por um sinal
externo ligado a uma porta específica que no caso é a porta
RB0. Ela é utilizada para diversas finalidades, como, por
exemplo o reconhecimento de um botão ou outro sinal do
sistema que necessite de uma ação imediata. Funciona
somente na borda de subida ou descida dependendo da
configuração.
• Interrupção por mudança de estado: Ocorre tanto em borda
de subida quanto em borda de descida. Ligada às portas RB4,
RB5, RB6 e RB7 simultaneamente.
O PIC16F877
• µC RISC de 40 pinos;
• Memória de Programa FLASH (8K de 14 bits);
• Memória de dados 368 bytes;
• Memória EEPROM 256 bytes;
• Freqüência de operação até 20MHz;
• 33 I/O (Entradas/Saídas) configuráveis:
• PORT A: RA0 – RA5 (6 PINOS)
• PORT B: RB0 – RB7 (8 PINOS)
• PORT C: RC0 – RC7 (8 PINOS)
• PORT D: RD0 – RD7 (8 PINOS)
• PORT E: RE0 – RE2 (3 PINOS);
• 14 Interrupções;
• 3 Timers;
• 2 Módulos CCP (Capture/Compare/PWM);
• Comunicação Serial USART;
• 8 canais de entrada de conversores A/D de 10 bits.
Principais Características Elétricas

• Temperatura de trabalho: -40°C até +125°C;


• Temperatura de Armazenamento: -65°C até 150°C;
• Tensão de Trabalho: 3.0V a 5.5V;
• Voltagem Máxima nos demais pinos (em relação ao VSS): -0.3V
até (VDD + 0.3V);
• Dissipação máxima de potência: 1.0 W;
• Corrente máxima de saída no pino VSS: 350 mA;
• Corrente máxima de saída no pino VDD: 250 mA;
• Corrente máxima de entrada de um pino: 25 mA;
• Corrente máxima de saída de um pino: 25 mA.
Pinagem do PIC 16F877

MCLR/VPP 1 40 RB7/PGD
RA0/AN0 2 39 RB6/PGC
RA1/AN1 3 38 RB5
RA2/AN2/VREF-/CVREF 4 37 RB4
RA3/AN3/VREF+ 5 36 RB3/PGM
RA4/T0CKI/C1OUT 6 35 RB2

PIC 16F877A
RA5/AN4/SS/C2OUT 7 34 RB1
RE0/RD/AN5 8 33 RB0/INT
RE1/WR/AN6 9 32 VDD
RE2/CS/AN7 10 31 VSS
VDD 11 30 RD7/PSP7
VSS 12 29 RD6/PSP6
OSC1/CLKI 13 28 RD5/PSP5
OSC2/CLKO 14 27 RD4/PSP4
RC0/T1OSO/T1CKI 15 26 RC7/RX/DT
RC1/T1OSI/CCP2 16 25 RC6/TX/CK
RC2/CCP1 17 24 RC5/SDO
RC3/SCK/SCL 18 23 RC4/SDI/SDA
RD0/PSP0 19 22 RD3/PSP3
RD1/PSP1 20 21 RD2/PSP2
Descrição dos Pinos
Descrição dos Pinos
Descrição dos Pinos

Legenda
I = Input (Entrada) O = Output (Saída) I/O = Input/Output (Entrada/Saída)
P = Power (Alimentação)
Portas

• TRIS: Esses registradores servem para configurar os pinos das


portas como entrada ou saída. Quando é colocado “1” em um
bit do TRIS, o pino relacionado a ele é configurado como
entrada. Para configurar o pino como saída, você deve escrever
“0” no bit relacionado. Uma maneira prática para memorizar
essa regra é associar “1” ao “I” de Input (entrada) e o “0” ao “O”
de Output (saída). Para configurar o PORTA, deve ser utilizado
o registrador TRISA, o PORTB o TRISB, etc.
• PORTS: PORTA, PORTB, PORTC, PORTD e PORTE
Quando um pino dessas portas é configurado como entrada, ao
lermos o seu bit relacionado, encontramos diretamente o nível
lógico aplicado a esse pino. Da mesma maneira, ao
configurarmos um pino como saída, podemos alterar o seu
estado, escrevendo diretamente no bit relacionado.
No Mapa de Memória

MEMÓRIA DE DADOS
Contadores

• Timer: O PIC possuí internamente um recurso de hardware


denominado Timer0. Trata-se de um contador de 8bits
incrementado internamente pelo ciclo de máquina ou por um
sinal externo (borda de subida ou descida), sendo esta opção
feita por software durante a programação (SFR). Como o
contador possui 8 bits ele pode assumir 256 valores distintos (0
até 255). Caso o ciclo de máquina seja de 1µs, cada incremento
do Timer corresponderá a um intervalo de 1µs. Caso sejam
necessário intervalos de tempos maiores para o mesmo Ciclo
de Máquina, utilizamos o recurso de PRE-SCALE.
• PRE-SCALE: O Pre-Scale é um divisor de frequência
programável do sinal que incrementa o Timer0. Quando temos
um pre-scale de 1:1, cada ciclo de máquina corresponde a um
incremento do Timer0 (unidade de Timer0). Ao alterarmos o
pre-scale para, por exemplo 1:4 (os valores possíveis são as
potencias de dois até 256), o Timer0 será incrementado uma
vez a cada quatro ciclos de máquina.
Funcionamento Timer e Prescaler
Parâmetros de Configuração
• Tipo de Oscilador: 2 grupos: Internos e Externos
 Oscilador Interno: 32 KHz ou 4 MHz (Seleção por software)
 Osciladores Externos:
✓ RC_CLKOUT: Para oscilador externo tipo RC com o pino 15 operando
como CLKOUT, isto é, com uma onda quadrada de ¼ da frequência;
✓ RC_I/O: Para oscilador externo tipo RC com o pino 15 operando como
I/O (RA6);
✓ INTOSC_CLKOUT: Para oscilador interno com o pino 15 operando como
I/O (RA6);
✓ EC_I/O: Para clock externo (circuito auto-oscilante) com o pino 15
operando como I/O (RA6);
✓ XT: Para osciladores externos tipo cristal ou ressoadores;
✓ HS: Para cristais ou ressoadores externos com frequências elevadas
(acima de 4 MHz);
✓ LP: Para cristais ou ressoadores externos com baixas frequências
(abaixo de 200 KHz). Utilizado para minimizar consumo.
Parâmetros de Configuração

• WATCHDOG (WDT) é um recurso disponível no PIC que parte


do princípio que todo sistema é passível de falha. Se todo
sistema pode falhar, cabe ao mesmo ter recursos para que, em
ocorrendo uma falha, algo seja feito de modo a tornar o sistema
novamente operacional. Dentro do PIC existe um contador
incrementado por um sinal de relógio (clock) independente.
Toda vez que este contador extrapola o seu valor máximo
retornando a zero, é provocado a reinicialização do sistema
(reset).
• Clear Watchdog: Se o sistema estiver funcionado da maneira
correta, de tempos em tempos uma instrução denominada clear
watchdog timer (CLRWDT) zera o valor deste contador,
impedindo que o mesmo chegue ao valor máximo. Desta
maneira o Watchdog somente irá "estourar“ quando algo de
errado ocorrer.
Parâmetros de Configuração

• POWER UP TIMER: é um temporizador que faz com que o PIC,


durante a energização (power up), aguarde alguns ciclos de
máquina (72 ms) para garantir que todo o sistema periférico
(display, teclado, memórias, etc) estejam operantes quando o
processamento estiver sendo executado.
• BROWN OUT DETECT: O Brown Out monitora a diferença de
tensão entre VDD e VSS, provocando a reinicialização do PIC
(reset) quando esta cai para um valor inferior ao mínimo
definido em manual (4V tipíco por mais de 100μs).
• LOW VOLTAGE PROGRAM: Trata-se do sistema de
programação do PIC (gravação da memória de programa) em
baixa tensão: 5V. Normalmente essa programação é habilitada
por uma alta (13 V) no pino MCLR.
• CÓDIGO DE PROTEÇÃO: Para gravação em série é muito
importante que esta opção esteja ativada, pois impedirá que
qualquer pessoa consiga ler o programa gravado dentro do PIC.
Black-out reset
Brown-out

Brown-out reset
Lembrar!!!!!
Indicações sobre a apresentação do Projeto

• Documento impresso p/ entregar na sala do Professor.


• Apresentação do Líder e Áreas de Responsabilidade.
• Elaboração do cronograma de atividades.
• Especificação e compra de materiais e dispositivos
• Tempo de Implementação;
• Período de Testes;
• Correção de ajustes de erros;
• Apresentação do protótipo;
• Elaboração da Página do Projeto;
• Artigo - Publicação do trabalho.

Você também pode gostar