Buscar

Pic MicroControlAdOr

Prévia do material em texto

PICmicro Microcontrolador
Sistemas Digitais II
(Documento em versão Draft ainda em elaboração)
José Carlos Fonseca
14 de Janeiro de 2003
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
2
Resumo
 Introdução
 Vários tipos de arquitectura
 Os microcontroladores PIC
 PIC16F84
 Diagrama de blocos
 Memória de programa
 Memória de dados
 Recursos auxiliares
 Pinagem
 Circuito de teste
 Programação
 Memória
 ALU e W
 PC e Stack
 Portos
 Timer
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
3
Introdução
 Estrutura de um computador
 Memória – São armazenados os programas e os 
dados
 CPU (Unidade de Processamento Central) – 
Interpreta as instruções do programa de execução e 
executa as operações correspondentes . Dentro do 
processador, a Unidade de Controle é a que 
interpreta ou traduz as instruções e um Processador 
que realiza as operações de cada instrução
 Periféricos – São dispositivos de Entrada e Saída 
mediante os quais se introduzem informações e se 
recolhem os dados. (teclado, rato, monitor, modem, 
etc.)
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
4
Introdução
 Microcontrolador
 É um computador dentro de um circuito integrado. 
Graças à evolução tecnológica é possível integrar 
num único chip todos os componentes de um 
computador. Devido às suas dimensões tem pouca 
memória, o seu processador só reconhece algumas 
instruções básicas e está limitado na ligação directa 
a periféricos específicos
 Encontram-se normalmente embebidos nos 
equipamentos, tais como teclados, ratos, televisões, 
máquinas de lavar, alarmes, jogos electrónicos, 
relógios, automóveis, robots, telemóveis, etc.
 Um microcontrolador embebido está dedicado a essa 
tarefa específica, enquanto que um computador de 
uso geral está preparado para um uso mais 
diferenciado
 Segundo a Dataquest, no ano 1999, foram usados 
15 vezes mais microcontroladores do que 
processadores
 Segundo a Dataquest, no ano 2000, havia uma 
média de 240 microcontroladores num lar americano
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
5
Processador vs Microcontrolador
 Um microprocessador é um circuito muito complexo, 
em forma de circuito integrado, que pode conter 
entre alguns milhares (Z80) a 7 milhões de 
transístores (Pentium II). Estes transístores internos 
constituem os mais diversos circuitos lógicos: como 
contadores, registos, descodificadores, e muitos 
outros. Estes circuitos lógicos são dispostos de 
maneira complexa, dando ao microprocessador a 
capacidade de executar operações lógicas, 
aritméticas e de controlo. É um sistema aberto 
porque a sua configuração é variável de acordo com 
a aplicação a que se destina 
 O microcontrolador integra num único componente 
os três elementos principais na arquitectura de um 
computador: CPU, memória e I/O
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
6
Processador vs Microcontrolador
 Os microcontroladores dispõem sempre de I/O 
digital ou analógica, o que não se verifica nos 
microprocessadores
 A memória interna só de leitura verifica-se apenas 
nos microcontroladores (pode ser ROM, já 
programada de fábrica, pode ser programável pelo 
utlizador ou pode mesmo não existir internamente)
 O barramento de dados dos microprocessadores tem 
um maior número de bits, uma vez que a sua área 
de aplicação é mais exigente ao nível do 
processamento da informação; Dos 
microcontroladores, por outro lado, espera-se uma 
aplicação mais diversificada e menos exigente nesse 
ponto; São ainda pouco utilizados 
microcontroladores de 16 bits
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
7
CISC vs RISC
 CISC (Complex Instruction Set Computers)
 RISC (Reduced Instruction Set Computers)
 O PIC16F84 é RISC
 Um CISC tende a ter um grande número de 
instruções, cada uma executando uma 
permutação diferente da mesma operação
 Um RISC tem um número mínimo de instruções 
que permite ao utilizador desenhar as suas 
próprias instruções, em vez de usar as que o 
desenhador do processador oferece
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
8
Arquitectura de Princeton (Von 
Neumann)
 Como resultado de um pedido do governo dos EUA, as 
Universidades de Princeton e de Harvard criaram 
arquitecturas de computadores para serem usadas no 
cálculo das tabelas de artilharia de Navel
 Em 1945 Von Neumann estabeleceu as bases para a 
construção de computadores. Desenhou uma máquina 
em que existia um bloco, unidade de controlo, capaz de 
descodificar um conjunto de instruções. Um 
processador que realiza as operações que as instruções 
implicam. Um grande armazém servia para guardar as 
instruções dos programas e dos dados. A unidade de 
interface de memória é responsável pela gestão do 
acesso à memória. Um último bloco permitia a 
transferência de informação aos periféricos exteriores
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
9
Arquitectura de Princeton (Von 
Neumann)
 A vantagem é a simplicidade de acesso 
à memória. Possui um barramento 
único para aceder à memória 
(endereços, dados e controlo)
 O grande inconveniente é o facto da 
memória do programa e dos dados ser 
comum, pois impede que se possa 
aceder ao programa e aos dados 
simultaneamente e muitas vezes o 
tamanho dos dados é diferente do 
tamanho das instruções
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
10
Arquitectura de Harvard
 Existem duas memórias diferentes e 
independentes, uma para as 
instruções e outra para os dados. 
Isto permite realizar acessos 
simultâneos a ambas as memórias. 
Esta arquitectura tende a executar 
as instruções em menos ciclos de 
relógio. As duas memórias podem 
também ter palavras de 
comprimento diferentes. No caso do 
PIC16F84 a memória de programa é 
Flash e possui 1024 posições de 14 
bits cada. A memória de dados tem 
uma capacidade muito menor e um 
tamanho típico de 8 bits
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
11
Princeton Vs Harvard
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
12
Micro-coded vs Hard-coded
 A execução de cada instrução é, de facto, um conjunto 
de passos. Para executar esses passos podem ser 
usadas duas aproximações:
 Micro-coded – É um processador dentro do processador. 
Uma máquina de estados executa cada instrução como um 
endereço para uma subrotina de instruções que depois são 
executadas pela lógica do microCode Instruction Decode 
and Processor. O PIC é Micro-coded
 Hard-coded – Usa o padrão de bits da instrução para 
aceder a lógica combinatória específica da instrução 
executando-a
 Um processador micro-coded é mais simples que o 
hard-coded, podendo ser mais rapidamente 
implementado. Facilita as revisões e actualizações do 
código. No entanto é mais lento que o hard-coded, pois 
as instruções são executadas em maior número de 
ciclos de relógio
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
13
Fabricantes de microcontroladores
Fabricantes
 Intel – Pai dos microcontroladores, tendo 
desenvolvido na década de 70, o 8048. Teve 
muito sucesso com o 8051
 Motorola – Ocupou o primeiro lugar na 
década de 90 com o 68HC11 usando a 
tecnologia HCMOS
 Microchip – Fabricante dos PIC (Peripheral 
Interface Controller) passou do 20º lugar em 
1990 para o 2º lugar em 2000
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
14
Características das famílias de PICS
Produto Família Exec./instruçã
o
Nº de 
instruções
PIC12CXXX Gama anã 
(básica e média 
de 8 pinos)
1000ns/4Mhz; 
10 Mhz
33/35 instruçõesPIC16C5X Gama básica 200ns / 20Mhz 33 inst. de 12 
bits
PIC16CXXX Gama média 200ns / 20 Mhz 35 inst. de 14 
bits
PIC17CXXX Gama alta 120 ns / 33Mhz 58 inst. de 16 
bits
PIC18CXXX Gama 
melhorada
10 MIPS / 40 
Mhz
77 inst. de 16 
bits
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
15
Gama de Microcontroladores
 Low-End - Subset reduzido de instruções; Sem 
tratamento de interrupções; Menor disponibilidade 
de memória RAM; Sem I/O avançado; Instrução 
de 12bits; Ex: PIC 12C5xx; Não deve ser utilizado 
para novas aplicações ou em aprendizagem.
 MidRange - Baseado na organização dos Low-
