Pic Microcontrolador

112
PICmicro Microcontrolador Sistemas Digitais II (Documento em versão Draft ainda em elaboração) José Carlos Fonseca 14 de Janeiro de 2003

description

Pic Microcontrolador

Transcript of Pic Microcontrolador

Page 1: Pic Microcontrolador

PICmicro Microcontrolador

Sistemas Digitais II

(Documento em versão Draft ainda em elaboração)

José Carlos Fonseca14 de Janeiro de 2003

Page 2: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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

Page 3: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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.)

Page 4: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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

Page 5: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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

Page 6: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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

Page 7: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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

Page 8: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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

Page 9: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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

Page 10: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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

Page 11: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 11

Princeton Vs Harvard

Page 12: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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

Page 13: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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

Page 14: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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çõ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

Page 15: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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

Page 16: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 16

Quanto à memória do Programa

PIC 16 Cxxx - Memória EPROM PIC 16 CRxxx - Memória ROM PIC 16 Fxxx - Memória FLASH

Page 17: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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

Page 18: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 18

Execução de instruçõesRelação entre o sinal de clock e o ciclo de instrução:

Exemplo de execução de uma instrução:

(Nota: PIC 16C73)

Page 19: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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)

Page 20: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 20

Diagrama de blocos do PIC16F84A

Page 21: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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

Page 22: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 22

CPU

Page 23: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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

Page 24: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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

Page 25: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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  

Page 26: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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)

Page 27: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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

Page 28: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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

Page 29: Pic Microcontrolador

Jan 2003 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)

Page 30: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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

Page 31: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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

Page 32: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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

Page 33: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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

Page 34: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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

Page 35: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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

Page 36: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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

Page 37: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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

Page 38: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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

Page 39: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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

Page 40: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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

Page 41: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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

Page 42: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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

Page 43: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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).

Page 44: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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

Page 45: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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 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: External RB0/INT pin TMR0 timer overflow PORTB<7:4> interrupt-on-change Data EEPROM write complete

Page 46: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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

Page 47: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 47

Recursos auxiliares - Interrupções

Page 48: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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

Page 49: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 49

Pinagem

Azul (linhas de I/O)Vermelho e Preto (alimentação)Verde (funcionamento do PIC)

PIC16F84 (PDIP, SOIC)

Page 50: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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.

Page 51: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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.

Page 52: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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.

Page 53: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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.

Page 54: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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.

Page 55: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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

Page 56: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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

Page 57: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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

HS8.0 MHz 15 - 33 pF 15 - 33 pF

10.0 MHz 15 - 33 pF 15 - 33 pF

LP32 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

HS4 MHz 15 - 33 pF 15 - 33 pF

20 MHz 15 - 33 pF 15 - 33 pF

RC 5 k Rext 100 k Cext > 20pF

Page 58: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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

Page 59: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 59

Special Function Register File

Page 60: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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 bit1 = After power-up, CLRWDT instruction, or SLEEP instruction0 = A WDT time-out occurredbit 3 PD: Power-down bit1 = After power-up or by the CLRWDT instruction0 = By execution of the SLEEP instructionbit 2 Z: Zero bit1 = The result of an arithmetic or logic operation is zero0 = The result of an arithmetic or logic operation is not zerobit 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 occurred0 = No carry-out from the 4th low order bit of the resultbit 0 C: Carry/borrow bit (ADDWF, ADDLW,SUBLW,SUBWF instructions) (for borrow, the polarity isreversed)1 = A carry-out from the Most Significant bit of the result occurred0 = No carry-out from the Most Significant bit of the result occurredNote: 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.

Page 61: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 61

OPTION - Registo de opções

bit 7 RBPU: PORTB Pull-up Enable bit1 = PORTB pull-ups are disabled0 = PORTB pull-ups are enabled by individual port latch valuesbit 6 INTEDG: Interrupt Edge Select bit1 = Interrupt on rising edge of RB0/INT pin0 = Interrupt on falling edge of RB0/INT pinbit 5 T0CS: TMR0 Clock Source Select bit1 = Transition on RA4/T0CKI pin0 = Internal instruction cycle clock (CLKOUT)bit 4 T0SE: TMR0 Source Edge Select bit1 = Increment on high-to-low transition on RA4/T0CKI pin0 = Increment on low-to-high transition on RA4/T0CKI pinbit 3 PSA: Prescaler Assignment bit1 = Prescaler is assigned to the WDT0 = Prescaler is assigned to the Timer0 modulebit 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

