PICmicro Microcontrolador
Sistemas Digitais II
(Documento em versão Draft ainda em elaboração)
José Carlos Fonseca
14 de Janeiro de 2003
Resumo




Introdução
Vários tipos de arquitectura
Os microcontroladores PIC
PIC16F84












Jan 2003
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
PICmicro Microcontroladores - José Carlos Fonseca
2
Introdução

Estrutura de um computador



Jan 2003
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.)
PICmicro Microcontroladores - José Carlos Fonseca
3
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
4
Processador vs Microcontrolador


Jan 2003
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
PICmicro Microcontroladores - José Carlos Fonseca
5
Processador vs Microcontrolador



Jan 2003
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
PICmicro Microcontroladores - José Carlos Fonseca
6
CISC vs RISC





Jan 2003
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
PICmicro Microcontroladores - José Carlos Fonseca
7
Arquitectura de Princeton (Von
Neumann)


Jan 2003
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
PICmicro Microcontroladores - José Carlos Fonseca
8
Arquitectura de Princeton (Von
Neumann)


Jan 2003
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
PICmicro Microcontroladores - José Carlos Fonseca
9
Arquitectura de Harvard

Jan 2003
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
PICmicro Microcontroladores - José Carlos Fonseca
10
Princeton Vs Harvard
Jan 2003
PICmicro Microcontroladores - José Carlos Fonseca
11
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:



Jan 2003
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 hardcoded, pois as instruções são executadas em
maior número de ciclos de relógio
PICmicro Microcontroladores - José Carlos Fonseca
12
Fabricantes de microcontroladores
Fabricantes



Jan 2003
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
PICmicro Microcontroladores - José Carlos Fonseca
13
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ções
PIC16C5X
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
14
Gama de Microcontroladores



Jan 2003
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 LowEnd; 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
PICmicro Microcontroladores - José Carlos Fonseca
15
Quanto à memória do Programa



Jan 2003
PIC 16 Cxxx - Memória EPROM
PIC 16 CRxxx - Memória ROM
PIC 16 Fxxx - Memória FLASH
PICmicro Microcontroladores - José Carlos Fonseca
16
Execução de instruções

Pipeline de instruções em dois estágios:






Jan 2003
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
PICmicro Microcontroladores - José Carlos Fonseca
17
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
18
PIC16F84

PIC16F84, fabricado com a tecnologia CMOS

















Jan 2003
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)
PICmicro Microcontroladores - José Carlos Fonseca
19
Diagrama de blocos do PIC16F84A
Jan 2003
PICmicro Microcontroladores - José Carlos Fonseca
20
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



Jan 2003
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
PICmicro Microcontroladores - José Carlos Fonseca
21
CPU
Jan 2003
PICmicro Microcontroladores - José Carlos Fonseca
22
CPU






Jan 2003
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
PICmicro Microcontroladores - José Carlos Fonseca
23
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




Jan 2003
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
PICmicro Microcontroladores - José Carlos Fonseca
24
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
25
Registo Status

Flags:



Jan 2003
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)
PICmicro Microcontroladores - José Carlos Fonseca
26
Organização da memória

A memória de dados (register
file) está dividida em dois grupos.



Jan 2003
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
PICmicro Microcontroladores - José Carlos Fonseca
27
Endereçamento de Bancos



Jan 2003
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
PICmicro Microcontroladores - José Carlos Fonseca
28
Program Counter




Jan 2003
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)
PICmicro Microcontroladores - José Carlos Fonseca
29
Stack



Jan 2003
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
PICmicro Microcontroladores - José Carlos Fonseca
30
Memória de programa

Memória de programa





Jan 2003
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
PICmicro Microcontroladores - José Carlos Fonseca
31
Memória de dados

Memória de dados


Jan 2003
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
PICmicro Microcontroladores - José Carlos Fonseca
32
Recursos auxiliares

Recursos auxiliares












Jan 2003
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
PICmicro Microcontroladores - José Carlos Fonseca
33
Recursos auxiliares Temporizadores


Jan 2003
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
PICmicro Microcontroladores - José Carlos Fonseca
34
O Timer

Jan 2003
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
PICmicro Microcontroladores - José Carlos Fonseca
35
Recursos auxiliares – Watch-dog


Jan 2003
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
PICmicro Microcontroladores - José Carlos Fonseca
36
Recursos auxiliares – Brown-out