End; Tratamento de interrupções; Timers; 
Quantidade razoável de memória RAM; Tipos 
avançados de I/O; Instrução de 14bits; 
Caracterizado como sendo de uso geral; Ex: PIC 
16C7xx
 High-End - Instruções de 16 bits; Acesso a todos 
os registos directamente; Múltiplos vectores de 
interrupção; Família: PIC 17Cxx
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
16
Quanto à memória do Programa
 PIC 16 Cxxx - Memória EPROM
 PIC 16 CRxxx - Memória ROM
 PIC 16 Fxxx - Memória FLASH 
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
17
Execução de instruções
 Pipeline de instruções em dois estágios:
 Fase de busca (fetch) – Procura-se o código binário da instrução na 
memória do programa
 Fase de execução – Interpreta-se o código, buscam-se os operandos e 
executa-se a operação que implica
 A fase de fetch faz uma eficiente utilização de memória já que 
cada instrução é recuperada da memória em apenas um ciclo
 Cada uma das fases é realizada em 4 ciclos de relógio
 As instruções de salto demoram 8 ciclos de relógio, enquanto que 
as outras demoram apenas 4 ciclos de relógio
 O PIC utiliza a técnica de segmentação para executar as 
instruções, pelo que enquanto executa a fase de execução de 
uma instrução, executa a fase de busca da instrução seguinte. 
Desta forma consegue-se executar cada instrução em quatro 
ciclos de relógio. Por ex. o tempo que um PIC16F84 a 4Mhz 
demora a executar um programa com 100 linhas de código, das 
quais 30 são de salto = 4*(1/4.000.000)*70 + 
8*(1/4.000.000)*30 = 130 us
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
18
Execução de instruções
Relação entre o sinal de clock e o ciclo de instrução:
Exemplo de execução de uma instrução:
(Nota: PIC 16C73)
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
19
PIC16F84
 PIC16F84, fabricado com a tecnologia CMOS
 Capaz de trabalhar até 10 Mhz. PIC16F84A Capaz de trabalhar até 20 Mhz
 Pequeno, só tem 18 pernas
 Barato. O PIC16F84A custa 7,37€ + IVA
 Memória de programa de 1K palavras de 14 bits FLASH, em que em cada uma cabe 
uma instrução. Pode ser regravada cerca de 10.000 vezes com toda a segurança
 Memória de dados RAM de 68 Bytes
 Memória de dados EEPROM de 64 Bytes, não volátil
 8 níveis de stack (pilha)
 35 instruções de 14 bits
 Tempo de execução das instruções normais: 4xTosc
 Tempo de execução das instruções de salto: 8xTosc
 4 tipos de interrupções (External RB0/INT pin, TMR0 timer overflow, PORTB<7:4> 
interrupt-on-change, Data EEPROM write complete)
 13 linhas de entradas/saída digitais
 1 timer
 1 watch-dog
 Alimentação de 2V a 6 V
 Gravação de 12V a 14V
 Encapsulamento DIP de 18 pernas (SOIC)
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
20
Diagrama de blocos do PIC16F84A
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
21
CPU
 O PIC tem um processador tipo RISC com a 
arquitectura de Harvard
 O processador do PIC pode ser visto como sendo 
uma ALU, recebendo, processando e armazenando 
dados de e para os vários registos
 Tipos de aceder aos dados
 Endereçamento directo – Endereço de registo dentro 
do banco de registos de 128 bytes é especificado na 
instrução
 Endereçamento imediato – Se é para ser especificada 
uma constante a seguir à instrução
 Endereçamento indexado – Porque o endereço a ser 
acedido pode ser modificado aritmeticamente
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
22
CPU
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
23
CPU
 A ALU é responsável por todas as operações 
aritméticas e com bits, bem como o início dos 
pedidos de execução condicional
 Todas as operações aritméticas usam o registo w
 O resultado das operações pode ser armazenado 
no registo w ou no file register
 O Program Counter contém o endereço da 
instrução seguinte que irá ser executada. Se uma 
instrução tem um endereço directo os últimos 7 
bits são usados como os endereços
 O registo FSR armazena o endereço da memória, 
no endereçamento indirecto
 O registo INDF (que na realidade não existe) é o 
registo que é apontado pelo FSR
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
24
ALU
 A ALU (Arithmetic Logic Unit) é a 
componente mais complexa do 
PIC por conter todos os circuitos 
destinados a desenvolver as 
funções de cálculo e manipulação 
de dados durante a execução de um 
programa
 Executa as operações aritméticas, 
de bits e de deslocamento de um 
ou dois bytes
 A ALU pode ser vista como um 
conjunto de operações que são 
executadas em paralelo com um 
único multiplexer
 O registo STATUS armazena os 
resultados das operações
 As operações com bits são 
executadas executando ANDs 
para colocar a 0 ou ORs para 
colocar a 1
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
25
ALU
Operação Operação equivalente
Mover AND com 0x0FF
Adição 
Subtracção Adição com um Negativo
Negação XOR com 0x0FF (inversão bit a bit) e Incremento
Incremento Adição a 1
Decremento Subtracção por um/Adição com 0x0FF
AND 
OR 
XOR 
Complemento XOR com 0x0FF
Shift Left Adicionar o valor a si próprio com Carry
Shift Right 
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
26
Registo Status
 Flags:
Zero (Z) – Fica a 1 quando o resultado 
é 0
Carry (C) – Fica a 1 quando o resultado 
da operação é maior do que 255
Digit Carry (DC) – Fica a 1 quando o 
nibble menos significativo é maior do 
que 15 após uma operação aritmética 
(adição ou subtracção)
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
27
Organização da memória
 A memória de dados (register 
file) está dividida em dois grupos.
 Registos especiais (Special 
Function Registers) – Ocupam as 
11 primeiras posições, desde 00 
até 0B. São os registos que 
controlam o funcionamento do 
PIC
 Registos de utilização geral 
(General Purpose Registers) – 
Ocupam as posições seguintes, 
desde 08 até 4F
 Partes da memória está dividida 
em Bancos, incluindo registos 
especiais e registos de utilização 
geral. Para a utilização dos 
bancos é necessário configurar os 
bits RP0 e RP1 do registo STATUS
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
28
Endereçamento de Bancos
 Cada um dos 2 bancos 
tem 128 registos para 
acesso directo
 No Banco 0 pode-se 
aceder aos portos A e 
B (PORTA de 5 bits e 
PORTB de 8 bits)
 No Banco 1 podem-se 
configurar os portos 
(TRISA e TRISB)
File address BANCO 0 BANCO 1 File address
0 INDF INDF 80
1 TMR0 OPTION 81
2 PCL PCL 82
3 STATUS STATUS 83
4 FSR FSR 84
5 PORT A TRIS A 85
6 PORT B TRIS B 86
7 87
8 EEDATA EECON1 88
9 EEADR EECON2 89
0A PCLATH PCLATH 8A
0B INTCON INTCON 8B
0C 68 registos Mapeado 8C
. de utilização (acesso) .
. geral Banco 0 .
. (SRAM) .
4F CF
50 D0
. .
. .
. .
7F FF
Jan 20
03
PICmicro Microcontroladores - José Carlos Fonseca
29
Program Counter
 O Program Counter (PC) é um 
registo especial que serve 
para armazenar o endereço da 
próxima instrução a ser 
executada 
 Tem a dimensão de 13 bits. 
PCL, para os bits menos 
significativos e PCH (não 
acessível) para os mais 
significativos
 Os 8 bits menos significativos 
são escritos no registo PCL e 
os restantes no registo 
PCLATH
 Nas instruções de salto (GOTO 
e CALL) 11 bits são usados 
para armazenar o endereço 
(até 2048 instruções)
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
30
Stack
 O Stack é uma estrutura 