Page 62: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 62

INTCON - Registo de Interrupcões

bit 7 GIE: Global Interrupt Enable bit1 = Enables all unmasked interrupts0 = Disables all interruptsbit 6 EEIE: EE Write Complete Interrupt Enable bit1 = Enables the EE Write Complete interrupts0 = Disables the EE Write Complete interruptbit 5 T0IE: TMR0 Overflow Interrupt Enable bit1 = Enables the TMR0 interrupt0 = Disables the TMR0 interruptbit 4 INTE: RB0/INT External Interrupt Enable bit1 = Enables the RB0/INT external interrupt0 = Disables the RB0/INT external interruptbit 3 RBIE: RB Port Change Interrupt Enable bit1 = Enables the RB port change interrupt0 = Disables the RB port change interruptbit 2 T0IF: TMR0 Overflow Interrupt Flag bit1 = TMR0 register has overflowed (must be cleared in software)0 = TMR0 register did not overflowbit 1 INTF: RB0/INT External Interrupt Flag bit1 = The RB0/INT external interrupt occurred (must be cleared in software)0 = The RB0/INT external interrupt did not occurbit 0 RBIF: RB Port Change Interrupt Flag bit1 = 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

Page 63: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 63

EECON1 – Registo da EEPROM

bit 7-5 Unimplemented: Read as '0'bit 4 EEIF: EEPROM Write Operation Interrupt Flag bit1 = The write operation completed (must be cleared in software)0 = The write operation is not complete or has not been startedbit 3 WRERR: EEPROM Error Flag bit1 = A write operation is prematurely terminated (any MCLR Reset or any WDT Reset during normal

operation)0 = The write operation completedbit 2 WREN: EEPROM Write Enable bit1 = Allows write cycles0 = Inhibits write to the EEPROMbit 1 WR: Write Control bit1 = 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 completebit 0 RD: Read Control bit1 = Initiates an EEPROM read RD is cleared in hardware. The RD bit can only be set (notcleared) in software.0 = Does not initiate an EEPROM read

Page 64: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 64

Palavra de configuração do PIC

Page 65: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 65

InstruçõesSintaxe 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

Page 66: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 66

InstruçõesSintaxe 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)

Page 67: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 67

InstruçõesSintaxe 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)

Page 68: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 68

Instruções - ADDLW

ADDLW Soma um literal a W

Sintaxe: [label] ADDLW kOperandos: 0 k 255Operação: : (W) + (k)==> (W)Flags afectadas: C, DC, ZCó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

Page 69: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 69

Instruções - ADDWF

ADDWF W + F

Sintaxe: [label] ADDWF f,dOperandos: d [0,1], 0 f 127Operação: (W) + (f) ==> (dest)Flags afectadas: C, DC, ZCó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

Page 70: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 70

Instruções - ANDLW

ANDLW W AND literal

Sintaxe: [label] ANDLW kOperandos: 0 k 255Operação: : (W) AND (k)==> (W)Flags afectadas: ZCó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

Page 71: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 71

Instruções - BCF

BCF Apaga um bit

Sintaxe: [label] BCF f,bOperandos: 0 f 127, 0 b 7Operação: : 0 ==> (f<b>)Flags afectadas: nenhumCó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

Page 72: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 72

Instruções - BSF

BSF Activa um bit

Sintaxe: [label] BSF f,bOperandos: 0 f 127, , 0 b 7Operação: 1 ==> (f<b>)Flags afectadas: nenhumCó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

Page 73: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 73

Instruções - BTFSC

BTFSC Testa o bit e salta se for 0

Sintaxe: [label] BTFSC f,dOperandos: d [0,1], 0 f 127Operação: Salto Se (f<b>) = 0Flags afectadas: nenhumCó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

Page 74: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 74

Instruções - BTFSS

BTFSS Testa o bit e salta se for 1

Sintaxe: [label] BTFSS f,dOperandos: d [0,1], 0 f 127Operação: Salto Se (f<b>) = 1Flags afectadas: nenhumCó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