Jan 2003
É 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
PICmicro Microcontroladores - José Carlos Fonseca
37
Recursos auxiliares – Sleep mode


Jan 2003
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
PICmicro Microcontroladores - José Carlos Fonseca
38
Recursos auxiliares – Conversores
A/D e D/A

Jan 2003
Nos
microcontroladores
que têm estas
possibilidades podem
converter sinais
analógicos em
digitais e vice-versa
PICmicro Microcontroladores - José Carlos Fonseca
39
Recursos auxiliares – Comparador
analógico

Jan 2003
Nos microcontroladores que têm
esta possibilidade possuem um OPAMP (Amplificador Operacional)
interno que permite comparar uma
tensão externa com uma tensão de
referência indicando se é superior
ou inferior
PICmicro Microcontroladores - José Carlos Fonseca
40
Recursos auxiliares – PWM

Jan 2003
Nos microcontroladores que têm
esta possibilidade permitem a saída
de impulsos de largura variável que
permitem, por exemplo controlar
motores
PICmicro Microcontroladores - José Carlos Fonseca
41
Recursos auxiliares – Portas de I/O



Jan 2003
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
PICmicro Microcontroladores - José Carlos Fonseca
42
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
43
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:






Jan 2003
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
PICmicro Microcontroladores - José Carlos Fonseca
44
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
automaticamente um 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:




Jan 2003
External RB0/INT pin
TMR0 timer overflow
PORTB<7:4> interrupt-on-change
Data EEPROM write complete
PICmicro Microcontroladores - José Carlos Fonseca
45
Recursos auxiliares - Interrupções

Jan 2003
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
PICmicro Microcontroladores - José Carlos Fonseca
46
Recursos auxiliares - Interrupções
Jan 2003
PICmicro Microcontroladores - José Carlos Fonseca
47
Recursos auxiliares - ICSP