(Last In First Out) e serve 
para armazenar o valor do 
Program Counter quando é 
chamada uma subrotina de 
forma a saber o local de 
retorno da mesma
 O PIC16F84 possui 8 níveis 
de Stack, pelo que consegue 
armazenar no máximo 8 
chamadas sucessivas a 
subrotinas
 O Stack só armazena o 
Program Counter
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
31
Memória de programa
 Memória de programa
 ROM com máscara – A aplicação é 
gravada na ROM logo após o fabrico e 
antes de ser entregue ao cliente. A 
criação da máscara é muito 
dispendios, pelo que só compensa 
para grandes quantidades
 OTP (One-Time Programable) – A 
aplicação só pode ser gravada uma 
vez pelo utilizador
 EPROM – Pode gravar-se várias vezes, 
apagando com raios ultravioletas
 EEPROM – Pode gravar-se várias 
vezes, apagando electricamente
 FLASH – similares às EEPROM, mas 
mais rápidas e toleram mais ciclos de 
escrita
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
32
Memória de dados
 Memória de dados
RAM – memória de leitura e escrita 
muito rápida e volátil
 EEPROM – memória de leitura e escrita 
lenta, mas não volátil
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
33
Recursos auxiliares
 Recursos auxiliares
 Temporizadores
 Watch-dog
 Protecção de falha de alimentação (Brown out)
 Estado de repouso e baixo consumo (Sleep mode)
 Conversor A/D
 Conversor D/A
 Comparador analógico
 Modulador por largura de impulsos (PWM)
 Portas de entradas e saídas digitais
 Portas de comunicação
 Interrupções
 In-circuit serial programming
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
34
Recursos auxiliares - 
Temporizadores
 São usados para controlar períodos de tempo 
(temporizadores) e para ter em conta os 
acontecimentos exteriores (contadores)
 Para medirem o tempo é guardado num registo o 
valor adequado que irá ser incrementado ou 
decrementado ao ritmo dos impulsos de relógio 
até que haja carry ou chegue a 0 para ser 
produzido um aviso
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
35
O Timer
 O registo TMR0 é um 
contador, ou seja é um 
registo particular, no 
qual o seu conteúdo é 
incrementado com uma 
cadência regular e 
programada 
directamente pelo 
hardware do PIC. Na 
prática, a diferença de 
outro registro, é que o 
TMR0 não mantém 
inalterado o seu valor, 
incrementando-o 
continuamente
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
36
Recursos auxiliares – Watch-dog
 Permite fazer reset automático ao 
PIC quando este bloqueia
 Quando se pretende usar esta 
facilidade o programa tem de iniciar 
o Watch-dog antes deste provocar o 
reset
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
37
Recursos auxiliares – Brown-out
 É um circuito que coloca o PIC em 
reset quando a tensão de 
alimentação desce de um 
determinado nível
 Coloca novamente o PIC em 
funcionamento assim que a tensão 
de alimentação seja aceitável
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
38
Recursos auxiliares – Sleep mode
 Para poupar energia enquanto 
espera por algum acontecimento 
exterior o PIC pode ficar 
adormecido (usando a instrução 
SLEEP)
 Após o acontecimento o PIC acorda 
e continua a sua execução a partir 
do ponto em que tinha ficado
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
39
Recursos auxiliares – Conversores 
A/D e D/A
 Nos 
microcontroladores 
que têm estas 
possibilidades podem 
converter sinais 
analógicos em 
digitais e vice-versa
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
40
Recursos auxiliares – Comparador 
analógico
 Nos microcontroladores que têm 
esta possibilidade possuem um OP-
AMP (Amplificador Operacional) 
interno que permite comparar uma 
tensão externa com uma tensão de 
referência indicando se é superior 
ou inferior
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
41
Recursos auxiliares – PWM
 Nos microcontroladores que têm 
esta possibilidade permitem a saída 
de impulsos de largura variável que 
permitem, por exemplo controlar 
motores
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
42
Recursos auxiliares – Portas de I/O
 Todos os microcontroladores 
possuem alguns pinos como 
linhas de entrada e saída digitais 
de dados
 Normalmente estas linhas estão 
agrupadas de oito em oito 
formando portas
 Estas linhas digitais podem ser 
configuradas como sendo de 
entrada ou como sendo de saída 
colocando 1 ou 0 no bit 
correspondente ao registo 
destinado à sua configuração
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
43
Recursos auxiliares – Portas de I/O
 O PIC16F84 dispõe de um total de 13 linhas 
de I/O organizadas em dois portos 
denominadas de PORTO A e PORTO B. O 
PORTO A dispõe de 5 linhas configuráveis 
tanto em entrada como em saída identificadas 
pelas siglas RA0, RA1, RA2, RA3 e RA4. O 
PORTO B dispõe de 8 linhas também 
configuráveis seja em entrada ou em saída 
identificadas pelas siglas RB0, RB1, RB2, RB3, 
RB4, RB5, RB6 e RB7.
 Para o controle da linha de I/O do programa, o 
PIC dispõe de dois registros internos que 
controlam os portos e são chamados de TRISA 
e PORTA para a porta A e TRISB e PORTB 
para a porta B.
 Todos os bits contidos nos registros 
mencionados correspondem univocamente a 
uma linha de I/O. Por exemplo o bit 0 do 
registro PORTA e do registo TRIS A 
correspondem à linha RA0 , o bit 1 a linha 
RA1 e assim por diante.
 Se o bit 0 do registro TRISA for colocado em 
zero, a linha RA0 estará configurada como 
linha de saída, por isso o valor a que ira o bit 
0 do registro PORTA determinará o estado 
lógico de tal linha (0 = 0 volts, 1 = 5 volts). 
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
44
Recursos auxiliares – Portas de 
comunicação
 De forma a dotar os microcontroladores com a 
possibilidade de comunicarem com outros dispositivos 
externos, barramentos de microprocessadores, redes, 
etc. alguns modelos têm recursos que se permitem 
executar directamente esta tarefa:
 UART, adaptador de comunicação série assíncrona
 USART, adaptador de comunicação série síncrona e 
assíncrona
 Porta paralela escrava, para poder ligar aos barramentos 
de outros microprocessadores
 USB (Universal Serial Bus), que é o moderno barramento 
série dos PC
 I2C, que es un interface série de dois fios desenvolvido 
pela Philips
 CAN (Controller Area Network), para permitir a adaptação 
a redes CAN desenvolvidas pela Bosch e Intel para a 
cablagem de dispositivos em automóveis
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
45
Recursos auxiliares - Interrupções
 O PIC16F84 tem a possibilidade de contar com um 
sistema de interrupções. Este sistema consiste num 
mecanismo através do qual um acontecimento interno 
ou externo, assíncrono relativamente ao programa, 
pode interromper a sua execução produzindo 
automaticamenteum salto para arotina de atendimento 
à interrupção de maneira a poder atender de imediato 
o acontecimento e retomar de seguida a execução do 
programa interrompido.
 Existem 4 fontes de interrupções:
 External RB0/INT pin
 TMR0 timer overflow
 PORTB<7:4> interrupt-on-change
 Data EEPROM write complete
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
46
Recursos auxiliares - Interrupções
 O INTCON REGISTER (ADDRESS 0Bh, 8Bh) é o registo 
que contém os vários bits que inibem e desinibem as 
respectivas fontes de interrupção:
 bit 7 GIE: Global Interrupt Enable bit
 bit 6 EEIE: EE Write Complete Interrupt Enable bit
 bit 5 T0IE: TMR0 Overflow Interrupt Enable bit
 bit 4 INTE: RB0/INT External Interrupt Enable bit
 bit 3 RBIE: RB Port Change Interrupt Enable bit
 bit 2 T0IF: TMR0 Overflow Interrupt Flag bit
 bit 1 INTF: RB0/INT External Interrupt Flag bit
 bit 0 RBIF: RB Port Change Interrupt Flag bit
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
47
Recursos auxiliares - Interrupções
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
48
Recursos auxiliares - ICSP
 O PIC16F84 pode ser programado 
