Altana Tubes > Blog > PIC16F627A/628A/648A > Arquitetura

3.0 Visão geral da arquitetura dos microcontroladores PIC16F627A, PIC16F628A e PIC16F648A

Tradução: Maria Elisa - Assessoria em Inglês e Alemão 

Revisão: Renato Kodaira

A alta performance da família de microcontroladores PIC16F627A, PIC16F628A e PIC16F648A pode ser atribuída a uma série de características de arquitetura comumente encontradas em microprocessadores RISC. Um primeiro fator é o de que os PIC16F627A/628A/648A utilizam a arquitetura Harvard, na qual o programa e os dados são acessados em memórias separadas, utilizando barramentos separados. Isso melhora a largura da banda, em comparação com a arquitetura tradicional Von Neumann, na qual o programa e os dados são acessados em uma mesma memória. A separação das memórias de programa e de dados permite ainda que as instruções sejam dimensionadas em palavras com largura diferente de 8 bits. Os códigos operacionais das instruções possuem largura de 14 bits, tornando possível que todas as instruções sejam constituidas de apenas uma única palavra. Um barramento de acesso à memória de programa com 14 bits de largura busca uma instrução de 14 bits em um ciclo único. Um pipeline de dois estágios sobrepõe a busca e a execução das instruções. Consequentemente, todas as instruções (35) são executadas em um único ciclo (200ns @ 20 MHz), exceto para desvio na execução do programa.

A Tabela 3.1 lista os tamanhos das memórias dos componentes (Memórias Flash, de dados e EEPROM).

TABELA 3.1: LISTA DE MEMÓRIAS DOS COMPONENTES

Componente Memória
Memória de Programação Flash Memória de Dados RAM Memória de Dados EEPROM
PIC16F627A 1024 x 14 224 x 8 128 x 8
PIC16F628A 2048 x 14 224 x 8 128 x 8
PIC16F648A 4096 x 14 256 x 8 256 x 8
PIC16LF627A 1024 x 14 224 x 8 128 x 8
PIC16LF628A 2048 x 14 224 x 8 128 x 8
PIC16LF648A 4096 x 14 256 x 8 256 x 8

Os PIC16F627A/628A/648A podem endereçar direta ou indiretamente seus bancos de registradores ou memória de dados. Todos os Registradores de Funções Especiais (Special Function Registers - SFR), incluindo o contador do programa, estão mapeados na memória de dados. Os PIC16F627A/628A/648A possuem um conjunto de instruções ortogonal (simétrico) que torna possível carregar qualquer operação, em qualquer registrador de memória, utilizando qualquer modo de endereçamento. Esta natureza simétrica e falta de 'situações ótimas especiais' torna a programação com os PIC16F627A/628A/648A simples, porém eficiente. Além disso, a curva de aprendizado é significativamente reduzida.

Os componentes PIC16F627A/628A/648A contêm uma Unidade Lógica Aritmética (ALU) e um registrador de trabalho de 8 bits. A ALU é uma unidade aritmética de propósito genérico. Ela executa operações aritméticas e booleanas entre os dados no registrador de trabalho e qualquer outro registrador de memória.

A ALU tem 8 bits de largura e tem capacidade de executar operações de adição, subtração, deslocamento, bem como operações lógicas. Salvo indicação em contrário, as operações aritméticas são feitas em complemento de dois. Em instruções de dois operandos, um deles é tipicamente o registrador de trabalho (W-register). O outro operando é um registrador de memória ou uma constante imediata. Em instruções de operando único, o operando é o W-register ou um registrador de memória.

Dependendo da instrução executada, a ALU pode afetar os valores dos bits Carry (C), Digit Carry (DC) e Zero (Z) no registrador de status. os bits C e DC operam como bits de empréstimo (Borrow) e de empréstimo de dígito (Digit Borrow), respectivamente, na subtração. Veja as instruções SUBLW e SUBWF como exemplos.

Um diagrama de blocos simplificado é apresentado na Figura 3.1, e uma descrição dos pinos do componente é mostrada na Tabela 3.2.

Dois tipos de memória de dados são fornecidos nos componentes PIC16F627A/628A/648A. A memória de dados não-volátil EEPROM é oferecida para armazenamento de dados por longos períodos, como por exemplo valores de calibração, dados de tabelas de consulta, ou quaisquer outros dados que podem requerer uma atualização periódica no campo. Estes tipos de dados não são perdidos quando a energia é interrompida. A outra memória de dados fornecida é a memória de dados regular RAM. A memória de dados regular RAM é oferecida para o armazenamento temporário de dados durante a operação normal. Os dados são perdidos quando a energia é desligada.

FIGURA 3.1: DIAGRAMA DE BLOCOS

TABELA 3.2: DESCRIÇÃO DO ARRANJO DOS PINOS NOS COMPONENTES PIC16F627A/628A/648A