Page 75: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 75

Instruções - CALL

CALL Salta para subrotina

Sintaxe: [label] CALL kOperandos: 0 k 2047Operação: PC ==> pilha; k ==> PCFlags afectadas: nenhumCó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

Page 76: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 76

Instruções - CLRF

CLRF Apaga um registo

Sintaxe: [label] CLRF fOperandos: 0 f 127Operação: : 0x00 ==> (f), 1 ==> ZFlags afectadas: ZCó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

Page 77: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 77

Instruções - CLRW

CLRW Apaga o registo W

Sintaxe: [label] CLRWOperandos: nenhumOperação: : 0x00 ==> W, 1 ==> ZFlags afectadas: ZCó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

Page 78: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 78

Instruções - CLRWDT

CLRWDT Apaga o WDT

Sintaxe: [label] CLRWDTOperandos: nenhumOperação: 0x00 ==> WDT, 1 ==> /TO

1 ==> /PDFlags afectadas: /TO, /PDCódigo OP: 00 0000 0110 0100Descriçã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

Page 79: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 79

Instruções - COMF

COMF Complemento de f

Sintaxe: [label] COMF f,dOperandos: d [0,1], 0 f 127Operação: : (/ f), 1 ==> (dest)Flags afectadas: ZCó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

Page 80: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 80

Instruções - DECF

DECF Decremento de f

Sintaxe: [label] DECF f,dOperandos: d [0,1], 0 f 127Operação: : (f ) - 1 ==> (dest)Flags afectadas: ZCó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

Page 81: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 81

Instruções - DECFSZ

DECFSZ Decremento e salta se 0

Sintaxe: [label] DECFSZ f,dOperandos: d [0,1], 0 f 127Operação: (f) -1 ==> d; Salto Se R=0Flags afectadas: nenhumCó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

Page 82: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 82

Instruções - GOTO

GOTO Salto incondicional

Sintaxe: [label] GOTO kOperandos: 0 k 2047Operação: k ==> PC <8:0>Flags afectadas: nenhumCó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

Page 83: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 83

Instruções - INCF

INCF Incremento de f

Sintaxe: [label] INCF f,dOperandos: d [0,1], 0 f 127Operação: : (f ) + 1 ==> (dest)Flags afectadas: ZCó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

Page 84: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 84

Instruções - INCFSZ

INCFSZ Incremento e salta se 0

Sintaxe: [label] INCFSZ f,dOperandos: d [0,1], 0 f 127Operação: (f) -1 ==> d; Salto Se R=0Flags afectadas: nenhumCó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

Page 85: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 85

Instruções - IORLW

IORLW W OR literal

Sintaxe: [label] IORLW kOperandos: 0 k 255Operação: : (W) OR (k)==> (W)Flags afectadas: ZCó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

Page 86: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 86

Instruções - IORLWF

IORWF W OR F

Sintaxe: [label] IORWF f,dOperandos: d [0,1], 0 f 127Operação: (W) OR (f) ==> (dest)Flags afectadas: ZCó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

Page 87: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 87

Instruções - MOVLW

MOVLW Carregar literal em W

Sintaxe: [label] MOVLW fOperandos: 0 f 255Operação: (k) ==> (W)Flags afectadas: nenhumCódigo OP: 11 00xx kkkk kkkk

Descrição: O literal k passa ao registo W.

Exemplo: MOVLW 0x5A

Depois: REG = 0x4F, W = 0x5A

Page 88: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 88

Instruções - MOVF

MOVF Mover f para W

Sintaxe: [label] MOVF f,dOperandos: d [0,1], 0 f 127Operação: (f) ==> (dest)Flags afectadas: ZCódigo OP: 00 1000 dfff ffffDescriçã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

Page 89: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 89

Instruções - MOVWF

MOVWF Mover W para f

Sintaxe: [label] MOVWF fOperandos: 0 f 127Operação: W ==> (f)Flags afectadas: nenhumCó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

Page 90: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 90

Instruções - NOP

NOP Não operação

Sintaxe: [label] NOPOperandos: nenhumOperação: No operarFlags afectadas: nenhumCó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

Page 91: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 91