via comunicação série, mesmo após 
ter sido colocado no circuito final. 
Para tal bastam dois sinais para o 
relógio e para os dados e mais três 
sinais para a alimentação, a terra e 
a tensão de programação
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
49
Pinagem
Azul (linhas de I/O)
Vermelho e Preto (alimentação)
Verde (funcionamento do PIC)
PIC16F84 (PDIP, SOIC)
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
50
Pinagem
1 RA2
É uma linha de I/O programável em entrada ou saída da unidade. 
Corresponde ao BIT 2 da PORTA A.
2 RA3
É uma linha de I/O programável em entrada ou saída da unidade.
Corresponde ao BIT 3 da PORTA A.
3 RA4 / RTCC
É um pino multi função que pode ser programado como uma linha 
normal de I/O ou como linha de clock para entrada em sentido ao 
contador RTCC.
Se programada como linha de I/O corresponde ao BIT 4 da PORTA A 
ao contrário de outra linha de I/O, quando esta linha funciona como 
saída, trabalha em colector aberto.
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
51
Pinagem
4 MCLR / VPP
Em condição normal de funcionamento desenvolve a função de Master 
CLeaR ou seja Reset estará activo a nível 0. Pode ser conectado a um 
circuito de reset externo ou simplesmente conectando-o ao positivo da 
alimentação.
Quando o PIC for colocado em Program Mode será utilizado como 
entrada para a tensão de programação Vpp.
5 VSS
É o pino que vai conectado ao negativo da tensão de alimentação.
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
52
Pinagem
6 RB0
É uma linha de I/O programável em entrada ou em saída. 
Corresponde ao BIT 0 da PORTA B e pode ser programada para gerar 
interrupção.
7 RB1
É uma linha de I/O programável em entrada ou em saída. 
Corresponde ao BIT 1 da PORTA B.
8 RB2
É uma linha de I/O programável em entrada ou em saída. 
Corresponde ao BIT 2 da PORTA B.
9 RB3 É uma linha de I/O programável em entrada ou em saída. 
Corresponde ao BIT 3 da PORTA B.
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
53
Pinagem
10 RB4 É uma linha de I/O programável em entrada ou em saída. 
Corresponde ao BIT 4 da PORTA B e pode ser programada para gerar 
interrupção na alteração do valor.
11 RB5 É uma linha de I/O programável em entrada ou em saída. 
Corresponde ao BIT 5 da PORTA B e pode ser programada para gerar 
interrupção na alteração do valor.
12 RB6 É uma linha de I/O programável em entrada ou saída.
Corresponde ao BIT 6 da PORTA B e pode ser programada para gerar 
interrupção na alteração do valor. Clock da porta série.
13 RB7 É uma linha de I/O programável em entrada ou saída. 
Corresponde ao BIT 7 da PORTA B e pode ser programada para gerar 
interrupção na alteração do valor. Dados da porta série.
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
54
Pinagem
14 VDD
É o terminal positivo de alimentação do PIC.
em todas as três versões disponíveis do PIC16F84 (comercial, industrial 
e automotiva) a tensão pode assumir um valor que vai de um mínimo 
de 2.0 volts a um máximo de 6.0 volts.
15 OSC2 / CLKOUT
É um pino de ligação no caso de se utilizar um cristal de quartzo para 
gerar o clock. E como saída de clock caso for aplicado um oscilador RC 
externo.
16 OSC1 / CLKIN
É um pino de ligação para o caso de se utilizar um cristal de quartzo ou 
um circuito RC para gerar o clock. E também como entrada caso 
utilizemos um oscilador externo.
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
55
Pinagem
17 RA0
É uma linha de I/O programável em entrada ou saída.
Corresponde ao BIT 0 da PORTA A.
18 RA1
É uma linha de I/O programável em entrada ou saída.
Corresponde ao BIT 1 da PORTA A
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
56
Oscilador
Oscilador Frequência
RC (Resistor/Capacitor)
HS (High Speed Crystal/Resonator) 4 MHz – 20 MHz
XT (Crystal/Resonator) 200 KHz – 4 MHz
LP (Low Power Crystal) 0 – 200 KHz
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
57
Oscilador
Modo Freq. Osc1/C1 Osc2/C2
XT
455 kHz 47 - 100 pF 47 - 100 pF
2.0 MHz 15 - 33 pF 15 - 33 pF
4.0 MHz 15 - 33 pF 15 - 33 pF
HS
8.0 MHz 15 - 33 pF 15 - 33 pF
10.0 MHz 15 - 33 pF 15 - 33 pF
LP
32 kHz 68 - 100 pF 68 - 100 pF
200 kHz 15 - 33 pF 15 - 33 pF
XT
100 kHz 100 - 150 pF 100 - 150 pF
2 MHz 15 - 33 pF 15 - 33 pF
4 MHz 15 - 33 pF 15 - 33 pF
HS
4 MHz 15 - 33 pF 15 - 33 pF
20 MHz 15 - 33 pF 15 - 33 pF
RC 5 k  Rext  100 k  Cext > 20pF
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
58
Programação e utilização
 Na primeira figura está esquematizado o fluxograma de 
operações e arquivos que deverão ser realizados para 
programar um código assembler para um PIC
 Na segunda figura é apresentado um esquema de montagem 
