Registradores do processador do PIC

Propaganda
1. Memórias do tipo RAM estáticas:
1. Banco de registradores: 9 bits de endereço e 8 bits de dados:
128 palavras de dados +
4 registradores do processador +
36 registradores de entrada e saída +
4 registradores de entrada e saída que são disponíveis apenas no PIC176F871;
2. Pilha de chamada de subprogramas: 3 bits de endereço que são sempre invisíveis e 8
palavras de 13 bits.
2. Memórias Flash:
1. Memória de programa: 11 bits de endereço e 14 bits de dados, 2K palavras disponíveis;
2. Memória de dados: 6 bits de endereço e 8 bits de dados, 64 palavras.
3. Endereçamento do banco de registradores:
Os endereços de nove bits empregados para selecionar um dos registradores podem ser
fornecidos de forma direta ou indireta.
Na forma direta, os sete bits menos significativos do endereço são fornecidos diretamente
na instrução e os dois bits mais significativos vem dos bits denominados RP0 e RP1 do registrador
de indicadores. Dessa forma, o espaço de endereçamento fica dividido em quatro partes. Cada
uma dessas quatro partes ( denominadas bancos de registradores ) corresponde a 128 endereços
e é selecionada por uma das combinações dos valores de RP0 e RP1. Ou seja, os valores dos
bits RP0 e RP1 definem qual dos bancos pode ser endereçado de forma direta.
Na forma indireta, que é empregada sempre que for realizado um acesso ao pseudo
registrador cujo endereço é 00, 80, 100 ou 180, os oito bis menos significativos são fornecidos
pelo registrador denominado FSR e o bit mais significativo do endereço vem do bit denominado
IRP do registrador de indicadores. Dessa forma, quando essa forma de endereçamento é
empregada, o espaço de endereçamento fica dividido em duas metades, cada uma com 256
endereços e o valor do bit IRP define qual dessas metades está correntemente sendo usada.
Como apenas seis registradores de entrada e saída só podem ser endereçados empregando
endereços maiores que FF e esses registradores normalmente não são endereçados empregando
endereçamento indireto, geralmente o bit IRP é fica sempre com valor 0.
4. Endereçamento da pilha
A pilha só é empregada durante a execução de chamadas de rotina ( quando o valor do
apontador de programa é empilhado ) e retornos de rotina ( quando o valor armazenado no topo
da pilha é copiado para o apontador de programa ). Ela é endereçada por um apontador de pilha
( de três bits ) que não é visível.
5. Endereçamento da memória de programa
A memória de programa geralmente é endereçada pelo apontador de programa, que é um
registrador de 13 bits. Porém também é possível realizar escritas e leituras nessa memória. Nesse
caso, essa memória é tratada como se fosse um dispositivo de entrada e saída e os endereços e
também os dados a serem escritos ou que foram lidos dessa memória são colocados em pares de
registradores de interface específicos. Durante á realização dessas operações de leitura ou escrita
nessa memória o processador fica parado ( executando "nops" ) porque não pode ler o código da
próxima instrução a ser executada.
1
6. Endereçamento da memória de dados.
A memória de dados é tratada como se fosse um dispositivo de entrada e saída e os seus
endereços e também os dados a serem escritos ou que foram lidos dessa memória são colocados
em registradores de interface específicos.
7. Registradores do processador
Nome
W
IND
PCL
STATUS
FSR
PCLATH
Endereço
00 | 80 |
100 | 180
02 | 82 |
102 | 182
03 | 83 |
103 | 183
04 | 84 |
104 | 184
0A | 8A |
10A | 18A
Função
Registrador de trabalho ( acumulador )
Pseudo registrador usado para referenciar o registrador cujo endereço é
igual ao valor armazenado no registrador FSR
8 bits menos significativos do apontador de instrução
Registrador de Indicadores
Bit Nome Função
0
C
Vai um ou não pede emprestado
1
DC
Vai um do quarto para o Quinto bit
2
Z
Zero
3
PD\ É zerado pela instrução "SLEEP"
4
TO\ É zerado quando ocorre um reset causado pelo Watch dog
5
RP0 Bits mais significativos do endereço usado em
6
RP1 endereçamento direto
Bit mais significativo do endereço usado em endereçamento
7
IRP
indireto.
Informa o endereço do registrador referenciado indiretamente
Bits mais significativos do apontador de instrução
8. Ciclo de execução das instruções:
Cada instrução é normalmente executada em quatro ciclos de relógio. Durante a execução
de cada instrução é realizada simultaneamente a busca do código da próxima instrução a ser
executada.
Por causa dessa simultaneidade, sempre que o apontador de programa é modificado
durante a execução de uma instrução, essa instrução empregará dois ciclos de instrução ( oito
ciclos de relógio ) para ser executada. Isso é necessário porque o código de instrução buscado
durante a execução da instrução foi aquele que está armazenado na posição da memória de
programa cujo endereço corresponde ao valor que o apontador de programa tinha antes de ser
modificado pela instrução.
Durante o ciclo de instrução adicional, o processador executa um "nop" e busca o código
da instrução armazenada na posição de memória endereçada pelo novo valor do apontador de
instrução. Essa duplicação do tempo da execução ocorre tanto no caso de instruções de desvio
quanto no caso das instruções que alterem o valor do registrador PCL. No caso das instruções de
desvio condicional, a duplicação do tempo de execução da instrução só ocorre se o desvio for
efetivamente realizado.
Sempre que o valor do registrador IPL for alterado por uma instrução o apontador de
programa receberá um valor formado pela concatenação dos cinco bits menos significativos do
valor armazenado no registrador PCLATH com os oito bits que foram enviados para o registrador
PCL.
2
9. O conjunto de instruções
As palavras de instrução são formadas por 14 bits que contém o código da instrução e
valores literais que desempenham o papel de operandos imediatos. São empregados cinco
formatos de instrução:
Número do bit
Nome do
formato
13
12
11
10
9
8
7
6
5
4
3
2
1
Controle
0
Código de operação
Byte
0
Código de operação
Dest
Endereço
oriented
Bit
Código de
0
1
Número do bit
Endereço
oriented
operação
Cod.
Desvios
1
0
Alvo do desvio
Op.
Com literal 1
1
Código de operação
Constante
0
São empregados os seguintes valores literais:
Nome do valor Tamanho
Função
literal
( bits )
Se for zero, indica que o valor produzido deve ser armazenado no
registrador W, se for um, indica que esse valor deve ser armazenado
Dest.
1
em um registrador do banco de registradores
Fornece os sete bits mais significativos do valor empregado para
Endereço
7
selecionar qual dos registradores deve ser empregado
Número do bit
3
Indica qual é o bit que deve ser alterado ou testado
Fornece os onze bits menos significativos do valor a ser colocado no
Alvo do desvio
11
apontador de instrução para realizar um desvio
Fornece uma constante que será diretamente empregada como
Constante
8
operando pela instrução
3
10. Instruções em ordem de código de operação
00.0000.1FFF.FFFF
00.0001.0XXX.XXXX
00.0001.1FFF.FFFF
Mnemônico e
operandos
NOP
RETURN
RETFIE
SLEEP
CLRWDT
MOVWF F
CLRW
CLRF F
00.0010.DFFF.FFFF
SUBWF F,D
1
00.0011.DFFF.FFFF
00.0100.DFFF.FFFF
00.0101.DFFF.FFFF
DECF F,D
IORWF F,D
ANDWF F,D
1
1
1
00.0110.DFFF.FFFF
XORWF F,D
1
00.0111.DFFF.FFFF
00.1000.DFFF.FFFF
00.1001.DFFF.FFFF
00.1010.DFFF.FFFF
ADDWF F,D
MOVF F,D
COMF F,D
INCF F,D
1
1
1
1
00.1011.DFFF.FFFF
DECFSZ F,D
1|2
00.1100.DFFF.FFFF
00.1101.DFFF.FFFF
00.1110.DFFF.FFFF
RRF F,D
RLF F,D
SWAPF F,D
1
1
1
00.1111.DFFF.FFFF
INCFSZ F,D
1|2
01.00BB.BFFF.FFFF
BCF F,B
1
01.01BB.BFFF.FFFF
BSF F,B
1
01.10BB.BFFF.FFFF
BTFSC F,B
1|2
01.11BB.BFFF.FFFF
BTFSS F,B
1|2
Código
00.0000.0XX0.0000
00.0000.0000.1000
00.0000.0000.1001
00.0000.0110.0011
00.0000.0110.0100
10.0KKK.KKKK.KKKK
10.1KKK.KKKK.KKKK
Ciclos
Descrição
1
2
2
1
1
1
1
1
Nenhuma operação
Retorno de subrotina
Retorno de interrupção
Entra no modo "stand by"
Zera o tempo do "watch dog"
Move o W para um registrador
Zera o W
Zera um registrador
Soma o complemento a dois de W a
um registrador
Decrementa um registrador
Ou de W com um registrador
E de W com um registrador
Ou exclusivo de W com um
registrador
Soma W a um registrador
Move um registrador
Complementa um registrador
Incrementa um registrador
Decrementa um registrador e se o
resultado for zero, pula a próxima
instrução
Rola um registrador para a direita
Rola um registrador para a esquerda
Troca os Quartetos de um registrador
Incrementa um registrador e se o
resultado for zero, pula a próxima
instrução
Zera um bit de um registrador
Coloca um em um bit de um
registrador
Se o bit especificado for zero, pula a
próxima instrução
Se o bit especificado for um, pula a
próxima instrução
Chama um subprograma
Desvia para o alvo especificado
Move uma constante para o W
Move uma constante para W e
retorna do subprograma
Ou de uma constante com W
E de uma constante com W
Ou exclusivo de uma constante com
W
Soma uma constante ao
complemento a dois de W
Soma uma constante a W
CALL K
GOTO K
11.00XX.KKKK.KKKK MOVLW K
2
2
1
11.01XX.KKKK.KKKK
RETLW K
1
11.1000.KKKK.KKKK
11.1001.KKKK.KKKK
IORLW K
ANDLW K
1
1
11.1010.KKKK.KKKK
XORLW K
1
11.110X.KKKK.KKKK
SUBLW K
1
11.111X.KKKK.KKKK
ADDLW K
1
4
Indicadores
alterados
TO\, PD\
TO\, PD\
Z
Z
C, DC, Z
Z
Z
Z
Z
C, DC, Z
Z
Z
Z
C
C
Z
Z
Z
C, DC, Z
C, DC, Z
Download