Jan 2003
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
PICmicro Microcontroladores - José Carlos Fonseca
48
Pinagem
PIC16F84 (PDIP, SOIC)
Azul (linhas de I/O)
Vermelho e Preto (alimentação)
Verde (funcionamento do PIC)
Jan 2003
PICmicro Microcontroladores - José Carlos Fonseca
49
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
50
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
51
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
52
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
53
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
54
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
55
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
56
Oscilador
Modo
XT
Freq.
Osc1/C1
Osc2/C2
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
8.0 MHz
15 - 33 pF
15 - 33 pF
10.0 MHz
15 - 33 pF
15 - 33 pF
32 kHz
68 - 100 pF
68 - 100 pF
200 kHz
15 - 33 pF
15 - 33 pF
100 kHz
100 - 150 pF
100 - 150 pF
2 MHz
15 - 33 pF
15 - 33 pF
4 MHz
15 - 33 pF
15 - 33 pF
4 MHz
15 - 33 pF
15 - 33 pF
20 MHz
15 - 33 pF
15 - 33 pF
HS
LP
XT
HS
RC
Jan 2003
5 k  Rext  100 k 
Cext > 20pF
PICmicro Microcontroladores - José Carlos Fonseca
57
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
58
Special Function Register File
Jan 2003
PICmicro Microcontroladores - José Carlos Fonseca
59
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
60
OPTION - Registo de opções
bit 7 RBPU: PORTB Pull-up Enable bit
1 = PORTB pull-ups are disabled
0 = PORTB pull-ups are enabled by 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
Jan 2003
PICmicro Microcontroladores - José Carlos Fonseca
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
61
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
62
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
63
Palavra de configuração do PIC
Jan 2003
PICmicro Microcontroladores - José Carlos Fonseca
64
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
65
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
66
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
67
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
68
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
69
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
70
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
71
Instruções - BSF
BSF
Activa um bit
Sintaxe:
[label] BSF f,b
Operandos: 0
f
127, , 0
Operação: 1 ==> (f<b>)
Flags afectadas: nenhum
Código OP:
01 01bb bfff
b
7
ffff
Descrição: Activa o bit b do registo f
Exemplo:
BSF REG,7
Antes: REG = 0x0A
Depois: REG = 0x8A
Jan 2003
PICmicro Microcontroladores - José Carlos Fonseca
72
Instruções - BTFSC
BTFSC
Testa o bit e salta se for 0
Sintaxe:
[label] BTFSC f,d
Operandos: d
[0,1], 0
f
127
Operaçã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:
Jan 2003
BTFSC REG,6
GOTO NO_ES_0
SI_ES_0 instrução
NO_ES_0 instrução
PICmicro Microcontroladores - José Carlos Fonseca
73
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:
Jan 2003
BTFSS REG,6
GOTO NO_ES_0
SI_ES_0 instrução
NO_ES_0 instrução
PICmicro Microcontroladores - José Carlos Fonseca
74
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
75
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
76
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
77
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
78
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
79
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
80
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
81
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
82
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
83
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
84
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
85
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
86
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
87
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
88
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
89
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:
Jan 2003
NOP
PICmicro Microcontroladores - José Carlos Fonseca
90
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
91
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
92
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
93
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
94
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
95
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
96
Instruções - SUBLW
SUBLW
Subtrai W ao literal
Sintaxe:
Operandos: 0
k
Operação:
( k )
Flags afectadas: Z,
Código OP:
11
Descrição: Mediante
W é subtraído ao
Exemplos:
[label] SUBLW k
255
- (W) ==> (W)
C, DC
110x kkkk kkkk
o método do complemento para dois o conteúdo de
literal. O resultado é armazenado em W.
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
97
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
98
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
99
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
100
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 2003
PICmicro Microcontroladores - José Carlos Fonseca
101
Programa – Walk.asm
Jan 2003
PICmicro Microcontroladores - José Carlos Fonseca
102
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 be used unchanged on any 16X8X device.
LIST
P=16F84
ERRORLEVEL
-302
;SUPPRESS BANK SELECTION MESSAGES
__CONFIG
3FF5H
;XT OSC, WATCHDOG
__IDLOCS
1234
;
PORTB
TRISB
OPTREG
STATUS
CARRY
RP0
MSB
;
Jan 2003
EQU
EQU
EQU
EQU
EQU
EQU
EQU
6
86H
81H
3
0
5
3
;BIT POSITION OF LEFTMOST LED
PICmicro Microcontroladores - José Carlos Fonseca
103
Programa – Walk.asm
LEFT
RIGHT
CLRF
BSF
CLRF
MOVLW
MOVWF
BCF
INCF
BCF
SLEEP
RLF
BTFSS
GOTO
SLEEP
RRF
BTFSS
GOTO
GOTO
PORTB
STATUS,RP0
TRISB
0AH
OPTREG
STATUS,RP0
PORTB,F
STATUS,CARRY
PORTB,F
PORTB,MSB
LEFT
PORTB,F
PORTB,0
RIGHT
LEFT
;ALL LEDS OFF
;SELECT REGISTER BANK 1
;SET PORTB TO ALL OUTPUTS
;ASSIGN PRESCALER (1:4) TO WDT
;SELECT REGISTER BANK 0
;TURN ON RIGHTMOST LED
;CLEAR CARRY
;WAIT FOR WDT TIMEOUT
;TURN ON LED TO LEFT
;REACHED LEFTMOST?
;LOOP IF NOT
;WAIT FOR WDT TIMEOUT
;TURN ON LED TO RIGHT
;REACHED RIGHTMOST?
;LOOP IF NOT
;START NEW CYCLE
;
ORG
2100H
DE
END
"Copyright (C) 1996 David Tait"
;
Jan 2003
PICmicro Microcontroladores - José Carlos Fonseca
104
Porta Série




Jan 2003
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
PICmicro Microcontroladores - José Carlos Fonseca
105
Porta Série - Pinout
Jan 2003
Nome do
pino
25 pinos
9 pinos
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
PICmicro Microcontroladores - José Carlos Fonseca
Direcção
I/O
106
Porta Série


Jan 2003
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)
PICmicro Microcontroladores - José Carlos Fonseca
107
Porta Série – Offset das portas
Jan 2003
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
PICmicro Microcontroladores - José Carlos Fonseca
108
Porta Série

Jan 2003
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
PICmicro Microcontroladores - José Carlos Fonseca
109
Circuitos
Jan 2003
PICmicro Microcontroladores - José Carlos Fonseca
110
Circuitos
Jan 2003
PICmicro Microcontroladores - José Carlos Fonseca
111
Bibliografia




Jan 2003
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 Microcontroladores - José Carlos Fonseca
112
Download

PICmicro Microcontrolador