para 4 LEDs pisca-pisca, usando um oscilador RC
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
59
Special Function Register File
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
60
STATUS – Registo de estado
bit 7-6 Unimplemented: Maintain as ‘0’
bit 5 RP0: Register Bank Select bits (used for direct addressing)
01 = Bank 1 (80h - FFh)
00 = Bank 0 (00h - 7Fh)
bit 4 TO: Time-out bit
1 = After power-up, CLRWDT instruction, or SLEEP instruction
0 = A WDT time-out occurred
bit 3 PD: Power-down bit
1 = After power-up or by the CLRWDT instruction
0 = By execution of the SLEEP instruction
bit 2 Z: Zero bit
1 = The result of an arithmetic or logic operation is zero
0 = The result of an arithmetic or logic operation is not zero
bit 1 DC: Digit carry/borrow bit (ADDWF, ADDLW,SUBLW,SUBWF instructions) (for borrow, the polarity is reversed)
1 = A carry-out from the 4th low order bit of the result occurred
0 = No carry-out from the 4th low order bit of the result
bit 0 C: Carry/borrow bit (ADDWF, ADDLW,SUBLW,SUBWF instructions) (for borrow, the polarity is
reversed)
1 = A carry-out from the Most Significant bit of the result occurred
0 = No carry-out from the Most Significant bit of the result occurred
Note: A subtraction is executed by adding the two’s complement of the second operand.
For rotate (RRF, RLF) instructions, this bit is loaded with either the high or low order bit of the source register.
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
61
OPTION - Registo de opções
bit 7 RBPU: PORTB Pull-up Enable bit
1 = PORTB pull-ups are disabled
0 = PORTB pull-ups are enabledby individual port latch values
bit 6 INTEDG: Interrupt Edge Select bit
1 = Interrupt on rising edge of RB0/INT pin
0 = Interrupt on falling edge of RB0/INT pin
bit 5 T0CS: TMR0 Clock Source Select bit
1 = Transition on RA4/T0CKI pin
0 = Internal instruction cycle clock (CLKOUT)
bit 4 T0SE: TMR0 Source Edge Select bit
1 = Increment on high-to-low transition on RA4/T0CKI pin
0 = Increment on low-to-high transition on RA4/T0CKI pin
bit 3 PSA: Prescaler Assignment bit
1 = Prescaler is assigned to the WDT
0 = Prescaler is assigned to the Timer0 module
bit 2-0 PS2:PS0: Prescaler Rate Select bits
Bit Value TMR0 Rate WDT Rate
000 001 010
011 100 101
110 111 1 : 2
1 : 4 1 : 8 1 : 16
1 : 32 1 : 64 1 : 128
1 : 256 1 : 1 1 : 2
1 : 4 1 : 8 1 : 16
1 : 32 1 : 64 1 : 128
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
62
INTCON - Registo de Interrupcões
bit 7 GIE: Global Interrupt Enable bit
1 = Enables all unmasked interrupts
0 = Disables all interrupts
bit 6 EEIE: EE Write Complete Interrupt Enable bit
1 = Enables the EE Write Complete interrupts
0 = Disables the EE Write Complete interrupt
bit 5 T0IE: TMR0 Overflow Interrupt Enable bit
1 = Enables the TMR0 interrupt
0 = Disables the TMR0 interrupt
bit 4 INTE: RB0/INT External Interrupt Enable bit
1 = Enables the RB0/INT external interrupt
0 = Disables the RB0/INT external interrupt
bit 3 RBIE: RB Port Change Interrupt Enable bit
1 = Enables the RB port change interrupt
0 = Disables the RB port change interrupt
bit 2 T0IF: TMR0 Overflow Interrupt Flag bit
1 = TMR0 register has overflowed (must be cleared in software)
0 = TMR0 register did not overflow
bit 1 INTF: RB0/INT External Interrupt Flag bit
1 = The RB0/INT external interrupt occurred (must be cleared in software)
0 = The RB0/INT external interrupt did not occur
bit 0 RBIF: RB Port Change Interrupt Flag bit
1 = At least one of the RB7:RB4 pins changed state (must be cleared in software)
0 = None of the RB7:RB4 pins have changed state
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
63
EECON1 – Registo da EEPROM
bit 7-5 Unimplemented: Read as '0'
bit 4 EEIF: EEPROM Write Operation Interrupt Flag bit
1 = The write operation completed (must be cleared in software)
0 = The write operation is not complete or has not been started
bit 3 WRERR: EEPROM Error Flag bit
1 = A write operation is prematurely terminated (any MCLR Reset or any WDT Reset during normal operation)
0 = The write operation completed
bit 2 WREN: EEPROM Write Enable bit
1 = Allows write cycles
0 = Inhibits write to the EEPROM
bit 1 WR: Write Control bit
1 = Initiates a write cycle. The bit is cleared by hardware once write is complete. The WR bit can only be set 
(not cleared) in software.
0 = Write cycle to the EEPROM is complete
bit 0 RD: Read Control bit
1 = Initiates an EEPROM read RD is cleared in hardware. The RD bit can only be set (not
cleared) in software.
0 = Does not initiate an EEPROM read
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
64
Palavra de configuração do PIC
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
65
Instruções
Sintaxe Descrição Microchip Operação equivalente
ADDLW k Add Literal and W W = W + k
ADDWF f,d Add W and f d = W + f (onde d pode ser W ou f)
ANDLW k AND Literal with W W = W AND k
ANDWF f,d AND W with f d = W AND f (onde d pode ser W ou f)
BCF f,b Bit Clear f f(b) = 0
BSF f,b Bit Set f f(b) = 1
BTFSC f,b Bit Test f, Skip if Clear f(b) = 0 ? Se é, salta uma instrução
BTFSS f,b Bit Test f, skip if Set f(b) = 1 ? Se é, salta uma instrução
CALL k Subroutine Call Chamada a uma subrotina no endereço k
CLRF f Clear f f = 0
CLRW Clear W Register W = 0
CLRWDT Clear Watchdog Timer Watchdog timer = 0
COMF f,d Complement f d = not f (onde d pode ser W ou f)
DECF f,d Decrement f d = f -1 (onde d pode ser W ou f)
DECFSZ f,d Decrement f, Skip if 0 d = f -1 (onde d pode ser W ou f) se d = 0 salta
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
66
Instruções
Sintaxe Descrição Microchip Operação equivalente
GOTO k Go to address salta para o endereço k
INCF f,d Increment f d = f +1 (onde d pode ser W ou f)
INCFSZ f,d Increment f, Skip if 0 d = f +1 (onde d pode ser W ou f) se d = 0 salta
IORLW k Inclusive OR Literal with W W = W OR k
IORWF f,d Inclusive OR W with f d = f OR W (onde d pode ser W ou f)
MOVLW k Move literal to W W = k
MOVF f,d Move f d = f (onde d pode ser W ou f)
MOVWF f Move W to f f = W
NOP No Operation Nenhuma operação
OPTION Load Option Register OPTION = W
RETFIE Return from Interrupt Retorna de uma interrupt handler
RETLW k Return Literal to W Retorna de uma subrotina com W = k
RETURN Return from Subroutine Retorna de uma subrotina
RLF f,d Rotale Left f through Carry d = f << 1 (onde d pode ser W ou f)
RRF f,d Rotale Right f through Carry d = f >> 1 (onde d pode ser W o f)
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
67
Instruções
Sintaxe Descrição Microchip Operação equivalente
SLEEP Go into Standby Mode Coloca o PIC em standby 
SUBLW k Subtract W from Literal W = k - W
SUBWF f,d Subtract W from f d = f - W (onde d pode ser W ou f)
SWAPF f Swap f f = Swap do bit 0123 com 4567 de f
TRIS f Load TRIS Register TRIS di f = W
XORLW k Exclusive OR Literal with W W = W XOR k
XORWF f,d Exclusive OR W with f d = f XOR W (onde d pode ser W ou f)
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
68
Instruções - ADDLW
ADDLW Soma um literal a W
Sintaxe: [label] ADDLW k
Operandos: 0 k 255
Operação: : (W) + (k)==> (W)
Flags afectadas: C, DC, Z
Código OP: 11 111x kkkk kkkk
Descrição: Soma o conteúdo do registo W e k, guardando o resultado 
em W.
Exemplo: ADDLW 0xC2
 Antes: W = 0x17
 Depois: W = 0xD9
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
69
Instruções - ADDWF
ADDWF W + F
Sintaxe: [label] ADDWF f,d
Operandos: d [0,1], 0 f 127
Operação: (W) + (f) ==> (dest)
Flags afectadas: C, DC, Z
Código OP: 00 0111 dfff ffff
Descrição: Soma o conteúdo do registo W com o registo f. Se d é 0, 
o resultado armazena-se em W, Se d é 1 armazena-se em f.
Exemplo: ADDWF REG,0
 Antes: W = 0x17, REG = 0xC2
 Depois: W = 0xD9, REG = 0xC2
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
70
Instruções - ANDLW
ANDLW W AND literal
Sintaxe: [label] ANDLW k
Operandos: 0 k 255
Operação: : (W) AND (k)==> (W)
Flags afectadas: Z
Código OP: 11 1001 kkkk kkkk
Descrição: Realiza a operação lógica AND entre o conteúdo do 
registo W e k, guardando o resultado em W.
Exemplo: ADDLW 0xC2
 Antes: W = 0x17
 Depois: W = 0xD9
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
71
Instruções - BCF
BCF Apaga um bit
Sintaxe: [label] BCF f,b
Operandos: 0 f 127, 0 b 7
Operação: : 0 ==> (f<b>)
Flags afectadas: nenhum
Código OP: 01 00bb bfff ffff
Descrição: Apaga o bit b do registo f
Exemplo: : BCF REG,7
 Antes: REG = 0xC7
 Depois: REG = 0x47
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
72
Instruções - BSF
BSF Activa um bit
Sintaxe: [label] BSF f,b
Operandos: 0 f 127, , 0 b 7
Operação: 1 ==> (f<b>)
Flags afectadas: nenhum
Código OP: 01 01bb bfff ffff
Descrição: Activa o bit b do registo f
Exemplo: BSF REG,7
 Antes: REG = 0x0A
 Depois: REG = 0x8A
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
73
Instruções - BTFSC
BTFSC Testa o bit e salta se for 0
Sintaxe: [label] BTFSC f,d
Operandos: d [0,1], 0 f 127Operação: Salto Se (f<b>) = 0
Flags afectadas: nenhum
Código OP: 01 10bb bfff ffff
Descrição: Se o bit b do registo f é 0, salta uma instrução e 
continua com a execução. Em caso de salto, ocupará dois ciclos 
de relógio.
Exemplo: BTFSC REG,6
 GOTO NO_ES_0
 SI_ES_0 instrução
 NO_ES_0 instrução
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
74
Instruções - BTFSS
BTFSS Testa o bit e salta se for 1
Sintaxe: [label] BTFSS f,d
Operandos: d [0,1], 0 f 127
Operação: Salto Se (f<b>) = 1
Flags afectadas: nenhum
Código OP: 01 11bb bfff ffff
Descrição: Se o bit b do registo f é 1, salta uma instrução e 
continua com a execução. Em caso de salto, ocupará dois ciclos 
de relógio.
Exemplo: BTFSS REG,6
 GOTO NO_ES_0
 SI_ES_0 instrução
 NO_ES_0 instrução
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
75
Instruções - CALL
CALL Salta para subrotina
Sintaxe: [label] CALL k
Operandos: 0 k 2047
Operação: PC ==> pilha; k ==> PC
Flags afectadas: nenhum
Código OP: 10 0kkk kkkk kkkk
Descrição: Salta para uma subrotina. A parte baixa de k é 
carregada em PCL, e a alta em PCLATCH. Ocupa 2 ciclos de 
relógio.
Exemplo: ORIGEM CALL DESTINO
 Antes: PC = ORIGEM
 Depois: PC = DESTINO
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
76
Instruções - CLRF
CLRF Apaga um registo 
Sintaxe: [label] CLRF f
Operandos: 0 f 127
Operação: : 0x00 ==> (f), 1 ==> Z
Flags afectadas: Z
Código OP: 00 0001 1fff ffff
Descrição: O registo f é carregado com 0x00. A flag Z é activada.
Exemplo: : CLRF REG
 Antes: REG = 0x5A
 Depois: REG = 0x00, Z = 1
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
77
Instruções - CLRW
CLRW Apaga o registo W
Sintaxe: [label] CLRW
Operandos: nenhum
Operação: : 0x00 ==> W, 1 ==> Z
Flags afectadas: Z
Código OP: 00 0001 0xxx xxxx
Descrição: O registo de trabalho W é carregado com 0x00. A flag Z 
é activada.
Exemplo: : CLRW
 Antes: W = 0x5A
 Depois: W = 0x00, Z = 1
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
78
Instruções - CLRWDT
CLRWDT Apaga o WDT
Sintaxe: [label] CLRWDT
Operandos: nenhum
Operação: 0x00 ==> WDT, 1 ==> /TO
 1 ==> /PD
