DEFINIÇÃO 1 DEFINIÇÃO - ufsj.edu.br - PIC... · 25/04/2017 1 25/04/2017 1 parte 2 pic...
Transcript of DEFINIÇÃO 1 DEFINIÇÃO - ufsj.edu.br - PIC... · 25/04/2017 1 25/04/2017 1 parte 2 pic...
25/04/2017
1
125/04/2017
Parte 2
PIC
225/04/2017
1. DEFINIÇÃO
2. MCU’S DE 8 BITS
3. MCU’S DE 16 E DE 32 BITS
4. PIC16F877-20/P
5. FILE REGISTERS
6. PROGRAM MEMORY
7. ULA
DEFINIÇÃO1
DEFINIÇÃO
325/04/2017
DEFINIÇÃO1
425/04/2017
• Ideal para sistemas embarcados (embedded systems).
• Possui uma unidade de microprocessamento, como um P.
• Possui periféricos específicos não encontrados em um P.
MCU
DEFINIÇÃO1
525/04/2017
• MCU Possui periféricos não essenciais ao
processamento, como:
• Memória para programa
• Memória para dados permanentes
• Memória para dados temporários
• Oscilador
• Contador
• Temporizador
• Comparador
• Conversor A/D
• Conversor série/paralelo e paralelo/série
• PWM
Diferenças entre P e MCU
DEFINIÇÃO1
625/04/2017
• PIC – Programmable Interface Controller.
• Nome oficial: PICmicro®.
• Comercializado pela Microchip Technology Inc..
• Lançado em 2001.
• É um tipo de microcontrolador (MCU).
• Também fabrica DSC´s – Digital Singal Controllers
• Os DSC´s da Microchip são chamados de dsPIC®.
PIC
http://www.microchip.com
25/04/2017
2
DEFINIÇÃO1
725/04/2017
• Harvard Architecture
• Long Word Instructions
• Single Word Instructions
• Single Cycle Instructions
• Register File Architecture
• Instruction Pipelining
• Reduced Instruction Set
• Orthogonal (Symmetric) Instructions
CaracterísticasPIC16F877
DEFINIÇÃO1
825/04/2017
Família Arquitetura
PIC10F2XX, PIC12X5XX, PIC16X5X, PIC16X5XX Harvard
PIC12X6XX, PIC16 Harvard
PIC18 Harvard
PIC24, dsPICModifiedHarvard
PIC32 MIPS
Famílias PIC
DEFINIÇÃO1
925/04/2017
Arquitetura Harvard versus Von-Neumann
• Alguns engenheiros consideram a
arquitetura Harvard melhor.
• Alguns engenheiros consideram a
arquitetura Von-Neumann melhor.
• Não há consenso.
• Ambas arquiteturas são usadas.
• Diversos outros parâmetros são
dependentes desta escolha.
DEFINIÇÃO1
1025/04/2017
Arquitetura Harvard versus Von-Neumann
http://ithare.com/w p-content/uploads/BB_part55_v2.png
DEFINIÇÃO1
1125/04/2017
Arquitetura Harvard versus Von-Neumann
8-bit
core8-bit 14-bit
8-bit
PIC16F877 8-bit MCU
• Se estamos falando de µP ou CPU,
os blocos estão em chips separados.
• Se estamos falando de MCU, os
blocos estão no mesmo chip.
8-bit
core
DEFINIÇÃO1
1225/04/2017
Arquitetura Harvard versus Von-NeumannIntel® 8051
Program
Data
data bus
data bus
data
bus
File registers
25/04/2017
3
DEFINIÇÃO1
1325/04/2017
• Com o lançamento da memória flash, EEPROM em uma
MCU tornou-se sinônimo de data memory e flash de
program memory.
• Antes do lançamento da memória flash, program memory
e data memory eram construídas em EEPROM, o que
permitia que ambas fossem implementadas em uma
única matriz ou célula.
• Por causa disso, antes do lançamento da flash, a
arquitetura Von-Neumann era mais atraente.
• Com o uso da flash program memory em arquitetura Von-
Neumann, uma lógica de endereçamento deve fazer a
seleção entre flash e EEPROM; geralmente por meio dos
bits mais significativos.
• Isso torna o uso da arquitetura Harvard mais interessante.
Arquitetura Harvard versus Von-Neumann
DEFINIÇÃO1
1425/04/2017
• Não é correto afirmar que a diferença entre uma
arquitetura e a outra é o fato das duas memórias
estarem juntas ou não, pois na arquitetura Von-
Neumann as duas memórias podem ser separadas.
• O correto é afirmar que na arquitetura Von-
Neumann as duas memórias tem os seus dados
acessados através do mesmo barramento.
• Na arquitetura Harvard, as memórias são
acessadas por meio de barramentos separados.
Arquitetura Harvard versus Von-Neumann
DEFINIÇÃO1
1525/04/2017
• Não faz sentido falar nestas arquiteturas
quando se lida com µP´s, pois as duas
memórias localizam-se fora do chip.
• Mesmo assim, estes princípios podem
ser aplicados no que diz respeito aos
barramentos externos ao chip.
Arquitetura Harvard versus Von-Neumann
DEFINIÇÃO1
1625/04/2017
HarvardInstrução 1
Instrução 2Instrução 3
Instrução 4Instrução 5
Instrução 6Instrução 7
13 0
Von-NeumannInstrução 1
Instrução 2
Instrução 3
Instrução 4
Instrução 5
Instrução 6
Instrução 7
Instrução 8
Instrução 9
7 0
• Exemplo Harvard: MCU PIC16F877.
• Exemplo Von-Neumann: MCU Intel® 8051.
Arquitetura Harvard versus Von-NeumannProgram memory
DEFINIÇÃO1
1725/04/2017
HarvardInstrução 1
Instrução 2
Instrução 3
Instrução 4
Instrução 5
Instrução 6
Instrução 7
15 0
PIC18 Two-Word Instructions
• A maioria das instruções da PIC18 (8-bit) usam um único 16-
bit word.
• Outras instruções da PIC18 usam dois 16-bit words.
• CALL, GOTO e LFSR.
• Estas instruções são chamadas de Double Word Instructions.
• Elas requerem duas buscas em dois ciclos de instrução.
DEFINIÇÃO1
1825/04/2017
• O uso da arquitetura Harvard foi um dos grandes
atrativos apresentados nas MCU’s PIC.
• O lançamento das MCU’s PIC, em 2001, logo após a
popularização das memórias flash, em 2000, dá a
impressão de que a comercialização das MCU’s PIC
estava condicionada à popularização das memórias flash.
• As primeiras MCU’s PIC foram lançadas com program
memory implementada em EEPROM, em arquitetura
Harvard, mesmo já existindo memória flash, porém esses
modelo não são mais fabricados.
• Há outros fabricantes usando a arquitetura Harvard.
PIC16F877Arquitetura Harvard
25/04/2017
4
DEFINIÇÃO1
1925/04/2017
CORE
256-byte
EEPROM
DATA
MEMORY
8-bit
Data/Address
Control BUS
8k-instruction
14-bit
FLASH
PROGRAM
MEMORY
14-bit
Instruction
BUS
13-bit
Address
BUS
PIC16F877Arquitetura Harvard
0
7
0
13
0
12
DEFINIÇÃO1
2025/04/2017
8-bit
DataMemory
8-bit
DataBus 8-bit
PIC®
CORE
14-bit
ProgramMemory
14-bit
Bus
13-bit
Bus• A data memory recebe a palavra de dado e a
palavra de endereço no mesmo barramento.
• Dado e endereço não podem ser manipulados
ao mesmo tempo.
• Como o barramento é o mesmo, dado e
endereço possuem o mesmo tamanho, 8 bits.
• A program memory possui barramentos
separados para dado e endereço, por isso
estas palavras podem ter tamanhos diferentes.
PIC16F877Arquitetura Harvard
DEFINIÇÃO1
2125/04/2017
• Por usar barramentos separados para instrução e
endereço, a leitura de uma instrução é feita em um
único ciclo de instrução.
• A flash program memory tem endereçamento separado
do endereçamento da EEPROM data memory.
• O opcode não precisa ter o mesmo tamanho dos dados.
• Permite a otimização opcode independente do tamanho
das palavras de dados, pois este tamanho não precisa
ser um múltiplo de oito.
• Na família mid-range, o dado é de 8 bits e o opcode é
de 14 bits. Na família base line, o opcode é de 12 bits.
PIC16F877Arquitetura Harvard
DEFINIÇÃO1
2225/04/2017
0130000h
1FFFh
13-bit address bus
14-bit data bus
(Program Bus)
0
12
0
13
0700h
FFh
8-bit address bus
8-bit data bus
0
7
0
7
EEPROM data memory
flash program memory
• O address bus da EEPROM não é o mesmo da flash.
• O data bus da EEPROM não é o mesmo da flash.
8-bit MCU
data bus
PIC16F877Arquitetura Harvard
DEFINIÇÃO1
2325/04/2017
• A multiplexação não é feita por hardware.
• O programa assembly realiza a multiplexação.
PIC16F877Arquitetura Harvard
0700h
FFh
8-bit address bus
8-bit data bus
0
7
0
7
EEPROM data memory
8-bit MCU
data bus 8-bit
31
MUX8-bit control bus0
7
DEFINIÇÃO1
0700h
FFh
8-bit address bus
8-bit data bus
EEPROM data memory
8-bit MCU
data bus
SF
RS
FR
8-bit control bus
2425/04/2017
PIC16F877Arquitetura Harvard
• Os barramentos da data memory são registrados.
• Essa registração permite a multiplexação por software.
SF
R
25/04/2017
5
DEFINIÇÃO1
2525/04/2017
8-bit
MCU
8-bit
Prg/DtMemory
8-bit
Bus
• O endereço e o dado da memória usa o data bus.
• Endereço e dado são de oito bits.
Arquitetura Von-NeumannMCU Intel™ 8081
DEFINIÇÃO1
2625/04/2017
• A instrução ADCA usa 1 byte (8Fh).
• A instrução ADI usa 2 bytes (C6h , 8-bit data).
• A instrução LDA usa 3 bytes (3Ah, 16-bit address).
Von-NeumannP Intel™ 8085
Instrução 1
Instrução 2
Instrução 3
Instrução 4
Instrução 5
Instrução 6
Instrução 7
Instrução 8
Instrução 9
7 0
DEFINIÇÃO1
2725/04/2017
• ORL A,@R0 usa 1 byte (46h).
• ORL A,#data usa 2 bytes (44h , 8-bit data).
• ORL iram addr,#data usa 3 bytes (43h, 16-bit address).
Von-Neumann
Instrução 1
Instrução 2
Instrução 3
Instrução 4
Instrução 5
Instrução 6
Instrução 7
Instrução 8
Instrução 9
7 0
MCU Intel™ 8051
DEFINIÇÃO1
25/04/2017 28
Exemplo fictício para memória única, MCU/P de 16 bits
0150000h
3FFFh
15-bit address bus<A14:A0>
16-bit data bus<D15:D0>
0
14
0
154000h
4FFFh
EEPROM
Program
Memory<A13:A0>
A14=0
Data
Memory<A11:A0>
A12=0
A13=0
A14=1
16-bit MCU/P
data bus
Von-Neumann
DEFINIÇÃO1
25/04/2017
• Opcode e dado de 16 bits.
• Program Memory de 16k instruções (16384).
• Data Memory de 2k palavras (2048).
• O bit 14 do endereço identifica a memória.29
Exemplo fictício para memória única, MCU/P de 16 bits
0150000h
3FFFh
15-bit address bus
16-bit data bus
0
14
0
15 4000h
4FFFh
EEPROM
Von-Neumann
DEFINIÇÃO1
12-bit EEPROM address bus
25/04/2017 30
0150000h
3FFFh
Exemplo fictício para memórias separadas, MCU/P de 16 bits
4000h
4FFFh
EEPROM data memory
flash program memory
14-bit flash address bus
16-bit data bus
0
13
0
150
11
16-bit data bus
15-bit address bus0
14
Von-Neumann
• Capacidade e endereçamento iguais ao exemplo anterior.
16-bit data bus
25/04/2017
6
DEFINIÇÃO1
25/04/2017 31
Exemplo fictício para memórias separadas, MCU/P de 16 bitsVon-Neumann
0150000h
3FFFh
4000h
4FFFh
EEPROM data memory
flash program memory
CS = A14 × /A13 × /A12
CS = /A14
Faixa proibida: (A14×A13) + (A14×A12)
DEFINIÇÃO1
25/04/2017 32
EEPROM data memory
flash program memory
Program
Memory
Data
Memory
EEPROM
Modo antigoModo moderno
• Antigamente, EEPROM era usada para programa e para
dados.
• Sendo tudo em EEPROM, é possível usar uma única matriz.
• Atualmente, EEPROM é usada para dados (mais rápida) e
flash é usada para programa (mais densa).
• Sendo tecnologias diferentes, há duas matrizes.
Von-NeumannNão é a PIC16F877
DEFINIÇÃO1
25/04/2017 33
• Os dois modos seguem o mesmo endereçamento.
• O address bus e o data bus da memória são acessados
através do MCU/P data bus.
• Program word e data word têm o mesmo tamanho (embora
isso não seja obrigatório).
• Address word pode ser menor do que program/data word.
• Program address word pode diferir de data address word.
• Toda informação passa pelo MCU/P data bus.
• Dado e endereço são informados em ciclos diferentes.
Von-NeumannNão é a PIC16F877
DEFINIÇÃO1
25/04/2017 34
• Não é arquitetura Long Word Instructions.
• O tamanho das palavras de programa é o
mesmo das palavras de dado.
• É possível usar uma única matriz.
MCU/P
data bus
MCU/P
data bus
MCU/P
data bus
Von-NeumannNão é a PIC16F877
DEFINIÇÃO1
MCU/P
data bus
MCU/P
data bus
MCU/P
data bus
25/04/2017 35
• Não é arquitetura Single Word Instructions.
• As instruções podem usar uma, duas ou três palavras.
• Cada palavra usa um endereço.
Von-Neumann
Instrução 1
Instrução 2
Instrução 3
Instrução 4
Instrução 5
Instrução 6
Instrução 7
Instrução 8
Instrução 9
Não é a PIC16F877
DEFINIÇÃO1
25/04/2017 36
• Não é arquitetura Single Cycle Instructions.
• Cada palavra é lida em um ciclo.
• Como temos instruções de uma, duas ou
três palavras, são usados, então, um, dois
ou três ciclos de instrução para a sua leitura.
Von-Neumann
Instrução 1
Instrução 2
Instrução 3
Instrução 4
Instrução 5
Instrução 6
Instrução 7
Instrução 8
Instrução 9
Não é a PIC16F877
MCU/P
data bus
MCU/P
data bus
MCU/P
data bus
25/04/2017
7
DEFINIÇÃO1
25/04/2017 37
Endereço divididoVon-Neumann
• Geralmente, a capacidade de endereços de
memória (programa e dado) exige o uso de palavras
de endereço cujo tamanho, em bits, é superior ao
das palavras usadas como programa ou dado.
• Isto requer, então, que a palavra de endereço seja
dividida em partes que caibam no barramento.
• No caso da MCU Intel™ 8051, o barramento é de
oito bits, e o endereço é de 16 bits, havendo a
necessidade da divisão em low-byte e high-byte.
• Se a instrução usa endereço da memória como
argumento, são usadas, então, duas palavra de
programa para este endereço.
DEFINIÇÃO1
25/04/2017 38
• O address word possui 16 bits.
• O data word possui 8 bits.
• O P data bus possui 8 bits.
• O address word é dividido em duas palavras de 8 bits (L/H).
• Cada metade é enviada em um ciclo de instrução.
• Instrução de literal usa 2 bytes (mnemônico e literal).
• Instrução de endereço usa 3 bytes (mnemônico e endereço).
P Intel 8085
16-bit address bus0
15
8-bit data bus0
7
8-bit MCU/P
data bus
Von-Neumann
DEFINIÇÃO1
25/04/2017 39
Caso onde program word é maior do que data word.Von-Neumann Single Word
16-bit flash
program memory
015 87HIGH LOW8-bit EEPROM
data memory
07
• Long Word Instructions.
• Single Word Instructions.
• Double Cycle Instructions.
• O opcode é dividido em duas
palavras de 8 bits (L/H).
• Não foi encontrado exemplo
para esta arquitetura.
DEFINIÇÃO1
25/04/2017 40
0000h
3FFFh
Caso onde program word é maior do que data word.
4000h
4FFFh
8-bit data bus
8-bit Data Bus
0
7
15-bit address bus0
14
0
13
0
1112-bit Address Bus
14-bit Address Bus
• O bit 14 do address bus
serve para selecionar
as duas memórias.
Von-Neumann Single Word
DEFINIÇÃO1
25/04/2017 41
Caso onde program word é maior do que data word.
15-bit address bus0
14
8-bit data bus0
7
8-bit MCU/P
data bus
• O address word possui 15 bits.
• O data word possui 8 bits.
• O MCU/P data bus possui 8 bits.
• O address word é dividido em duas palavras de 8 bits (L/H).
• Cada metade é enviada em um ciclo de instrução.
Von-Neumann Single Word
DEFINIÇÃO1
4225/04/2017
• O address bus da EEPROM é o mesmo do da flash.
• O data bus da EEPROM é o mesmo do da flash.
• Isto significa que o data bus do chip lida com dados
e com instruções.
• Há uma multiplexação temporal para uso do data
bus para dados e para instruções.
• O data bus é multiplexado em:
• Endereço da instrução na flash.
• Conteúdo da instrução na flash.
• Endereço do dado na EEPROM.
• Conteúdo do dado na EEPROM.
• Outras funções da ULA.
Von-Neumann
25/04/2017
8
DEFINIÇÃO1
4325/04/2017
Long Word Instructions
• Consequência da arquitetura Harvard.
• O opcode possui tamanho maior do que os dados.
• Na família PIC mid-range, o dado é de 8 bits e o opcode é de
14 bits.
• Isto é possível porque as instruções possuem um barramento
separado do de dados (consequência da arquitetura Harvard).
• Isto permite que a instrução contenha todas as informações
necessárias, os mnemônicos e os argumentos.
• No contrário, as demais informações devem ser fornecidas em
palavras separadas.
• É possível implementar long word instructions em arquitetura
Von-Neumann desde que o tamanho as instruções seja
múltiplo do tamanho dos dados (possível mas não usado).
PIC16F877
DEFINIÇÃO1
4425/04/2017
Single Word Instructions
• Consequência da arquitetura Long Word Instructions.
• Cada instrução emprega, apenas, um opcode.
• Cada opcode representa uma instrução, de forma inequívoca.
• O número de palavras da memória de programa é igual ao
valor máximo de instruções graváveis.
• No contrário, sem Long Word Instructions, os opcodes
possuem o tamanho das palavras de dados, e uma instrução
pode usar várias palavras.
PIC16F877
DEFINIÇÃO1
4525/04/2017
• Consequência da arquitetura Harvard.
• Single Cycle Instructions: Como as instruções possuem
um barramento próprio, todos os bits do opcode são
lidos no mesmo ciclo, mesmo se o opcode possui um
tamanho maior do que o das palavras de dados.
• No contrário, se a instrução emprega várias palavras, é
gasto um ciclo por palavra.
• A arquitetura Von-Neumann não permite Single Cycle
Instructions.
• Na arquitetura PIC, se a instrução pode interferir no
PC, um ciclo a mais é gasto.
Single Cycle InstructionsPIC16F877
DEFINIÇÃO1
4625/04/2017
Harvard, Long Word, Single Word e Single Cycle
• A arquitetura Harvard permite o uso de Long Word
Instructions.
• A arquitetura Long Word Instructions permite o uso de
Single Word Instructions e Single Cycle Instructions.
• Essas quatro características estão relacionadas.
• A arquitetura Von Neumann permite o uso de Long Word
Instructions deste que o tamanho do opcode seja um
múltiplo inteiro do tamanho dos dados, e, nesse caso, não
se tem Single Word Instructions.
Harvard
Architecture
Long Word
Instructions
Single Word
Instructions
Single Cycle
Instructions
PIC16F877
DEFINIÇÃO1
4725/04/2017
• Reduced Instruction Set (RISC):
• Poucas instruções são necessárias.
• RISC é mais indicado em Single Cycle Instructions.
• Instruction Pipelining:
• A busca por uma instrução usa um ciclo (TCY).
• A execução usa outro TCY.
• Enquanto uma é executada, a próxima é buscada.
• Economiza-se um TCY a cada instrução.
• É usado um instruction register.
• Orthogonal (Symmetric) Instructions:
• Todas as instruções são destinadas aos registradores.
• O work register ou acumulador é um registrador.
CaracterísticasPIC16F877
DEFINIÇÃO1
4825/04/2017
Register File Architecture
• Os registradores para funções especiais (SFR’s) e os de uso
geral (GPR’s) são acessados por meio de um único
mapeamento, uma única lógica de endereçamento, um único
address bus.
• Na arquitetura PIC, os GPR’s podem ser considerados como
periféricos, pois não são fundamentais para o funcionamento
do chip e poderiam localizar-se em um chip separado.
• Na arquitetura PIC, os SFR’s usados por blocos funcionais
periféricos também podem ser considerados como periféricos,
pois, uma vez que os periféricos poderiam estar contidos em
chips separados, tais registradores estariam em tais chips.
• Os SFR’s para uso do core são considerados como parte
integrante do core.
PIC16F877
25/04/2017
9
DEFINIÇÃO1
4925/04/2017
• Os GPR’s são construído na forma
matricial, como toda SRAM.
• Os SFR’s localizam-se em diversas
partes do chip, próximos aos blocos
funcionai sobre os quais atuam.
• Todos esses registradores recebem
a mesma lógica de endereçamento,
por meio do mesmo address bus,
isso simplifica a programação.
Register File ArchitecturePIC16F877
DEFINIÇÃO1
5025/04/2017
• Para P’s, recursos são supridos por chip’s separados.
• Geralmente, a programação de um MCU é mais fácil porque o
endereçamento dos recursos periféricos é conhecido.
• Geralmente, a arquitetura de uma MCU é mais complicada do
que a de um P com a mesma capacidade de processamento.
Diferenças entre P e MCU
DEFINIÇÃO1
5125/04/2017
Tamanho da palavra:
• 08 bits.
• 16 bits.
• 32 bits.
Famílias PIC
• O tamanho da palavra também retrata o tamanho do data bus.
• Esse é o máximo valor para GPR’s e SFR’s.
• Esse tamanho também define o data memory.
DEFINIÇÃO1
5225/04/2017
Famílias PIC
DEFINIÇÃO1
5325/04/2017
• Funcionalidade é a oferta de recursos na forma de
periféricos.
• À medida em que se aumenta a funcionalidade e a
performance dos modelos de MCU, a quantidade de
instruções vai aumentando.
• Quanto menos instruções há, maior é a característica
RISC da MCU; quanto mais instruções há, maior é a
característica CISC da MCU.
• Quanto mais funcionalidades e instruções há na
arquitetura, maior é o tamanho do opcode.
RISC/CISC
DEFINIÇÃO1
5425/04/2017
• A correlação entre funcionalidade e performance
não encontra justificativa no contexto da
engenharia elétrica.
• Esta correlação tem justificativa puramente
comercial e financeira.
• Quando a MCU possui baixa performance, seu
custo é baixo, e um aumento na sua funcionalidade
provoca um acréscimo relevante em seu custo.
• Quando a MCU possui alta performance, seu custo
é elevado, e um aumento na sua funcionalidade
provoca um acréscimo desprezível em seu custo.
RISC/CISC
25/04/2017
10
DEFINIÇÃO1
5525/04/2017
• RISC: Reduced Instruction Set Computing.
• CISC: Complex Instruction Set Computing.
• RISC: Opcodes curtos (poucos bits).
• CISC: Opcodes longos (muitos bits).
• RISC: Muitas instruções para realizar tarefas simples.
• CISC: Poucas instruções para realizar tarefas complexas.
• As duas arquiteturas geram programas com tamanho similar.
• As duas arquiteturas geram programas com rapidez similar.
RISC/CISC
DEFINIÇÃO1
5625/04/2017
RISC/CISC
Programa em RISC
Programa em CISC
Tamanho médio das instruções
MCU’S DE 8 BITS2
5725/04/2017
MCU’S DE 8 BITS
MCU’S DE 8 BITS2
5825/04/2017
• 8-bit data bus.
• Dados e instruções em barramentos separados.
• Esta foi a novidade introduzida pela PIC.
• Acesso simultâneo aos dois barramentos.
• Aumento da rapidez de processamento.
Dados de 8 bits
MCU’S DE 8 BITS2
5925/04/2017
• EPROM PIC16CXXX
• ROM PIC16CRXXX
• flash PIC16FXXX
Exemplos de tipos de memória de programa
• A versão em EPROM não é mais fabricada.
• A versão em ROM é útil para grande
volume com o mesmo programa.
• O chip sai de fábrica com o programa
gravado em ROM gate array.
MCU’S DE 8 BITS2
6025/04/2017
• Baseline.
• Mid-Range.
• Enhanced Mid-Range.
• PIC18.
Arquiteturas
25/04/2017
11
MCU’S DE 8 BITS2
6125/04/2017
Baseline Architecture
http://www.microchip.com/_images/BaselineArch_large.jpg
2k instructions
11–bit address
12–bit words
4 pages
flashFILE REGISTERS
SRAM
DATA BUS
/ EEPROM
8-bit
8-bit
11-bit
MCU’S DE 8 BITS2
6225/04/2017
Mid-Range Architecture• Todos os itens do Baseline.
• Hardware de comunicação serial MSSP/USART/SPI.
• Master Synchronous Serial Port.
• Universal Synchronous Asynchronous Receiver/Transmitter.
• Protocolos de comunicação serial SPI™ e I²C™.
• Synchronous Serial Port.
• Serial Peripheral Interface.
• Inter-Integrated Circuit.
• PWM.
• Controlador LCD (ausente na PIC16F877).
• Conversor A/D de 10 bits.
MCU’S DE 8 BITS2
6325/04/2017
Mid-Range Architecture
http://www.microchip.com/_images/MidRangeArch.jpg
8k instructions
13–bit address
14–bit words
4 pages
flash
DATA BUS
8-bit
8-bit
13-bit
FILE REGISTERS
SRAM
/ EEPROM
MCU’S DE 8 BITS2
6425/04/2017
Mid-Range Architecture - Core
(2): Ausente na
PIC16F877.
flash
MCU’S DE 8 BITS2
6525/04/2017
Mid-Range Architecture – General purpose I/ONem todos os modelos possuem todas as portas, e nem no tamanho apresentado.
Data bus
MCU’S DE 8 BITS2
6625/04/2017
Mid-Range Architecture - Peripheral ModulesNem todos os modelos possuem todos os itens.
8-bit Data bus
25/04/2017
12
MCU’S DE 8 BITS2
6725/04/2017
Mid-Range Architecture - Peripheral ModulesNem todos os modelos possuem todos os itens.
• Flash program memory*.
• EEPROM data memory.
• General purpose registers.
• Portas paralelas (A, B, C, D, E, F, G).
• Porta paralela escrava.
• Portas seriais (SSP e USART).
• Contadores (0, 1, 2).
• Capture-Compare-PWM (1,2).
• Conversor A/D.
• LCD driver**.
* Não ligado ao data bus.
** Ausente na PIC16F877.
MCU’S DE 8 BITS2
6825/04/2017
Enhanced Mid-Range Architecture
• Todos os itens do Mid-Range.
• Periféricos de comunicação.
• PWM com base de tempo independente.
MCU’S DE 8 BITS2
6925/04/2017
Enhanced Mid-Range Architecture
http://www.microchip.com/_images/715px_Extended_Midrange_graph.jpg
15–bit address
14–bit words
flash
DATA BUS
DATA BUS
FILE REGISTERS
SRAM
MCU’S DE 8 BITS2
7025/04/2017
PIC18 Architecture
• Todos os itens do Enhanced Mid-Range.
• Multiplicação 8bit x 8bit.
• CAN
• Controller Area Network
• CTMU
• Charge Time Measurement Unit
• Protocolo de comunicação USB.
• Protocolo de comunicação Ethernet.
• Conversor A/D de 12 bits.
MCU’S DE 8 BITS2
7125/04/2017
PIC18 Architecture
http://www.microchip.com/_images/715px_PIC18_graph.jpg
flash DATA BUS
DATA BUS
FILE REGISTERS
SRAM
20–bit address
16–bit words
MCU’S DE 8 BITS2
7225/04/2017
MCU´s de 8 bits
http://www.microchip.com/_images/8bit_overview_graphic.png
25/04/2017
13
MCU’S DE 8 BITS2
7325/04/2017
PIC10F200
PIC10F202
PIC10F204
PIC10F206
PIC10F220
PIC10F222
PIC12F508
PIC12F509
PIC12F510
PIC12F519
PIC12F529T39A
PIC16F505
PIC16F506
PIC16F526
PIC16F54
PIC16F57
PIC16F59
PIC16F707
PIC10F320
PIC10F322
PIC12F609
PIC12F615
PIC12F617
PIC12F629
PIC12F635
PIC12F675
PIC12F683
PIC12F752
PIC16F610
PIC16F616
PIC16F627A
PIC16F628A
PIC16F630
PIC16F631
PIC16F636
PIC16F639
PIC16F648A
PIC16F676
PIC16F677
PIC16F684
PIC16F685
PIC16F687
PIC16F688
PIC16F689
PIC16F690
PIC16F716
PIC16F72
PIC16F720
PIC16F721
PIC12F1501
PIC12F1822
PIC12F1840
PIC12LF1840T48A
PIC16F1454
PIC16F1455
PIC16F1458
PIC16F1459
PIC16F1503
PIC16F1507
PIC16F1508
PIC16F1509
PIC16F1512
PIC16F1513
PIC16F1516
PIC16F1517
PIC16F1518
PIC16F1519
PIC16F1526
PIC16F1527
PIC16F1782
PIC16F1783
PIC16F1784
PIC16F1786
PIC16F1787
PIC16F1823
PIC16F1824
PIC16F1825
PIC16F1826
PIC16F1827
PIC16F1828
PIC16F1829
PIC16F1847
PIC16F1933
PIC16F1934
PIC16F1936
PIC16F1937
PIC16F1938
PIC16F1939
PIC16F1946
PIC16F1947
PIC16LF1902
PIC16LF1903
PIC16LF1904
PIC16LF1906
PIC16LF1907
PIC16F722
PIC16F722A
PIC16F723
PIC16F723A
PIC16F724
PIC16F726
PIC16F727
PIC16F73
PIC16F737
PIC16F74
PIC16F747
PIC16F76
PIC16F767
PIC16F77
PIC16F777
PIC16F785
PIC16F84A
PIC16F87
PIC16F88
PIC16F882
PIC16F883
PIC16F884
PIC16F886
PIC16F887
PIC16F913
PIC16F914
PIC16F916
PIC16F917
PIC16F946
PIC16HV540
PIC16HV785/
En
han
ced
Mid
-Ran
ge A
rch
itectu
re
Mid-RangeArchitecture
BaselineArchitecture
Exemplos de MCU´s de 8 bits
MCU’S DE 8 BITS2
7425/04/2017
PIC18F2221
PIC18F44J11
PIC18F67J11
PIC18F1220
PIC18F65J15
PIC18F63J90
PIC18F25J50
PIC18F65J11
PIC18F1230
PIC18F85J10
PIC18F64J90
PIC18F2321
PIC18F26J11
PIC18F45J11
PIC18F66J10
PIC18F83J11
PIC18F44J50
PIC18F46K22
PIC18F1320
PIC18F4221
PIC18F65J90
PIC18F45K80
PIC18F84J11
PIC18F26K80
PIC18F66J15
PIC18F85J15
PIC18F26J13
PIC18F2450
PIC18F1330
PIC18F83J90
PIC18F85J11
PIC18F26J50
PIC18F4321
PIC18F45J50
PIC18F67J10
PIC18F86J10
PIC18F84J90
PIC18F65J50
PIC18F46J11
PIC18F4450
PIC18F65K22
PIC18F26J53
PIC18F86J15
PIC18F85J90
PIC18F46K80
PIC18F27J13
PIC18F66J90
PIC18F2410
PIC18F6310
PIC18F46J13
PIC18F65K90
PIC18F87J10
PIC18F46J50
PIC18F86J11
PIC18F85J50
PIC18F66J50
PIC18F66J93
PIC18F6390
PIC18F85K22
PIC18F27J53
PIC18F86J16
PIC18F66K22
PIC18F65K80
PIC18F66J55
PIC18F67J90
PIC18F2420
PIC18F4410
PIC18F86J90
PIC18F46J53
PIC18F47J13
PIC18F85K90
PIC18F87J11
PIC18F67J50
PIC18F66K90
PIC18F67J93
PIC18F86J50
PIC18F6410
PIC18F86J93
PIC18F4420
PIC18F6393
PIC18F67K22
PIC18F2510
PIC18F47J53
PIC18F86K22
PIC18F86J55
PIC18F87J90
PIC18F66K80
PIC18F6490
PIC18F8310
PIC18F2423
PIC18F66J60
PIC18F2331
PIC18F67K90
PIC18F87J50
PIC18F86K90
PIC18F87J93
PIC18F8390
PIC18F2520
PIC18F4510
PIC18F66J65
PIC18F87K22
PIC18F2431
PIC18F4423
PIC18F6493
PIC18F2455
PIC18F67J60
PIC18F86J60
PIC18F87K90
PIC18F8410
PIC18F4520
PIC18F2515
PIC18F8393
PIC18F2550
PIC18F86J65
PIC18F4331
PIC18F2523
PIC18F8490
PIC18F4455
PIC18F96J60
PIC18F87J60
PIC18F2458
PIC18F2525
PIC18F4515
PIC18F4431
PIC18F4550
PIC18F96J65
PIC18F4523
PIC18F2480
PIC18F97J60
PIC18F8493
PIC18F4458
PIC18F4525
PIC18F2610
PIC18F4480
PIC18F2220
PIC18F4610
PIC18F2620
PIC18F2553
PIC18F86J72
PIC18F2580
PIC18F4620
PIC18F4553
PIC18F87J72
PIC18F4580
PIC18F2320
PIC18F4220
PIC18F6527
PIC18F2585
PIC18F4320
PIC18F4585
PIC18F8527
PIC18F2680
PIC18F6622
PIC18F4680
PIC18F2682
PIC18F8622
PIC18F4682
PIC18F2685
PIC18F6520
PIC18F6627
PIC18F4685
PIC18F8520
PIC18F8627
PIC18F6722
PIC18F6628
PIC18F8722
PIC18F8628
PIC18F6723
PIC18F8723
PIC18 Architecture
PIC18F13K22
PIC18F24J10
PIC18F23K20
PIC18F14K22
PIC18F25J10
PIC18F24K20
PIC18F13K50
PIC18F23K22
PIC18F25K20
PIC18F44J10
PIC18F43K20
PIC18F24K22
PIC18F45J10
PIC18F44K20
PIC18F14K50
PIC18F45K20
PIC18F25K22
PIC18F26K20
PIC18F24J11
PIC18F43K22
PIC18F66J11
PIC18F44K22
PIC18F25J11
PIC18F46K20
PIC18F65J10
PIC18F63J11
PIC18F24J50
PIC18F66J16
PIC18F45K22
PIC18F26K22
PIC18F25K80
PIC18F64J11
MCU’S DE 8 BITS2
7525/04/2017
Exemplos de MCU´s de 8 bits
• Dificilmente todos os periféricos disponíveis em
uma família são úteis em uma mesma aplicação.
• A fim de proporcionar redução de custo,
oferecem-se modelos com menos periféricos.
• Escolhe-se o modelo que possua apenas os
periféricos necessários no projeto.
• Há mais modelos disponíveis para PIC18 porque
esta família apresenta maior oferta de periféricos,
formando uma maior quantidade de combinações.
MCU’S DE 8 BITS2
7625/04/2017
Comparação das arquiteturas
Baseline Mid-Range Enhanced Mid-Range PIC18
Pinos 6 a 40 6 a 64 8 a 64 18 a 100
Instruções, tamanho 12-bit 14-bit 14-bit 16-bit
Instruções, quantidade 33 35 49 83Flash Program Memory,
instruções Até 8 k Até 8 k Até 16 k Até 64 k
Flash Program Memory,
tamanho Até 12 kB Até 14 kB Até 28 kB Até 128 kB
SRAM file register Até 138 Bytes Até 368 Bytes Até 1,5 KB Até 4 KB
MCU’S DE 8 BITS2
7725/04/2017
Comparação das arquiteturasBaseline Mid-Range Enhanced Mid-Range PIC18
Instrução (bits) 12 14 14 16
Flash Program
Memory
Capacidade
(k word)
0,25
0,5
1
1,5
2
8
0,225
0,25
0,5
1
2
4
8
1
2
4
8
16
2
4
8
12
16
24
32
40
48
64
Flash
Programm
Memory
Tamanho (kB)
0,375
0,75
1,5
2,25
3
12
0,21875
0,4375
0,875
1,75
3,5
7
14
1,75
3,5
7
14
28
4
8
16
24
32
48
64
80
96
128
File SRAM
(bytes)16 a 368 25 a 368 64 a 1536 256 a 4096
Vide exemplos
MCU’S DE 16 E DE 32 BITS3
7825/04/2017
MCU’S DE 16 E DE 32 BITS
25/04/2017
14
MCU’S DE 16 E DE 32 BITS3
7925/04/2017
MCU´s de 16 bits
http://www.microchip.com/_images/NEW-16-bit-graphic_large.jpg
MCU’S DE 16 E DE 32 BITS3
8025/04/2017
MCU´s de 16 bits
Dentro da mesma arquitetura:
• O aumento da performance por meio do
aumento da frequência de operação leva ao
aumento do consumo de energia elétrica.
• A redução da performance por meio da
diminuição da frequência de operação leva à
redução do consumo de energia elétrica.
• Alta performance é desejável quando muita
informação é processada e fornecimento de
energia elétrica não é problema.
• Economia no consumo de energia elétrica é
desejável em sistemas alimentados por baterias.
MCU’S DE 16 E DE 32 BITS3
8125/04/2017
MCU´s de 16 bits
• PIC24H/E e dsPIC33F/E: Alta performance.
• PIC24F e dsPIC30F: Baixo consumo.
MCU’S DE 16 E DE 32 BITS3
8225/04/2017
MCU´s de 16 bits
http://www.microchip.com/_images/PIC24FArchblkdgrm.jpg
MCU’S DE 16 E DE 32 BITS3
8325/04/2017
MCU´s de 16 bits
http://www.microchip.com/_images/PIC24FArchblkdgrm.jpg
MCU’S DE 16 E DE 32 BITS3
8425/04/2017
MCU´s de 32 bits
http://www.microchip.com/_images/32bitOverviewArchGraph_Large.jpg
25/04/2017
15
PIC16F877-20/P4
8525/04/2017
PIC16F877-20/P
PIC16F877-20/P4
8625/04/2017
• É o modelo encontrado no laboratório.
• Atualmente substituído pelo PIC16F887.
• MCU de 8 bits.
• Mid-Range Architecture.
• 35 instruções.
• 200ns para executar uma instrução (mínimo).
• 40 ou 44 pinos.
• 256 bytes de memória de dados em EEPROM.
• Conversor A/D de 10 bits.
• 2 Temporizadores adicionais ao Baseline.
• 2 PWM´s (ou captura ou comparação).
Apresentação
PIC16F877-20/P4
8725/04/2017
Chip PIC
PIC16F877-20/P4
8825/04/2017
Chip PIC
PIC16F877-20/P4
8925/04/2017
Chip PIC
PIC16F877-20/P4
9025/04/2017
Kit didático
25/04/2017
16
PIC16F877-20/P4
9125/04/2017
Pinagem (DIP)
PIC16F877-20/P4
9225/04/2017
PIC16F877-20/P
Parameter Name Value
Flash Program Memory 14-bit words
Flash Program Memory 8k words
File SRAM (GPR’s) 368 bytes
Data EEPROM 256 bytes
Instructions 35
CPU Speed (MIPS) 5
Interrupts 14
I/O ports A,B,C,D,E
Digital Communication Peripherals 1-USART,1-MSSP(SPI/I2C)
Capture/Compare/PWM Peripherals 2 CCP
Timers 2 x 8-bit, 1 x 16-bit
ADC 8 channels, 10-bit
Temperature Range (C) -40 to 85
Operating Voltage Range (V) 2 to 5.5
Pin Count 40
PIC16F877-20/P4
9325/04/2017
Core
• Core (núcleo): A parte principal do chip.
• Contém os blocos funcionais que são utilizados para
qualquer tipo de aplicação da MCU.
• Envolve tudo o que não é periférico.
• Não é possível operar a MCU sem o uso do core.
• Um P é uma MCU sem os periféricos.
• Alguns periféricos são desligados no modo power down.
• Alguns periféricos podem solicitar interrupções.
• Todos os periféricos são registrados.
PIC16F877-20/P4
9425/04/2017
Core
• Na arquitetura Von-Neumann, a program memory é
acessada através do data bus, caracterizando-a como
um periférico.
• Como qualquer periférico, a program memory pode
localizar-se fora do chip, como acontece com o P’s, e,
por isso, não faz parte do core.
• Na arquitetura Harvard, a program memory não está
conectada ao data bus do chip, o que não condiz com o
conceito de um periférico.
• A program memory Harvard é um periférico especial.
PIC16F877-20/P4
9525/04/2017
Core
8-bit Data bus
Periférico
• Na SRAM, fazem parte do
core somente os SFR´s
associados ao core.
PIC16F877-20/P4
9625/04/2017
Memórias internas
Tipo Nome Tamanhoflash Program memory 8k 14bits
SRAM File registers 512 8bits
EEPROM Data memory 256 8bits
25/04/2017
17
PIC16F877-20/P4
9725/04/2017
Mem
óri
as i
nte
rnas
PIC16F877-20/P4
9825/04/2017
Mem
óri
as e
specia
isPIC16F877-20/P4
9925/04/2017
EEPROM
• Mais rápida do que a flash.
• Suporta mais ciclos de gravação do que a flash.
• Mais lenta do que a SRAM.
• Não indicada para dados temporários.
• 256 bytes.
• Usada para dados lidos frequentemente.
• Usada para dados que não podem ser voláteis.
• A gravação da EEPROM não afeta a execução.
PIC16F877-20/P4
10025/04/2017
Peri
féri
cos
Todos periféricos
estão ligados aodata bus exceto a
PM na arquiteturaHarvard.
PIC16F877-20/P4
25/04/2017 101
Periféricos
Timer
0,1,2
SFR SFR
PORTA,B,C,D,E
SFR SFR
A/DCCP
1,2
SFR SFR
Flash
n-bit
Todas as instruções são destinadas aos registradores.
SFR
PSP
8-bit Data Bus
* Flash usada como data memory.
Instructionregister
PIC16F877-20/P4Periféricos
10225/04/2017
• Todos os periféricos são ligados ao data bus.
• Existe um SFR entre o módulo periférico e o data bus.
• Isto permite que o data bus seja liberado para outras funções.
• Os SFR’s envolvidos possuem tamanhos diversos.
• Quando o tamanho é superior a 8 bits, são usados dois SFR’s.
• Os SFR’s associados a periféricos podem ser de:
• Dado
• Endereço
• Controle
25/04/2017
18
PIC16F877-20/P4Periféricos
10325/04/2017
Periférico
SFR
endereço
SFR
dado
SFR
controle
8-bit Data Bus
• Os SFR’s associados a periféricos são, na
verdade, parte integrante do próprio periférico.
FILE REGISTERS5
10425/04/2017
FILE REGISTERS
FILE REGISTERS5
10525/04/2017
• Todos os registradores paralelos da PIC são memórias
estáticas.
• As principais memórias estáticas formam o file registers.
• Outras memórias estáticas são a pilha, o instruction register,
o work register, etc.
• A região do file registers de uso geral é uma SRAM.
• A pilha não é uma SRAM porque seu acesso não é aleatório.
• O instruction register, por ser uma fila, ainda que de uma
única posição, também não é uma SRAM.
Memórias estáticas
FILE REGISTERS5
10625/04/2017
Endereçamento
8-bit
13-bit
• Os bits de endereçamento faltantes serão vistos mais adiante.
• Aqui, foi mostrado, o tipo de endereçamento direto da SRAM.
• Trata-se das instruções que lidam com file (F ou WF).
14-bit
SUBWF
DECF
IORWF
ANDWF
XORWF
ADDWF
MOVF
COMF
INCF
DECFSZ
RRF
RLF
SWAPF
INCFSZ
MOVWF
CLRF
BCF
BSF
BTFSC
BTFSS
FILE REGISTERS5
10725/04/2017
• Registradores de uso geral.
• Iniciam com valor zero.
• Formam uma SRAM.
• Possuem disposição matricial.
• Esta SRAM é um periférico.
• 368 registradores de 8 bits.
• O data-sheet chama essa SRAM de file
registers; chamaremos, porém, de file registers
os GPR’s e os SFR’s, pois, em algumas
páginas, o data-sheet assume essa conotação.
GPR’sGeneral Purpose Registers
FILE REGISTERS5
10825/04/2017
• Registradores de uso específico.
• Não formam uma SRAM por não ser matricial.
• Possuem localizações diversas no die.
• Alguns bits iniciam em zero, outros em um.
• Os SFR’s associados a periféricos são periféricos.
• Os SFR’s associados a periféricos são parte
integrante do próprio periférico.
• Os SFR’s associados ao core fazem parte do core.
SFR’sSpecial Function Registers
25/04/2017
19
FILE REGISTERS5
10925/04/2017
• Os GPR’s são construído na forma
matricial, como toda SRAM.
• Os SFR’s localizam-se em diversas
partes do chip, próximos aos blocos
funcionai sobre os quais atuam.
• Todos esses registradores recebem
a mesma lógica de endereçamento,
por meio do mesmo address bus
(register file architecture).
GPR’s e SFR’s
FILE REGISTERS5
11025/04/2017
File Registers
GPR’s
07
9-bit
Address Bus
8-bit
Data Bus
0
8
0
7
GPR’s e SFR’s – Register File Architecture
File Registers
SFR’s9-bit
Address Bus
8-bit
Data Bus
0
8
0
7
• GPR’s: Matriz gate array.
• SFR’s: Registradores espalhados.
FILE REGISTERS5
11125/04/2017
GPR’s
SFR’s
9-bit
Address Bus
8-bit
Data Bus
0
8
0
7
Lógica de
seleção
GPR’s e SFR’s – Register File ArchitectureSUBWF
DECF
IORWF
ANDWF
XORWF
ADDWF
MOVF
COMF
INCF
DECFSZ
RRF
RLF
SWAPF
INCFSZ
MOVWF
CLRF
BCF
BSF
BTFSC
BTFSS
FILE REGISTERS5
11225/04/2017
• São quatro bancos de file registers.
• Cada banco contém 128 bytes (7 bits de endereço) <6:0>.
• No opcode, o endereço do registrador é de 7 bits.
• São, ao todo, 512 endereços (9 bits de endereço) <8:0>.
• Quase todas as posições endereçáveis podem ser
alteradas pelo usuário.
• Alguns bits não podem ser alterados diretamente, somente
através do uso dos recursos do chip.
Divisões
FILE REGISTERS5
11325/04/2017
• Banco 0: 000h a 07Fh
• Banco 1: 080h a 0FFh
• Banco 2: 100h a 17Fh
• Banco 3: 180h a 1FFh
• Banco 0: 000d a 127d
• Banco 1: 128d a 255d
• Banco 2: 256d a 383d
• Banco 3: 384d a 511d
BancosIncluindo registradores sem banco
• É mais fácil memorizar os números na forma hexadecimal.
• Estes valores representam as faixas de endereços
cobertas por cada bando.
• Na verdade, os bancos são um pouco menores como será
mostrado mais adiante.
FILE REGISTERS5
11425/04/2017
• Banco 0: 000000000b a 001111111b
• Banco 1: 010000000b a 011111111b
• Banco 2: 100000000b a 101111111b
• Banco 3: 110000000b a 111111111b
BancosIncluindo registradores sem banco
• Os dois bits mais significativos determinam o banco.
• O endereço completo utiliza três nibbles.
• O endereço no opcode utiliza dois nibbles.
25/04/2017
20
FILE REGISTERS5
11525/04/2017
Divisões
Banco 0
000h000000000b
07Fh001111111b
Banco 1
080h010000000b
0FFh011111111b
Banco 2
100h100000000b
17Fh101111111b
Banco 3
180h110000000b
1FFh111111111b
Incluindo registradores sem banco
FILE REGISTERS5
11625/04/2017
• Memory banking.
• A divisão em bancos é feita para que o
endereçamento dos registradores feito nas
instruções se dê por meio de 7 bits, e não 9 bits.
• A necessidade desta redução se deve ao fato de que
tal endereço deve caber nos 14 bits de instrução.
• Usando 7 bits para endereço, sobram 7 bits para os
demais parâmetros da instrução.
Bancos
FILE REGISTERS5
11725/04/2017
Bancos
INDF 000h INDF 080h INDF 100h INDF 180h
TMR0 001h OPTION_REG 081h TMR0 101h OPTION_REG 181h
PCL 002h PCL 082h PCL 102h PCL 182h
STATUS 003h STATUS 083h STATUS 103h STATUS 183h
FSR 004h FSR 084h FSR 104h FSR 184h
PORTA 005h TRISA 085h 105h 185h
PORTB 006h TRISB 086h PORTB 106h TRISB 186h
PORTC 007h TRISC 087h 107h 187h
PORTD 008h TRISD 088h 108h 188h
PORTE 009h TRISE 089h 109h 189h
PCLATH 00Ah PCLATH 08Ah PCLATH 10Ah PCLATH 18Ah
INTCON 00Bh INTCON 08Bh INTCON 10Bh INTCON 18Bh
PIR1 00Ch PIE1 08Ch EEDATA 10Ch EECON1 18Ch
PIR2 00Dh PIE2 08Dh EEADR 10Dh EECON2 18Dh
TMR1L 00Eh PCON 08Eh EEDATH 10Eh 18Eh
TMR1H 00Fh 08Fh EEADRH 10Fh 18Fh
T1CON 010h 090h 110h 190h
TMR2 011h SSPCON2 091h
T2CON 012h PR2 092h
SSPBUF 013h SSPADD 093h
SSPCON 014h SSPSTAT 094h
CCPR1L 015h 095h
CCPR1H 016h 096h
CCP1CON 017h 097h
RCSTA 018h TXSTA 098h GPR’s GPR’s
TXREG 019h SPBRG 099h
RCREG 01Ah 09Ah
CCPR2L 01Bh 09Bh
CCPR2H 01Ch 09Ch
CCP2CON 01Dh 09Dh
ADRESH 01Eh ADRESL 09Eh
ADCON0 01Fh ADCON1 09Fh
020h 0A0h
GPR’s GPR’s
06Fh 0EFh 16Fh 1EFh
070h 0F0h 170h 1F0h
GPR’s GPR’s GPR’s GPR’s
07Fh 0FFh 17Fh 1FFh
FILE REGISTERS5
11825/04/2017
• Sem banco: 16 bytes.
• Banco 0: 80 bytes.
• Banco 1: 80 bytes.
• Banco 2: 96 bytes.
• Banco 3: 96 bytes.
• Total: 368 bytes (9-bit address bus).
GPR’s
FILE REGISTERS5
11925/04/2017
• Sem banco: 070h a 07Fh
• Banco 0: 020h a 06Fh
• Banco 1: 0A0h a 0EFh
• Banco 2: 110h a 16Fh
• Banco 3: 190h a 1EFh
• Sem banco: 112d a 127d
• Banco 0: 032d a 111d
• Banco 1: 160d a 239d
• Banco 2 272d a 367d
• Banco 3: 400d a 495d
GPR’sÉ mais fácil memorizar os números na forma hexadecimal
FILE REGISTERS5
12025/04/2017
• Sem banco: 070h a 07Fh
• Banco 0: 020h a 06Fh
• Banco 1: 0A0h a 0EFh
• Banco 2: 110h a 16Fh
• Banco 3: 190h a 1EFh
• Sem banco: 70h a 7Fh
• Banco 0: 20h a 6Fh
• Banco 1: 20h a 6Fh
• Banco 2: 10h a 6Fh
• Banco 3: 10h a 6Fh
GPR’sEndereço real de 9 bits
Valor usado em endereçamento direto (7 bits)
Remoção dos
dois bits mais significativos.
25/04/2017
21
FILE REGISTERS5
12125/04/2017
• Banco 0: 020h a 06Fh
• Banco 1: 0A0h a 0EFh
• Banco 2: 110h a 16Fh
• Banco 3: 190h a 1EFh
GPR’s endereçáveis por 9 bits
• Banco 0: 80 bytes.
• Banco 1: 80 bytes.
• Banco 2: 96 bytes.
• Banco 3: 96 bytes.
• Total: 352 bytes.
Registradores com banco
FILE REGISTERS5
12225/04/2017
INDF 000h INDF 080h INDF 100h INDF 180h
TMR0 001h OPTION_REG 081h TMR0 101h OPTION_REG 181h
PCL 002h PCL 082h PCL 102h PCL 182h
STATUS 003h STATUS 083h STATUS 103h STATUS 183h
FSR 004h FSR 084h FSR 104h FSR 184h
PORTA 005h TRISA 085h 105h 185h
PORTB 006h TRISB 086h PORTB 106h TRISB 186h
PORTC 007h TRISC 087h 107h 187h
PORTD 008h TRISD 088h 108h 188h
PORTE 009h TRISE 089h 109h 189h
PCLATH 00Ah PCLATH 08Ah PCLATH 10Ah PCLATH 18Ah
INTCON 00Bh INTCON 08Bh INTCON 10Bh INTCON 18Bh
PIR1 00Ch PIE1 08Ch EEDATA 10Ch EECON1 18Ch
PIR2 00Dh PIE2 08Dh EEADR 10Dh EECON2 18Dh
TMR1L 00Eh PCON 08Eh EEDATH 10Eh 18Eh
TMR1H 00Fh 08Fh EEADRH 10Fh 18Fh
T1CON 010h 090h 110h 190h
TMR2 011h SSPCON2 091h
T2CON 012h PR2 092h
SSPBUF 013h SSPADD 093h
SSPCON 014h SSPSTAT 094h
CCPR1L 015h 095h
CCPR1H 016h 096h
CCP1CON 017h 097h
RCSTA 018h TXSTA 098h GPR’s GPR’s
TXREG 019h SPBRG 099h
RCREG 01Ah 09Ah
CCPR2L 01Bh 09Bh
CCPR2H 01Ch 09Ch
CCP2CON 01Dh 09Dh
ADRESH 01Eh ADRESL 09Eh
ADCON0 01Fh ADCON1 09Fh
020h 0A0h
GPR’s GPR’s
06Fh 0EFh 16Fh 1EFh
070h 0F0h 170h 1F0h
GPR’s GPR’s GPR’s GPR’s
07Fh 0FFh 17Fh 1FFh
GP
R’s
endere
çáveis
por
9 b
its
Reg
istr
ad
ore
s c
om
ban
co
FILE REGISTERS5
12325/04/2017
GPR’s endereçáveis por 9 bits
020h
021h
022h
023h
024h
06Bh
06Ch
06Dh
06Eh
06Fh
7 0
0A0h
0A1h
0A2h
0A3h
0A4h
0EBh
0ECh
0EDh
0EEh
0EFh
7 0
16Bh
16Ch
16Dh
16Eh
16Fh
110h
111h
112h
113h
1EBh
1ECh
1EDh
1EEh
1EFh
190h
191h
192h
193h
7 0 7 0
Banco 0 Banco 1
Banco 2 Banco 3Registradores com banco
FILE REGISTERS5
12425/04/2017
GPR’s endereçáveis por 9 bitsRegistradores com banco
24
DEC
O0O1O2O3
A7
A8
Entrada codificadaSaída decodificada
Enable Enable
Enable Enable
7-bit
Address BusA0
A6
9-bit
Address BusA0
A9
20h
6Fh 6Fh
10h
FILE REGISTERS5
12525/04/2017
• Banco 0: 070h a 07Fh
• Banco 1: 0F0h a 0FFh
• Banco 2: 170h a 17Fh
• Banco 3: 1F0h a 1FFh
GPR’s endereçáveis por 7 bits
• Banco 0: 16 bytes.
• Banco 1: 16 bytes.
• Banco 2: 16 bytes.
• Banco 3: 16 bytes.
• Total: 16 bytes.
• Estes registradores estão disponíveis em qualquer
seleção de bancos.
• Estes registradores não possuem bancos, seu
endereço possui 7 bits em um barramento de 9 bits.
• Os bits identificadores do banco são irrelevantes.
Registradores sem banco
FILE REGISTERS5
12625/04/2017 GP
R’s
endere
çáveis
por
7 b
its
Reg
istr
ad
ore
s s
em
ban
co
INDF 000h INDF 080h INDF 100h INDF 180h
TMR0 001h OPTION_REG 081h TMR0 101h OPTION_REG 181h
PCL 002h PCL 082h PCL 102h PCL 182h
STATUS 003h STATUS 083h STATUS 103h STATUS 183h
FSR 004h FSR 084h FSR 104h FSR 184h
PORTA 005h TRISA 085h 105h 185h
PORTB 006h TRISB 086h PORTB 106h TRISB 186h
PORTC 007h TRISC 087h 107h 187h
PORTD 008h TRISD 088h 108h 188h
PORTE 009h TRISE 089h 109h 189h
PCLATH 00Ah PCLATH 08Ah PCLATH 10Ah PCLATH 18Ah
INTCON 00Bh INTCON 08Bh INTCON 10Bh INTCON 18Bh
PIR1 00Ch PIE1 08Ch EEDATA 10Ch EECON1 18Ch
PIR2 00Dh PIE2 08Dh EEADR 10Dh EECON2 18Dh
TMR1L 00Eh PCON 08Eh EEDATH 10Eh 18Eh
TMR1H 00Fh 08Fh EEADRH 10Fh 18Fh
T1CON 010h 090h 110h 190h
TMR2 011h SSPCON2 091h
T2CON 012h PR2 092h
SSPBUF 013h SSPADD 093h
SSPCON 014h SSPSTAT 094h
CCPR1L 015h 095h
CCPR1H 016h 096h
CCP1CON 017h 097h
RCSTA 018h TXSTA 098h GPR’s GPR’s
TXREG 019h SPBRG 099h
RCREG 01Ah 09Ah
CCPR2L 01Bh 09Bh
CCPR2H 01Ch 09Ch
CCP2CON 01Dh 09Dh
ADRESH 01Eh ADRESL 09Eh
ADCON0 01Fh ADCON1 09Fh
020h 0A0h
GPR’s GPR’s
06Fh 0EFh 16Fh 1EFh
070h 0F0h 170h 1F0h
GPR’s GPR’s GPR’s GPR’s
07Fh 0FFh 17Fh 1FFh
25/04/2017
22
FILE REGISTERS5
12725/04/2017
GPR´s - DivisõesBanco 0
000h000000000b
06Fh001101111b
Banco 1
080h010000000b
0EFh011101111b
Banco 2
100h100000000b
16Fh101101111b
Banco 3
180h110000000b
1EFh111101111b
Sem banco70h
XX1110000b
7FhXX1111111b
FILE REGISTERS5
12825/04/2017
GPR’s endereçáveis por 7 bits
• Os GPR’s de 9 bits de endereço são a maioria e requerem
determinação do banco.
• Os GPR’s de 7 bits de endereço não dependem da seleção
do banco.
• Os GPR’s de 7 bits de endereço são úteis quando se
deseja que a mesma palavra de dado esteja disponível em
todos os bancos, dispensando a seleção de banco.
• Não se trata de quatro cópias, mas de um único registrador.
Registradores sem banco
FILE REGISTERS5
12925/04/2017
GPR’s endereçáveis por 7 bits
7 bits de endereço:
• 70h a 7Fh
• XX1110000h a XX1111111h
• 16 endereços
X X 1 1 _ _ _ _1
Registradores sem banco
Identificação do
endereçamento indireto
FILE REGISTERS5
13025/04/2017
GPR’s endereçáveis por 7 bits
Bit0Bit1Bit2Bit3Bit4Bit5Bit6Bit7Bit8
0: 9 bits
1: 7 bits
SRAM
Address Bus
• Se Bit4 AND Bit5 AND Bit6 = 1,
então Bit7 e Bit8 são ignorados.
Registradores sem banco
FILE REGISTERS5
13125/04/2017
GPR’s endereçáveis por 7 bitsRegistradores sem banco
Enable Enable
Enable Enable
7-bit
Address BusA0
A6
20h
6Fh 6Fh
10h
24
DEC
A7
A8
7-bit
Address BusA0
A6
70h
7Fh
Enable
FILE REGISTERS5
13225/04/2017
• Para o programador, usando endereçamento
direto, o endereço tem sempre 7 bits, quer o
endereço completo seja de 7 bits, quer seja de 9.
• Para os bancos 0 e 1, a faixa de endereços é
menor do que nos bancos 2 e 3.
Bancos 0 e 1:
• 20h a 6Fh
• 0100000h a 1101111h
• 80 endereços
Bancos 2 e 3:
• 10h a 6Fh
• 0010000h a 1101111h
• 96 endereços
Endereçamento de GPR no programa
25/04/2017
23
FILE REGISTERS5
13325/04/2017
SFR’s
• Registradores de uso específico contidos no file registers.
• Não constituem uma SRAM porque não formam uma matriz.
• Sua localização física não é agrupada, como em uma RAM.
• A maioria dos SFR’s são registradores de 8 bits.
• Alguns SFR’s possuem menos bits.
• Alguns endereços não são usados.
• Alguns endereços são inacessíveis ao programador.
• Alguns endereços não aceitam escrita.
• Alguns endereços acessam palavras de menos bits.
• Alguns endereços realizam ações na MCU, não são
registradores.
Special Function Registers
FILE REGISTERS5
13425/04/2017
• Embora seja possível gravar em muitas posições de
memória usadas pelos SFR’s, não se deve fazê-lo quando
da gravação de dados do usuário, sob risco de alterar o
comportamento do microcontrolador ou de ter o dado
armazenado perdido por causa da posterior automática
gravação do SFR após a execução de uma operação.
• A gravação nestas posições deve ser feita quando o
intuito é o de, conscientemente, alterar algum SFR
específico usado internamente pelo microcontrolador.
SFR’s
FILE REGISTERS5
13525/04/2017
SFR’s000h INDF
001h TMR0
002h PCL
003h STATUS
004h FSR
005h PORTA
006h PORTB
007h PORTC
008h PORTD
009h PORTE
00Ah PCLATH
00Bh INTCON
00Ch PIR1
00Dh PIR2
00Eh TMR1L
00Fh TMR1H
010h T1CON
011h TMR2
012h T2CON
013h SSPBUF
014h SSPCON
015h CCPR1L
016h CCPR1H
017h CCP1CON
018h RCSTA
019h TXREG
01Ah RCREG
01Bh CCPR2L
01Ch CCPR2H
01Dh CCP2CON
01Eh ADRESH
01Fh ADCON0
081h OPTION_REG
085h TRISA
086h TRISB
087h TRISC
088h TRISD
089h TRISE
08Ch PIE1
08Dh PIE2
08Eh PCON
091h SSPCON2
092h PR2
093h SSPADD
094h SSPSTAT
098h TXSTA
099h SPBRG
09Eh ADRESL
09Fh ADCON1
10Ch EEDATA
10Dh EEADR
10Eh EEDATH
10Fh EEADRH
18Ch EECON1
18Dh EECON2
Endereços múltiplos foram omitidos.
FILE REGISTERS5
13625/04/2017
INDF 000h INDF 080h INDF 100h INDF 180h
TMR0 001h OPTION_REG 081h TMR0 101h OPTION_REG 181h
PCL 002h PCL 082h PCL 102h PCL 182h
STATUS 003h STATUS 083h STATUS 103h STATUS 183h
FSR 004h FSR 084h FSR 104h FSR 184h
PORTA 005h TRISA 085h 105h 185h
PORTB 006h TRISB 086h PORTB 106h TRISB 186h
PORTC 007h TRISC 087h 107h 187h
PORTD 008h TRISD 088h 108h 188h
PORTE 009h TRISE 089h 109h 189h
PCLATH 00Ah PCLATH 08Ah PCLATH 10Ah PCLATH 18Ah
INTCON 00Bh INTCON 08Bh INTCON 10Bh INTCON 18Bh
PIR1 00Ch PIE1 08Ch EEDATA 10Ch EECON1 18Ch
PIR2 00Dh PIE2 08Dh EEADR 10Dh EECON2 18Dh
TMR1L 00Eh PCON 08Eh EEDATH 10Eh 18Eh
TMR1H 00Fh 08Fh EEADRH 10Fh 18Fh
T1CON 010h 090h 110h 190h
TMR2 011h SSPCON2 091h
T2CON 012h PR2 092h
SSPBUF 013h SSPADD 093h
SSPCON 014h SSPSTAT 094h
CCPR1L 015h 095h
CCPR1H 016h 096h
CCP1CON 017h 097h
RCSTA 018h TXSTA 098h GPR’s GPR’s
TXREG 019h SPBRG 099h
RCREG 01Ah 09Ah
CCPR2L 01Bh 09Bh
CCPR2H 01Ch 09Ch
CCP2CON 01Dh 09Dh
ADRESH 01Eh ADRESL 09Eh
ADCON0 01Fh ADCON1 09Fh
020h 0A0h
GPR’s GPR’s
06Fh 0EFh 16Fh 1EFh
070h 0F0h 170h 1F0h
GPR’s GPR’s GPR’s GPR’s
07Fh 0FFh 17Fh 1FFh
SF
R’s
essencia
is (
core
)
FILE REGISTERS5
13725/04/2017
SFR’s essenciais (core)Endereços múltiplos foram omitidos.
000h INDF
001h TMR0
002h PCL
003h STATUS
004h FSR
005h PORTA
006h PORTB
007h PORTC
008h PORTD
009h PORTE
00Ah PCLATH
00Bh INTCON
00Ch PIR1
00Dh PIR2
00Eh TMR1L
00Fh TMR1H
010h T1CON
011h TMR2
012h T2CON
013h SSPBUF
014h SSPCON
015h CCPR1L
016h CCPR1H
017h CCP1CON
018h RCSTA
019h TXREG
01Ah RCREG
01Bh CCPR2L
01Ch CCPR2H
01Dh CCP2CON
01Eh ADRESH
01Fh ADCON0
081h OPTION_REG
085h TRISA
086h TRISB
087h TRISC
088h TRISD
089h TRISE
08Ch PIE1
08Dh PIE2
08Eh PCON
091h SSPCON2
092h PR2
093h SSPADD
094h SSPSTAT
098h TXSTA
099h SPBRG
09Eh ADRESL
09Fh ADCON1
10Ch EEDATA
10Dh EEADR
10Eh EEDATH
10Fh EEADRH
18Ch EECON1
18Dh EECON2
000 INDF Indirect file addressing
001 TMR0 Timer 0
002 PCL Program counter low byte
003 STATUS Status
004 FSR File select register
00A PCLATH Program conuter latch
00B INTCON Interrupt control
00C PIR1 Peripheral interrupt register 1
00D PIR2 Peripheral interrupt register 2
081 OPTION_REG Option
08C PIE1 Peripheral interrupt enable 1
08D PIE2 Peripheral interrupt enable 2
08E PCON Power control
FILE REGISTERS5
13825/04/2017
SFR’s não essenciais (periféricos)005 PORTA
006 PORTB
007 PORTC
008 PORTD
009 PORTE
00E TMR1L
00F TMR1H
010 T1CON
011 TMR2
012 T2CON
013 SSPBUF
014 SSPCON
015 CCPR1L
016 CCPR1H
017 CCP1CON
018 RCSTA
019 TXREG
01A RCREG
01B CCPR2L
01C CCPR2H
01D CCP2CON
01E ADRESH
01F ADCON0
085 TRISA
086 TRISB
087 TRISC
088 TRISD
089 TRISE
091 SSPCON2
092 PR2
093 SSPADD
094 SSPSTAT
098 TXSTA
099 SPBRG
09E ADRESL
09F ADCON1
10C EEDATA
10D EEADR
10E EEDATH
10F EEADRH
18C EECON1
18D EECON2
25/04/2017
24
FILE REGISTERS5
13925/04/2017
SFR’s não essenciais (periféricos)
Timer 0
Timer 1
A/D conv
CCP 1,2
SSP
USART
Data mem
018 RCSTA
019 TXREG
01A RCREG
098 TXSTA
099 SPBRG
001h TMR0
081h OPTION_REG
00E TMR1L
00F TMR1H
010 T1CON
011 TMR2
012 T2CON
092 PR2
Timer 2
01E ADRESH
01F ADCON0
09E ADRESL
09F ADCON1
015 CCPR1L
016 CCPR1H
017 CCP1CON
01B CCPR2L
01C CCPR2H
01D CCP2CON
PORT005 PORTA
006 PORTB
007 PORTC
008 PORTD
009 PORTE
085 TRISA
086 TRISB
087 TRISC
088 TRISD
089 TRISE
10C EEDATA
10D EEADR
10E EEDATH
10F EEADRH
18C EECON1
18D EECON2
013 SSPBUF
014 SSPCON
091 SSPCON2
093 SSPADD
094 SSPSTAT
FILE REGISTERS5
14025/04/2017
SFR’s não essenciais de 16 bits
00E TMR1LTMR1
00F TMR1H
015 CCPR1LCCPR1
016 CCPR1H
01B CCPR2LCCPR2
01C CCPR2H
09E ADRESLADRES
01E ADRESH
10C EEDATAEEDATA
10E EEDATH
10D EEADREEADR
10F EEADRH
FILE REGISTERS5
14125/04/2017
• Alguns SFR’s estão disponíveis em dois bancos.
• Alguns SFR’s estão disponíveis em quatro bancos.
• A presença de cópias é feita para agilizar o acesso aos
SFR’s, dispensando o procedimento de troca de bancos.
• Somente os SFR’s mais importantes possuem cópias.
• Sempre que um SFR’s possui dois ou quatro endereços,
todos endereços possuem sempre a mesma informação.
• A presença de SFR’s com dois ou quatro endereços
contraria a ideia de que um endereçamento correto requer
que a relação entre endereço e posição física seja
biunívoca.
SFR’s
FILE REGISTERS5
14225/04/2017
• Não há cópias, o registrador é um só, mas os
endereços de 9 bits são vários.
• O endereço é um só, porém com menos bits; um
ou dois bits (mais significativos) do endereço de 9
bits são irrelevantes.
• Isso acontece com os SFR’s mais importantes,
que são mais usados, onde é indicado isentar a
necessidade do procedimento de troca de bancos.
SFR’s
FILE REGISTERS5
14325/04/2017
INDF 000h INDF 080h INDF 100h INDF 180h
TMR0 001h OPTION_REG 081h TMR0 101h OPTION_REG 181h
PCL 002h PCL 082h PCL 102h PCL 182h
STATUS 003h STATUS 083h STATUS 103h STATUS 183h
FSR 004h FSR 084h FSR 104h FSR 184h
PORTA 005h TRISA 085h 105h 185h
PORTB 006h TRISB 086h PORTB 106h TRISB 186h
PORTC 007h TRISC 087h 107h 187h
PORTD 008h TRISD 088h 108h 188h
PORTE 009h TRISE 089h 109h 189h
PCLATH 00Ah PCLATH 08Ah PCLATH 10Ah PCLATH 18Ah
INTCON 00Bh INTCON 08Bh INTCON 10Bh INTCON 18Bh
PIR1 00Ch PIE1 08Ch EEDATA 10Ch EECON1 18Ch
PIR2 00Dh PIE2 08Dh EEADR 10Dh EECON2 18Dh
TMR1L 00Eh PCON 08Eh EEDATH 10Eh 18Eh
TMR1H 00Fh 08Fh EEADRH 10Fh 18Fh
T1CON 010h 090h 110h 190h
TMR2 011h SSPCON2 091h
T2CON 012h PR2 092h
SSPBUF 013h SSPADD 093h
SSPCON 014h SSPSTAT 094h
CCPR1L 015h 095h
CCPR1H 016h 096h
CCP1CON 017h 097h
RCSTA 018h TXSTA 098h GPR’s GPR’s
TXREG 019h SPBRG 099h
RCREG 01Ah 09Ah
CCPR2L 01Bh 09Bh
CCPR2H 01Ch 09Ch
CCP2CON 01Dh 09Dh
ADRESH 01Eh ADRESL 09Eh
ADCON0 01Fh ADCON1 09Fh
020h 0A0h
GPR’s GPR’s
06Fh 0EFh 16Fh 1EFh
070h 0F0h 170h 1F0h
GPR’s GPR’s GPR’s GPR’s
07Fh 0FFh 17Fh 1FFh
SF
R’s
endere
çáveis
por
7 b
its
Reg
istr
ad
ore
s s
em
ban
co
FILE REGISTERS5
14425/04/2017
SFR’s endereçáveis por 7 bits
• INDF XX0000000b 00h
• PCL XX0000010b 02h
• STATUS XX0000011b 03h
• FSR XX0000100b 04h
• PCLATH XX0001010b 0Ah
• INTCON XX0001011b 0Bh
• Estes registradores estão disponíveis em qualquer
seleção de bancos.
• Estes registradores não possuem bancos, seu
endereço possui 7 bits em um barramento de 9 bits.
• Os bits identificadores do banco são irrelevantes.
Registradores sem banco
25/04/2017
25
FILE REGISTERS5
14525/04/2017
INDF 000h INDF 080h INDF 100h INDF 180h
TMR0 001h OPTION_REG 081h TMR0 101h OPTION_REG 181h
PCL 002h PCL 082h PCL 102h PCL 182h
STATUS 003h STATUS 083h STATUS 103h STATUS 183h
FSR 004h FSR 084h FSR 104h FSR 184h
PORTA 005h TRISA 085h 105h 185h
PORTB 006h TRISB 086h PORTB 106h TRISB 186h
PORTC 007h TRISC 087h 107h 187h
PORTD 008h TRISD 088h 108h 188h
PORTE 009h TRISE 089h 109h 189h
PCLATH 00Ah PCLATH 08Ah PCLATH 10Ah PCLATH 18Ah
INTCON 00Bh INTCON 08Bh INTCON 10Bh INTCON 18Bh
PIR1 00Ch PIE1 08Ch EEDATA 10Ch EECON1 18Ch
PIR2 00Dh PIE2 08Dh EEADR 10Dh EECON2 18Dh
TMR1L 00Eh PCON 08Eh EEDATH 10Eh 18Eh
TMR1H 00Fh 08Fh EEADRH 10Fh 18Fh
T1CON 010h 090h 110h 190h
TMR2 011h SSPCON2 091h
T2CON 012h PR2 092h
SSPBUF 013h SSPADD 093h
SSPCON 014h SSPSTAT 094h
CCPR1L 015h 095h
CCPR1H 016h 096h
CCP1CON 017h 097h
RCSTA 018h TXSTA 098h GPR’s GPR’s
TXREG 019h SPBRG 099h
RCREG 01Ah 09Ah
CCPR2L 01Bh 09Bh
CCPR2H 01Ch 09Ch
CCP2CON 01Dh 09Dh
ADRESH 01Eh ADRESL 09Eh
ADCON0 01Fh ADCON1 09Fh
020h 0A0h
GPR’s GPR’s
06Fh 0EFh 16Fh 1EFh
070h 0F0h 170h 1F0h
GPR’s GPR’s GPR’s GPR’s
07Fh 0FFh 17Fh 1FFh
SF
R’s
endere
çáveis
por
8 b
its
FILE REGISTERS5
14625/04/2017
SFR’s endereçáveis por 8 bits
• TMR0 X00000001b 01h
• PORTB X00001011b 06h
• OPTION_REG X10000001b 81h
• TRISB X10001011b 86h
FILE REGISTERS5
14725/04/2017
• Alguns SFR’s não são físicos.
• “Not a physical register”.
• Ao tentar acessar o file registers neste endereço, algum
demultiplexador levará o data bus para outro local do chip e
não para o file registers.
• Este mecanismo simplifica o processo de criação de códigos
de programa, tornando o endereçamento mais simples.
• Na PIC16F877 há dois casos: INDF e EECON2.
Registradores virtuais
FILE REGISTERS5
14825/04/2017
• O agrupamento de todos os SFR’s juntamente com os
GPR’s como se fossem uma única memória torna o acesso
mais fácil pelo programador (Register File Architecture).
• Um decodificador específico realiza a conversão do
endereço de 9 bits para a seleção de cada posição do file
registers.
GPR’s
SFR’s
Address Bus
Data Bus
0
8
0
7
Lógica de
seleção
SFR’s
FILE REGISTERS5
14925/04/2017
SFR’s
• Muitos SFR’s possuem menos de 8 bits.
• Em muitos desses casos, os bits ausentes referem-se
a periféricos ausentes no modelo de MCU em questão.
• Consultando o PICmicro™ Mid-Range MCU Family
Reference Manual é possível verificar quais são os
SFR’s ou os bits não usados no SFR da PIC usada.
FILE REGISTERS5
• SFR de 8 bits (padrão).
• SFR de palavra menor do de 8 bits.
• SFR com bit faltando.
• SFR não físico (virtual).
• SFR de mais de 8 bits.
15025/04/2017
SFR’s
Address Bus
Data Bus
0
8
0
7
25/04/2017
26
FILE REGISTERS5
15125/04/2017
Endereços não usados
• O data sheet recomenda o não uso
dos endereços de SFR´s não
usados.
• Eles pertencem a funções
integrantes na arquitetura mid-range
mas que não estão presentes no
modelo apresentado.
• Apesar destas funções não terem
sido implementadas, pode ser que a
ULA realize alterações nestes
registradores, tornando-os não
confiáveis para uso como GPR.
FILE REGISTERS5
15225/04/2017
• Os endereços não usados em meio aos SFR’s se deve
a endereços usados em outros modelos de PIC da
mesma família (mid-range architecture).
• Tratam-se de endereços de SFR’s para periféricos
ausentes no modelo aqui estudado.
• A fim de simplificar a migração de programas feitos
para um modelo para outro, da mesma família, o
mapeamento dos SFR’s foi feito considerando todos os
registradores usados na família.
• Quando um periférico não faz parte de um determinado
modelo, SFR’s relacionados também estão ausentes,
tornando inválido o seu endereço.
• O fabricante não recomenda o uso destes endereços.
SFR’s
FILE REGISTERS5
15325/04/2017
INDF 000h INDF 080h INDF 100h INDF 180h
TMR0 001h OPTION_REG 081h TMR0 101h OPTION_REG 181h
PCL 002h PCL 082h PCL 102h PCL 182h
STATUS 003h STATUS 083h STATUS 103h STATUS 183h
FSR 004h FSR 084h FSR 104h FSR 184h
PORTA 005h TRISA 085h 105h 185h
PORTB 006h TRISB 086h PORTB 106h TRISB 186h
PORTC 007h TRISC 087h 107h 187h
PORTD 008h TRISD 088h 108h 188h
PORTE 009h TRISE 089h 109h 189h
PCLATH 00Ah PCLATH 08Ah PCLATH 10Ah PCLATH 18Ah
INTCON 00Bh INTCON 08Bh INTCON 10Bh INTCON 18Bh
PIR1 00Ch PIE1 08Ch EEDATA 10Ch EECON1 18Ch
PIR2 00Dh PIE2 08Dh EEADR 10Dh EECON2 18Dh
TMR1L 00Eh PCON 08Eh EEDATH 10Eh 18Eh
TMR1H 00Fh 08Fh EEADRH 10Fh 18Fh
T1CON 010h 090h 110h 190h
TMR2 011h SSPCON2 091h
T2CON 012h PR2 092h
SSPBUF 013h SSPADD 093h
SSPCON 014h SSPSTAT 094h
CCPR1L 015h 095h
CCPR1H 016h 096h
CCP1CON 017h 097h
RCSTA 018h TXSTA 098h GPR’s GPR’s
TXREG 019h SPBRG 099h
RCREG 01Ah 09Ah
CCPR2L 01Bh 09Bh
CCPR2H 01Ch 09Ch
CCP2CON 01Dh 09Dh
ADRESH 01Eh ADRESL 09Eh
ADCON0 01Fh ADCON1 09Fh
020h 0A0h
GPR’s GPR’s
06Fh 0EFh 16Fh 1EFh
070h 0F0h 170h 1F0h
GPR’s GPR’s GPR’s GPR’s
07Fh 0FFh 17Fh 1FFh
SF
R’s
não u
sados
FILE REGISTERS5
15425/04/2017
Status Register
• Armazena informações relativas à
última operação realizada pela ULA.
• É necessário na realização de
cálculos lógicos e aritméticos.
FILE REGISTERS5
15525/04/2017
Status Register
8-bit
StatusRegister
8-bit
Data bus
8-bit
MUX21
14-bit
InstructionRegister
8-bit
Data busFlash
8-bit
WorkRegister
8-bit
Data bus
8-bitALU
Instruction
Decoder
14-bit
Opcode
14-bit
8-bit
FILE REGISTERS5
15625/04/2017
Status Register
STATUS
• Registrador 000000011b, 003h, banco 0
• Registrador 010000011b, 083h, banco 1
• Registrador 100000011b, 103h, banco 2
• Registrador 110000011b, 183h, banco 3
• Registrador XX0000011b
25/04/2017
27
FILE REGISTERS5
15725/04/2017
Status Register• Bit 0 – C: Carry ou Borrow do nibble mais significativo.
• Bit 1 – DC: (Digit) Carry ou Borrow do nibble menos significativo.
• Bit 2 – Z: Indicador de resultado zero.
• Bit 3 – NOT_PD: Indicador de desligamento (Power Down).
• Bit 4 – NOT_TO: Indicador de Watchdog Timer Time-Out.
• Bit 5 – RP0: Selec. banco da SRAM em endereçamento direto.
• Bit 6 – RP1: Selec. banco da SRAM em endereçamento direto.
• Bit 7 – IRP: Selec. banco da SRAM em endereçamento indireto.
FILE REGISTERS5
15825/04/2017
Status Register
Gerenciamento de bancos Sinalização da ULASinalização de reset
• O status register possui três funções:
1. Gerenciamento de bancos STATUS<7:5>
2. Sinalização de reset STATUS<4:3>
3. Sinalização da ULA STATUS<2:0>
FILE REGISTERS5
15925/04/2017
Status Register
• R: Permite leitura
• W: Permite escrita
• 0: Inicia em zero
• 1: Inicia em um
• x: ? (o data sheet não explica)
• u: Não implementado
FILE REGISTERS5
16025/04/2017
Carry e Digit Carry
Nibble menos significativoNibble mais significativo
HALF
ADDER
B0 A0
S0
FULL
ADDER
B1 A1
S1
CyIN1
FULL
ADDER
B2 A2
S2
FULL
ADDER
B3 A3
S3
CyIN2CyIN
3
CyOUT3 CyOUT
0CyOUT1CyOUT
2
FULL
ADDER
B4 A4
S4
FULL
ADDER
B5 A5
S5
CyIN5
FULL
ADDER
B6 A6
S6
FULL
ADDER
B7 A7
S7
CyIN6CyIN
7
OF CyOUT4CyOUT
5CyOUT6
C DC
• Não veremos o comportamento do bit
DC após a execução de uma subtração.
FILE REGISTERS5
16125/04/2017
Status Register
• O bit indicador de zero pode ser usado, por exemplo,
para identificar o término em uma contagem.
• O bit indicador de desligamento pode ser usado, por
exemplo, para aplicar rotinas de inicialização de
sistemas onde são necessárias verificações dos estados
iniciais.
• Os bits 5, 6 e 7 são usados em endereçamento e serão
abordados mais adiante.
FILE REGISTERS5
16225/04/2017
Status Register
• O bit indicador de zero assume valor “zero lógico” quando a
resposta da operação não vale zero.
• O bit indicador de zero assume valor “um lógico” quando a
resposta da operação vale zero.
• O bit indicador de carry assume valor “zero lógico” quando aadição aritmética não causa overflow (entre 000h e 0FFh).
• O bit indicador de carry assume valor “um lógico” quando aadição aritmética causa overflow (entre 100h e 1FEh).
• O bit indicador de carry assume valor “um lógico” quando a
subtração aritmética gera resposta positiva.
• O bit indicador de carry assume valor “zero lógico” quando a
subtração aritmética gera resposta negativa.
25/04/2017
28
FILE REGISTERS5
16325/04/2017
• Programação direta: O endereço é citado no código.
• Exemplo ilustrativo: “Vá para a rua Duque de Caxias.”
• Programação indireta: O código cita um registrador que
contém o local.
• Exemplo ilustrativo:
1. “O Antonio mora na rua Duque de caxias.”
2. “Vá para a rua onde o Antonio mora.”
Endereçamento do file registers
FILE REGISTERS5
16425/04/2017
• RP0,1 – RAM Paging
• IRP – Indirect RAM Paging
• INDF – Indirect File Access
Endereçamento do file registers
FILE REGISTERS5
16525/04/2017
Endereçamento direto
9-bit<6:0>
STATUS<6:5>
<8:0>
SUBWF
DECF
IORWF
ANDWF
XORWF
ADDWF
MOVF
COMF
INCF
DECFSZ
RRF
RLF
SWAPF
INCFSZ
MOVWF
CLRF
BCF
BSF
BTFSC
BTFSS
FILE REGISTERS5
16625/04/2017
• Os 7 bits menos significativos são fornecidos
diretamente pelo opcode.
• A ULA adiciona STATUS<6:5>, RP1:RP e
forma a palavra de endereço de 9 bits.
• Se RP1:RP0 não forem alterados, é possível
acessar qualquer posição da SRAM dentro
do mesmo banco (128 posições).
• Se for necessário mudar o banco, RP1:RP0
devem ser configurados antes da execução
da instrução de acesso ao novo endereço da
SRAM.
Endereçamento direto
FILE REGISTERS5
16725/04/2017
• No endereçamento direto, o projetista precisa saber,
previamente, os endereços usados e, com base nisso,
elabora o programa.
• Nem sempre isso é possível.
• Em muitos casos, o endereço usado depende da
verificação de testes condicionais.
• Em outros casos, há vários endereços, formando uma
matriz dinâmica, de tamanho imprevisível.
• Em todos esses casos, é preciso usar o endereçamento
indireto, no qual o projetista não sabe qual o endereço a
ser acessado, mas um registrador o sabe.
Endereçamento indireto
FILE REGISTERS5
16825/04/2017
• INDF – Indirect File Access
• FSR – File Selection Register.
• INDF não é um registrador físico.
Endereçamento indireto
25/04/2017
29
FILE REGISTERS5
16925/04/2017
Indirect Addr (INDF).
• Registrador 000000000b, 000h, banco 0
• Registrador 010000000b, 080h, banco 1
• Registrador 100000000b, 100h, banco 2
• Registrador 110000000b, 180h, banco 3
• Registrador XX0000000b
Endereçamento indireto
FILE REGISTERS5
17025/04/2017
FSR
• Registrador 000000100b, 004h, banco 0
• Registrador 010000100b, 084h, banco 1
• Registrador 100000100b, 104h, banco 2
• Registrador 110000100b, 184h, banco 3
• Registrador XX0000100b
Endereçamento indireto
FILE REGISTERS5
17125/04/2017
• Ao usar, em uma instrução, o endereço INDF, a PIC
reconhece que o endereçamento da SRAM deve ser o
indireto.
• Ao reconhecer um endereçamento indireto, a PIC usa obit STATUS<7>, IRP para obter o nono bit e usa o FSR para
obter os 8 bits menos significativos do endereço da SRAM.
• O endereço acessado, então, não é o de INDF, mas o
fornecido por IRP e FSR.
Endereçamento indireto
FILE REGISTERS5
17225/04/2017STATUS<7>
Endereçamento indireto
FILE REGISTERS5
17325/04/2017
• Os 8 bits menos significativos são fornecidosdiretamente pelo FSR<7:0>.
• A ULA adiciona IRP e forma a palavra de
endereço de 9 bits.
• Se IRP não for alterado, é possível acessar
qualquer posição da SRAM dentro da mesma
faixa (256 posições).
• Se for necessário mudar a faixa, IRP devem ser
configurado antes da execução da instrução deacesso ao FSR.
• Não faz sentido falar em bancos em
endereçamento indireto.
Endereçamento indireto
FILE REGISTERS5
17425/04/2017
• O nome “indireto” diz respeito ao fato de
que o endereço do registrador a ser
lido/escrito não é fornecido no opcode.
• A instrução faz uso de FSR, que indica qual
é o registrador a ser usado pela instrução.
• Isso permite que se possa armazenar em
registradores endereços da SRAM.
Endereçamento indireto
25/04/2017
30
FILE REGISTERS5
17525/04/2017
RP1 RP0 Banco
0 0 00 1 11 0 21 1 3
IRP FSR<7> Banco
0 0 00 1 11 0 21 1 3
STATUS
Endereçamento da SRAM
FILE REGISTERS5
17625/04/2017
IRP FSR<7> Parte
0
0
01
1
1
1
02
1
• A divisão em bancos não é relevante no
endereçamento indireto.
• Os bancos 0 e 1 formam a primeira parte.
• Os bancos 2 e 3 formam a segunda parte.
Endereçamento da SRAM
FILE REGISTERS5
17725/04/2017
Endereçamento da SRAM
FILE REGISTERS5
17825/04/2017
• Um multiplexador escolhe qual endereço será
usado, o direto ou o indireto.
• Direto:
• O MUX recebe 7 bits (128 posições) na entrada
de endereçamento direto, vindo do opcode.
• Após a multiplexação, os bits RP1 e RP0 são
adicionados, como nono e oitavo bits da
palavra, respectivamente, totalizando 9 bits.
• Indireto:
• O MUX recebe 8 bits do FSR.
• Após a multiplexação, o bit IRP é adicionado,
como nono bit da palavra, totalizando 9 bits.
Endereçamento da SRAM
FILE REGISTERS5
17925/04/2017
Endereçamento da SRAM
FILE REGISTERS5
18025/04/2017
Endereçamento da SRAM
O0
O8
Sel
9-bit
21
MUX
Entrada de endereço
da SRAM
A0
A8
B0
B8
Endereçamento indireto
Endereçamento direto
0: indireto
1: direto
25/04/2017
31
FILE REGISTERS5
18125/04/2017
Endereçamento da SRAM
9-bit
21
MUX
Endereçamento indireto
Endereçamento direto
Instructionregister
7-bit
File selectionregister
8-bit
RP1,RP0
IRP
0: indireto
1: direto
FILE REGISTERS5
18225/04/2017
Bit0Bit1Bit2Bit3Bit4Bit5Bit6Bit7Bit8
0: indireto
1: diretoSRAM
Address Bus
Endereçamento da SRAM
FILE REGISTERS5
18325/04/2017
• Uma grande quantidade de instruções fazem uso
de registradores da SRAM especificados por meio
de seu endereço, 7 bits.
• Estas instruções fazem uso de endereçamentodireto, exceto quando esse registrador é INDF.
• Outra grande quantidade de instruções fazem uso
de dados, 8 bits, fornecidos diretamente no opcode.
• Essas instruções podem fornecer o endereço de 8
bits da SRAM em endereçamento indireto.
Endereçamento da SRAMSUBWF
DECF
IORWF
ANDWF
XORWF
ADDWF
MOVF
COMF
INCF
DECFSZ
RRF
RLF
SWAPF
INCFSZ
MOVWF
CLRF
BCF
BSF
BTFSC
BTFSS
ANDLW
IORLW
XORLW
ADDLW
SUBLW
MOVLW
RETLW
FILE REGISTERS5
18425/04/2017
INDF 000h INDF 080h INDF 100h INDF 180h
TMR0 001h OPTION_REG 081h TMR0 101h OPTION_REG 181h
PCL 002h PCL 082h PCL 102h PCL 182h
STATUS 003h STATUS 083h STATUS 103h STATUS 183h
FSR 004h FSR 084h FSR 104h FSR 184h
PORTA 005h TRISA 085h 105h 185h
PORTB 006h TRISB 086h PORTB 106h TRISB 186h
PORTC 007h TRISC 087h 107h 187h
PORTD 008h TRISD 088h 108h 188h
PORTE 009h TRISE 089h 109h 189h
PCLATH 00Ah PCLATH 08Ah PCLATH 10Ah PCLATH 18Ah
INTCON 00Bh INTCON 08Bh INTCON 10Bh INTCON 18Bh
PIR1 00Ch PIE1 08Ch EEDATA 10Ch EECON1 18Ch
PIR2 00Dh PIE2 08Dh EEADR 10Dh EECON2 18Dh
TMR1L 00Eh PCON 08Eh EEDATH 10Eh 18Eh
TMR1H 00Fh 08Fh EEADRH 10Fh 18Fh
T1CON 010h 090h 110h 190h
TMR2 011h SSPCON2 091h
T2CON 012h PR2 092h
SSPBUF 013h SSPADD 093h
SSPCON 014h SSPSTAT 094h
CCPR1L 015h 095h
CCPR1H 016h 096h
CCP1CON 017h 097h
RCSTA 018h TXSTA 098h GPR’s GPR’s
TXREG 019h SPBRG 099h
RCREG 01Ah 09Ah
CCPR2L 01Bh 09Bh
CCPR2H 01Ch 09Ch
CCP2CON 01Dh 09Dh
ADRESH 01Eh ADRESL 09Eh
ADCON0 01Fh ADCON1 09Fh
020h 0A0h
GPR’s GPR’s
06Fh 0EFh 16Fh 1EFh
070h 0F0h 170h 1F0h
GPR’s GPR’s GPR’s GPR’s
07Fh 0FFh 17Fh 1FFh
Exem
plo
s
Direto:
• f = 0001101b, 0Dh
• RP1,0 = 00b
Indireto:
• FSR = 00001101b, 0Dh
• IRP = 0b
Direto:
• f = 0001101b, 0Dh
• RP1,0 = 01b
Indireto:
• FSR = 10001101b, 8Dh
• IRP = 0b
Direto:
• f = 0001101b, 0Dh
• RP1,0 = 10b
Indireto:
• FSR = 00001101b, 0Dh
• IRP = 1b
Direto:
• f = 0001101b, 0Dh
• RP1,0 = 11b
Indireto:
• FSR = 10001101b, 8Dh
• IRP = 1b
FILE REGISTERS5
18525/04/2017
• Escritas nos GPR’s são realizadas por meio das
instruções do tipo “file” com d=1.
• Escritas nos SFR’s são realizadas também pelas
instruções do tipo “file” caso o mesmo permita escrita.
• Os SFR’s também podem ser escritos automaticamente.
• Registradores somente são alterados em Q4.
EscritaSUBWF
DECF
IORWF
ANDWF
XORWF
ADDWF
MOVF
COMF
INCF
DECFSZ
RRF
RLF
SWAPF
INCFSZ
MOVWF
CLRF
BCF
BSF
BTFSC
BTFSS
CLK
Escrita naSRAM
Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
FILE REGISTERS5
18625/04/2017
• Leituras dos GPR’s são realizadas por meio das
instruções do tipo “file”.
• Registradores somente são lidos em Q2.
LeituraSUBWF
DECF
IORWF
ANDWF
XORWF
ADDWF
MOVF
COMF
INCF
DECFSZ
RRF
RLF
SWAPF
INCFSZ
MOVWF
CLRF
BCF
BSF
BTFSC
BTFSS
CLK
Leitura naSRAM
Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2
25/04/2017
32
PROGRAM MEMORY6
18725/04/2017
PROGRAM MEMORY
PROGRAM MEMORY6
18825/04/2017
• A program memory se localiza em um chip separado,
quando se usa P’s, e dentro do mesmo chip, quando
se usa MCU’s.
• Antes do surgimento da memória flash, a memória de
programa era construída por meio de EEPROM.
• Alguns tipos de MCU’s do passado não tinham
memória não volátil para o programa, usavam DRAM,
requerendo nova programação a cada religamento.
Flash Program Memory
PROGRAM MEMORY6
18925/04/2017
• Tanto com flash como com EEPROM, o conteúdo da memória
de programa não se perde com o desligamento do chip.
• A vantagem da flash é a maior densidade em relação à
EEPROM.
• A desvantagem da flash é a lentidão em relação à EEPROM,
porém este problema é irrelevante, pois não é comum alterar
o conteúdo da flash durante a execução do programa.
• Se a MCU usa memória para armazenamento de dados
durante a execução do programa frequentemente, é melhor
que esta seja uma EEPROM.
Flash Program Memory
PROGRAM MEMORY6
19025/04/2017
• Outra opção também empregada em alguns modelos de MCU
é usar uma DRAM ou SRAM como memória de programa.
• Neste caso, o conteúdo é perdido no desligamento e é preciso
executar um boot ao ligar o chip.
• O programa, então, é gravado em uma flash ou uma EEPROM
externa ao chip (off-chip), na mesma placa (on-board).
• O boot faz a transferência do programa da memória externa
para a RAM interna à MCU ou para a RAM ligada ao P.
• A vantagem desta opção é a alta densidade da DRAM ou a alta
rapidez da SRAM.
Flash Program Memory
PROGRAM MEMORY6
• A flash contém o programa.
• A gravação da flash é feita, principalmente, na gravação
do programa (programação).
• A flash também pode ser gravada na execução do
programa.
• Uma gravação na flash interrompe a execução, pois,
uma vez que a mesma está em gravação, não é possível
garantir que a próxima instrução não será alterada.
• A execução também é interrompida porque, como
qualquer memória, não é possível lê-la durante sua
gravação.
19125/04/2017
Flash Program Memory
PROGRAM MEMORY6Flash – processo de escrita
19225/04/2017
Sel
13-bit
21
MUX
A0
A12
B0
B12
Sel
14-bit
21
MUX
C0
C13
D0
D13
14-bit
8k
flash
13-bit Address Bus
14-bit Program Bus
Seleção entre gravação por programação e gravação durante execução.
Programação
Execução
Programação
Execução
25/04/2017
33
PROGRAM MEMORY6
19325/04/2017
Program Counters
• PC.
• Contador de programa de 13 bits <12:0>.
• Trata-se de um contador crescente desviável.
• A saída do PC gera o barramento de endereço de instrução.
• Este barramento alimenta a flash e a stack.
13-bit
ULA
PROGRAM MEMORY6
19425/04/2017
Program Counter
• Desvios no programa são obtidos através da reconfiguração
do PC por meio das entradas Preset e Clear dos FF’s.
• No caso da PIC, os FF’s do PC formam um registrador de
13 bits.
• O PC incrementa naturalmente se a próxima instrução está
na sequência.
• A ULA reescreve o PC se a próxima instrução faz um desvio.
• Sendo um desvio com retorno, a ULA também envia o PC+1
para a stack.
PROGRAM MEMORY6
19525/04/2017
• Na PIC, o PC está incluído na fileregister (PCL, 8 bits).
• 8k endereços (flash).
• 13-bit address <12:0>
• 14-bit instruction <13:0>
• 4×2k pagging
• 11-bit address em cada página <10:0>
• 8-instruction stack
Program Counter
PROGRAM MEMORY6
19625/04/2017
Acesso à Flash Program Memory
• A divisão em páginas é feita para que o
endereçamento das instruções feito nas instruçõesde desvio (CALL e GOTO) se dê por meio de 11 bits, e
não 13 bits.
• A necessidade desta redução se deve ao fato de que
tal endereço deve caber nos 14 bits de instrução.
• Usando 11 bits para endereço, sobram 3 bits para os
demais parâmetros da instrução.
• Dois bits são usados para identificar que a instrução
é de desvio (uma das quatro famílias de instruções).
• Outro bit é usado para diferenciar CALL e GOTO.
PROGRAM MEMORY6
19725/04/2017
• Dois artifícios diferentes podem ser
usados no controle da program memory:
• Fila de pré-busca (Prefetch Queue).
• Pilha (Stack).
Acesso à Flash Program Memory
PROGRAM MEMORY6
19825/04/2017
Fila e Pilha
000h
001h
002h
003h
000h
001h
002h
003h
7 0 7 0Fila Pilha
POP
PUSH
25/04/2017
34
PROGRAM MEMORY6
19925/04/2017
• A pré-busca permite que o PC busque na
Program Memory a próxima instrução enquanto a
instrução vigente é executada.
• Isto aumenta a rapidez do processador, pois evita
que tempo de execução seja perdido durante a
busca pela instrução seguinte.
• A pré-busca é feita de modo invisível ao usuário.
• A pré-busca é feita por meio de uma fila (Prefetch
Queue) ou de um instruction register.
Fila
PROGRAM MEMORY6
20025/04/2017
Fila
• LILO – Last In, Last Out.
• Outros nomes: LILO, LOLI, FIFO, FOFI.
• As instruções são escritas e lidas na mesma ordem.
• Os dados das instruções são enfileirados.
• A fila é um registrador paralelo no qual a palavra muda de
posição tal como um bit muda de posição em um
registrador serial.
• A cada ciclo, o registrador envia as palavras um nível
abaixo, liberando a última posição.
• A leitura da fila somente pode ser feita na primeira posição.
• A gravação na fila somente pode ser feita na última
posição disponível.
PROGRAM MEMORY6
20125/04/2017
Fila
• A fila pode ser usada para aumentar o desempenho de
processadores, principalmente quando a memória de
programa é externa e seu acesso tem uma rapidez que
não está sob controle do processador.
• A fila garante que sempre há uma instrução pronta para ser
executada.
• Cada posição da fila é uma instrução lida com
antecedência.
• Uma fila de uma única posição não recebe esse nome, é,
apenas, um registrador.
• A família mid-range possui o instruction register.
• A família PIC18 possui fila de dois estágios (fetch stage e
execute stage).
PROGRAM MEMORY6
20225/04/2017
Fila
http://www.engineering.uiowa.edu/~ece_036/Lecture/Lectures3-4.pdf
Mid-range PIC18
PROGRAM MEMORY6
20325/04/2017
• Quando ocorre desvio, a pré-busca realizada anteriormente
deve ser ignorada.
• É preciso realizar uma nova busca pela próxima instrução,
desta vez, com o endereço correto, apontando para o desvio.
• Isso explica por que as instruções que realizam ou podem
realizar desvio consomem 2TCY.
BTFSC
BTFSS
DECFSZ
INCFSZ
CALL
GOTO
RETURN
RETLW
RETFIE
Fila
PROGRAM MEMORY6
20425/04/2017
• LIFO – Last In, First Out.
• Outros nomes: LIFO, FILO, LOFI, FOLI.
• Os endereços das instruções são escritas e lidas
em ordem inversa.
• Há um empilhamento.
• As informações são organizados em níveis.
• O primeiro nível está no topo.
• Level 1 Top Of the Stack (TOS)
• O nível atual é indicado pelo stack pointer.
• O PC se comunica com a TOS.
• Leitura e gravação são realizados apenas na TOS.
Pilha
25/04/2017
35
PROGRAM MEMORY6
20525/04/2017
• Duas ações podem ser feitas na pilha:
• Push – Colocação de endereço de instrução.
• Pop – Retirada de endereço de instrução.
• Alguns MCU´s ou P´s possuem as instruções PUSH e POP.
• Na PIC, PUSH e POP ocorrem em outras instruções.
• Dois problemas podem ocorrer na pilha:
• Overflow – Escrita na pilha lotada.
• Underflow – Leitura na pilha vazia.
• A PIC não registra a ocorrência destes dois fenômenos.
• A PIC não diferencia as posições usadas das não usadas.
Pilha
PROGRAM MEMORY6
20625/04/2017
• Um underflow ocorre quando se tenta realizar
mais retornos do que desvios retornáveis.
• Um overflow ocorre quando o excesso de
desvios retornáveis sobre os retornos
ocorridos for maior do que oito.
• Interrupções podem gerar overflow.
• Ambos fenômenos não podem acontecer.
Pilha
PROGRAM MEMORY6
20725/04/2017
• O valor PC+1 é gravado no primeiro nível vago
da pilha.
• A pilha armazena o endereço (13 bits) em que as
instruções são encontradas no Program Flash, e
não a instrução propriamente dita (14 bits).
• A sequência das instruções executadas não é
linear, pois o programa pode conter instruções
condicionais, aceitação de interrupções e
desvios de programa.
Pilha
PROGRAM MEMORY6
20825/04/2017
• Semelhantemente à instrução CALL, a instrução
GOTO também faz um desvio.
• A diferença é que GOTO é usado não para o
chamamento de uma sub-rotina, mas para uma
simples alteração do ponto de operação indicado
pelo PC.
• A instrução GOTO não permite retorno e, por isso,
não realiza gravação na pilha.
• A instrução CALL consiste de um PUSH seguido de
um GOTO.
Pilha
PROGRAM MEMORY6
20925/04/2017
• O endereço diz respeito à posição na flash.
• O endereço é de 13 bits (página e linha) <12:0>.
• Não pode ser lida nem escrita pelo programador.
• Acessada nas instruções CALL, RETURN, RETFIE e RETLW.
Pilha
PROGRAM MEMORY6
21025/04/2017
Pilha
CALL RETURN
RETFIE
RETLW
PC
http://upload.w ikimedia.org/w ikipedia/commons/thumb/2/29/Data_stack.svg/200px-Data_stack.svg.png
stack
Level 1
Level 8
TOS
25/04/2017
36
PROGRAM MEMORY6
21125/04/2017
Pilha – PUSH
1
2
3
4
5
6
7
8
PC
CALL (1)
1
2
3
4
5
6
7
8
PC
1
2
3
4
5
6
7
8
PC
CALL (2)
1
2
3
4
5
6
7
8
PC
Nenhum pop realizado entre os dois pushes.
PROGRAM MEMORY6
21225/04/2017
1
2
3
4
5
6
7
8
PC
CALL (3)
1
2
3
4
5
6
7
8
PC
1
2
3
4
5
6
7
8
PC
CALL (4)
1
2
3
4
5
6
7
8
PC
1
2
3
4
5
6
7
8
PC
CALL (5)
1
2
3
4
5
6
7
8
PC
Pilha – PUSH
Nenhum pop realizado entre os pushes.
PROGRAM MEMORY6
21325/04/2017
1
2
3
4
5
6
7
8
PC
CALL (6)
1
2
3
4
5
6
7
8
PC
1
2
3
4
5
6
7
8
PC
CALL (7)
1
2
3
4
5
6
7
8
PC
1
2
3
4
5
6
7
8
PC
CALL (8)
1
2
3
4
5
6
7
8
PC
Pilha – PUSH
Nenhum pop realizado entre os pushes.
PROGRAM MEMORY6
21425/04/2017
Pilha – Overflow
1
2
3
4
5
6
7
8
PC
CALL (9)
1
2
3
4
5
6
7
8
PC
Perdido
PROGRAM MEMORY6
21525/04/2017
Pilha – PUSH
• O PUSH é realizado porque, após o desvio, é
preciso retornar ao caminho original por onde o PC
leva o programa a prosseguir com a execução.
• O desvio é feito quando uma sub-rotina é chamada.
• Após a execução da sub-rotina, o PC precisa saber
o endereço para onde retornar.
• O endereço de retorno é o que corresponde àinstrução que segue o CALL.
• A pilha é a memória onde ficam armazenados os
endereços de retorno.
PROGRAM MEMORY6
21625/04/2017
Pilha
• A instrução CALL deve ser usada quando existe
a idéia de uma sub-rotina que, após sua
execução, deve levar o programa ao ponto onde
estava antes de sua execução.
• A instrução GOTO deve ser usada quando não
existe a idéia de sub-rotina. A pilha não é usada.
25/04/2017
37
PROGRAM MEMORY6
21725/04/2017
Pilha – Subrotinas
XXX
XXX
CALL
XXX
XXX
RETURN
XXX
XXX
CALL
XXX
XXX
XXX
XXX
CALL
XXX
XXX
RETURN
XXX
XXX
CALL
XXX
XXX
RETURN
XXX
XXX
CALL
XXX
XXX
RETURN
XXX
XXX
CALL
XXX
XXX
RETURN
PROGRAM MEMORY6
21825/04/2017
Pilha – Prevenção de overflow
• A instrução CALL pode provocar um stack
overflow, ela deve ser usada com cautela.
• Mesmo quando se tem a idéia de sub-rotina,a instrução CALL pode ser substituída por
GOTO se houver, em todo o programa, apenas
um ponto de chamada para a sub-rotina.
• Esta troca pode ser feita porque, como o
endereço de retorno é único, ele pode ser
previsto pelo programador, que colocará umGOTO para aquele endereço.
• Não é necessário o uso da pilha.
PROGRAM MEMORY6
21925/04/2017
Pilha – Prevenção de overflow
• Se está acontecendo o problema de overflow, uma solução
é, ao invés de realizar vários chamados para a mesma sub-
rotina, colocar várias cópias desta sub-rotina em cada ponto
de chamada.
• Se a sub-rotina não for muito grande e os pontos de
chamada não forem muitos, a perda de espaço na program
memory pode não ser significativa.
• Outra solução é usar instruções condicionais (BTFSS,
BTFSSC, INCFSZ, DECFSZ) que permitam descobrir qual
o ponto de chamada da sub-rotina, dispensando, assim, ouso da pilha, permitindo a troca da instrução CALL por GOTO.
• Um programador experiente poderá encontrar soluções mais
criativas do que estas.
PROGRAM MEMORY6
22025/04/2017
Pilha – Leitura
Data Addr
Dado 7 0h
Dado 6 1h
Dado 5 2h
Dado 4 3h
Dado 3 4h
Dado 2 5h
Dado 1 6h
Dado 0 7h
Empty 8h
Data Addr
Vazio 8h
Dado 6 0h
Dado 5 1h
Dado 4 2h
Dado 3 3h
Dado 2 4h
Dado 1 5h
Dado 0 6h
Empty 7h
• Dados somente podem ser lidos no primeiro endereço.
• Os endereços são subtraídos em uma unidade.
• O endereço 0h é chamado de top of the stack (TOS).
Data Addr
Vazio 7h
Vazio 8h
Dado 5 0h
Dado 4 1h
Dado 3 2h
Dado 2 3h
Dado 1 4h
Dado 0 5h
Empty 6h
Data Addr
Vazio 6h
Vazio 7h
Vazio 8h
Dado 4 0h
Dado 3 1h
Dado 2 2h
Dado 1 3h
Dado 0 4h
Empty 5h
Data Addr
Vazio 5h
Vazio 6h
Vazio 7h
Vazio 8h
Dado 3 0h
Dado 2 1h
Dado 1 2h
Dado 0 3h
Empty 4h
Data Addr
Vazio 4h
Vazio 5h
Vazio 6h
Vazio 7h
Vazio 8h
Dado 2 0h
Dado 1 1h
Dado 0 2h
Empty 3h
PROGRAM MEMORY6
22125/04/2017
Pilha – Leitura
Data Addr
Vazio 4h
Vazio 5h
Vazio 6h
Vazio 7h
Vazio 8h
Dado 2 0h
Dado 1 1h
Dado 0 2h
Empty 3h
Data Addr
Vazio 3h
Vazio 4h
Vazio 5h
Vazio 6h
Vazio 7h
Vazio 8h
Dado 1 0h
Dado 0 1h
Empty 2h
• O stack pointer aponta para a TOS.
• Quando o stack pointer aponta para a posição
marcada como empity, a pilha está vazia.
Data Addr
Vazio 2h
Vazio 3h
Vazio 4h
Vazio 5h
Vazio 6h
Vazio 7h
Vazio 8h
Dado 0 0h
Empty 1h
Data Addr
Vazio 1h
Vazio 2h
Vazio 3h
Vazio 4h
Vazio 5h
Vazio 6h
Vazio 7h
Vazio 8h
Empty 0h
PROGRAM MEMORY6
Data Addr
Vazio 2h
Vazio 3h
Vazio 4h
Vazio 5h
Vazio 6h
Vazio 7h
Vazio 8h
Dado 0 0h
Empty 1h
Data Addr
Vazio 1h
Vazio 2h
Vazio 3h
Vazio 4h
Vazio 5h
Vazio 6h
Vazio 7h
Vazio 8h
Empty 0h
22225/04/2017
Pilha – Escrita
Data Addr
Vazio 4h
Vazio 5h
Vazio 6h
Vazio 7h
Vazio 8h
Dado 2 0h
Dado 1 1h
Dado 0 2h
Empty 3h
Data Addr
Vazio 3h
Vazio 4h
Vazio 5h
Vazio 6h
Vazio 7h
Vazio 8h
Dado 1 0h
Dado 0 1h
Empty 2h
Data Addr
Vazio 5h
Vazio 6h
Vazio 7h
Vazio 8h
Dado 3 0h
Dado 2 1h
Dado 1 2h
Dado 0 3h
Empty 4h
Data Addr
Vazio 6h
Vazio 7h
Vazio 8h
Dado 4 0h
Dado 3 1h
Dado 2 2h
Dado 1 3h
Dado 0 4h
Empty 5h
25/04/2017
38
PROGRAM MEMORY6
22325/04/2017
• Entrada: Endereço da instrução (13 bits) <12:0>
• Saída: Dados da Instrução (14 bits) <13:0>
Acesso
• Entrada: 0000h a 1FFFh
• Saída: 0000h a 3FFFh
14-bit
13-bit
PROGRAM MEMORY6
22425/04/2017
• Após a determinação do endereço da próxima instrução, por
meio do program counter, a instrução é lida na program flash
e gravada no instruction register, um registrador paralelo.
• Após a gravação do instruction register, o program counter já
pode endereçar a próxima instrução e fazer a leitura da
program memory, pois a instrução vigente está preservada
no instruction register, mantendo-se disponível para consulta
por parte da ULA.
• Somente após a completa execução da instrução vigente é
que o instruction register pode ser atualizado para a próxima
instrução, lida no program memory, endereçada pelo
program counter.
Instruction register
PROGRAM MEMORY6
22525/04/2017
• O instruction register pode ser construído da forma de fila,
exercendo, assim, a função de Prefetch Queue.
• O stack armazena os endereços de instrução, 13 bits.
• O prefetch queue armazena as instruções, 14 bits.
• A fila age de forma totalmente invisível ao programador.
Instruction register
PROGRAM MEMORY6
22625/04/2017 8-bit
Data bus
8-bit
21MUX
14-bit
InstructionRegister
8-bit
Data busFlash
8-bit
WorkRegister
8-bit
Data bus
Instruction
Decoder
14-bit
Opcode 14-bit
8-bit
8-bit
ALU
Leitura da instrução
Entrada de clock
Outras saídas não foram incluídas nesta figura.
sel
PROGRAM MEMORY6
22725/04/2017
Leitura da instrução
8-bit
21MUX
14-bit
InstructionRegister
8-bit
Data busFlash
Instruction
Decoder
14-bit
Opcode 14-bit
8-bit
SUBWF
DECF
IORWF
ANDWF
XORWF
ADDWF
MOVF
COMF
INCF
DECFSZ
RRF
RLF
SWAPF
INCFSZ
MOVWF
CLRF
BCF
BSF
BTFSC
BTFSS
ANDLW
IORLW
XORLW
ADDLW
SUBLW
MOVLW
RETLWInstruções cujo dado
está no opcode Instruções cujo
dado está em um registrador
sel
PROGRAM MEMORY6
22825/04/2017
Págin
as
Flash
25/04/2017
39
PROGRAM MEMORY6
22925/04/2017
Páginas
• A primeira página perde as cinco primeiras
posições para que sejam usadas pela MCU
para saltar para o programa principal ou
para a rotina de interrupção.
• Se o seu programa não utiliza interrupções,
essas cinco primeiras posições podem ser
usadas como programa principal.
PROGRAM MEMORY6
23025/04/2017
• O address 0000h contém a instrução para onde o PC vai
quando a MCU sofre o comando reset.
• O address 0004h contém a instrução para onde o PC vai
quando a MCU atende a um pedido de interrupção.
• Se o programa não usa interrupções, ele pode começar apartir do address 0000h.
• Geralmente, o address 0000h contém a instrução GOTO
seguida do endereço onde o programa principal começa.
• Geralmente, o address 0005h contém a instrução GOTO
seguida do endereço onde a rotina de interrupção começa.
Páginas
PROGRAM MEMORY6
23125/04/2017
• Não é de todo correto afirmar, como faz o data
sheet, que a program memory começa no endereço0005h, afina, se o programa não usa interrupções, o
programa pode começar no endereço 000h usando
os endereços seguintes, inclusive o interrupt vector.
• Esta opção é tão viável que o próprio MPLAB®
considera como default, no código MPASM®, oendereço 0000h como início para a montagem do
programa, isto é, quando o pondo de origem (diretivaORG) não é definido pelo usuário.
• Desta forma, os dois pontos de vista serão aceitos
neste contexto.
Páginas
Vide exemplos
PROGRAM MEMORY6
23225/04/2017
• Localiza-se na Flash Memory em 0000h.
• Este é o endereço para onde o Program Counter leva a
execução quando o processador sofre algum tipo de
reiniciação (não vale para wake-up).
• Este é um ponteiro para o endereço onde o programa
começa.
• Preferencialmente, a instrução gravada neste endereço deveser GOTO, apontando para onde, de fato o programa começa,
pulando, pelo menos, as outras quatro posições reservadas.
Reset Vector
PROGRAM MEMORY6
23325/04/2017
• Localiza-se na Flash Memory em 0004h.
• Quando uma interrupção está habilitada, uma fonte de
dados interna ou externa pode realizar uma interrupção
na execução do programa.
• Como fonte de dados internos, tem-se os contadores,
conversores, portas, etc.
• Como fonte de dados externos, tem-se os sensores e
os métodos de interface de entrada do usuário.
Interrupt Vector
PROGRAM MEMORY6
23425/04/2017
• Uma interrupção age como um comando CALL.
• Uma interrupção executa um PUSH na pilha.
• O uso de interrupções deve tomar o cuidado de
não proporcionar overflow na pilha.
• Uma forma de proteger a PIC contra overflow
na pilha é desabilitar todas as interrupções
quando for atendido um pedido de interrupção,
reabilitando-as ao término do atendimento.
• Esse procedimento é feito automaticamente.
• Se interrupções não forem usadas, é mais
seguro desabilitar todas as interrupções.
Interrupt Vector
25/04/2017
40
PROGRAM MEMORY6
23525/04/2017
ID locations• 4 posições da flash.
• 2000h a 2003h.
• 14 bits de endereço.
• Posições usadas para gravação de valores de
checagem e outros números de identificação.
• Posições inacessíveis para o programa em execução.
• Posições acessíveis na etapa de programação.
• Recomenda-se a não alteração desses valores.
Este
slid
en
ão c
ai n
a p
rova
.
PROGRAM MEMORY6
23625/04/2017
• Contador de 13 bits (8k posições) PC<12:0>.
• Formado por 2 registradores:
• PCL – PC Low (8 bits, 256 endereços) PCL<7:0>
• PCH – PC High (5 bits, 32 combinações) PCH<4:0>
• PCL aceita leitura e escrita.
• PCH não aceita nem leitura nem escrita.
• PCH é escrito indiretamente, a partir do registrador PCLATH.
Program Counter
13-bit
14-bit
PROGRAM MEMORY6
23725/04/2017
• PCL é um SFR.
• PCL está contido no file registers.
• PCL pode ser lido e escrito.
• PCL possui 8 bits.
• PCH não é um SFR.
• PCH não está contido no file registers.
• PCH não pode ser lido nem escrito diretamente.
• PCH possui 5 bits.
• PCLATH é um SFR.
• PCLATH está contido no file registers.
• PCLATH pode ser lido e escrito.
• PCLATH possui 5 bits.
Program Counter
PROGRAM MEMORY6
23825/04/2017
Program Counter – Low
PCL
• Registrador 000000010b, 002h, banco 0
• Registrador 010000010b, 082h, banco 1
• Registrador 100000010b, 102h, banco 2
• Registrador 110000010b, 182h, banco 3
• Registrador XX0000010b
PROGRAM MEMORY6
23925/04/2017
PCLATH
• Registrador 000001010b, 00Ah, banco 0
• Registrador 010001010b, 08Ah, banco 1
• Registrador 100001010b, 10Ah, banco 2
• Registrador 110001010b, 18Ah, banco 3
• Registrador XX0001010b
Program Counter – Latch
PROGRAM MEMORY6
24025/04/2017
PCLATH
• PC<7:0> = PCL<7:0>
• PC<12:8> = PCH<4:0>
• PCLATH contém os 5 bits para gravar em PCH .
• PCLATH é um registrador de 5 bits da SRAM.
PCLATH
PCLPCH
inexistente
25/04/2017
41
PROGRAM MEMORY6
24125/04/2017
PCLATHFlash
(kB)
Flash
(kwords)
PCLATH
(bits)
PC
(bits)
0,4375 0,25 0 8
0,875 0,5 1 9
1,75 1 2 10
3,5 2 3 11
7 4 4 12
14 8 5 13
• PCLATH é sempre de 5 bits.
• PCLATH faz parte do core, que é o mesmo para
toda a família mid-range.
• Se menos bits são usados, o programa deve levar
isso em consideração, para evitar um wrap-back.
• Modelos com 256 posições não usam PCLATH.
USAREMOS
PROGRAM MEMORY6
24225/04/2017
PCLATH
• Modelos mid-range com 256 posições (0,25kinstruções) não usam PCLATH.
• Estes são os modelos mais baratos.
• A flash memory é o elemento mais caro no chip
MCU, por isso, sua redução gera grande
economia de custo.
• No site do fabricante, o tamanho da program
memory é o primeiro critério de busca.
• O único modelo mid-range de 256 instruções
encontrado (29/04/2014) é o PIC10F320.
https://www.microchip.com/ParamChartSearch/chart.aspx?branchID=1024&mid=10&lang=en&pageId=74
PROGRAM MEMORY6
24325/04/2017
Gravação do PCL sem alterar PCLATH
data bus
PCLATH
PCLPCH
• A instrução faz a gravação dos 8 bits de PCL.
• Este procedimento permite a realização de um GOTO manual.
• Se PCLATH não é alterado, isto permite a livre
movimentação do PC na flash dentro de setores de 256
posições da flash.
• PCL possui 8 bits porque pode ser gravado diretamente pela
ULA via data bus.
inalterado
inexistente
PROGRAM MEMORY6
24425/04/2017
Gravação do PCL sem alterar PCLATHBloco 00
Bloco 01
Bloco 02
Bloco 03
Bloco 04
Bloco 05
Bloco 06
Bloco 07
Bloco 08
Bloco 09
Bloco 0A
Bloco 0B
Bloco 0C
Bloco 0D
Bloco 0E
Bloco 0F
Bloco 10
Bloco 11
Bloco 12
Bloco 13
Bloco 14
Bloco 15
Bloco 16
Bloco 17
Bloco 18
Bloco 19
Bloco 1A
Bloco 1B
Bloco 1C
Bloco 1D
Bloco 1E
Bloco 1F
00
FF
• Este procedimento permite a
realização de saltos em faixas ou
blocos de programa de 256 posições.
• São 32 (25) blocos.
• Não é possível mudar de bloco por
meio de saltos, apenas pelo
prosseguimento normal do programa.
• Este procedimento requer, no
mínimo, duas instruções, enquanto ocomando GOTO pode fazer a mesma
ação usando, apenas, uma instrução.
PROGRAM MEMORY6
24525/04/2017
Gravação do PCL sem alterar PCLATH
• Este procedimento requer, no mínimo, duasinstruções (MOVLW e MOVWF), enquanto o
comando GOTO pode fazer a mesma ação
usando, apenas, uma instrução.
• Para realizar jumps dentro da mesmapágina, o uso da instrução GOTO.
• Estas duas opções levam o mesmo tempode execução, pois a instrução GOTO é do
tipo 2TCY.
PROGRAM MEMORY6
24625/04/2017
PCLPCH
• A gravação do PCLATH deve ser feita antes de escrever PCL.
• Gravando PCL, PCLATH é copiado em PCH automaticamente.
• A cópia do PCLATH para o PCH não passa pelo data bus.
• PCLATH<4:0> é copiado para PCH<4:0>.
• PCLATH<4:0> é copiado para PC<12:8>.
• Isso permite um jump com acesso a todas as páginas da flash.
PCLATH
Gravação do PCL alterando PCLATH
inexistente
25/04/2017
42
PROGRAM MEMORY6
24725/04/2017
• Realizando a gravação de PCLATH<4:0>, tal valor não é
copiado para PC<12:8>.
• Esta cópia é feita automaticamente em operações que tem
PCL como destino.
• A prévia gravação de PCLATH<4:0> seguida da gravação
de PCL<7:0> permite a escolha de 13 bits para o
endereçamento da flash, PC<12:0>.
• Isto permite a livre movimentação do PC na flash completa.
• PCLATH<4:0>PCH<4:0>
• PCLATH<4:0>PC<12:8>
• A instrução GOTO não permite saltos com essa amplitude.
Gravação do PCL alterando PCLATH
PROGRAM MEMORY6
24825/04/2017
• A mudança de páginas é feita por meio de PCLATH.
• PCLATH<4:3>PCH<4:3>
• PCLATH<4:3>PC<12:11>
• A divisão em páginas não é relevante no endereçamento
via gravação de PCLATH seguida pela gravação de PCL.
página
página
PCLPCH
PCLATH
Gravação do PCL alterando PCLATH
inexistente
PROGRAM MEMORY6
24925/04/2017
• O nome lath indica um segurador de informação.
• A informação é liberada somente no momento certo.
• Um flip-flop mestre-escravo age como latch, a saída Q
somente é atualizada em função da entrada D ou das
entradas J e K quando o sinal de controle é liberado
(borda de subida ou de descida).
• O PCLATH age da mesma forma, porém com 5 bits.
• O sinal de controle para liberação é a escrita do PCL.
PCLATH
PROGRAM MEMORY6
25025/04/2017
• Por que a MCU usa o PCLATH?
• Por que não liberar o PC<12:0> para escrita direta?
• A resposta é que, se o usuário pudesse escreverdiretamente em PCL e PCH, não poderia fazer as duas
escritas ao mesmo tempo.
• Um deveria ser gravado antes do outro.
• Não seria possível gravar os treze bits simultaneamente.
• Quando um fosse gravado, a próxima instrução já seria
determinada pelo novo valor do PC, e isso dificultaria
muito a programação, pois o usuário deveria prever qual
seria esta nova posição para, ali, gravar as instruções
para a seleção do novo valor para a parte restante do PC.
• O uso do PCLATH permite que os treze bits sejam
gravados simultaneamente, simplificando a programação.
PCLATH
PROGRAM MEMORY6
25125/04/2017
Instruções CALL e GOTO sem alterar PCLATH
• A instrução faz a gravação dos onze bits
menos significativos do PC<10:0>.
• A instrução faz a gravação de PCH<2:0>e de PCL<7:0> .
• Isto permite a livre movimentação do PC
na flash dentro de uma mesma página.
inalterado
página
PCLPCH
PROGRAM MEMORY6
25225/04/2017
Página 0
Página 1
Página 2
Página 3
000
7FF
• Este procedimento permite a
realização de saltos em faixas ou
blocos de programa de 2k posições.
• São 4 (22) blocos.
• Não é possível mudar de bloco por
meio de saltos, apenas pelo
prosseguimento normal do programa.
Instruções CALL e GOTO sem alterar PCLATH
25/04/2017
43
PROGRAM MEMORY6
25325/04/2017
Instruções CALL e GOTO sem alterar PCLATH
Flash
(kB)
Flash
(kwords)
PC
(bits)Páginas
Bits no
opcode
0,4375 0,25 8 1 8
0,875 0,5 9 1 9
1,75 1 10 1 10
3,5 2 11 1 11
7 4 12 2 11
14 8 13 4 11USAREMOS
PROGRAM MEMORY6
25425/04/2017
Instruções CALL e GOTO alterando PCLATH• A gravação do PCLATH deve ser feita antes do CALL ou
do GOTO.
• Os dois bits mais significativos do PCLATH são copiados.
• PCLATH<4:3>PCH<4:3>
• PCLATH<4:3>PC<12:11>
PCLATH
inexistente não copiado
PCLPCH
PROGRAM MEMORY6
25525/04/2017
Instruções CALL e GOTO
• Realizando a gravação de PCLATH<4:3>, tal valor não é
copiado para PC<12:8>.
• Esta cópia é feita automaticamente nas operações CALL e
GOTO.
• A prévia gravação de PCLATH<4:3> seguida dos
comandos CALL ou GOTO permite a escolha de 13 bits para
o endereçamento da flash, PC<12:0>.
• Isto permite a livre movimentação do PC na flash completa.
PROGRAM MEMORY6
25625/04/2017
Situações sobre o PC
PROGRAM MEMORY6
25725/04/2017
Situações sobre o PC
PROGRAM MEMORY6
25825/04/2017
Situações sobre o PC
25/04/2017
44
PROGRAM MEMORY6
25925/04/2017
Situações sobre o PC
PROGRAM MEMORY6
26025/04/2017
O problema do erro de página
• O incremento natural do program counter corresponde
ao comportamento natural de todo contador.
• A alteração forçada do program counter corresponde
a um jump efetuado por alguma instrução do tipo 2TCY
ou uma escrita em PCL.
• Estes dois fenômenos podem provocar uma alteração
de página.
• Um cuidado deve ser tomado com o PCLATH<4:3>
nestas mudanças de página.
Vide exemplos
PROGRAM MEMORY6
26125/04/2017
O problema do erro de página
• Quando se muda de uma página da program memory para
outra por meio do incremento natural do program conter, énecessário atualizar, manualmente, o PCLATH<4:3>.
• Esta atualização não é realizada automaticamente.
• Se ela não é realizada após a mudança natural da página,o uso das instruções CALL, GOTO ou uma escrita em PCL
levarão o PC para a página anterior.
Vide exemplos
PROGRAM MEMORY6
26225/04/2017
O problema do erro de página
• Quando se chama uma rotina, e esta rotina se localiza
em uma página diferente do ponto de chamada, e,
dentro desta rotina, é efetuado o uso das instruçõesCALL, GOTO ou uma escrita em PCL, é necessário
atualizar, manualmente, o PCLATH<4:3>.
• Se PCLATH<4:3> não é atualizado após a mudança
forçada de página, o uso das instruções CALL, GOTO
ou uma escrita em PCL levarão o PC para a página
que contém o ponto de chamada da rotina.
Vide exemplos
7 ULA
26325/04/2017
ULA
7 ULA
26425/04/2017
Acesso à ULA
8-bit8-b
it
8-bit
3-b
it
25/04/2017
45
7 ULA
26525/04/2017
Acesso à ULA
8-bit8-b
it
8-bit
3-b
itEntrada de dados A Entrada de dados B
Saída de dados
Bits de sinalização
Z, C, DC
7 ULA
26625/04/2017
Localização d
a U
LA
7 ULA
26725/04/2017
• Em Q1, a ULA recebe um byte indicativo da operação.
• Em Q2, a ULA recebe um byte com o(s) dados.
• Em Q3, a ULA realiza a operação.
• Em Q4, a ULA escreve no local de destino.
Decodificação do opcode
7 ULA
26825/04/2017
• O instruction decoder converte o opcode em
duas etapas:
1. O código da instrução em uma forma que
a ULA entenda e determine qual a
próxima operação a ser realizada (Q1).
2. O(s) dado(s) da instrução (se houver) e
que sofrerão a operação a ser realizada
pela ULA (Q2).
• A seleção entre os resultados dessas duas
etapas é feita por um MUX.
Decodificação do opcode
7 ULA
26925/04/2017
Decodificação do opcode
ALU8-bit
W8-bit
Datum8-bit
Instruction
Decoder
StatusZ,C,DC
Opcode14-bit
Q1 Q2
Decode/Data6-bit 8-bit
7 ULA
27025/04/2017
Decode/Data8-bit
Instruction
DecoderOpcode
14-bit
Decodificação do opcode
• Palavra para instruir a ULA sobre o próximo cálculo.
• 11-bit program memory address em CALL e GOTO.
• 8-bit literal em instrução do tipo LW.
• 7-bit file register address em instrução do tipo F.
• 3-bit bit address para instruções sobre bits.
• 1-bit destiny address em instrução do tipo F.
25/04/2017
46
7 ULA
27125/04/2017
Instruction
Decoder
Decode6-bitOpcode
14-bit
Datum8-bit
• Um ou outro, mas não ambos.
• Decode: Ocorre durante Q1.
• Datum: Ocorre durante Q2.
• O barramento de 8 bits é um só.
• O decode usa, apenas, 6 bits.
Decodificação do opcode
7 ULA
27225/04/2017
Instruction
DecoderOpcode
14-bit
Datum8-bit
• Q2:
• 8-bit PCL
• 8-bit literal
• 7-bit file address
• 3-bit bit address
• 1-bit destiny address
Decodificação do opcode
Q2
7 ULA
27325/04/2017
Decodificação do opcode
1 sel PC<10:8> PCL
13 12 10 0
0
11
1 seleção k (literal)
13 12 8 7 0
1
11
0 bitseleção file
13 12 7 6 0
1
9
0 seleção file
13 12 7 6 0
0
11
0 dseleção file
13 12 8 7 6 0
0
11
Tipo 1
Tipo 2
Sobre bit
Sobre literal
De desvio
Sobre byte
Q2 8-bit dataQ1 6-bit decode
8 7
7 ULA
27425/04/2017
Padrões de estrutura de opcode
d0 0
13 12 11 10 9 8 7 6 5 4 3 2 1 00
seleção file address
0 0 seleção
13 12 11 10 9 8 7 6 5 4 3 2 1 0
file address
1 1
13 12 11 10 9 8 7 6 5 4 3 2 1 0
seleção literal
0 0 0 0 0 0 0
13 12 11 10 9 8 7 6 5 4 3 2 1 0
seleção
1 0
13 12 11 10 9 8 7 6 5 4 3 2 1 0
program addresssel.
10
13 12 11 10 6 5 4 3 2 1 09 8 7
sel. bit addr. file address
Q2 8-bit dataQ1 6-bit decode
7 ULA
27525/04/2017
Padrões de estrutura de opcode
• A figura anterior mostra que a informação
do data sheet de que no Q1 é realizada a
decodificação e de que no Q2 é realizada a
leitura do(s) argumentos (caso hajam), é
uma simplificação.
• Esses detalhes são segredo industrial e
não são fornecidos em data sheets.
• A afirmação de que, no Q1, são lidos,
apenas, seis bits (opcode<13:8>) é,
apenas, uma suposição coerente.
• O opcode poderia ter até 16 bits e isso não
afetaria o tempo de execução; aumentaria,
apenas, o tamanho da flash memory.
7 ULA
27625/04/2017
SUBWF
DECF
IORWF
ANDWF
XORWF
ADDWF
MOVF
COMF
INCF
DECFSZ
RRF
RLF
SWAPF
INCFSZ
• Data:
• 1-bit destiny address
• 7-bit file address
0 dseleção file
13 12 8 7 6 0
0
11
Q2 8-bit dataQ1 6-bit decode
Decodificação do opcode
Instruction
DecoderOpcode
14-bit
Q1 6-bit decode
Q2 8-bit data
25/04/2017
47
7 ULA
0 seleção file
13 12 7 6 0
0
11
27725/04/2017
• Data:
• Bit 7
• 7-bit file address
Q2 8-bit data
Decodificação do opcodeNOP
MOVWF
CLRW
CLRF
Q1 6-bit decode
Instruction
DecoderOpcode
14-bit
Q1 6-bit decode
Q2 8-bit data
Instrução Nibble 3 Nibble 2 Nibble 1 Nibble 0
NOP 00b 0000b (00d) 0xx0 0000
MOV WF 00b 0000b (00d) 1fff ffff
CLR W 00b 0001b (01d) 0xxx xxxx
CLR F 00b 0001b (01d) 1fff ffff
Q2 8-bit dataQ1 6-bit decode
7 ULA
13 12 8 7 011
1 seleção k (literal)1 27825/04/2017
• Datum:
• 8-bit literal
Q2 8-bit data
Decodificação do opcodeANDLW
IORLW
XORLW
ADDLW
SUBLW
MOVLW
RETLW
Q1 6-bit decode
Instruction
DecoderOpcode
14-bit
Q1 6-bit decode
Q2 8-bit data
7 ULA
0 bitseleção file
13 12 7 6 0
1
9
BCF
BSF
BTFSC
BTFSS
27925/04/2017
Q2 8-bit data
Decodificação do opcode
Q1 6-bit decode
Instruction
DecoderOpcode
14-bit
Q1 6-bit decode
Q2 8-bit data
• Decode:
• Família e seleção
• 3-bit bit address <2:1>
• Data:
• 3-bit bit address <0>
• 7-bit file address
7 ULA
1 sel k (literal)
13 12 10 0
0
11 8 7
28025/04/2017
• Datum:
• PCL
Q2 8-bit data
Decodificação do opcodeCALL
GOTO
• Como os dados superam 8 bits, o PC<10:8>
é lido no Q1, junto com os bits 11 a 13.
Q1 6-bit decode
Instruction
DecoderOpcode
14-bit
Q1 6-bit decode
Q2 8-bit data
7 ULA
28125/04/2017
Determinação do destino
ALU
8-bit
21
DEMUX
SRAM8-bit
W8-bit
Seleçãoopcode<7>=0: w
opcode<7>=1: f
SUBWF
DECF
IORWF
ANDWF
XORWF
ADDWF
MOVF
COMF
INCF
DECFSZ
RRF
RLF
SWAPF
INCFSZ
NOP
MOVWF
CLRW
CLRF
7 ULA
28225/04/2017
Multiplexação datum literal/fileSUBWF
DECF
IORWF
ANDWF
XORWF
ADDWF
MOVF
COMF
INCF
DECFSZ
RRF
RLF
SWAPF
INCFSZ
MOVWF
CLRF
BCF
BSF
BTFSC
BTFSS
ANDLW
IORLW
XORLW
ADDLW
SUBLW
MOVLW
RETLW
• Em Q2, se a ULA recebe um 8-bit literal, o
dado já está disponível para ser operado.
• Em Q2, se a ULA recebe um 7-bit file
address, a ULA faz a leitura do registrador.
• Em ambos casos, a ULA conclui o Q2 com
o 8-bit datum disponível para ser operado
25/04/2017
48
7 ULA
28325/04/2017
Multiplexação datum literal/file
8-bit
21
MUXSeleção
Literal8-bit
Instruction bus
File8-bit
Data bus
Datum8-bit
Para a ULA
SUBWF
DECF
IORWF
ANDWF
XORWF
ADDWF
MOVF
COMF
INCF
DECFSZ
RRF
RLF
SWAPF
INCFSZ
MOVWF
CLRF
BCF
BSF
BTFSC
BTFSS
ANDLW
IORLW
XORLW
ADDLW
SUBLW
MOVLW
RETLW
Instruction
Decoder
Opcode13-bit
7 ULA
28425/04/2017
ALU
8-bit
21
MUXSeleçãoInstruction Decoder
Multiplexação datum literal/file
Literal8-bit
Instruction bus
File8-bit
Data bus
7 ULA
28525/04/2017
Multiplexação instrução/dado
• Uma vez que a ULA recebe a informação
sobre a operação e a informação sobre o
operando em instantes diferentes, por meio
da entrada, é preciso que pelo menos a
primeira destas palavras seja registrada para
que esteja disponível no segundo instante.
7 ULA
28625/04/2017
Multiplexação instrução/dado
Registrador
do dado B
Registrador
da operação
Seleção
Registrador
do dado A
W8-bit
Instruction/Datum8-bit
7 ULA
28725/04/2017
Multiplexação instrução/dado