Nome Função Tipo de Entrada Tipo de Saída Descrição
RA0/AN0 RA0 ST CMOS Porta de entrada/ saída bidirecional
AN0 AN --- Entrada do comparador analógico
RA1/AN1 RA1 ST CMOS Porta de entrada/ saída bidirecional
AN1 AN --- Entrada do comparador analógico
RA2/AN2/VREF RA2 ST CMOS Porta de entrada/ saída bidirecional
AN2 AN --- Entrada do comparador analógico
VREF --- AN Saída da VREF
RA3/AN3/CMP1 RA3 ST CMOS Porta de entrada/ saída bidirecional
AN3 AN --- Entrada do comparador analógico
CMP1 --- CMOS Saída do comparador 1
RA4/T0CKI/CMP2 RA4 ST OD Porta de entrada/ saída bidirecional
T0CKI ST --- Entrada de clock do Timer0
CMP2 --- OD Saída do comparador 2
RA5/MCLR/VPP RA5 ST --- Porta de entrada
MCLR ST --- Reset principal. Quando configurado como MCLR, este pino representa uma reinicialização do dispositivo. ativa em nível baixo. A tensão no MCLR/VPP não pode exceder a VDD durante a operação normal do dispositivo.
VPP --- --- Entrada de tensão de programação
RA6/OSC2/CLKOUT RA6 ST CMOS Porta de entrada/saída bidirecional
OSC2 --- XTAL Saída do oscilador de cristal. Se conecta com o ressonador a cristal no modo Oscilador de Cristal
CLKOUT --- CMOS No modo RC ou INTOSC. O pino OSC2 pode ser a saída CLKOUT, o qual tem 1/4 da frequência do OSC1
RA7/OSC1/CLKIN RA7 ST CMOS Porta de entrada/saída bidirecional
OSC1 XTAL --- Entrada do oscilador de cristal
CLKIN ST --- Entrada da fonte de clock externa. Pino de polarização RC.
RB0/INT RB0 TTL CMOS Porta de entrada/ saída bidirecional. Pode ser programada por software para pull-up interno fraco.
INT ST --- Interrupção externa
RB1/RX/DT RB1 TTL CMOS Porta de entrada/ saída bidirecional. Pode ser programada por software para pull-up interno fraco.
RX ST --- Pino de recepção USART
DT ST CMOS Entrada/saída de dados sincronizada
RB2/TX/CK RB2 TTL CMOS Porta de entrada/ saída bidirecional. Pode ser programada por software para pull-up interno fraco.
TX --- CMOS Pino de transmissão USART
CK ST CMOS Entrada/saída de clock sincronizada.
RB3/CCP1 RB3 TTL CMOS Porta de entrada/saída bidirecional. Pode ser programada por software para pull-up interno fraco.
CCP1 ST CMOS Entrada e Saída do tipo Captura/Comparação/PWM
RB4/PGM RB4 TTL CMOS Porta de entrada/saída bidirecional. Alteração de interrupção no pino. Pode ser programada por software para pull-up interno fraco.
PGM ST --- Pino de entrada de programação em baixa tensão. Quando a programação em baixa tensão está habilitada, a alteração de interrupção no pino, bem como o resistor de pull-up fraco, estão desabilitados.
RB5 RB5 TTL CMOS Porta de entrada/saída bidirecional. Alteração de interrupção no pino. Pode ser programada por software para pull-up interno fraco.
RB6/T1OSO/T1CKI/PGC RB6 TTL CMOS Porta de entrada/saída bidirecional. Alteração de interrupção no pino. Pode ser programada por software para pull-up interno fraco.
T1OSO --- XTAL Saída do oscilador do Timer1
T1CKI ST --- Entrada de clock do Timer1
PCG ST --- Clock de programação ICSPTM
RB7/T1OSI/PGD RB7 TTL CMOS Porta de entrada/saída bidirecional. Alteração de interrupção no pino. Pode ser programada por software para pull-up interno fraco.
T1OSI XTAL --- Entrada do oscilador do Timer1
PGD ST CMOS Entrada e saída de dados ICSP
VSS VSS Energia --- Referência de TERRA para os pinos de lógica e de entrada/saída
VDD VDD Energia --- Pino de alimentação positiva para os pinos de lógica e entrada/saída

Legenda:
O = Saída (output)
CMOS = Saída CMOS
P = Energia (power)
--- = não utilizado(a)
I = Entrada (input)
ST = Entrada tipo Schmitt Trigger
TTL = Entrada TTL
OD = Saída de dreno aberto (open drain)
AN = analógico(a)

3.1 Esquema de Clocking/ Ciclo de Instrução

A entrada de clock (pino RA7/OSC1/CLKIN) é internamente dividida por quatro, de forma a gerar quatro clocks em quadratura não sobrepostos, a saber Q1, Q2, Q3 e Q4. Internamente, o contador de programa (PC) é incrementado a cada Q1, a instrução é buscada na memória de programa e guardada no registrador de instruções em Q4. A instrução é decodificada e executada durante os ciclos Q1 a Q4 seguintes. Os clocks e o fluxo de execução da instrução são apresentados na Figura 3.2.

3.2 Fluxo de Instrução/Canalização (pipelining)

Um ciclo de instrução consiste em quatro ciclos Q (Q1, Q2, Q3 e Q4). A busca e a execução da instrução são canalizadas de forma que a busca utilize um ciclo de instrução, enquanto a decodificação e a execução utilizem um outro ciclo de instrução. Entretanto, devido à canalização, cada instrução é efetivamente executada em um ciclo. Se uma instrução causa uma alteração no contador do programa (p. ex. GOTO), então dois ciclos são necessários para completar a instrução (Exemplo 3.1)

Um ciclo de busca começa com o incremento do contador de programa em Q1.

No ciclo de execução, a instrução buscada é guardada no Registrador de Instruções (IR) no ciclo Q1. Esta instrução é então decodificada e executada durante os ciclos Q2, Q3 e Q4. A memória de dados é lida durante o Q2 (leitura do operando) e escrita durante o Q4 (escrita no destino).

FIGURA 3.2: CICLO DE CLOCK/ INSTRUÇÃO

EXEMPLO 3.1: FLUXO DE CANALIZAÇÃO DE INSTRUÇÃO

<-Anterior Índice Próximo->