Flags afectadas: /TO, /PD
Código OP: 00 0000 0110 0100
Descrição: Esta instrução apaga tanto o WDT como o seu preescaler. 
Os bits /TO e /PD do registo de estado são colocados a 1.
Exemplo: : CLRWDT
 Depois: Contador WDT = 0, 
 Preescales WDT = 0, 
 /TO = 1, /PD = 1
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
79
Instruções - COMF
COMF Complemento de f 
Sintaxe: [label] COMF f,d
Operandos: d [0,1], 0 f 127
Operação: : (/ f), 1 ==> (dest)
Flags afectadas: Z
Código OP: 00 1001 dfff ffff
Descrição: O registo f é complementado. A flag Z é activada se o 
resultado é 0. Se d é 0 o resultado é armazenado em W. Se d é 1 
é armazenado em f.
Exemplo: : COMF REG,0
 Antes: REG = 0x13
 Depois: REG = 0x13, W = 0XEC
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
80
Instruções - DECF
DECF Decremento de f
Sintaxe: [label] DECF f,d
Operandos: d [0,1], 0 f 127
Operação: : (f ) - 1 ==> (dest)
Flags afectadas: Z
Código OP: 00 0011 dfff ffff
Descrição: Decrementa conteúdo de f. Se d é 0, o resultado é 
armazenado em W, Se d é 1 é armazenado em f.
Exemplo: : DECF CONT,1
 Antes: CONT = 0x01, Z = 0
 Depois: CONT = 0x00, Z = 1
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
81
Instruções - DECFSZ
DECFSZ Decremento e salta se 0
Sintaxe: [label] DECFSZ f,d
Operandos: d [0,1], 0 f 127
Operação: (f) -1 ==> d; Salto Se R=0
Flags afectadas: nenhum
Código OP: 00 1011 dfff ffff
Descrição: Decrementa o conteúdo do registo f. Se d é 0, o 
resultado é armazenado em W. Se d é 1 é armazenado em f. Se o 
resultado é 0 salta uma instrução e ocuparia 2 ciclos.
Exemplo: DECFSZ REG,0
 GOTO NO_ES_0
 SI_ES_0 instrução
 NO_ES_0 Salta instrução anterior
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
82
Instruções - GOTO
GOTO Salto incondicional
Sintaxe: [label] GOTO k
Operandos: 0 k 2047
Operação: k ==> PC <8:0>
Flags afectadas: nenhum
Código OP: 10 1kkk kkkk kkkk
Descrição: Trata-se de um salto incondicional. A parte baixa de k 
é carregada em PCL, e a alta em PCLATCH. Ocupa 2 ciclos de 
relógio.
Exemplo: ORIGEM GOTO DESTINO
 Antes: PC = ORIGEM
 Depois: PC = DESTINO
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
83
Instruções - INCF
INCF Incremento de f
Sintaxe: [label] INCF f,d
Operandos: d [0,1], 0 f 127
Operação: : (f ) + 1 ==> (dest)
Flags afectadas: Z
Código OP: 00 1010 dfff ffff
Descrição: Incrementa o conteúdo de f. Se d é 0, o resultado é 
armazenado em W. Se d é 1 é armazenado em f.
Exemplo: : INCF CONT,1
 Antes: CONT = 0xFF, Z = 0
 Depois: CONT = 0x00, Z = 1
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
84
Instruções - INCFSZ
INCFSZ Incremento e salta se 0
Sintaxe: [label] INCFSZ f,d
Operandos: d [0,1], 0 f 127
Operação: (f) -1 ==> d; Salto Se R=0
Flags afectadas: nenhum
Código OP: 00 1111 dfff ffff
Descrição: Incrementa o conteúdo do registo f. Se d é 0, o 
resultado é armazenado em W. Se d é 1 é armazenado em f. Se o 
resultado é 0 salta a instrução seguinte, em cujo caso 
demoraria 2 ciclos.
Exemplo: INCFSC REG,0
 GOTO NO_ES_0
 SI_ES_0 instrução
 NO_ES_0 Salta instrução anterior
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
85
Instruções - IORLW
IORLW W OR literal
Sintaxe: [label] IORLW k
Operandos: 0 k 255
Operação: : (W) OR (k)==> (W)
Flags afectadas: Z
Código OP: 11 1000 kkkk kkkk
Descrição: Realiza a operação lógica OR entre o conteúdo do 
registo W e k, guardando o resultado em W.
Exemplo: IORLW 0x35
 Antes: W = 0x9A
 Depois: W = 0xBF
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
86
Instruções - IORLWF
IORWF W OR F
Sintaxe: [label] IORWF f,d
Operandos: d [0,1], 0 f 127
Operação: (W) OR (f) ==> (dest)
Flags afectadas: Z
Código OP: 00 0100 dfff ffff
Descrição: Realiza a operação lógica OR entre os registos W e f. 
Se d é 0, o resultado é armazenado em W. Se d é 1 é armazenado 
em f.
Exemplo: : IORWF REG,0
 Antes: W = 0x91, REG = 0x13
 Depois: W = 0x93, REG = 0x13
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
87
Instruções - MOVLW
MOVLW Carregar literal em W
Sintaxe: [label] MOVLW f
Operandos: 0 f 255
Operação: (k) ==> (W)
Flags afectadas: nenhum
Código OP: 11 00xx kkkk kkkk
Descrição: O literal k passa ao registo W.
 
