Exsto
Tecnologia
Kit de Microcontroladores PIC

Apostila de microcontroladores PIC16

Exsto Tecnologia Ltda.
R. Vereador J...
Microcontroladores PIC16F877A

Revisão

Principais Autores

Descrição da Versão

1

José Domingos Adriano

Data de Término...
Microcontroladores PIC16F877A

ÍNDICE

PÁGINA

Introdução ...................................................................
Microcontroladores PIC16F877A

2.9
Características especiais ................................................................
Microcontroladores PIC16F877A

4.3
Interrupções .............................................................................
Microcontroladores PIC16F877A

Introdução
Está apostila tem o objetivo de servir como livro texto para um curso de microco...
Microcontroladores PIC16F877A

1 CONCEITOS BÁSICOS
Inicialmente será apresentado o conceito de microcontroladores de forma...
Microcontroladores PIC16F877A

Memória
Dados
Controle
(CPU)

Programa

Barramento de
Dados

Dispositivos de
Entrada e saíd...
Microcontroladores PIC16F877A

•

Flash: é uma memória eletricamente apagável (EEPROM – Electricaly Eresable Read Only
Mem...
Microcontroladores PIC16F877A

barramento de dados e a informação é lida pelo processador. No caso de um acesso de escrita...
Microcontroladores PIC16F877A

Figura 1.2 – Portais de entrada e saída
Para realizar uma operação de escrita do portal , o...
Microcontroladores PIC16F877A

Para maior flexibilidade do sistema, geralmente os microcontroladores utilizam um sistema d...
Microcontroladores PIC16F877A

Figura 1.3b – Esquema típico de um pino de I/O
OPERAÇÃO DE LEITURA OU ENTRADA DE DADOS: nov...
Microcontroladores PIC16F877A

O modo de acesso aos periféricos é semelhante ao de acesso aos portais de I/O. Eles muitas ...
Microcontroladores PIC16F877A

O principal bloco de um processador é o decodificador de instruções (Instructiuon Decoder)....
Microcontroladores PIC16F877A

Para indicar a próxima posição livre na pilha existe um registro (na verdade um contador) c...
Microcontroladores PIC16F877A

Todo o sistema computacional trabalha sincronizado com um mesmo sinal de clock. Devemos
lem...
Microcontroladores PIC16F877A

Vale lembrar aqui que uma instrução é como uma operação matemática, isto é, composta de
ope...
Microcontroladores PIC16F877A

Figura 1.6 – Pipeline
O barramento de programa não necessariamente tem o mesmo tamanho do b...
Microcontroladores PIC16F877A

2 O MICROCONTROLADOR PIC16F877A
2.1 A Microchip
O fabricante dos microcontroladores PIC é a...
Microcontroladores PIC16F877A

o PIC32
o
Os componentes diferem entre si basicamente em:
• Quantidade de memória RAM
• Qua...
Microcontroladores PIC16F877A

Figura 2.1 – Diagrama em blocos do PIC16F877A

2.4 Geração de clock
Os microcontroladores P...
Microcontroladores PIC16F877A

o Com saída de clock
o Sem saída de clock

Obs.: resistores, indutores, capacitores e crist...
Microcontroladores PIC16F877A

Figura 2.2 – Circuito do Oscilador a Cristal/Ressonador
Modo de Oscilador

Freqüência do Cr...
Microcontroladores PIC16F877A

Figura 2.3 – Partida do oscilador
Também é possível aplicar sinais de clock gerados externa...
Microcontroladores PIC16F877A

No modo RC com saída de clock o terminal OSC2/CLKOUT apresenta a freqüência do oscilador di...
Microcontroladores PIC16F877A

Figura 2.5 – Ciclos de instrução
Alguns periféricos e algumas funções do PIC não são sincro...
Microcontroladores PIC16F877A

0000h
Vetor de reset
0001h
0002h
Uso geral
0003h
0004h
Vetor de interrupção
0005h
Página 0
...
Microcontroladores PIC16F877A

se comportando como o byte acessado. Este último modo de endereçamento pode ser muito útil ...
Microcontroladores PIC16F877A

A figura 1.7 trás o mapeamento de memória RAM do PIC16F877A com os nomes dos registros de
f...
Microcontroladores PIC16F877A

2.6 RESET
O PIC possui várias fontes de reset (reinicialização), que são:
•
•
•
•
•
•

Rese...
Microcontroladores PIC16F877A

Figura 2.7 – Situações de Brown-out

2.6.5 Seqüência de inicialização
1.
2.
3.
4.
5.

O cir...
Microcontroladores PIC16F877A

Figura 2.8 – Lógica de reset

2.7 Watch-Dog Timer
Esse timer de 8 bits, que é baseado em um...
Microcontroladores PIC16F877A

Quando da ocorrência de algum reset, o programa recomeça sua execução no vetor de reset
(00...
Microcontroladores PIC16F877A

Figura 2.1 – Pinagem do PIC 16F877A
As principais características do PIC são apresentadas n...
Microcontroladores PIC16F877A

Os níveis de tensão de entrada e saída para o PIC são apresentados na tabela abaixo. Os val...
Microcontroladores PIC16F877A

2.11 O conjunto de instruções do PIC16F877A
O set de instruções de um microcontrolador é o ...
Microcontroladores PIC16F877A

microcontrolador a cada instrução. Esses bits são tipicamente chamados de flags (Bandeiras)...
Microcontroladores PIC16F877A

•
•
•

Testes e desvios condicionais
Chamadas e desvio (controle de fluxo)
Controle (da CPU...
Microcontroladores PIC16F877A

MOVF
Move o valor do registro (f) para o destino. Se d é 0 destino é W; se d é 1 o destino ...
Microcontroladores PIC16F877A

BSF
"Seta" o bit b do registro f.
Sintaxe
Operadores
Operação
Flags Afetados
Ciclos
Exemplo...
Microcontroladores PIC16F877A

Sintaxe
Operadores
Operação
Flags Afetados
Ciclos
Exemplo
Alterações nas Flags:

ADDWF
f, d...
Microcontroladores PIC16F877A

Alterações nos Flags:
Z = 0: o resultado do incremento é diferente de zero.
Z = 1: o result...
Microcontroladores PIC16F877A

C = 1: o resultado da subtração é maior ou igual a 0.
C = 0: o resultado da subtração é men...
Microcontroladores PIC16F877A

COMF
Complementa o valor contido no registro f. O resultado é armazenado no destino: d=0 pa...
Microcontroladores PIC16F877A

RLF
O valor contido em f é rotacionado para a esquerda através do bit de Carry (bit C do re...
Microcontroladores PIC16F877A

SWAPF
O nibble (conjuntos de 4 bits) mais significativo e o menos significativo do registro...
Microcontroladores PIC16F877A

Operação
Flags Afetados
Ciclos
Exemplo
Alterações nas Flags:

d=1 → registro f
(d) ← (W) XO...
Microcontroladores PIC16F877A

Sintaxe
Operadores
Operação
Flags Afetados
Ciclos
Exemplo

DECFSZ
f,d
0 ≤ f ≤ 127
d=0→W
d =...
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Apostila pic 16f877
Upcoming SlideShare
Loading in...5
×

Apostila pic 16f877

9,200

Published on

Apostila pic 16f877 completa 123 páginas produzida pela exsto tecnologia de santa rita do sapucaí-mg

Published in: Self Improvement
1 Comment
5 Likes
Statistics
Notes
No Downloads
Views
Total Views
9,200
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
643
Comments
1
Likes
5
Embeds 0
No embeds

No notes for slide

Apostila pic 16f877

  1. 1. Exsto Tecnologia Kit de Microcontroladores PIC Apostila de microcontroladores PIC16 Exsto Tecnologia Ltda. R. Vereador José Eduardo da Costa, 169 Santa Rita do Sapucaí – MG CEP: 37540-000 +55 35 3471 6898 www.exsto.com.br
  2. 2. Microcontroladores PIC16F877A Revisão Principais Autores Descrição da Versão 1 José Domingos Adriano Data de Término Revisão inicial para a nova versão do kit © Copyright 2008 por Exsto Tecnologia Ltda. Todos os direitos reservados “Desenvolvido e produzido com orgulho no Brasil” Exsto Tecnologia Ltda R. Vereador José Eduardo da Costa, 169 Santa Rita do Sapucaí – MG CEP: 37540-000 +55 35 3471 6898 www.exsto.com.br Exsto Tecnologia 2
  3. 3. Microcontroladores PIC16F877A ÍNDICE PÁGINA Introdução .............................................................................................................................................. 6 1 CONCEITOS BÁSICOS ................................................................................................................ 7 1.1 Sistema Computacional .......................................................................................................... 7 1.1.1 Memórias........................................................................................................................... 8 1.1.2 Memória de programa ...................................................................................................... 8 1.1.3 Memória de Dados ............................................................................................................ 9 1.1.4 Barramentos ...................................................................................................................... 9 1.1.5 Dispositivos de entrada e saída ....................................................................................... 10 1.1.6 Periféricos ........................................................................................................................ 13 1.1.7 CPU .................................................................................................................................. 14 1.2 Arquitetura Computacional................................................................................................... 17 1.2.1 Arquitetura von-Neumann .............................................................................................. 17 1.2.2 2 Arquitetura Harvard ........................................................................................................ 18 O MICROCONTROLADOR PIC16F877A ................................................................................. 20 2.1 A Microchip .......................................................................................................................... 20 2.2 Microcontroladores PIC ........................................................................................................ 20 2.3 A Arquitetura do PIC16F877A ............................................................................................. 21 2.4 Geração de clock................................................................................................................... 22 2.4.1 Modos LP,XT e HS ............................................................................................................ 23 2.4.2 Modos RC......................................................................................................................... 25 2.4.3 Modo INTOSC .................................................................................................................. 26 2.4.4 Comparação entre os modos de oscilador ...................................................................... 26 2.4.5 Clock e execução das instruções ..................................................................................... 26 2.5 Memórias .............................................................................................................................. 27 2.5.1 Memória de programa .................................................................................................... 27 2.5.2 Memória de dados .......................................................................................................... 28 2.6 RESET .................................................................................................................................. 31 2.6.1 POR – Power-On Reset .................................................................................................... 31 2.6.2 PWRT – Power-up Timer ................................................................................................. 31 2.6.3 OST – Oscillator Start-up Timer ....................................................................................... 31 2.6.4 BOR – Brown-out Reset ................................................................................................... 31 2.6.5 Seqüência de inicialização ............................................................................................... 32 2.6.6 Identificação de Reset pelo Software .............................................................................. 32 2.7 Watch-Dog Timer ................................................................................................................. 33 2.8 Modo de baixo consumo – Modo SLEEP............................................................................. 33 Exsto Tecnologia 3
  4. 4. Microcontroladores PIC16F877A 2.9 Características especiais ....................................................................................................... 34 2.9.1 Proteção de Código (Code Protect) ................................................................................. 34 2.9.2 Locais de Identificação (ID Locations) ............................................................................. 34 2.9.3 Pinagem e Hardware Básico ............................................................................................ 34 2.10 Gravação ............................................................................................................................... 36 2.11 O conjunto de instruções do PIC16F877A ........................................................................... 37 2.11.1 Manipulação de Byte .................................................................................................. 39 2.11.2 Manipulação de bit ..................................................................................................... 40 2.11.3 Matemáticas ............................................................................................................... 41 2.11.4 Lógicas ......................................................................................................................... 44 2.11.5 Testes .......................................................................................................................... 48 2.11.6 Chamadas e desvio...................................................................................................... 49 2.11.7 Controle....................................................................................................................... 51 2.12 2.13 Estrutura do Programa .......................................................................................................... 53 2.14 3 Programando em assembly ................................................................................................... 52 Programação estruturada....................................................................................................... 56 PROGRAMANDO O PIC16F877A ............................................................................................. 58 3.1 Diretivas ................................................................................................................................ 58 3.2 Variáveis ............................................................................................................................... 61 3.3 Sub-rotinas ............................................................................................................................ 62 3.3.1 Passagem de Parâmetros ................................................................................................ 63 3.3.2 Chamada X Desvio (CALL X GOTO) .................................................................................. 64 3.4 Atribuição ............................................................................................................................. 66 3.5 Entrada e Saída ..................................................................................................................... 67 3.6 Estruturas de Decisão............................................................................................................ 68 3.7 Condições ............................................................................................................................. 69 3.8 Se .......................................................................................................................................... 71 3.9 Se senão ................................................................................................................................ 72 3.10 Se senão se ............................................................................................................................ 73 3.11 Caso ...................................................................................................................................... 75 3.12 Estruturas de repetição .......................................................................................................... 77 3.12.1 Faça-Enquanto ............................................................................................................ 78 3.12.2 Enquanto ..................................................................................................................... 78 3.12.3 Para ............................................................................................................................. 79 3.13 4 Temporização por software – Rotinas de atraso ................................................................... 80 RECURSOS AVANÇADOS ......................................................................................................... 84 4.1 Display de cristal Líquido ..................................................................................................... 84 4.2 Teclado ................................................................................................................................. 87 Exsto Tecnologia 4
  5. 5. Microcontroladores PIC16F877A 4.3 Interrupções .......................................................................................................................... 89 4.3.1 Utilização das Interrupções ............................................................................................. 92 4.3.2 4.3.3 5 Interrupção externa em RB0 ........................................................................................... 96 Interrupção por mudança no portal B ............................................................................. 96 PERIFÉRICOS DO PIC16F877A .............................................................................................. 98 5.1 Timers ................................................................................................................................... 98 5.1.1 Timer 1............................................................................................................................. 98 5.1.2 Oscilador do timer 1 ...................................................................................................... 101 5.1.3 Interrupção .................................................................................................................... 101 5.2 Módulo CCP ....................................................................................................................... 101 5.2.1 Modo captura ................................................................................................................ 102 5.2.2 Modo comparação ........................................................................................................ 103 5.2.3 Modo PWM ................................................................................................................... 103 5.2.4 Interrupção .................................................................................................................... 106 5.3 Comunicação Serial ............................................................................................................ 106 5.3.1 Comunicação Paralela ................................................................................................... 106 5.3.2 Comunicação serial........................................................................................................ 107 5.3.3 EIA-232C ........................................................................................................................ 109 5.3.4 A USART do PIC16F877A................................................................................................ 110 5.3.5 Transmissão ................................................................................................................... 112 5.3.6 Recepção ....................................................................................................................... 113 5.4 Conversor Analógico para digital – ADC........................................................................... 114 5.4.1 Configuração e uso ........................................................................................................ 116 5.5 Memórias EEPROM e Flash............................................................................................... 118 5.5.1 Memória EEPROM ......................................................................................................... 118 5.5.2 Rotinas de acesso a EEPROM ........................................................................................ 119 5.5.3 Memória FLASH de programa ....................................................................................... 120 5.5.4 Rotinas de acesso a FLASH. ........................................................................................... 120 Apêndices ............................................................................................................................................ 122 Apêndice A – Conjunto de Instruções do PIC16 ............................................................................. 122 Apêndice B – Mapeamento de memória de dados........................................................................... 123 Exsto Tecnologia 5
  6. 6. Microcontroladores PIC16F877A Introdução Está apostila tem o objetivo de servir como livro texto para um curso de microcontroladores PIC16. Esse conteúdo foi preparado para ser usado em disciplinas de microcontrolador/microprocessadores em cursos técnicos ou superiores na área de tecnologia. Os pré-requisitos para o bom aproveitamento do curso são conhecimentos básicos de informática, eletrônica básica, eletrônica digital básica (principalmente memórias, contadores, portas lógicas e flip-flops ). Também é recomendável para o bom andamento do curso que os alunos já tenham freqüentada alguma matéria de programação (seja qual for a linguagem estudada). O curso é estruturado em 5 capítulos que abordam o funcionamento do PIC16F877A, partindo de conceitos mais gerais e especializando a cada passo, até tratar vários dos periféricos. O capítulo inicial com os conceitos básicos sobre microcontroladores e sistemas computacionais, e tem o objetivo de equalizar os pré-requisitos sobre o assunto. Este capítulo pode ser omitido, sem qualquer prejuízo no andamento do curso, caso esses conceitos já tenham sido estudados em outras disciplinas. O capítulo 2 apresenta os microcontroladores PIC16 , tratando tanto de hardware como de software, além de trazer os fundamentos de programação em linguagem assembly. São discutidos organização de memória e funcionamento da CPU, além das principais características destes microcontroladores. De posse dos conhecimentos do Capítulo 2 é feito um estudo mais aprofundado de técnicas de programação segundo os preceitos da programação estruturada e engenharia de software. Vale ressaltar a importância dessa unidade, visto que ela visa formar as bases da lógica de programação e que o desenvolvimento com microcontroladores é basicamente um desenvolvimento de software. O capítulo 4 apresenta algumas aplicações avançadas de programação, com displays LCD, teclados matriciais e, principalmente, interrupções. No último capítulo são apresentados alguns dos principais periféricos do PIC16F877A, também encontrados em outros microcontroladores da família PIC16. Destes, são fundamentais os timers e comunicação serial. Os demais poderão ser sacrificadas ou resumidas, caso a carga horária não suporte a totalidade do conteúdo, apesar de ser recomendado dar uma maior atenção ao conversor analógico para digital. Exsto Tecnologia 6
  7. 7. Microcontroladores PIC16F877A 1 CONCEITOS BÁSICOS Inicialmente será apresentado o conceito de microcontroladores de forma genérica, que posteriormente será estendido ao PIC16F877A e pode ser aplicado a qualquer outro microcontrolador. É importante este embasamento teórico não somente para garantir um melhor aproveitamento no estudo do PIC 16F877A como também para tornar o leitor apto a entender o funcionamento de outros microcontroladores, tanto da linha PIC como de outros fabricantes. Esses conhecimentos também são importantes na escolha do microcontrolador a ser utilizado em um projeto, pois permite estabelecer as bases conceituais para a comparação de suas características. 1.1 Sistema Computacional Inicialmente devemos conceituar o que vem a ser um sistema computacional. Os sistemas computacionais são compostos por sistemas combinacionais e seqüenciais. O que caracteriza um sistema computacional é a possibilidade de ser programado. Um sistema computacional é composto por hardware (parte física) e software (programa). O hardware dos sistemas computacionais, ao contrário do que ocorre com sistema combinacionais e seqüenciais, não possui uma aplicação específica. É necessário que exista um software para ser executado. Em contrapartida, um mesmo hardware pode executar uma infinidade de funções diferentes, simplesmente alterando o seu software. Uma boa analogia é imaginar o hardware como um instrumento musical e o software como uma partitura. Um piano por si só não faz nada, é necessária uma música que possa ser executada a fim de se obter algum resultado. Da mesma forma que a música contida na partitura, um programa será composto por um conjunto limitado de símbolos (no caso da partitura são as notas musicais e no caso do programa são as instruções) que podem ser organizados de diversas formas diferentes, obtendo-se diferentes resultados. Como exemplo de sistema computacional, o primeiro que nos vem em mente é o computador pessoal (PC), hoje tão difundido. Contudo, existem vários equipamentos, tão ou mais comuns que os PC´s, que são sistemas computacionais. Por exemplo, os vídeo-games, os mini-games, as calculadoras, palm-top´s, etc. Além disso, temos os microcontroladores, que são o objetivo desse nosso estudo, que estão presentes nas mais diversas aplicações. A estrutura de um sistema computacional é como a apresentada no diagrama em blocos abaixo (Figura 1.1). Exsto Tecnologia 7
  8. 8. Microcontroladores PIC16F877A Memória Dados Controle (CPU) Programa Barramento de Dados Dispositivos de Entrada e saída e periféricos “Mundo Externo” Figura 1.1 – Diagrama em blocos genérico de um sistema computacional 1.1.1 Memórias Memórias são dispositivos que armazenam informações. No caso de um sistema computacional, essa informação, assim como a memória, pode ser dividida em dois tipos: de programa e de dados. Existem também Registros (bytes de memória) com funções especiais que trabalham junto ao processador (CPU). 1.1.2 Memória de programa Sua função é armazenar o software (programa) a ser executado no sistema. Também é utilizada para guardar tabelas de constantes Existem endereços de memória de programa existem alguns com finalidade específica, chamados vetores, que são endereços para onde o programa desvia quando ocorrem determinados eventos. Temos o vetor de reset, que é o endereço pelo qual o programa começa a ser executado e o vetor de interrupções, que é para onde o programa desvia quando ocorreu um pedido de interrupção (trataremos desse conceito mais adiante). De uma forma geral, a memória de programa é uma memória não volátil. O tipo dessa memória pode ser: • • • ROM (Read Only Memory): somente de leitura. Geralmente chamada de masked-ROM (masked = mascarado), é gravada pelo fabricante do componente, o que em quantidades muito grandes reduz custos. OTP (Only Time programming): programável somente uma vez, utilizada em produção. EPROM (Erasable Progrmable Read Only Memory) : apagável através de luz ultravioleta. Utilizada no processo de desenvolvimento e algumas vezes no produto acabado, quando há a necessidade de se poder alterar o software. Exsto Tecnologia 8
  9. 9. Microcontroladores PIC16F877A • Flash: é uma memória eletricamente apagável (EEPROM – Electricaly Eresable Read Only Memory) com tempos de acesso para leitura rápido. Oferece uma grande flexibilidade, pois geralmente é possível reprogramar um equipamento sem troca de componentes. Praticamente todos os microcontroladores já possuem internamente algum desses tipos de memória de programa. Atualmente quase todos os microcontroladores possuem versões em memória Flash, pois a mesma apresenta muitas vantagens a um custo dos mais baixos. 1.1.3 Memória de Dados É a memória onde são armazenados os dados a serem processados pelo computador (as variáveis dos programas e outras informações.). Como esses dados são constantemente alterados, a memória utilizada para armazena-los é do tipo RAM. Como se trata de uma memória volátil, quando a alimentação é cortada esses dados são perdidos. Alguns microcontroladores disponibilizam também memórias EEPROM para armazenar dados que não devem ser perdidos com a falta de energia. 1.1.4 Barramentos As várias partes de um sistema computacional (CPU, memórias, dispositivos de entrada e saída) são ligadas entre si através de barramentos, ou vias, que são ligações físicas de comunicação paralela entre os componentes. São eles: • • • • Barramento de dados: pelo qual os dispositivos de I/O e memórias trocam dados com o processador Barramento de endereços: permite ao processador “endereçar” qual dispositivo será acessado Barramento de controle: indica se o acesso é de leitura ou escrita, se é feito a posição de memória ou a I/O. Barramento de programa: por onde o processador recebe as instruções que compõe o programa. O tamanho do barramento de dados limita o tamanho de dados que trafegam pelo sistema. Por isso é comum classificar os sistemas computacionais pelo tamanho de seu barramento; temos então sistemas de 8 bits, 16 bits, 32bits, etc. Os microcontroladores são em sua maioria de 8 bits, apesar de existirem alguns modelos de 16 bits. Já o tamanho do barramento de endereços nos informa qual a quantidade máxima de endereços de memória ou dispositivos de I/O e periféricos podem ser acessados. Por exemplo, um barramento de endereços de 10 bits permite acessar 210 = 1024 endereços. Todos os dispositivos de um sistema computacional fazem uso do barramento de dados para trafegar informações. Para que o sistema funcione corretamente podemos apresentar o processo de forma simplificada assim: o processador (que coordena o processo) escreve no barramento de endereços o endereço do dispositivo a ser acessado. Através do barramento de controle ele informa ao dispositivo se o acesso é de leitura ou escrita (a definição de leitura ou escrita de dispositivos sempre é feita pelo ponto de vista do processador). No caso de um aceso de leitura o dispositivo escreve no Exsto Tecnologia 9
  10. 10. Microcontroladores PIC16F877A barramento de dados e a informação é lida pelo processador. No caso de um acesso de escrita, o processador envia dados para o barramento de dados que são lidos pelo dispositivo acessado. Como dispositivos de um sistema computacional usam o mesmo barramento de dados para trafegar informações é preciso que, quando um dispositivo estiver escrevendo no barramento (portanto aplicando níveis de tensão ao barramento) os demais dispositivos não causem conflito de dados. De fato, todos os dispositivos presentes em um sistema computacional são capazes de ficar em estado de “alta impedância” enquanto não forem acessados para leitura. 1.1.5 Dispositivos de entrada e saída São responsáveis por realizar a interface do processador com o “mundo externo”. É através deles que um sistema computacional adquire dados externos e aciona processos. São comumente chamados de dispositivos de I/O (Input/Output – Entrada/Saída), portais de I/O (no inglês, ports) ou simplesmente portais. A função dos portais de saída é transferir ao “mundo externo” um dado que esteja presente no barramento de dados. Para isso são utilizados latches, pois permitem o “carregar” dados somente quando são acionados, retendo esses dados independente de haverem alterações em suas entradas. Os portais de entrada devem permitir a transferência de dados do “mundo externo” para o barramento de dados quando acionados e em alta impedância no restante do tempo. Para tanto, são tradicionalmente utilizados buffers com saída tri-state para essa função. A seleção dos dispositivos de I/O a partir do barramento de endereços é feita por decodificadores ligados ao barramento de endereços e seu acionamento é feita através do barramento de controle. Exemplo 1.1 A figura 1.2, abaixo, mostra um exemplo de utilização de buffers e latches como portais de entrada e saída, respectivamente. Ambos os portais estão ligados ao barramento de dados. Cada portal possui um decodificador (DEC), que apresenta nível alto na saída quando o valor do barramento de endereços é o endereço do portal. Os sinais RD (read – ler), WR (write – escrever) e IORQ (I/O request – requisição de I/O) constituem o barramento de controle. Para a operação de leitura, o endereço do portal é colocado no barramento de dados.O decodificador decodifica o endereço do portal de leitura e coloca em sua saída nível lógico 0. Em seguida, os sinais IORQ e RD são acionados. Assim temos ‘1’ no terminal de habilitação de saída do buffer e o valor em sua entrada é transferido para o barramento de dados, podendo ser armazenado pela CPU. Exsto Tecnologia 10
  11. 11. Microcontroladores PIC16F877A Figura 1.2 – Portais de entrada e saída Para realizar uma operação de escrita do portal , o processador inicialmente coloca os dados a serem escritos no barramento de dados e o endereço do portal no barramento de endereço.O decodificador decodifica o endereço do portal de escrita e coloca em sua saída nível lógico 0. Então são acionados os sinais WR e IORQ. Nesse instante temos ‘1’ nas três entradas da porta AND que aciona o terminal E do latch, que faz com ele carregue os dados presentes no barramento na saída. Figura 1.2 – Portais de entrada e saída A função do microcontrolador, como o próprio nome diz, é controlar processos e circuitos. Para otimizar essa função, seus portais de entrada e saída são tratados como registros de funções especiais, ou seja, são lidos e escritos como se fossem simples bytes de memória. Em sistemas como microprocessadores geralmente o tratamento é diferente, havendo instruções específicas para acesso aos portais e outras implicações, que diminuem a eficiência do código gerado quando se trabalha intensamente com entrada e saída. Exsto Tecnologia 11
  12. 12. Microcontroladores PIC16F877A Para maior flexibilidade do sistema, geralmente os microcontroladores utilizam um sistema de portais mais complexo que o apresentado acima, que permite que um mesmo terminal do microcontrolador seja configurado como entrada ou saída. Para que isso seja possível é utilizado um registro de portal (PORT) e um registro de direção de dados (DDR – Data Direction Register). Esse último permite selecionar a direção de cada bit de um portal de saída, individualmente. A figura 1.3a e 1.3b abaixo mostram o esquema genérico de um bit de portal do PIC16F877A. Outros microcontroladores utilizam configurações semelhantes. Figura 1.3a – Esquema típico de um pino de I/O OPERAÇÃO DE ESCRITA OU SAÍDA DE DADOS: ao acionar o controle WR PORT, o latch de saída (Data Latch) armazena a informação complementar do barramento de dados em sua saída complementar Q “barra”. Vamos admitir que o registro de direção de dados (TRIS Latch) foi carregado inicialmente com o valor ‘0’. O registro de direção de dados é habilitado através do controle WR TRIS e a informação de direção fica armazenada em sua saída. Para Q=0 e Q ”barra”=1 na saída do registro de direção, o pino I/O estará configurado como saída e tem-se a transferência da informação Q ”barra” do latch de saída para o driver do pino I/O conforme o arranjo das portas lógicas. Se este último Q ”barra” =0 o transistor “N” será cortado e “P” será ativado permitindo que a tensão Vdd apareça no pino I/O como nível lógico 1 que era a informação original do barramento de dados. Se Q “barra” =1 o transistor “P” será cortado e “N” estará ativo. A tensão no pino I/O cai para o nível Vss indicando nível lógico 0. Exsto Tecnologia 12
  13. 13. Microcontroladores PIC16F877A Figura 1.3b – Esquema típico de um pino de I/O OPERAÇÃO DE LEITURA OU ENTRADA DE DADOS: novamente admitamos que o registro de direção foi carregado inicialmente com o valor ‘1’ em sua saída. Agora, o arranjo das portas lógicas permite o corte simultâneo dos dois transistores do driver configurando o pino I/O como entrada de dados. Assim, o controle RD PORT habilita o latch de entrada e o buffer tri-state, o que possibilita que a informação do pino de I/O trafegue pelo barramento de dados. No restante do tempo o buffer fica em alta impedância. Caso seja feita uma operação de escrita em um terminal configurado como entrada, o dado escrito será armazenado no latch de dados, mas não será transferido para o terminal, pois o driver está desativado. Por outro lado, se for realizada uma operação de leitura em um terminal configurado como saída, o valor lido será o dado presente no terminal, que é o mesmo escrito no latch de dados anteriormente. 1.1.6 Periféricos Além dos portais de I/O e as memórias, podemos ter muitos outros tipos de dispositivos ligados ao barramento de dados. Esses dispositivos nada mais são do que circuitos destinados a realizar funções especiais. Esses dispositivos periféricos são particularmente importantes nos microcontroladores. Como periféricos mais comuns podemos citar os temporizadores e contadores (Timers), os módulos de comunicação serial, conversores AD e DA, módulos de CCP (Captura, comparação e PWM), drivers de LCD, comparadores analógicos, etc. Exsto Tecnologia 13
  14. 14. Microcontroladores PIC16F877A O modo de acesso aos periféricos é semelhante ao de acesso aos portais de I/O. Eles muitas vezes possuem vários registros de parâmetros que podem ser configurados, e um ou mais registros de entrada e saída de dados. Quando estivermos tratando dos periféricos do PIC16F877A mostraremos como trabalhar com eles e, apesar de cada microcontrolador apresentar um conjunto de periféricos diferentes, seu funcionamento é muito semelhante. 1.1.7 CPU A CPU (Central Processing Unit – Unidade Central de Processamento) ou processador é parte principal de um sistema computacional. É comum se referir à CPU dos microcontroladores como core (núcleo). Sua função é executar as instruções do programa e processar dados. Para tanto ela controla todas as demais partes do sistema e envia ou recebe dados dessas partes. Ela também é capaz de interpretar e colocar em execução as instruções que compõe o programa e realizar operações lógicas e aritméticas. Genericamente um processador é organizado conforme o diagrama em blocos da figura 1.4. Figura 1.4 – Diagrama em blocos de uma CPU Os nomes de cada bloco estão em inglês no diagrama para facilitar a identificação desses blocos nos manuais de microcontroladores e microprocessadores, que comumente são escritos nessa língua. Os blocos pontilhados podem ou não estar presentes. As vias em amarelo representam o barramento de dados interno do processador, que é ligado ao barramento de dados do sistema. As vias em verde são outras vias de dados e sinais de controle. Exsto Tecnologia 14
  15. 15. Microcontroladores PIC16F877A O principal bloco de um processador é o decodificador de instruções (Instructiuon Decoder). Voltando a analogia entre um sistema computacional e um instrumento musical, o decodificador de instruções pode ser comparado ao músico, que age sobre o instrumento (hardware) executando a música (software). Esse bloco é composto por um decodificador e um contador. Tal decodificador pode ser visto como um livro de receitas culinárias. No livro, cada página contém uma receita e dentro de cada receita há os passos para sua execução. De modo análogo, cada instrução do processador é como o endereço de uma “página” onde está a seqüências de acionamento dos sinais de controles (internos e externos ao processador) que permitem a execução da instrução. O contador existente é responsável por fazer com que os passos para a execução de uma instrução sejam executados em seqüência. Cada modelo de processador possui um conjunto, ou set, de instruções que pode executar. O barramento de controle interno (Internal Control) permite ao decodificador de instruções controlar os blocos internos do processador, enquanto o barramento de controle externo (External Control) já foi discutido e tem a função de indicar se o acesso é de leitura ou escrita, se é em memória ou dispositivos de I/O. O programa armazenado na memória é uma seqüência de instruções. Podemos então supor que para endereçar corretamente essas instruções deveria haver um contador. Ele existe e é chamado Contador de Programa ou PC (Program Counter). A cada instrução iniciada o PC é incrementado. Portanto ele aponta a próxima instrução, isto é, contém o endereço da próxima instrução a ser executada. A saída desse contador é ligada a um registro (Program Addressing) que é carregado ao final de cada instrução com o endereço da próxima instrução. A saída do registro Program Addressing está ligada ao barramento de endereços da memória de programa. Quando a CPU é resetada, o PC é automaticamente carregado com o valor do vetor de reset. Durante a execução do programa, um valor pode ser carregado no PC. Isso ocorre para desviar o fluxo do programa. Existem instruções que realizam essa alteração de fluxo, que pode ser de dois tipos: desvio ou chamada. Quando ocorre um desvio o conteúdo do PC é alterado para que ele passe a executar o programa a partir de outro ponto. Na execução de uma chamada o fluxo do programa também é desviado para um determinado ponto para executar um trecho do programa, mas nesse caso ele deve retornar ao ponto do programa onde ocorreu o desvio (mais precisamente à primeira instrução após a instrução de chamada). Isso permite executar uma sub-rotina, conceito que será discutido quando tratarmos do software. Em uma chamada o endereço de retorno deve ser armazenado em algum lugar, caso contrário não seria possível retornar ao ponto onde a chamada ocorreu. Esse lugar é chamado de pilha (stack). O nome pilha se deve a seu funcionamento, que é semelhante a uma pilha de pratos: como pode haver várias chamadas consecutivas sem que haja retorno, os endereços de retorno são armazenados “uns sobre os outros”. Quando ocorre uma instrução de retorno (que é o que faz o programa retornar da chamada), o programa volta para o último endereço guardado, e assim sucessivamente até que a pilha esteja vazia. A pilha é então uma porção de memória onde podem ser armazenados os endereços de retorno. Exsto Tecnologia 15
  16. 16. Microcontroladores PIC16F877A Para indicar a próxima posição livre na pilha existe um registro (na verdade um contador) chamado ponteiro da pilha (Stack Pointer) que aponta o topo. Esse registro é incrementado cada vez que um novo endereço de retorno é armazenado na pilha e decrementado quando ocorre um retorno. Uma vez determinado o endereço, seu conteúdo é lido e armazenado em um registro chamado registro de instrução (Instruction Register). Desse registro, parte da instrução vai para o decodificador de instruções e parte pode ir para a ALU e/ou parte para o registro de endereçamento de dados (Data Addressing). Para entender o porque disso, devemos ter em mente que uma instrução nada mais é que uma palavra binária. Parte dela, que é efetivamente a instrução, indica ao decodificador de instruções qual a seqüência de ações deve ser executada (qual a “página” do decodificador de instruções). O restante constitui os operandos da instrução, ou seja, os dados a serem processados. Esses dados podem ser constantes ou endereços de dados variáveis na memória RAM. Conforme sua natureza e a instrução a ser executada eles tem um destino ou outro. A unidade lógico-aritmética ou ALU (Aritmetic and Lógic Unit) é o circuito responsável pelos cálculos em um processador. Como próprio nome diz, ela é responsável pela realização de operações lógicas, (E, OU, OU-exclusivo, deslocamentos, rotações, complemento), e aritméticas (incremento, decremento, adição, subtração, multiplicação, e divisão). Os processos de divisão e multiplicação são feitos com a ALU utilizando seqüências somas e subtrações, o que efetivamente o que a ALU é capaz de fazer. A ALU trabalha juntamente com dois registros especiais: o Acumulador (Accumulator) e o registro de estado de operações aritméticas (Status). É comum se referir ao acumulador simplesmente como Acc ou, no caso dos PICs, como W (Worker – Trabalhador ). O acumulador quase sempre está envolvido nas operações realizadas pela ALU. Ele pode ser um dos operandos, pode ser onde se armazena o resultado ou pode ser as duas coisas. Há também microcontroladores onde qualquer transferência de dados entre dois endereços da RAM passa pelo acumulador. Quanto ao registro de status, sua função é indicar resultados notáveis das operações matemáticas. Esses resultados são indicados por flags, que são bits desse registro. Através da análise dos flags é possível saber, dentre outras coisas, se uma operação resultou em zero; se houve estouro da capacidade de armazenamento (overflow), que acontece quando um resultado é maior que o máximo valor possível de ser representado pelo sistema; se o resultado de uma operação aritimética é negativo ou positivo. Existe uma interação do registro status com o decodificador de instruções, pois através da análise de seus flags é possível realizar instruções de testes. Para acessar a memória de dados e os periféricos existe um registro, que em nosso sistema é chamado de endereçamento de dados (Data Addressing) que pode receber valores de duas formas. A primeira é diretamente de parte da instrução. Nesse caso se está fazendo referência a endereços da RAM conhecidos e fixos, pois são carregados valores constantes existentes no programa. Esse modo é chamado endereçamento direto. Em muitos casos é necessário fazer referências a endereços variáveis. Isso é feito carregando o registro de endereçamento com dados provenientes de um outro registro, o registro de endereçamento indireto (Indirect Addressig). Como qualquer outro registro, ele pode ser carregado com um valor, constante ou proveniente de uma variável, pode ser incrementado, decrementado ou participar que qualquer operação lógico-aritmética. Sua função é semelhante a dos ponteiros em linguagens de alto nível. Exsto Tecnologia 16
  17. 17. Microcontroladores PIC16F877A Todo o sistema computacional trabalha sincronizado com um mesmo sinal de clock. Devemos lembrar que esse clock é o que faz o decodificador de instruções passar de uma instrução para a outra, e tudo o mais deve estar sincronizado com ele, senão haveria o caos. Para gerar esse sinal de clock é necessário um oscilador. Nos microcontroladores esse oscilador já faz parte do componente Independente da forma como o clock é gerado, esse sinal é aplicado a CPU e aos periféricos. É comum que a freqüência do clock dos periféricos seja menor que a da CPU. Para tanto são utilizados divisores de freqüência Outro ponto importante é o reset. Além do reset que ocorre quando o sistema é ligado, chamado de Power-on reset, os microcontroladores apresentam várias outras fontes de reset. Esses resets são proteções do sistema. Síntese genérica de operação de uma CPU: 1) O iniciar um programa, o contador de programa aponta para o primeiro endereço na memória de programa. 2) Neste endereço começa o programa. 3) O registrador de instrução armazena o dado guardado neste endereço. Este dado é composto da instrução e do operando. O operando pode ser proveniente da memória de programa ou da memória RAM ( memória de dados ). 4) O decodificador de instrução recebe a instrução do registrador de instrução. 5) A instrução corresponde a uma seqüência de passos programados em uma ROM, o chamado microcódigo. 6) Um contador dentro do decodificador de instrução varre essa seqüência de passos. 7) O decodificador de instrução começa então a acionar os dispositivos dentro ou fora da CPU através dos barramentos de dados, controle e endereço. 8) A partir desse ponto os dispositivos podem ser acionados nas mais diversas seqüências de operação dependendo da necesidade de processamento imposta pelo código, por exemplo: • O contador de programa aponta para o próximo endereço de memória de programa onde pode estar o valor de uma instrução com operando. A memória de programa é habilitada e esse valor é passado do para a ALU através do registro de instrução. • O contador de programa aponta para o próximo endereço na memória de dados. A memória de dados é habilitada e o valor armazenado nesse endereço passa para o acumulador. • A ALU opera aritmeticamente esses dois dados, sinaliza para o registrador de estados qual foi e estado da operação e disponibiza o resultado em sua saída. • Uma memória ou um dispositivo de saída pode ser habilitado e o resultado será armazenado em um desses dispositivos. Em resumo sempre ocorre um processo de BUSCA e EXECUÇÃO da instrução. A busca se refere a localização das instruções e dos operandos na memória e a execução se refere ao acionamento de dispositivos em seqüência para conseguir o resultado desejado. 1.2 Arquitetura Computacional 1.2.1 Arquitetura von-Neumann Na arquitetura von-Neumann, as memórias tanto de dados quanto de programa, são acessadas usando-se o mesmo barramento de dados; os portais de I/O também fazem uso do barramento de dados. Ou seja, a memória e os dispositivos de I/O compartilham o mesmo barramento em momentos distintos. Exsto Tecnologia 17
  18. 18. Microcontroladores PIC16F877A Vale lembrar aqui que uma instrução é como uma operação matemática, isto é, composta de operadores, que indicam o que será feito, e operandos, que são os parâmetros envolvidos na operação.Desta forma, o processo de execução de cada instrução é dividido em dois momentos: a leitura da instrução e a leitura dos operandos (fetch) e a execução da instrução propriamente dita. Nota-se que dessa forma o processador está parte do tempo ocupado com a leitura da memória de programa e, conseqüentemente não fica executando o firmware o tempo todo. Outra característica da arquitetura von-Neumann é que, visto que os operandos das instruções são geralmente do mesmo tamanho do barramento de dados, quanto mais complexa a instrução maior será a quantidade de endereços ocupados por ela na memória. Isto quer dizer que por exemplo, para um barramento de 8 vias, uma instrução de 16 bits é buscada e executada em duas partes de 8 bits. Por outro lado, como a complexidade da instrução não tem limite a não ser o espaço ocupado, podemos ter um set de instruções tão complexo quanto se queira. Podemos concluir que arquitetura von-Neumann consome muito tempo de processamento com a leitura da instrução e dos operandos. Conclui-se também que instruções diferentes ocupam quantidades diferentes de memória e são executadas em tempos diferentes. Memória Dados Programa CPU Barramento de Dados I/O Figura 1.5 – Arquitetura von-Neumann Os sistemas de arquitetura von-Neumann geralmente têm conjuntos de instruções complexos, o que equivale a dizer que possuem um grande número de instruções e cada instrução realiza uma grande seqüência de ações. Processadores desse tipo são chamados CISC (Complex Instruction Set CPU – CPU com Set de Instruções Complexo). 1.2.2 Arquitetura Harvard Já a arquitetura chamada de arquitetura Harvard, que é utilizada nos microcontroladores PIC, tem como principal característica acessar a memória de dados separadamente da memória de programa. A principal vantagem dessa arquitetura é que a leitura de instruções e de alguns tipos de operandos pode ser feita ao mesmo tempo em que a execução das instruções (tempo Tcy). Isso significa que o sistema fica todo o tempo executando instruções, o que acarreta um significativo ganho de velocidade. Enquanto uma instrução está sendo executada, a seguinte está sendo lida. Esse processo é conhecido como pipelining (canalização) e é ilustrado pela figura 1.6 abaixo. Exsto Tecnologia 18
  19. 19. Microcontroladores PIC16F877A Figura 1.6 – Pipeline O barramento de programa não necessariamente tem o mesmo tamanho do barramento de dados. Dessa forma, em uma única palavra da memória de programa pode conter operando e operadores, o que nos permite carregar toda a instrução em um único ciclo de leitura da memória. Memória de CPU Programa Barramento de Programa Memória de Dados I/O Barramento de Dados Figura 1.7 – Arquitetura Harvard Pode-se notar então que os tempos de execução e de leitura estão atrelados e são os menores possíveis. Isso acarreta em as instruções não poderem executar uma grande seqüência de ações, ou seja, não existem instruções complexas. Por isso, os PIC´s são considerados processadores RISC (Reduced Instruction Set CPU – CPU com Set de Instruções Reduzido). O número de instruções é reduzido, o que não significa que não se possa executar programas complexos, mas sim que seqüências complexas de ações devem ser construídas por seqüências de instruções básicas. Exsto Tecnologia 19
  20. 20. Microcontroladores PIC16F877A 2 O MICROCONTROLADOR PIC16F877A 2.1 A Microchip O fabricante dos microcontroladores PIC é a empresa americana Microchip. Atualmente ela é um dos maiores fabricante mundiais de microcontroladores de 8, 16 e 32 bits, além de possuir uma ampla linha de memórias e componentes analógicos. A Microchip trabalha com uma política de suporte ao cliente muito eficiente, que provavelmente é uma das causas de seu sucesso. Em seu site (www.microchip.com) existe uma grande quantidade de informação disponível. Além dos manuais dos componentes, existem muitas notas de aplicação (Application Notes) e projetos de referência, que são de grande ajuda para a formação da base de conhecimentos do estudante de microcontroladores PIC. 2.2 Microcontroladores PIC Os PICs são divididos em famílias. Cada família, ou plaforma, tem vários componentes, com tamanhos e recursos diferentes; no entanto o código desenvolvido para um componente de uma determinada família é compatível com os demais componentes da mesma família, exceto por umas poucas alterações, que ser referem principalmente aos periféricos. Cada família tem seu próprio set (conjunto) de instruções. Essas instruções são comandos em linguagem de programação assembly que compõe os softwares gravados nos microcontroladores, com as quais o aluno entrará em contato mais adiante. Dessa forma, ao se estudar um componente específico de uma família, se está adquirindo conhecimento para trabalhar com microcontroladores de toda a família. As famílias são se dividem ainda conforme o tamanho do barramento de bits, havendo microcontroladores de 8, 16 e 32 bits. As famílias de microcontroladores PIC são: • • • 8 bits o Família PIC10 o Família PIC12 o Família PIC14 e PIC17 o Família PIC16 o Família PIC18 16 bits: o Famílias PIC24F e PIC24H o Familias dsPIC30F e dsPIC33F 32 bits Exsto Tecnologia 20
  21. 21. Microcontroladores PIC16F877A o PIC32 o Os componentes diferem entre si basicamente em: • Quantidade de memória RAM • Quantidade de memória EEPROM de dados (alguns não têm nada) • Quantidade de memória Flash de programa • Número de pinos (8,14,18,28,40, ...) • Freqüência máxima de clock • Periféricos Nesse curso abordaremos o PIC16F877A, que é um dos componentes mais completos da família PIC16. Conforme foi dito anteriormente, ao se estudar um membro de uma família o estudante torna-se apto a trabalhar com toda a família. 2.3 A Arquitetura do PIC16F877A A figura 1.1 apresenta o diagrama em blocos do PIC16F877A. Trata-se de um microcontrolador de 8 bits de arquitetura Harvard. Seu barramento de programa é de 14 bits. A estrutura do PIC16F877A é semelhante ao sistema genérico estudado na aula 1. Seu funcionamento e análise também são semelhantes à aquele sistema genérico consistindo nas etapas de busca de instrução com habilitação e leitura de memória de programa e, execução da instrução com decodificação da instrução e acionamento de dispositivos em seqüência para o processamento da atividade programada. Podem ser observados os barramentos de dados e de programa. Além disso, nota-se como operandos da ALU e de endereçamento da memória de dados vem diretamente da memória de programa. Também são dignos de nota os periféricos, localizados na parte inferior do diagrama, que estão ligados ao barramento de dados. Exsto Tecnologia 21
  22. 22. Microcontroladores PIC16F877A Figura 2.1 – Diagrama em blocos do PIC16F877A 2.4 Geração de clock Os microcontroladores PIC possuem um circuito de oscilação interna, isto é, são capazes de gerar seu próprio clock (ou sinal de relógio) com acréscimo de poucos (ou nenhum) componentes externos. Existem sete modos diferentes de clock, e cada componente da família utiliza alguns deles. O modo de clock para cada aplicação é selecionado no momento da gravação do microcontrolador e não pode ser alterado pelo programa. São eles: • • • • • LP: Cristal/Ressonador de baixa freqüência e baixo consumo (Low Frequency (Power) Crystal) XT: Cristal/Ressonador (Crystal/Resonator); HS: Cristal/Ressonador de Alta Freqüência (High Speed Crystal/Resonator); RC: Oscilador RC Externo (External Resistor/Capacitor); o Com saída de clock o Sem saída de clock INTOSC (INTRC): Oscilador RC Interno de 4MHz (Internal Resistor/Capacitor) Esse modo não está presente no PIC16F877A, mas existe em outros componentes da família PIC16; Exsto Tecnologia 22
  23. 23. Microcontroladores PIC16F877A o Com saída de clock o Sem saída de clock Obs.: resistores, indutores, capacitores e cristais podem ser combinados formando circuitos osciladores em freqüências determinadas. Mais detalhes sobre os conceitos, funcionamento e projeto desse tipo de circuito podem ser encontrados em livros de eletrônica com capítulos sobre osciladores. 2.4.1 Modos LP,XT e HS Os modos LP, XT e HS utilizam um cristal ou ressonador cerâmico para estabilizar o clock. A diferença está na faixa de freqüência de cada modo e no consumo de energia associado a cada freqüência. O consumo de energia em sistemas computacionais está diretamente relacionado com o a freqüência de operação do sistema porque a dissipação de potência (transformação de energia elétrica em energia térmica) nos transistores que compõem os circuitos integrador digitais se dá nos momentos de transição de baixo para auto e de auto para baixo. Assim, quanto mais transições por unidade de tempo (ou seja, quanto maior a freqüência) maior a dissipação de energia e, portanto, maior o consumo. O modo LP refere-se a cristal/ressonador cerâmico de baixa freqüência. Esse modo trabalha com freqüências de oscilação de até 200 kHz e nele conseguimos o menor consumo dos três modos em questão. O modo XT abrange as freqüências de 200 kHz até 4 MHz e apresenta um consumo médio. O modo HS é para freqüências de 4 a 20 MHz e tem o mais alto consumo. Cada faixa de freqüência possui um ganho do circuito oscilador, que é ajustado de forma diferente para cada modo. É recomendado que se use o modo adequado para cada freqüência, caso contrário pode ocorrer mau funcionamento do oscilador. Além do cristal ou do ressonador, nos modos LP, XT e HS, devem existir capacitores ligados dos terminais do cristal terra, conforme mostra a figura 2.2. Os valores desses capacitores C1 e C2 são os indicados nas tabelas Capacitor Selection for Crystal Oscillator que se encontra nos manuais de cada PIC na seção que trata de configurações do oscilador. Para o PIC16F877A os valores são os apresentados na tabela 2.2. O valor de RF representa o ajuste interno do oscilador para cada modo (XT, LP e HS). O resistor RS pode ser necessário para alguns tipos de corte de cristal, mas geralmente não é usado. O Comando SLEEP desativa o oscilador no modo de baixo consumo, do qual trataremos mais adiante. Exsto Tecnologia 23
  24. 24. Microcontroladores PIC16F877A Figura 2.2 – Circuito do Oscilador a Cristal/Ressonador Modo de Oscilador Freqüência do Cristal Capacitores C1 e C2 32 kHz 33 pF 200 kHz 15 pF 100 kHz 47 a 68 pF XT 1 MHz 15 pF 4 MHz 15 pF 4 MHz 15 pF HS 8 MHz 15 a 33 pF 20 MHz 15 a 33 pF Tabela 2.1 – Seleção de capacitores para oscilador a cristal LP Capacitores maiores aumentam a estabilidade do oscilador, mas também aumenta o tempo de partida.O tempo de partida do oscilador é o tempo necessário para que o oscilador se estabilize, pois a oscilação não ocorre de forma imediata assim que o circuito é alimentado,conforme mostra a figura2.3. Esse tempo depende de uma série de fatores, além dos capacitores, com temperatura, tensão de alimentação e até capacitâncias parasitas do lay-out da placa. Esse tempo deve ser considerado pois o programa só será iniciado (ou reiniciado, no caso do modo de baixo consumo) quando o oscilador se estabilizar. Exsto Tecnologia 24
  25. 25. Microcontroladores PIC16F877A Figura 2.3 – Partida do oscilador Também é possível aplicar sinais de clock gerados externamente, bastando para isso selecionar o modo relativo a faixa de sinal utilizado. Nesse caso o sinal deve ser aplicado ao pino OSC1/CLKIN e o pino OSC2/CLKOUT deve permanecer em aberto. 2.4.2 Modos RC Também é possível trabalhar com osciladores RC (Resistor/Capacitor). Para isso é utilizada a montagem da figura 2.4 e selecionado o modo de oscilador como RC. Figura 2.4 – Circuito do oscilador no modo RC. O modo RC apresenta algumas limitações: a freqüência de trabalho é dependente de vários fatores (valores de resistor e de capacitor, tensão de alimentação, temperatura) e apresenta pouca estabilidade (tolerância dos resistores e capacitores, variação na tensão de alimentação, variações de temperatura). Por exemplo, em uma produção em quantidade de produtos utilizando PIC´s no modo RC, a freqüência de cada produto pode variar em função da tolerância dos resistores utilizados. Não é possível garantir precisão em nada que se baseie em tempo no programa. Assim esse modo só é recomendado para aplicações nas quais a freqüência não é um fator crítico. Essa situação é que justifica a utilização do modo, pois um oscilador RC tem custo menor que um a cristal. O resistor REXT deve estar entre 3kΩ e 100kΩ e o capacitor CEXT deve ser superior a 20pF. O circuito pode funcionar sem capacitor CEXT, mas nessa situação ele se torna muito suscetível a variações drásticas de freqüência devido a capacitâncias externas (do próprio lay-out, por exemplo). Além disso, a variação da freqüência é maior para resistores maiores e capacitores menores. Exsto Tecnologia 25
  26. 26. Microcontroladores PIC16F877A No modo RC com saída de clock o terminal OSC2/CLKOUT apresenta a freqüência do oscilador divida por quatro, que pode ser utilizado como fonte de clock para outros pontos do circuito. Já no modo sem saída de clock, esse terminal pode ser utilizado como I/O. 2.4.3 Modo INTOSC Esse modo de oscilador não está disponível no PIC16F877A, mas pode ser encontrado em outros modelos de microcontroladores. No modo INTOSC (ou INTRC) não se necessita de nenhum outro componente externo. Portanto, além da redução de custos, ele libera terminais do microcontrolador para serem utilizados como I/O. Nesse modo, o sinal de clock é obtido de forma semelhante ao funcionamento do modo RC, porém o “resistor” e “capacitor” são implementados na própria pastilha do componente. Devido a isso temos geralmente uma ou duas freqüências de clock fixas. Tipicamente o oscilador interno é menos preciso que o oscilador a cristal é mais preciso que o oscilador RC, com tolerâncias entre +/- 1 e 10 %. 2.4.4 Comparação entre os modos de oscilador Na tabela 2.2 é feita uma comparação entre os diferentes modos de oscilador. Quesito Tipo de Oscilador Cristal (HS, XT e HS) RC Externo Precisão Preciso Impreciso Estabilidade Estável Instável Variedade de freqüências Pequena Grande Custo Alto Baixo Tabela 2.2 – Seleção de capacitores para oscilador a cristal RC Interno Pouco preciso Pouco Estável Nenhuma Nenhum 2.4.5 Clock e execução das instruções Cada instrução executado pelos microcontroladores PIC16 gasta 4 ciclos de clock, chamados “ciclos Q”. Esses 4 ciclos compõem um ciclo de instrução (TCY) que dura 4 vezes mais que um ciclo Q , portanto um ciclo de instrução tem ¼ da freqüência do oscilador e o sinal desse ciclo maior é chamado de clock de instrução ou clock de periféricos. Ou seja, o tempo de execução de cada instrução e de 4 períodos de clock. Em cada um dos ciclos Q é realizada uma etapa da instrução, conforme mostrado na tabela 2.2. Graficamente esse processo é apresentado na figura 2.5. Ciclo Ação Q1 Ciclo de decodificação da instrução Q2 Ciclo de leitura de dados Q3 Ciclo de processamento Q4 Ciclo de escrita de dados Tabela 1.2 – Ciclos de execução das instruções Exsto Tecnologia 26
  27. 27. Microcontroladores PIC16F877A Figura 2.5 – Ciclos de instrução Alguns periféricos e algumas funções do PIC não são sincronizados nem com o clock do oscilador nem com o clock de periféricos, mas com os ciclos Q. 2.5 Memórias 2.5.1 Memória de programa O PIC16F877A possui 8K-palavras de memória de programa. Já que se trata de um processador RISC, o tamanho das palavras da memória de programa é maior que o barramento de dados. Assim, apesar de ser um microcontrolador de 8 bits, a memória de programa é composta por palavras de 14 bits. Cada palavra, isto é, cada endereço de memória de programa guarda uma instrução. Dessa forma, um programa de 500 instruções ocupará 500 bytes. O vetor de reset é o endereço 0000h. Como vimos, isso significa que o programa deve ser escrito a partir desse endereço. O vetor de interrupção, para todas as interrupções é o 0004h. A memória é do tipo FLASH, suportando um grande número de reescritas. É possível, através de rotinas que trataremos em outro ponto do curso, realizar escrita na memória e programa. Na estrutura das instruções de chamada e desvio da família 16F o espaço reservado para endereço é de 11 bits. Portanto é possível endereçar diretamente 2048 endereços de memória. Sendo que o PIC16F877A tem 8k endereços de memória de programa, essa memória é dividida em unidades que chamaremos de páginas. Dentro de uma mesma página é possível realizar saltos e desvios para qualquer ponto. Mas se um salto ou desvio vai de uma página para outra é necessário fazer um ajuste prévio dos dois bits mais significativos do SFR PCLATH, conforme mostrado na tabela abaixo. PCLATH Bit 4 Bit 3 0 0 0 1 0 1 2 1 0 3 1 1 Tabela 2.3 – Páginas de memória de programa Página A figura 2.6 apresenta o mapemamento de memória de programa. Exsto Tecnologia 27
  28. 28. Microcontroladores PIC16F877A 0000h Vetor de reset 0001h 0002h Uso geral 0003h 0004h Vetor de interrupção 0005h Página 0 . . Uso geral . 07FFh 0800h . . Uso geral Página 1 . 0FFFh 1000h . . Uso geral Página 2 . 17FFh 1800h . . Uso geral Página 3 . 1FFFh Figura 1.6 – Mapeamento de memória do PIC16F877A Os demais microcontroladores da família PIC16F seguem esse mesmo mapeamento de memória, contudo nem todos os modelos têm 8k-words, isto é, alguns não tem todas as páginas implementadas. Por exemplo, o PIC16F874A tem as páginas 0 e 1 mas não as 2 e 3, portanto tem 4kwords; já o 16F628A tem 2k-words, ou seja, somente a página 0. 2.5.2 Memória de dados O core (núcleo ou processador do microcontrolador) da família PIC16 existem 9 vias de endereçamento o que permite um acesso a 512 endereços diferentes (29 = 512). Contudo, nem sempre temos memória RAM implementada para todos os endereços. A quantidade e a disposição da RAM de dados varia de microcontrolador para microcontrolador. No PIC16F877A existem 368 bytes de memória RAM de dados. Ela é composta por registros de funções especiais (SFR – Special Function Registers) e a RAM de uso geral (GPR – General Purpose RAM). Os SFR são responsáveis pelo controle da CPU e dos periféricos, além de conterem os registros dos portais. Na RAM de uso geral é onde o programa armazenará suas variáveis. A memória RAM pode ser acessada de duas formas: por acesso direto e por acesso indireto. Acesso direto ocorre quando o endereço acessado faz parte da própria instrução (é um dos operandos). Já o acesso indireto é feito através de duas variáveis, uma contendo o endereço a ser acessado e a outra Exsto Tecnologia 28
  29. 29. Microcontroladores PIC16F877A se comportando como o byte acessado. Este último modo de endereçamento pode ser muito útil em algumas situações e será estudado mais adiante. Para acesso direto, a RAM é dividida em 4 bancos. Isso ocorre porque a capacidade de máxima de acesso de memória dos microcontroladores PIC é de 512 bytes. Portanto, são necessários 9 bits para compor os endereços. Como cada instrução tem apenas 14 bits, e esses bits devem ser divididos entre operadores e operandos, não há espaço para um endereço de 9 bits. Na verdade, as instruções armazenam apenas 7 bits do endereço a ser acessado. Os dois bits restantes fazem parte do registro de função especial STATUS e são chamados RP1 e RP0. Já que dois bits podem gerar 4 combinações, existe essa divisão em 4 bancos. Para acessar um registro em um banco diferente do banco atual, é necessário ajustar previamente RP1 e RP0. Na prática utilizamos o máximo possível endereços do banco 0, e mudamos para os demais bancos quando necessário, retornando novamente ao banco 0. A divisão de bancos é feita conforme a tabela 1.3. Banco 0 1 2 RP1 0 0 1 RP0 0 1 0 Endereços 00h ~ 7Fh 80h ~ FFh 100h ~ 17Fh 3 1 1 180h ~ 1FFh Tabela 1.4 - Seleção de bancos de RAM No caso do endereçamento indireto, o endereço é armazenado em um registro de função especial chamado FSR. Como trata-se de um registro de 8 bits, falta 1 bit, que se chama IRP e faz parte do STATUS. Quando IRP é ‘0’ são acessados os bancos 0 e 1, quando é ‘1’, são acessados os bancos 2 e 3. Os registros de funções especiais têm seus nomes e os nomes de seus bits já definidos em um arquivo. Existe um arquivo desses para cada PIC e a forma de incluí-lo no programa será mostrado mais adiante. Podemos então tratar os SFR pelo seus nomes, não havendo a preocupação com o endereço que eles ocupam. Também não é necessário saber qual bit de um registro tem determinada função, apenas o nome do mesmo. Na apresentação desses registros será seguida a convenção abaixo, que a mesma utilizada no manual dos componentes. R/W – 0 IRP Bit 7 R/W – 0 RP1 R/W – 0 RP0 R–1 R– 1 R/W – x R/W – x NOT_TO NOT_PD Z DC R/W – x C Bit 0 STATUS Os bits são numerados de 0 a 7, da direita para a esquerda. O nome do registro aparece em baixo. Sobre cada bit temos algumas informações: se ele pode ser lido (R) escrito (W), se não é implementado. Também contém sua situação após o reset, podendo ser ‘0’, ‘1’ ou desconhecida (x). Por exemplo, sobre o bit RP0 está escrito R/W-0, que significa que pode ser lido ou escrito e seu valor no reset é 0. No anexo B encontra-se o mapa de memória do PIC16F628A. Pode-se observar os nomes dos SFR e as regiões de uso geral. Note que apesar de ser possível acessar 512 bytes, foram implementados apenas 224 bytes. As posições não implementadas estão em cinza na figura. Note ainda que os últimos 16 endereços de todos os bancos acessam os mesmos bytes no banco 0. Exsto Tecnologia 29
  30. 30. Microcontroladores PIC16F877A A figura 1.7 trás o mapeamento de memória RAM do PIC16F877A com os nomes dos registros de função especial e as áreas de uso geral (GPR). As regiões em cinza correspondem a endereços para os quais não há memória implementada. No manual do PIC16F877A existe um detalhamento maior dos bits que compõe os SPR´s. A função de vários desses registros será explicada no decorrer do curso. Tabela 1.7 - Mapeamento de memória RAM de dados Exsto Tecnologia 30
  31. 31. Microcontroladores PIC16F877A 2.6 RESET O PIC possui várias fontes de reset (reinicialização), que são: • • • • • • Reset ao ligar (POR – Power-on Reset); Reset por MCLR durante operação normal; Reset por MCLR no modo SLEEP (que será tratado adiante); Reset por Watch-Dog durante operação normal; Reset por Watch-Dog no modo SLEEP; Reset por queda de alimentação (BOR – Brown-Out Reset). O reset por MCLR é acionado quando ao terminal MCLR (pino 4) é aplicado nível lógico baixo. MCLR é o terminal de Reset do componente, sendo um terminal baixo ativo, isto é, o reset ocorre em ‘0’. Além disso, o terminal de MCLR possui internamente um filtro para evitar que ruídos possam causar reset acidental. O modo como os registros se comportam em cada reset é variado. Para saber quais são os “valores iniciais” de cada registro, deve ser consultada a tabela de situações iniciais dos registros, presente no manual de cada PIC. A seguir são detalhadas algumas fontes e funcionalidades associadas ao reset. 2.6.1 POR – Power-On Reset Essa funcionalidade detecta quando o circuito é ligado, percebendo a subida da tensão de alimentação, e realiza o reset do microcontrolador. Dessa forma podemos dispensar o resistor e capacitor tradicionalmente ligados ao terminal de reset para gerar um nível lógico baixo quando o sistema é ligado, garantido assim o reset inicial. O terminal MCLR pode ser ligado diretamente ao nível lógico alto sendo recomendado utilizar um resistor de 10 kΩ ligando-o à VDD. 2.6.2 PWRT – Power-up Timer Trata-se de um timer de aproximadamente 72ms que mantém o microcontrolador em condição de reset durante esse tempo. É útil, pois permite ao sistema ter tempo de se estabilizar (tensão, reset dos demais componentes, etc.) antes do programa começar a ser executado. 2.6.3 OST – Oscillator Start-up Timer Este timer “conta” 1024 ciclos válidos de clock antes de sair da condição de reset, permitindo assim que o oscilador se estabilize, conforme trato no tópico “Modos LP, XT e HS”. Essa funcionalidade é habilitada somente nos modos LP, XT e HS. 2.6.4 BOR – Brown-out Reset Essa funcionalidade visa reiniciar o sistema se houver uma queda na tensão de alimentação. O BOR ocorre quando a alimentação atinge aproximadamente 4V por mais de 100µs (quedas por tempo intervalos menores que esse são ignorados pois podem se tratar de ruídos na alimentação), em situações como as mostradas na figura2.8. Exsto Tecnologia 31
  32. 32. Microcontroladores PIC16F877A Figura 2.7 – Situações de Brown-out 2.6.5 Seqüência de inicialização 1. 2. 3. 4. 5. O circuito é ligado: a tensão de alimentação começa a subir; É detectada a subida da tensão: ocorre POR; O sistema aguarda o tempo de PWRT (aprox. 72 ms); O oscilador começa a funcionar: 1024 ciclos são contados (OST); O programa começa a ser efetivamente executado. 2.6.6 Identificação de Reset pelo Software Apesar de existirem várias fontes de Reset, é possível determinar qual reset ocorreu. Para isso existem 4 bits: NOT_TD e NOT_PD do registro STATUS e NOT_BOR e NOT_POR do registro PCON (Banco 1). As condições desses bits para cada reset podem ser vistas na tabela 2.4. Condição NOT_POR NOT_BOR Reset por Power-on 0 X Impossível 0 X Impossível 0 X Reset por Brown-out 1 0 Reset pelo Watchdog 1 1 Dispertar pelo Watchdog 1 1 Reset pelo MCLR em operação normal 1 1 Reset pelo MCLR no modo SLEEP 1 1 Tabela 2.4 – Bits de status e seus significados NOT_TO 1 0 x 1 0 0 U 1 NOT_PD 1 X 0 1 1 0 U 0 Essa informação pode ser útil, permitindo que providências sejam tomadas em situações específicas de problema. O esquema da figura 1.8 mostra como é a lógica de reset. Exsto Tecnologia 32
  33. 33. Microcontroladores PIC16F877A Figura 2.8 – Lógica de reset 2.7 Watch-Dog Timer Esse timer de 8 bits, que é baseado em um oscilador RC interno próprio, independente de qualquer outra coisa, gera um reset quando “estoura”. Ele é importante em situações em que, por qualquer motivo, o microcontrolador “trava”. Quando habilitado ele deve ser zerado a intervalos regulares menores que seu tempo máximo pela instrução CLRWDT. Se o programa “para” e o Watch-Dog não é zerado, tendo sido habilitada essa função na gravação, ocorre o reset. Ao timer de 8 bits pode ser atribuído um pré-escala, como será visto mais adiante. Essa funcionalidade é muito útil, pois, na grande maioria das situações práticas, é melhor que o sistema reinicie do que fique inoperante. Desenvolvendo o código adequadamente é possível fazer com que o reset sequer tenha efeitos perceptíveis para o sistema. O período do watchdog é de 18 ms (típico). Com pré-escala máxima pode chegar a 2,3s. 2.8 Modo de baixo consumo – Modo SLEEP O modo de baixo consumo (Power-dowm Mode), também chamado de modo SLEEP (sono, em inglês), é a situação de menor consumo do microcontrolador. Ele é ativado pela execução da instrução SLEEP. Nesse modo o oscilador é desligado, fazendo com que o microcontrolador pare completamente a execução do programa. Dessa forma conseguimos reduzir drasticamente o consumo do sistema, o que é importante sobretudo em sistemas alimentados por bateria. O microcontrolador pode ser “acordado” por qualquer um dos eventos abaixo: • • • Qualquer reset; Estouro do Watch-Dog (se este estiver habilitado); Qualquer periférico que estiver com sua respectiva interrupção habilitada (incluso INT e interrupção por mudança no Portal B). Exsto Tecnologia 33
  34. 34. Microcontroladores PIC16F877A Quando da ocorrência de algum reset, o programa recomeça sua execução no vetor de reset (0000h). Se, porém, ocorrer um estouro do Watch-Dog ou a chamada de alguma interrupção o programa continua sua execução a partir do endereço imediatamente posterior a instrução SLEEP que ativou o modo de baixo consumo. E ainda, se o controle geral de interrupções estiver habilitado, o programa recomeça pelo vetor de interrupções (0004h) se desperto por interrupção. Assim, se desejamos que uma interrupção simplesmente “acorde” o microcontrolador, devemos desabilitar globalmente as interrupções. Deve-se ter atenção ao fato de que no modo SLEEP o oscilador está desligado. Dessa forma não podem ser utilizadas interrupções dos timer’s para a saída do modo, se estes timer’s utilizarem como fonte de clock o oscilador interno, nem demais periféricos cujo funcionamento se baseie no oscilador principal do sistema. 2.9 Características especiais 2.9.1 Proteção de Código (Code Protect) O programa gravado em um PIC pode ser protegido, isto é, pode ser impedida a sua leitura. Essa funcionalidade é muito importante, sobretudo quando se trata de produção industrial, visto que assim se podem preservar os direitos autorais do autor do firmware e dificultar a cópia de produtos. 2.9.2 Locais de Identificação (ID Locations) Existem 4 endereços não acessáveis pelo microcontrolador que podem ser utilizados para identificação do componente (por exemplo, o número de série do produto ou a versão do firmware). 2.9.3 Pinagem e Hardware Básico Como já foi comentado anteriormente, o PIC16F877A é um componente de 40 pinos, em seu encapsulamento PDIP (Plastic Dual In-line Package – Encapsulamento plástico em linha dupla). Esses pinos podem ser divididos em terminais de alimentação, de reset, de conexão com o oscilador e os terminais de portais e periféricos. Como se trata de um componente com diversas características e um pequeno número de terminais, muitos terminais possuem mais de uma função. Dessa forma, temos terminais de entrada e saída dos portais multiplexados com terminais dos periféricos, com terminais do oscilador e terminais de reset. De uma forma geral, quando usamos um determinado periférico, o terminal é associado a ele serve ao periférico e sua função de entrada e saída fica desativada. Quando o periférico não é utilizado, o terminal trabalha como I/O. A figura abaixo apresenta a pinagem do PIC 16F877A. Para facilitar a escrita, toda documentação da Microchip quando se refere a um terminal não utiliza a notação bit N do portal X, e sim RX N. Por exemplo, o bit 2 do portal A é representado por RA2, o bit 7 do portal C por RC7, e assim por diante. Exsto Tecnologia 34
  35. 35. Microcontroladores PIC16F877A Figura 2.1 – Pinagem do PIC 16F877A As principais características do PIC são apresentadas na tabela abaixo. Característica Valor Unidade Frequência de Operação 0 ~ 20 MHz MHz Resets POR, BOR Memória de Programa (FLASH) 8k palavras de 14 bits Memória de Dados (RAM) 368 bytes Memória de Dados Não Volátil (EEPROM) 256 bytes Interrupções 15 Timers 3 Módulo CCP 2 Módulo SSP (SPI e I2C) 1 Comparador analógico 2 Comunicação Paralela PSP Módulo ADC de 10-bits 8 canais Set de Instruções 35 instruções A tabela seguinte contém as características elétricas do PIC 16F877A. Característica Temperatura de Trabalho Vdd ( em relação à Vss) Máxima Corrente de saída em Vss Máxima Corrente de entrada em Vdd Máxima Corrente drenada por I/O Máxima Corrente de saída po I/O Máxima Corrente drenada por PORTA + PORTB + PORTE Máxima Corrente fornecida por PORTA + PORTB + PORTE Máxima Corrente drenada por PORTC + PORTD Máxima Corrente fornecida por PORTC + PORTD Min -55 4 - Max Unidade 125 ºC 5,5 V 300 mA 250 mA 25 mA 25 mA 200 mA 200 mA 200 mA 200 mA Exsto Tecnologia 35
  36. 36. Microcontroladores PIC16F877A Os níveis de tensão de entrada e saída para o PIC são apresentados na tabela abaixo. Os valores são considerndo que a alimentação é de 5,0 V. O buffer de entrada de cada pino pode ser do tipo TTL simples ou Schmitt Trigger. Para saber qual o tipo de buffer deve-se consultar a parte do manual de cada componente relativo aos portais de I/O. Parâmetro VIH VIH VOL VOH Tipo de buffer TTL Schmitt Trigger TTL Schmitt Trigger Min Vss Vss 2,0 4,0 4,3 Max 0,8 1,0 VDD VDD 0,6 - Unid V V V V V V Como já foi discutido, um microcontrolador possui todos os componentes básicos de um sistema computacional em um único chip. Assim o circuito básico necessário para um PIC funcionar é bastante reduzido. É necessário somente : • A alimentação de +5V, bem regulada; • Como em todo circuito digital, um capacitor de desacoplamento de 100nF bem próximo aos terminais de Vdd e Vss; • O terminal /MCLR é o terminal de reset do PIC e é baixo ativo. Por isso ele deve ser mantido em nível lógico alto. Recomenda-se a liga-lo a Vdd por um resistor (10kΩ). Não é necessário o circuito RC de reset. • Definir-se um esquema de clock conforme já tratado. Um cuidado que deve ser tomado, independente do tipo de oscilador escolhido, é fazer com que os componentes externos do circuito oscilador fiquem bem próximo uns dos outros e todos bem próximos ao microcontrolador. Além disso, quando for confeccionada uma placa de circuito impresso deve-se minimizar as indutâncias e capacitâncias parasitas. Isso é feito aumentando a espessura das trilhas, diminuindo seu comprimento e posicionando trilhas excessivamente próximas umas das outras. Esses cuidados são fundamentais quando se trabalha com freqüências altas. 2.10 Gravação A gravação do microcontrolador PIC pode ser realizada sem que o componente seja retirado da placa (gravação in-circuit). Essa gravação é feita de forma serial utilizando somente dois pinos: PB7/PGD para envio de dados e RB6/PGC para clock. Além dos pinos RB7 e RB6 é necessário que o pino MCLR/VPP receba uma tensão de 13VDC +/- 0,5V durante o processo de gravação. Também é necessário que o microcontrolador esteja devidamente alimentado, portanto VDD e VSS devem estar devidamente conectados. Exsto Tecnologia 36
  37. 37. Microcontroladores PIC16F877A 2.11 O conjunto de instruções do PIC16F877A O set de instruções de um microcontrolador é o conjunto de todas as instruções que o processador pode interpretar e executar. Voltando a analogia com um instrumento musical, são como as notas musicais que o compositor usa para escrever uma partitura. Cada processador (ou core) possui seu próprio conjunto de instruções (ou set de instruções). Isso significa que todos os microcontroladores da linha PIC16 são capazes de executar o mesmo código, ou seja, falam a mesma língua. Significa também que microcontroladores de outras famílias ou fabricantes não são compatíveis com o código gerado para PIC16 ou para outro conjunto de instruções (não falam a mesma lingua). Cada instrução na verdade é um código numérico (chamado Opcode) que o decodificador de instruções é capaz de interpretar e disparar uma seqüência de ações pré-definida. Por exemplo, uma instrução de soma inicia um processo interno do microcontrolador que realiza movimento de bytes, ajusta e realiza operações na unidade lógico-aritmética, carrega resultados em endereços de memória. Fazendo uma analogia com um livro de culinária, o opcode indica a página onde estão os passos para a realização de uma receita. Como criar uma lógica complexa de programação usando apenas códigos numéricos seria um trabalho muito desgastante e o resultado muito confuso foi criada uma linguagem simbólica que associa nomes, denominados mnemônicos, aos opcodes; por conveniência esses nomes fazem referência a ação realiza, como poderá ser observado brevemente. Para assembler é o programa responsável por “traduzir” o código mnemônico (entendido pelo ser humano) para um código numérico composto de opcodes (entendido pelo core do microcontrolador). Antes de estudar as instruções deve-se definir alguns termos que serão utilizados na descrição das instruções e na apresentação de sua sintaxe: f W b k x d PC NOT_TO NOT_PD Registro da RAM (0x00~0x7F) Acumulador (Working register) Bit em um byte Constante de 8 bits Irrelevante destino: 0 => Acumulador (W) 1=> registro Program Counter Bit de time-out Bit de Power Down TOS Topo da pilha (Top Of Stack) O acumulador, chamado no PIC de Working Register ou simplesmente W, é um registro interno do microcontrolador, não mapeado em RAM, que está envolvido na maioria das instruções. Como será visto, ele participa das instruções de movimentação e é um dos operandos ou o destino do resultado nas operações lógico e matemáticas. Para maior compreensão do funcionamento das instruções se faz necessário comentar o funcionamento do registro de STATUS. Os bits desse registro nos apresentam a situação do Exsto Tecnologia 37
  38. 38. Microcontroladores PIC16F877A microcontrolador a cada instrução. Esses bits são tipicamente chamados de flags (Bandeiras). Através deles podemos saber de resultados de operações da ALU (se uma subtração resultou em zero, se uma soma causou “overflow”, etc), a situação do RESET, além do controle bancos de memória. R/W – 0 R/W – 0 IRP RP1 R/W – 0 RP0 R–1 R/– 1 R/W – x R/W – x R/W – x NOT_TO NOT_PD Z DC C Bit 7 Bit 0 STATUS • • • • • • • IRP :bit de seleção de banco, usado para endereçamento indireto. o 1 = Bancos 2 e 3 (100h - 1FFh) o 0 = Bancos 0 e 1 (00h - FFh) RP1~RP0 : bit de seleção de banco, usado para endereçamento direto. o 11 = Banco 3 (180h - 1FFh ) o 10 = Banco 2 (100h - 17Fh ) o 01 = Banco 1 (80h - FFh ) o 00 = Banco 0 (00h - 7Fh ) NOT_TO: Bit indicador de Time-out o 1 = após todos os Resets, exceto time-out do WDT o 0 = ocorreu um time-out do WDT NOT_PD: Bit indicador de Power-down o 1 = quando é ligado ou após a instrução CLRWDT o 0 = pela execução de uma instrução SLEEP Z: Bit indicador de zero o 1 = se o resultado de uma operação da ALU é zero o 0 = se o resultado de uma operação da ALU é diferente de zero DC: Carry/Borrow de dígito. Para borrow o sinal é inverso o 1 = houve transporte do 4o. para o 5o. bit o 0 = não houve transporte do 4o. para o 5o. bit C: Carry/Borrow . Para borrow o sinal é inverso o 1 = houve transporte do 8o. bit o 0 = não houve transporte do 8o. bit O conjunto de instruções do core PIC16 é composto de 35 instruções, apresentadas a seguir. O campo “Sintaxe” mostra a forma de se escrever a instrução. O campo “Operadores” indica quais os operadores envolvidos e quais seus domínios. “Operação” apresenta a operação realizada pela instrução. O campo “Flags Afetados” mostra quais flags de STATUS são afetados pela execução da operação; essas alterações são comentadas abaixo dos quadros. No campo “Ciclos” está o número de ciclos de máquina gastos para a execução da instrução. Finalmente, o campo “Exemplo” apresenta um exemplo simples de utilização da instrução. As instruções são divididas, conforme sua função, nos seguintes tipos: • • • • Manipulação de byte Manipulação e bit Matemáticas Lógicas Exsto Tecnologia 38
  39. 39. Microcontroladores PIC16F877A • • • Testes e desvios condicionais Chamadas e desvio (controle de fluxo) Controle (da CPU) No anexo A existe uma tabela resumo de todas as instruções. Recomenda-se tirar uma cópia desta pagina e tela sempre à mão para consulta rápida. 2.11.1 Manipulação de Byte As instruções de manipulação de byte permitem atribuir valores a endereços da RAM e ao registro W. É importante ressaltar que apesar de normalmente o mnemônico dessas instruções trazer a palavra move (mover) o valor do registro é na verdade copiado, isto é, o registro de destino recebe o valor do registro de origem, mas o valor da origem não é alterado. CLRW "Zera" o registro W. O bit Z do registro STATUS é setado. Sintaxe CLRW Operadores Nenhum Operação (W) 00h Flags Afetados Z Ciclos 1 Exemplo CLRW Alterações nas Flags: Como a instrução resultou em um registro se tornar 0, o bit Z é setado indicando esse evento. CLRF "Zera" o registro indicado por f. O bit Z do registro STATUS é setado. Sintaxe CLRF f Operadores 0 ≤ f ≤ 127 Operação (f) 00h Flags Afetados Z Ciclos 1 Exemplo CLRF TEST Alterações nas Flags: Como a instrução resultou em um registro se tornar 0, o bit Z é setado indicando esse evento. MOVLW Move a constante k para W. Sintaxe Operadores Operação Flags Afetados Ciclos Exemplo MOVLW k 0 ≤ k ≤ 255 (W) k Nenhum 1 MOVLW 35h Exsto Tecnologia 39
  40. 40. Microcontroladores PIC16F877A MOVF Move o valor do registro (f) para o destino. Se d é 0 destino é W; se d é 1 o destino é o próprio registro (f). Mover o valor do registro para ele mesmo é útil para testarmos se o valor é 0, uma vez que essa instrução afeta o bit Z do registro STATUS. Sintaxe Operadores MOVF f, d 0 ≤ f ≤ 127 d=0:W d = 1 : registro f (d) (f) Z 1 MOVF TEST,0 Operação Flags Afetados Ciclos Exemplo Alterações nas Flags: Z = 0: o valor movido, é diferente de zero. Z = 1: o valor movido, é 0. MOVWF Move o conteúdo de W para o registro f. Sintaxe Operadores Operação Flags Afetados Ciclos Exemplo 2.11.2 MOVWF f 0 ≤ f ≤ 127 (f) W Nenhum 1 MOVWF TEST Manipulação de bit As operações de manipulação de bit são uma particularidade dos microcontroladores e dificilmente são encontradas em outros sistema computacionais. Sua função é permitir alterar o valor de um único bit de um determinado registro, sem qualquer influência nos demais bits. BCF "Zera" o bit b do registro f. Sintaxe Operadores Operação Flags Afetados Ciclos Exemplo BCF f, b 0 ≤ f ≤ 127 0≤b≤7 f[b] 0 Nenhum 1 BCF CONTROLE,5 Exsto Tecnologia 40
  41. 41. Microcontroladores PIC16F877A BSF "Seta" o bit b do registro f. Sintaxe Operadores Operação Flags Afetados Ciclos Exemplo 2.11.3 BSF f, b 0 ≤ f ≤ 127 0≤b≤7 f[b] 1 Nenhum 1 BSF CONTROLE,7 Matemáticas As instruções matemáticas são capazes de realizar operações matemáticas básicas através da operação da ALU do microcontrolador. Como trata-se de um microcontrolador de 8 bits essas operações tem operadores e resultados de 8 bits. Para cálculos com valores maiores de 8 bits devese desenvolver rotinas fazendo uso das instruções básicas. Da mesma forma, operações mais complexas podem ser construídas a partir das rotinas básicas. Essa raciocínio se aplica para operações de multiplicação e divisão, que não suportadas pela ALU do PIC16. ADDLW Realiza a adição do valor contido em W com a constante k. O resultado é armazenado em W. Sintaxe Operadores Operação Flags Afetados Ciclos Exemplo Alterações nas Flags: ADDLW k 0 ≤ k ≤ 255 (W) (W) + k C, DC, Z 1 ADDLW 35h C = 1: o resultado da adição é maior que 255. C = 0: o resultado da adição é menor ou igual a que 255. DC = 1: o resultado da adição causou o transporte de 4o para o 5o bit DC = 0: o resultado da adição não causou o transporte de 4o para o 5o bit Z = 0: o resultado da adição é diferente de zero. Z = 1: o resultado da adição é 0. Pode ocorrer com 128 + 128 = 256: C=1 e o resultado da adição é igual a 0. ADDWF Realiza a adição do valor contido em W com o valor do registro f. O resultado é armazenado no destino: d=0 para W ou d=1 para o registro f. Exsto Tecnologia 41
  42. 42. Microcontroladores PIC16F877A Sintaxe Operadores Operação Flags Afetados Ciclos Exemplo Alterações nas Flags: ADDWF f, d 0 ≤ f ≤ 127 d=0:W d = 1 : registro f (d) (W) + (f) C, DC,Z 1 ADDWF TEST,0 C = 1: o resultado da adição é maior que 255. C = 0: o resultado da adição é menor ou igual a que 255. DC = 1: o resultado da adição causou o transporte de 4o para o 5o bit DC = 0: o resultado da adição não causou o transporte de 4o para o 5o bit Z = 0: o resultado da adição é diferente de 0. Z = 1: o resultado da adição é 0. Pode ocorre com 128 + 128 = 256: C=1 e o resultado da adição é igual a 0. DECF Decrementa o valor contido no registro f. O resultado é armazenado no destino: d=0 para W ou d=1 para o registro designado por f. Sintaxe Operadores Operação Flags Afetados Ciclos Exemplo Alterações nas Flags: DECF f,d 0 ≤ f ≤ 127 d=0:W d = 1 : registro f (d) (f) – 1 Z 1 DECF COUNT,0 Z = 0: o resultado do decremento é diferente de zero. Z = 1: o resultado do decremento é 0 (quando o valor original for igual a 1). INCF Incrementa o valor contido no registro f. O resultado é armazenado no destino: d=0 para W ou d=1 para o registro designado por f. Sintaxe Operadores Operação Flags Afetados Ciclos Exemplo INCF f,d 0 ≤ f ≤ 127 d=0:W d = 1 : registro f (d) (f) + 1 Z 1 INCF COUNT,0 Exsto Tecnologia 42
  43. 43. Microcontroladores PIC16F877A Alterações nos Flags: Z = 0: o resultado do incremento é diferente de zero. Z = 1: o resultado do incremento é igual a 0 (quando o valor original for igual a 255). SUBLW O valor contido em W é subtraído, pelo método do complemento 2, da constante de oito bits k. O Resultado é armazenado em W. Sintaxe Operadores Operação Flags Afetados Ciclos Exemplo Alterações nas Flags: SUBLW k 0 ≤ k ≤ 255 (W) k - (W) C, DC, Z 1 SUBLW 23h ATENÇÃO: nessa operação os bits C e DC tem significado inverso ao que seria esperado, isto é, quando ocorre um borrow ("estouro para menos"), os bits C e DC ficam em zero, ao contrário que quando ocorre um Carry ("estouro para mais"), quando C e DC ficam em 1. C = 1: o resultado da subtração é maior ou igual a 0. C = 0: o resultado da subtração é menor a 0. DC = 1: o resultado da subtração não causou o transporte de 5o para o 4o bit DC = 0: o resultado da subtração causou o transporte de 4o para o 5o bit Z = 0: o resultado da subtração é diferente de zero. Z = 1: o resultado da subtração é igual a 0. SUBWF O valor contido em W é subtraído, pelo método do complemento 2, do valor contido no registro f. O resultado é armazenado no destino: d=0 para W ou d=1 para o registro designado por f. Sintaxe Operadores Operação Flags Afetados Ciclos Exemplo Alterações nas Flags: SUBWF f,d 0 ≤ f ≤ 127 d=0:W d = 1 : registro f (W) (f) - (W) C, DC, Z 1 SUBWF TEST,0 ATENÇÃO: nessa operação os bits C e DC têm significado inverso ao que seria esperado, isto é, quando ocorre um borrow ("estouro para menos"), os bits C e DC ficam em zero, ao contrário que quando ocorre um Carry ("estouro para mais"), quando C e DC ficam em 1. Exsto Tecnologia 43
  44. 44. Microcontroladores PIC16F877A C = 1: o resultado da subtração é maior ou igual a 0. C = 0: o resultado da subtração é menor a 0. DC = 1: o resultado da subtração não causou o transporte de 5o para o 4o bit. DC = 0: o resultado da subtração causou o transporte de 4o para o 5o bit. Z = 0: o resultado da subtração é diferente de zero. Z = 1: o resultado da subtração é igual a 0. 2.11.4 Lógicas Assim como as instruções matemáticas, as instruções lógicas realizam operações lógicas básicas fazendo uso da ALU. ANDLW Realiza uma operação lógica "E" entre o valor contido em W e a constante k. O resultado é armazenado em W. Sintaxe Operadores Operação Flags Afetados Ciclos Exemplo Alterações nas Flags: Z = 0: Z = 1: ANDLW k 0 ≤ k ≤ 255 (W) (W) E k Z 1 ANDLW 0Fh o resultado da operação "E" é diferente de zero. o resultado da operação "E" é igual a 0. ANDWF Realiza a operação "E" entre o valor contido em W o valor contido no registro f. O resultado é armazenado no destino: 0 para W ou 1 para o registro designado por f. Sintaxe Operadores Operação Flags Afetados Ciclos Exemplo Alterações nas Flags: ANDWF f, d 0 ≤ f ≤ 127 d=0:W d = 1 : registro f (d) (W) E (f) Z 1 ANDWF TEST,1 Z = 0: o resultado da operação "E" é diferente de zero. Z = 1: o resultado da operação "E" é igual a 0. Exsto Tecnologia 44
  45. 45. Microcontroladores PIC16F877A COMF Complementa o valor contido no registro f. O resultado é armazenado no destino: d=0 para W ou d=1 para o registro designado por f. Sintaxe Operadores Operação Flags Afetados Ciclos Exemplo Alterações nas Flags: COMF f,d 0 ≤ f ≤ 127 d=0:W d = 1 :registro f (d) complemento de (f) Z 1 COMF TESTE,1 Z = 0: o resultado do complemento é diferente de zero. Z = 1: o resultado do complemento é 0. O complemento de 255 (11111111b) é 0 (00000000b). IORLW Realiza uma operação "OU" bit a bit entre o valor contido em W e a constante k. O resultado é armazenado em W. Sintaxe Operadores Operação Flags Afetados Ciclos Exemplo Alterações nas Flags: IORLW k 0 ≤ k ≤ 255 (W) (W) OU (f) Z 1 IORLW TEST Z = 0 o resultado da operação "OU" é diferente de zero. Z = 1 o resultado da operação "OU" é igual a 0 (0 OU 0 é igual a zero) IORWF Realiza a operação "OU" bit a bit entre o valor contido em W com o valor do registro indicado por f. O resultado é armazenado no destino: d=0 para W ou d=1 para o registro designado por f. Sintaxe Operadores Operação Flags Afetados Ciclos Exemplo Alterações nas Flags: [label] IORWF 0 ≤ f ≤ 127 d=0:W d = 1 : registro f (d) (W) OU (f) Z 1 IORWF TEST,1 f, d Z = 0 o resultado da operação "OU" é diferente de zero. Z = 1 o resultado da operação "OU" é igual a 0 (0 OU 0 é igual a zero). Exsto Tecnologia 45
  46. 46. Microcontroladores PIC16F877A RLF O valor contido em f é rotacionado para a esquerda através do bit de Carry (bit C do registro STATUS). O resultado é armazenado no destino: d=0 para W ou d=1 para o registro designado por f. A operação de rotação a esquerda consiste no deslocamento sucessivo de bits de sua posição inicial para a posição consecutiva de modo que o último bit do registro f vá para C e o bit que estava em C vá para o primeiro bit do registro f. Sintaxe Operadores Operação Flags Afetados Ciclos Exemplo RLF f,d 0 ≤ f ≤ 127 d=0:W d = 1 : registro f veja a figura abaixo C 1 RLF TEST,1 C Registro f Alterações nas Flags: C passa conter o valor (0 ou 1) do 8 bit do registro f. RRF O valor contido em f é rotacionado para a direita através do bit de Carry (bit C do registro STATUS). O resultado é armazenado no destino: 0 para W ou 1 para o registro designado por f. A operação de rotação a direita consiste no deslocamento sucessivo de bits de sua posição inicial para a posição consecutiva de modo que o primeiro bit do registro f vá para C e o bit que estava em C vá para o último bit do registro f. Sintaxe Operadores Operação Flags Afetados Ciclos Exemplo RRF f,d 0 ≤ f ≤ 127 d=0:W d = 1 : registro f veja a figura abaixo C 1 RRF TEST,1 C Registro f Alterações nas Flags: C passa a conter o valor (0 ou 1) do registro f. Exsto Tecnologia 46
  47. 47. Microcontroladores PIC16F877A SWAPF O nibble (conjuntos de 4 bits) mais significativo e o menos significativo do registro f são trocados. Ou seja, os bits de 7 a 4 vão para as posições de 3 a 0 e os bits de 3 a 0 vão para as posições de 7 a 4. A figura abaixo ilustra esse processo. O resultado é armazenado no destino: d=0 para W ou d=1 para o registro designado por f. Sintaxe Operadores Operação Flags Afetados Ciclos Exemplo SWAPF f,d 0 ≤ f ≤ 127 d=0:W d = 1 : registro f Destino [7:4] f [3:0] Destino [3:0] f [7:4] Nenhum 1 SWAPF TEST,1 XORLW Realiza uma operação "OU exclusivo" entre o valor contido em W e a constante de oito bits k. O resultado é armazenado em W. Sintaxe Operadores Operação Flags Afetados Ciclos Exemplo Alterações nas Flags: XORLW k 0 ≤ k ≤ 255 (W) (W) XOU (f) Z 1 XORLW OFh Z = 0: o resultado da operação "OU exclusivo" é diferente de zero. Z = 1: o resultado da operação "OU exclusivo" é 0 (um valor "OU-exclusivo" consigo mesmo é igual a zero). XORWF Realiza a operação "OU exclusivo" entre o valor contido em W com o valor do registro indicado por f. O resultado é armazenado no destino: d=0 para W ou d=1 para o registro designado por f. Sintaxe Operadores XORWF 0 ≤ f ≤ 127 d= 0 → W f, d Exsto Tecnologia 47
  48. 48. Microcontroladores PIC16F877A Operação Flags Afetados Ciclos Exemplo Alterações nas Flags: d=1 → registro f (d) ← (W) XOU (f) Z 1 XORWF TEST,0 Z = 0: o resultado da operação "OU exclusivo" é diferente de zero. Z = 1: o resultado da operação "OU exclusivo" é 0 (um valor "OU-exclusivo" consigo mesmo é igual a zero). 2.11.5 Testes BTFSC Testa o bit b do registro f : se o bit for '1' a próxima instrução é executada; se o bit for '0' a próxima instrução não é executada, em seu lugar é executada uma instrução NOP, seguindo o programa na segunda instrução após a BTFSC. Sintaxe Operadores Operação Flags Afetados Ciclos Exemplo BTFSC f, b 0 ≤ f ≤ 127 0≤ b≤7 se f[b]=0 salta a próxima instrução nenhum se o bit não estiver em 1; se o bit estiver em 1. BTFSC STATUS,Z GOTO ZERO BTFSS Testa o bit b do registro f : se o bit for '0' a próxima instrução é executada; se o bit for '1' a próxima instrução não é executada, em seu lugar é executada uma instrução NOP, seguindo o programa na segunda instrução após a BTFSS. Sintaxe Operadores Operação Flags Afetados Ciclos Exemplo BTFSS f, b 0 ≤ f ≤ 127 0≤ b≤7 se f[b]=1 salta a próxima instrução Nenhum se o bit não estiver em 1; se o bit estiver em 1. BTFSS STATUS,Z GOTO NO_ZERO DECFSZ Decrementa o valor contido no registro f. O resultado é armazenado no destino: d=0 para W ou d=1 para o registro designado por f. Se o resultado for diferente de 0 a próxima instrução é executada; se o resultado for 0 a próxima instrução não é executada, em seu lugar é executada uma instrução NOP, seguindo o programa na segunda instrução após a DECFSZ. Exsto Tecnologia 48
  49. 49. Microcontroladores PIC16F877A Sintaxe Operadores Operação Flags Afetados Ciclos Exemplo DECFSZ f,d 0 ≤ f ≤ 127 d=0→W d = 1 → registro f (d) (f) - 1 se f[b] = 1 salta a próxima instrução Nenhum 1 DECFSZ COUNT,1 INCFSZ Incrementa o valor contido no registro f. O resultado é armazenado no destino: d=0 para W ou d=1 para o registro designado por f. Se o resultado for diferente de 0 a próxima instrução é executada; se o resultado for 0 a próxima não é executada, em seu lugar é executada uma instrução NOP e o seguindo o programa na segunda instrução após a INCFSZ. Sintaxe Operadores Operação Flags Afetados Ciclos Exemplo 2.11.6 INCFSZ f,d 0 ≤ f ≤ 127 d= 0 → W d=1 → registro f (d) ← (f)+1 se f[b]=1 salta a próxima instrução Nenhum 1 INCFSZ COUNT,1 Chamadas e desvio CALL Chamada de sub-rotina. O endereço de retorno (próxima instrução) é guardado no topo da pilha (TOS) e um valor de 11 bits é carregado nos bits menos significativos do PC (PC[10:0]), fazendo a seqüência do programa ser transferida para o endereço indicado por k. Os bits superiores do PC (PC[12:11]) são carregados a partir de PCLATH. Ver tópico "Desvio X Chamada" para maiores informações. Sintaxe Operadores Operação Flags Afetados Ciclos Exemplo CALL k 0 ≤ k ≤ 2047 TOS PC+1 PC[10:0] k PC[12:11] (PCLATCH[4:3]) Nenhum 2 CALL TX_SERIAL Exsto Tecnologia 49

×