Instruções - RETFIE

RETFIE regresso de interrupção

Sintaxe: [label] RETFIE Operandos: nenhumOperação: : 1 ==> GIE; TOS==>PCFlags afectadas: nenhumCó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

Page 92: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 92

Instruções - RETLW

RETLW regresso de uma subrotina, com o valor em W

Sintaxe: [label] RETLW kOperandos: 0 k 255Operação: : (k)==> (W); TOS==>PCFlags afectadas: nenhumCó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

Page 93: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 93

Instruções - RETURN

RETURN regresso de rotina

Sintaxe: [label] RETURN Operandos: nenhumOperação: : TOS ==> PCFlags afectadas: nenhumCó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

Page 94: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 94

Instruções - RLF

RLF roda f para a esquerda

Sintaxe: [label] RLF f,dOperandos: d [0,1], 0 f 127Operação: Rotação a a esquerdaFlags afectadas: CCó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

Page 95: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 95

Instruções - RRF

RRF roda f para a direita

Sintaxe: [label] RRF f,dOperandos: d [0,1], 0 f 127Operação: Rotação a a direitaFlags afectadas: CCó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

Page 96: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 96

Instruções - SLEEP

SLEEP Modo baixo consumo

Sintaxe: [label] SLEEPOperandos: nenhumOperação: 0x00==>WDT, 1 ==> / TO 0 ==> WDT Preescaler, 0 ==> / PDFlags afectadas: / PD, / TOCó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

Page 97: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 97

Instruções - SUBLW

SUBLW Subtrai W ao literal

Sintaxe: [label] SUBLW kOperandos: 0 k 255Operação: ( k ) - (W) ==> (W)Flags afectadas: Z, C, DCCódigo OP: 11 110x kkkk kkkkDescriçã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=1Antes:W=2,C=?. Depois: W=0, C=1Antes:W=3,C=?.Depois:W=FF,C=0 (o resultado é negativo)

Page 98: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 98

Instruções - SUBLWF

SUBWF Subtrai W ao f

Sintaxe: [label] SUBWF f,dOperandos: d [0,1], 0 f 127Operação: ( f ) - (W )==> (dest)Flags afectadas: C, DC, ZCódigo OP: 00 0010 dfff ffffDescriçã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,1Antes: REG = 0x03, W = 0x02, C = ?Depois:REG=0x01, W = 0x4F, C=1Antes: REG = 0x02, W = 0x02, C = ?Depois:REG=0x00, W =0x02, C= 1Antes: REG= 0x01, W= 0x02, C= ?Depois:REG=0xFF, W=0x02, C= 0 (Resultado negativo)

Page 99: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 99

Instruções - SWAPF

SWAPF Troca de f

Sintaxe: [label] SWAPF f,dOperandos: d [0,1], 0 f 127Operação: : (f <3: 0>) (f <7:4>)Flags afectadas: nenhumCó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

Page 100: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 100

Instruções - XORLW

XORLW W XOR literal

Sintaxe: [label] XORLW kOperandos: 0 k 255Operação: : (W) XOR (k)==> (W)Flags afectadas: ZCó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

Page 101: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 101

Instruções - XORLW

XORWF W XOR F

Sintaxe: [label] XORWF f,dOperandos: d [0,1], 0 f 127Operação: (W) XOR (f) ==> (dest)Flags afectadas: ZCó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

Page 102: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 102

Programa – Walk.asm

Page 103: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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 be used 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 86HOPTREG EQU 81HSTATUS EQU 3CARRY EQU 0RP0 EQU 5MSB EQU 3 ;BIT POSITION OF LEFTMOST LED;

Page 104: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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 CARRYLEFT SLEEP ;WAIT FOR WDT TIMEOUT RLF PORTB,F ;TURN ON LED TO LEFT BTFSS PORTB,MSB ;REACHED LEFTMOST? GOTO LEFT ;LOOP IF NOTRIGHT 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

Page 105: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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

Page 106: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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

Page 107: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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)

Page 108: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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

Page 109: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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

Page 110: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 110

Circuitos

Page 111: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 111

Circuitos

Page 112: Pic Microcontrolador

Jan 2003 PICmicro Microcontroladores - José Carlos Fonseca 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