Exemplo: MOVLW 0x5A
 Depois: REG = 0x4F, W = 0x5A
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
88
Instruções - MOVF
MOVF Mover f para W
Sintaxe: [label] MOVF f,d
Operandos: d [0,1], 0 f 127
Operação: (f) ==> (dest)
Flags afectadas: Z
Código OP: 00 1000 dfff ffff
Descrição: O conteúdo do registo f é movido para o destino 
dependendo de d. Se d é 0, o resultado é armazenado em W. Se dé 1 é armazenado em f. Quando d é 1 permite verificar o 
registo, já que afecta a Z.
Exemplo: MOVF REG,0
Depois: W = REG
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
89
Instruções - MOVWF
MOVWF Mover W para f
Sintaxe: [label] MOVWF f
Operandos: 0 f 127
Operação: W ==> (f)
Flags afectadas: nenhum
Código OP: 00 0000 1fff ffff
Descrição: O conteúdo do registo W passa para o registo f.
 
Exemplo: MOVWF REG,0
 Antes: REG = 0xFF, W = 0x4F
 Depois: REG = 0x4F, W = 0x4F
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
90
Instruções - NOP
NOP Não operação
Sintaxe: [label] NOP
Operandos: nenhum
Operação: No operar
Flags afectadas: nenhum
Código OP: 00 0000 0xx0 0000
Descrição: Não realiza nenhuma operação. Na realidade consome um 
ciclo de instrução sem fazer nada.
Exemplo: NOP
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
91
Instruções - RETFIE
RETFIE regresso de interrupção 
Sintaxe: [label] RETFIE 
Operandos: nenhum
Operação: : 1 ==> GIE; TOS==>PC
Flags afectadas: nenhum
Código OP: 00 0000 0000 1001
Descrição: o PC é carregado com o conteúdo de cima da pilha (TOS): 
direcção de regresso. Consome 2 ciclos. As interrupções voltam 
a ser habilitadas.
Exemplo: : RETFIE
 Depois: PC = direcção de regresso
 GIE = 1
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
92
Instruções - RETLW
RETLW regresso de uma subrotina, com o valor em W
Sintaxe: [label] RETLW k
Operandos: 0 k 255
Operação: : (k)==> (W); TOS==>PC
Flags afectadas: nenhum
Código OP: 11 01xx kkkk kkkk
Descrição: O registo W é carregado com a constante k. O PC é 
carregado com o conteúdo de cima da pilha (TOS): direcção de 
regresso. Consome 2 ciclos.
Exemplo: : RETLW 0x37
 Depois: PC = direcção de regresso
 W = 0x37
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
93
Instruções - RETURN
RETURN regresso de rotina 
Sintaxe: [label] RETURN 
Operandos: nenhum
Operação: : TOS ==> PC
Flags afectadas: nenhum
Código OP: 00 0000 0000 1000
Descrição: O PC é carregado com o conteúdo de cima da pilha (TOS): 
direcção de regresso. Consome 2 ciclos. 
Exemplo: : RETURN
 Depois: PC = direcção de regresso
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
94
Instruções - RLF
RLF roda f para a esquerda
Sintaxe: [label] RLF f,d
Operandos: d [0,1], 0 f 127
Operação: Rotação a a esquerda
Flags afectadas: C
Código OP: 00 1101 dfff ffff
Descrição: O conteúdo de f é rodado para a esquerda. O bit de 
menor peso de f passa para o carry (C), e o carry é colocado no 
de maior peso. Se d é 0, o resultado é armazenado em W. Se d é 
1 é armazenado em f.
Exemplo: RLF REG,0
 Antes: REG = 1110 0110, C = 0
 Depois: REG = 1110 0110,
 W = 1100 1100, C = 1
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
95
Instruções - RRF
RRF roda f para a direita
Sintaxe: [label] RRF f,d
Operandos: d [0,1], 0 f 127
Operação: Rotação a a direita
Flags afectadas: C
Código OP: 00 1100 dfff ffff
Descrição: O conteúdo de f é rodado para a direita. O bit de menos 
peso de f passa para o carry (C), e o carry é colocado no de 
maior peso. Se d é 0, o resultado é armazenado em W. Se d é 1 é 
armazenado em f.
Exemplo: RRF REG,0
 Antes: REG = 1110 0110, C = 1
 Depois: REG = 1110 0110,
 W = 1111 0011, C = 0
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
96
Instruções - SLEEP
SLEEP Modo baixo consumo
Sintaxe: [label] SLEEP
Operandos: nenhum
Operação: 0x00==>WDT, 1 ==> / TO
 0 ==> WDT Preescaler, 0 ==> / PD
Flags afectadas: / PD, / TO
Código OP: 00 0000 0110 0011
Descrição: O bit de energia é colocado a 0, e a 1 o de descanso. O 
WDT e o seu preescaler são apagados. o micro pára o oscilador, 
ficando adormecido.
Exemplo: : SLEEP
 Preescales WDT = 0, 
 /TO = 1, /PD = 1
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
97
Instruções - SUBLW
SUBLW Subtrai W ao literal
Sintaxe: [label] SUBLW k
Operandos: 0 k 255
Operação: ( k ) - (W) ==> (W)
Flags afectadas: Z, C, DC
Código OP: 11 110x kkkk kkkk
Descrição: Mediante o método do complemento para dois o conteúdo 
de W é subtraído ao literal. O resultado é armazenado em W.
Exemplos: SUBLW 0x02 
Antes:W=1,C=?. Depois: W=1, C=1
Antes:W=2,C=?. Depois: W=0, C=1
Antes:W=3,C=?.Depois:W=FF,C=0
 (o resultado é negativo)
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
98
Instruções - SUBLWF
SUBWF Subtrai W ao f
Sintaxe: [label] SUBWF f,d
Operandos: d [0,1], 0 f 127
Operação: ( f ) - (W )==> (dest)
Flags afectadas: C, DC, Z
Código OP: 00 0010 dfff ffff
Descrição: Mediante o método do complemento para dois o conteúdo 
de W é subtraído ao de f. Se d é 0, o resultado é armazenado em 
W. Se d é 1 é armazenado em f.
Exemplos: SUBWF REG,1
Antes: REG = 0x03, W = 0x02, C = ?
Depois:REG=0x01, W = 0x4F, C=1
Antes: REG = 0x02, W = 0x02, C = ?
Depois:REG=0x00, W =0x02, C= 1
Antes: REG= 0x01, W= 0x02, C= ?
Depois:REG=0xFF, W=0x02, C= 0
 (Resultado negativo)
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
99
Instruções - SWAPF
SWAPF Troca de f
Sintaxe: [label] SWAPF f,d
Operandos: d [0,1], 0 f 127
Operação: : (f <3: 0>) (f <7:4>)
Flags afectadas: nenhum
Código OP: 00 1110 dfff ffff
Descrição: Os 4 bits de maior peso e os 4 de menor são trocados. 
Se d é 0, o resultado é armazenado em W. Se d é 1 é armazenado 
em f.
Exemplo: SWAPF REG,0
 Antes: REG = 0xA5
 Depois: REG = 0xA5, W = 0x5A
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
100
Instruções - XORLW
XORLW W XOR literal
Sintaxe: [label] XORLW k
Operandos: 0 k 255
Operação: : (W) XOR (k)==> (W)
Flags afectadas: Z
Código OP: 11 1010 kkkk kkkk
Descrição: Realiza a operação lógica XOR entre o conteúdo do 
registo W e k, guardando o resultado em W.
Exemplo: : XORLW 0xAF
 Antes: W = 0xB5
 Depois: W = 0x1A
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
101
Instruções - XORLW
XORWF W XOR F
Sintaxe: [label] XORWF f,d
Operandos: d [0,1], 0 f 127
Operação: (W) XOR (f) ==> (dest)
Flags afectadas: Z
Código OP: 00 0110 dfff ffff
Descrição: Realiza a operação lógica XOR entre os registos W e f. 
Se d é 0, o resultado é armazenado em W. Se d é 1 é armazenado 
em f.
Exemplo: : XORWF REG,0
 Antes: W = 0xB5, REG = 0xAF
 Depois: W = 0xB5, REG = 0x1A
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
102
Programa – Walk.asm
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
103
Programa – Walk.asm
; WALK.ASM 
;
; To use this program connect four LEDs from each of RB0-RB7 to ground 
; via four 470 ohm resistors. The LEDs are illuminated one at time in 
; a to-and-fro pattern.
; The illumination rate is more or less independent of the PIC clock
; frequency and configuration although this program assumes an RC
; oscillator. The program includes the __CONFIG, __IDLOCS and DE
; directives (mostly just to show how they can be used). The program 
; can beused unchanged on any 16X8X device.
 LIST P=16F84
 ERRORLEVEL -302 ;SUPPRESS BANK SELECTION MESSAGES
 __CONFIG 3FF5H ;XT OSC, WATCHDOG
 __IDLOCS 1234
; 
PORTB EQU 6 
TRISB EQU 86H
OPTREG EQU 81H
STATUS EQU 3
CARRY EQU 0
RP0 EQU 5
MSB EQU 3 ;BIT POSITION OF LEFTMOST LED
;
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
104
Programa – Walk.asm
 CLRF PORTB ;ALL LEDS OFF
 BSF STATUS,RP0 ;SELECT REGISTER BANK 1 
 CLRF TRISB ;SET PORTB TO ALL OUTPUTS
 MOVLW 0AH
 MOVWF OPTREG ;ASSIGN PRESCALER (1:4) TO WDT
 BCF STATUS,RP0 ;SELECT REGISTER BANK 0
 INCF PORTB,F ;TURN ON RIGHTMOST LED
 BCF STATUS,CARRY ;CLEAR CARRY
LEFT SLEEP ;WAIT FOR WDT TIMEOUT
 RLF PORTB,F ;TURN ON LED TO LEFT
 BTFSS PORTB,MSB ;REACHED LEFTMOST?
 GOTO LEFT ;LOOP IF NOT
RIGHT SLEEP ;WAIT FOR WDT TIMEOUT
 RRF PORTB,F ;TURN ON LED TO RIGHT
 BTFSS PORTB,0 ;REACHED RIGHTMOST?
 GOTO RIGHT ;LOOP IF NOT
 GOTO LEFT ;START NEW CYCLE
;
 ORG 2100H
;
 DE "Copyright (C) 1996 David Tait"
 END
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
105
Porta Série
 As portas série usam basicamente o mesmo 
hardware que usaram inicialmente na altura do 
primeiro PC em 1981, tendo sofrido apenas uma 
actualização significativa quando foi introduzido o 
PS/2
 São a melhor forma que um PIC tem de 
comunicar com um PC
 O uso da ficha de 9 pinos foi desenvolvida porque 
a porta série era colocada no mesmo adaptador 
que a porta paralela e não havia espaço para duas 
fichas de 25 pinos
 Podem ser endereçadas até 4 portas série num 
PC, só duas é que serão usadas para ligar a 
dispositivos externos ao PC
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
106
Porta Série - Pinout
Nome do 
pino
25 pinos 9 pinos Direcção 
I/O
TxD 2 3
RxD 3 2
Gnd 7 5
RTS 4 7 O
CTS 5 8 I
DTR 20 4 O
DSR 6 6 I
RI 22 9 I
DCD 8 1 I
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
107
Porta Série
 A porta série usa o integrado 8250, ou as 
actualizações do PS/2, 16450 ou 16550. 
Estes últimos integrados possuem buffers 
(memórias FIFO), que não são muito 
usados e só são necessários para 
velocidades de transmissão elevadas (a 
partir de 57.600 bps)
 Estes integrados são UART (Universal 
Asynchronous Receiver/Transmitter)
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
108
Porta Série – Offset das portas
Offset do endereço base Nome do registo
0 Transmitter Holding 
Register/Receiver Character 
Buffer/LSB Divisor Latch
1 Interrupt Enable Register/MSB 
Divisor Latch
2 Interrupt Identification Register
3 Line Control Register
4 Modem Control Register
5 Line Status Register
6 Modem Status Register
7 Scratchpad Register
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
109
Porta Série
 Velocidade=1,8432 
Mhz/(16*Divisor )
Velocidade Divisor
110 bps 0x0417
300 bps 0x0180
600 bps 0x00C0
1200 bps 0x0060
2400 bps 0x0030
9600 bps 0x000C
19200 bps 0x0006
115200 bps 0x0001
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
110
Circuitos
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
111
Circuitos
Jan 20
03
PICmicro Microcontroladores - José Carlos F
onseca
112
Bibliografia
 Programming and customizing PICmicro 
microcontrollers, second edition, Myke 
Predko, McGraw Hill, 2001
 Monte o seu Microbot
 http://www.tanzilli.com/pbe/brasiliano/, 
07/01/2003
 http://www.microchip.com
	PICmicro Microcontrolador
	Resumo
	Introdução
	Slide 4
	Processador vs Microcontrolador
	Slide 6
	CISC vs RISC
	Arquitectura de Princeton (Von Neumann)
	Slide 9
	Arquitectura de Harvard
	Princeton Vs Harvard
	Micro-coded vs Hard-coded
	Fabricantes de microcontroladores
	Características das famílias de PICS
	Gama de Microcontroladores
	Quanto à memória do Programa
	Execução de instruções
	Slide 18
	PIC16F84
	Diagrama de blocos do PIC16F84A
	CPU
	Slide 22
	Slide 23
	ALU
	Slide 25
	Registo Status
	Organização da memória
	Endereçamento de Bancos
	Program Counter
	Stack
	Memória de programa
	Memória de dados
	Recursos auxiliares
	Recursos auxiliares - Temporizadores
	O Timer
	Recursos auxiliares – Watch-dog
	Recursos auxiliares – Brown-out
	Recursos auxiliares – Sleep mode
	Recursos auxiliares – Conversores A/D e D/A
	Recursos auxiliares – Comparador analógico
	Recursos auxiliares – PWM
	Recursos auxiliares – Portas de I/O
	Slide 43
	Recursos auxiliares – Portas de comunicação
	Recursos auxiliares - Interrupções
	Slide 46
	Slide 47
	Recursos auxiliares - ICSP
	Pinagem
	Slide 50
	Slide 51
	Slide 52
	Slide 53
	Slide 54
	Slide 55
	Oscilador
	Slide 57
	Programação e utilização
	Special Function Register File
	STATUS – Registo de estado
	OPTION - Registo de opções
	INTCON - Registo de Interrupcões
	EECON1 – Registo da EEPROM
	Palavra de configuração do PIC
	Instruções
	Slide 66
	Slide 67
	Instruções - ADDLW
	Instruções - ADDWF
	Instruções - ANDLW
	Instruções - BCF
	Instruções - BSF
	Instruções - BTFSC
	Instruções - BTFSS
	Instruções - CALL
	Instruções - CLRF
	Instruções - CLRW
	Instruções - CLRWDT
	Instruções - COMF
	Instruções - DECF
	Instruções - DECFSZ
	Instruções - GOTO
	Instruções - INCF
	Instruções - INCFSZ
	Instruções - IORLW
	Instruções - IORLWF
	Instruções - MOVLW
	Instruções - MOVF
	Instruções - MOVWF
	Instruções - NOP
	Instruções - RETFIE
	Instruções - RETLW
	Instruções - RETURN
	Instruções - RLF
	Instruções - RRF
	Instruções - SLEEP
	Instruções - SUBLW
	Instruções - SUBLWF
	Instruções - SWAPF
	Instruções - XORLW
	Slide 101
	Programa – Walk.asm
	Slide 103
	Slide 104
	Porta Série
	Porta Série - Pinout
	Slide 107
	Porta Série – Offset das portas
	Slide 109
	Circuitos
	Slide 111
	Bibliografia

Continue navegando