145
CAPÍTULO 1 Blocos funcionais do microcomputador Introdução O microcomputador Blocos Funcionais

Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

Embed Size (px)

Citation preview

Page 1: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

CAPÍTULO 1

Blocos funcionais do microcomputador

Introdução O microcomputador Blocos Funcionais

Page 2: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

2

1 - OS BLOCOS FUNCIONAIS DO MICROCOMPUTADOR

1.1 - Introdução

Os avanços tecnológicos conseguidos na fabricação de semicondutores permitiram o surgimento dos microprocessadores. Com isso, foi possível que os computadores se tornassem cada vez mais compactos e seus custos mais acessíveis, permitindo uma ampliação nas possibilidades de suas utilizações.

Onde não se imaginava utilizar sistemas computadorizados há poucos anos atrás, hoje já se faz um amplo uso do computador. Como a indústria tem como principal objetivo, um aumento na qualidade de seus produtos e aumentar a quantidade de produtos fabricados no mesmo tempo, é indispensável que os profissionais do ramo eletrônico tenham um bom conhecimento sobre seu funcionamento.

1.2 - O microcomputador É um equipamento cuja função é executar automaticamente uma seqüência de operações para as quais foi anteriormente programado. Os microcomputadores são equipamentos capazes de executarem diferentes tarefas para atender às várias necessidades do usuário, os quais podem ter finalidades gerais.

Quando utilizamos em aplicações gerais como os microcomputadores comercializados, definimos como sendo os de finalidades gerais. Para poderem atender uma aplicação determinada, são projetados os de finalidades específicas.

Os dados nos computadores são armazenados e expressos em linguagem binária que utiliza os dígitos 0 e 1. Essas condições são obtidas por meio de flip-flop, que são dispositivos de armazenamento nos sistemas de computadores. O bit pode ser definido como uma unidade básica de representação de dados em qualquer sistema de computador. Os computadores processam dados com extensão de 8 bits ou um de seus múltiplos, 16, 32, 64.

Determinados números de bits são denominados de palavra “Word”, o qual pode conter, 1, 2, 4, 8, 16, 32 e 64 bits. A palavra de 4 bits é chamada de “nibble” e a palavra de 8 bits de “byte”. Uma palavra pode representar um dado ou uma diretriz chamada de instrução. O que torna imprescindível citarmos as definições de:

Hardware: Consiste de circuitos eletrônicos responsáveis pela execução direta de instruções em linguagem de máquina: C. Is, placas de circuitos impressos, cabos, fontes de alimentação etc.

Software: O grupo ou conjunto de instruções apresentadas ao computador chama-se programa, o qual consiste de algoritmos, que é o processo pelo qual as operações lógicas são executadas pela máquina.

Firmware: Consiste de um software embutido em circuitos eletrônicos.

É comum dizer que qualquer operação feita por software pode também ser construída por hardware e qualquer instrução executada pelo hardware pode também ser simulada por software.

Page 3: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

3

1.3 - Blocos funcionais Qualquer sistema de microcomputador é formado basicamente pelos seguintes blocos funcionais:

- unidade de memória - unidade central de processamento (UCP) - unidade de entrada / saída - dispositivo de interface - DMA

Abaixo um diagrama da estrutura geral de um microcomputador.

CPU

INTERFACE

DMAMEMÓRIA DISPOSITIVODE I/0

Figura 1 – Sistema de Microcomputador típico e suas interfaces

Os blocos funcionais representados no diagrama acima são construídos com circuitos integrados (C. Is). Os circuitos integrados são componentes que possuem um elevado nível de integração de componentes em uma única pastilha, esse processo é denominado de LSI “Large Scale Integration”, ou seja “Integração em larga escala”. O conjunto de C.Is. que forma os blocos funcionais de um computador é também conhecido como “hardware”.

Microprocessador

O microprocessador ou Unidade Central de Processamento (CPU) é um dispositivo digital baseado numa única pastilha (CHIP). Esta pastilha, por si só, tem a capacidade de controlar e manipular dispositivos externos como: memórias, portas de I/O (entrada/saída) e outros circuitos.

Os microprocessadores utilizam sistemas seqüenciais síncronos, ou seja, utilizando um CLOCK. A cada pulso de clock ou grupo de pulsos (pode ser de 3 em 3, por exemplo) executam-se uma função específica.

Hoje temos microprocessadores rodando com clock de 400 MHz da INTEL, que pode executar centenas de milhões de instruções por segundo.

Page 4: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

4

Um microprocessador pode ser divido segundo seus blocos funcionais:

• registradores e contadores; • unidade lógica e aritmética; • unidade de controle e sincronização.

Os registradores e contadores são utilizados para o armazenamento temporário dos bits dentro do microprocessador. Este tipo de tarefa é executado pelo registrador e decodificador de instrução, pelo contador de programa e pelo acumulador.

A Unidade Lógica Aritmética (ULA) é responsável pelas operações lógicas e aritméticas entre os bits, gerando uma outra palavra como saída. Estas operações são executadas entre o acumulador e o registrador temporário do microprocessador com os quais a ULA se comunica internamente e o resultado é armazenado no próprio acumulador.

A unidade de controle e sincronização coordena e controla todas os blocos funcionais do computador em uma seqüência lógica e sincronizada. Ela recebe as instruções vindas do programa armazenado na memória de programa já decodificado pelo decodificador de instruções e emite os sinais de sincronização e controle para as diversas partes do computador.

Unidade de Memória A unidade de memória é à parte do sistema na qual são armazenados os dados e os

programas que podem ser executados pelo computador.

A unidade de memória possui dois tipos de memória:

• Memória de Leitura (ROM - Read Only Memory); • Memória de Acesso Aleatório (RAM - Randomic Acess Memory).

Na ROM, correspondente à parte de unidade de memória que armazena as instruções que constituem o programa monitor. A memória RAM é à parte da memória responsável pelo armazenamento dos dados que serão usados durante a execução do programa.

Para que seja possível localizar uma entre muitos dados armazenados na memória é necessário que as posições destes dados sejam numeradas. Essas posições são chamadas de endereços. No próximo capitulo vamos estudar os diversos tipos e principais características das memórias.

Unidade de I/O

As unidades de I/O são as interfaces pelos quais o usuário comunica-se com o computador e vice-versa. As unidades de I/O possuem conexão com dispositivos chamados unidades periféricas, tais como: teclados, terminais de vídeo, impressoras, etc.

Interface A interface é um dispositivo que auxilia na transferência de informações entre a

Unidade Central de Processamento e dispositivos periféricos. Ela é usada principalmente em sistemas que possuem somente uma CPU e vários dispositivos periféricos.

DMA “DMA” ou Direct Memory Acess (Acesso Direto à Memória) é o processo de

comunicação direta entre dispositivos periféricos e memória.

Este processo se deve ao fato da necessidade de se aumentar à velocidade de transferência de dados.

Page 5: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

5

1.4 – Exercícios 1 – Qual o principal objetivo da aplicação do microcontrolador na industria ? ______________________________________________________________________________________________________________________________________________________________________________________________________ 2 – Qual a função do microcomputador e qual sua finalidade ? ______________________________________________________________________________________________________________________________________________________________________________________________________ 3 – Defina: a – Hardware ____________________________________________________________________________________________________________________________________ b – Software ____________________________________________________________________________________________________________________________________ c – firmware ____________________________________________________________________________________________________________________________________ 4 – Quais os blocos básicos que compõe o microcomputador ? Defina-os. ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________

Page 6: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

6

Anotações: ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ __________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ____________________________________________________________________________________________________________________________________ ____________________________________________________________________________________________________________________________________

Page 7: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

7

CAPÍTULO 2

Memória

RAM ROM

Page 8: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

8

2 – MEMÓRIA

Memória é à parte do sistema onde são armazenados os programas e dados necessários à realização das operações efetuadas pelo computador. A memória é equivalente a milhares de registradores, cada um armazenando uma palavra binária. Os microcomputadores de 8 bits utilizam memórias de semicondutores com até 65536 posições, cada uma capaz de armazenar um byte de informação. Além das memórias de semicondutores, outros dispositivos mais comuns também podem ser citados: Cartão de papel perfurado, fita magnética, disco magnético, tambor magnético, núcleo magnético, memória de bolha.

Memórias que possuem a característica de podermos acessar qualquer registrador da memória de modo aleatório sem antes percorrermos toda a estrutura da memória através de endereço dos registradores desejados, são conhecidas como memórias de acesso randômico. Diferente das memórias de acesso seqüenciais onde é muito mais rápido acessarmos a memória seqüencialmente já que para acessarmos dados em diferentes posições da memória há a necessidade de se percorrer a estrutura ate chegarmos no ponto desejado, implicando num tempo maior de leitura. Dentre os vários tipos de memória, as mais comuns são as memórias RAM e as memórias ROM.

2.1 – Memórias RAM

RAM: “Random Access Memory” – Memória de Acesso Randômico – também conhecida como memória de leitura e gravação, a qual é um tipo de memória que se pode ler e escrever dados binários. A RAM é utilizada para armazenar programas temporários e dados que serão alterados no decorrer da execução do programa. Os dados na memória RAM são retidos apenas enquanto a fonte permanece ligada, a RAM é uma memória volátil.

Figura 2 – Ilustração de memória RAM

As RAMs podem ser do tipo dinâmicas ou estáticas.

RAM dinâmica: (DRAM “Dynamic Random Access Memory”). É a memória que perde a informação armazenada mesmo quando a alimentação é constante. Isso acontece porque cada célula da DRAM apresenta um transistor MOSFET e um capacitor que armazena um dado (1 – bit). O transistor fica em série com o capacitor de armazenamento e cumpre a função de uma chave que permite a entrada ou saída da carga do capacitor quando o pino WE é ativado.

Devido às fugas de carga do capacitor, há necessidade de reposição dessas cargas através de um pulso de “REFRESH”, vindo do microprocessador. Esse processo requer que todas as células de armazenamento sejam endereçadas pelo menos uma vez a cada 2 milissegundos. Um circuito contador externo a memória é geralmente incorporado ao sistema para ativar o barramento de endereço, quando o microprocessador não está acessando a memória.

RAM Saída / Entrada de dados

Endereço An .

A0

Controle

Page 9: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

9

Existem vários tipos de memórias DRAM que diferem no modo que elas se comunicam com o sistema, mas cujo principio de armazenamento é o mesmo, abaixo citamos algumas delas:

• EDO – (Extended Data Output). Pode manter a saída de dados de um endereço enquanto seta um novo endereço. Utilizada em sistemas de fonte de informação.

• VRAM – (Vídeo RAM). Utilizadas em aceleradores de vídeo. • RDRAM - (Rambus DRAM). Fabricada pela Rambus Inc, por isso RDRAM, possui

algumas desvantagens em alguns aspectos, em compensação tem uma taxa de transferência de dados muito alta, cerca de 1000Mbps contra 200Mbps das DRAM comuns. É utilizada principalmente em aceleradores de vídeo e em certos videogames, como o Ultra 64 da Nintendo.

• PSRAM – (Pseodo Static Ram). Memória RAM dinâmica que simula uma RAM estática. É uma alternativa barata para substituir as RAMs estáticas, que são mais caras. É utilizada em sistemas embutidos.

• SDRAM – (Synchronous DRAM). Soma um sinal de clock separado. Pode conter estados de maquinas mais complexos.

• CDRAM – (Cached DRAM). Combinam a memória principal e memória cachê num único chip. O controlador da memória cachê deve ser adicionado externamente.

RAM estática: (SRAM “Static Random Access Memory”). É uma memória que não necessita de circuitos adicionais em um microprocessador e as informações permanecem registradas enquanto não houver nova escrita, ou não faltar alimentação aos biestáveis utilizados na construção da célula de memória. Enquanto a alimentação for mantida constante, o biestável permanece travado e pode armazenar o bit indefinidamente. É mais rápida que a DRAM, mas por causa de sua pouca densidade de informação temos menor capacidade de armazenamento do que uma DRAM. Geralmente são mais caras que as DRAM e são utilizadas principalmente em locais onde a velocidade é extremamente importante como na memória cachê.

2.2 - Memórias RAM com dispositivos de três estados Dispositivos três estados (ou “tri-state”) são dispositivos lógicos nos quais existem três estados de saída possíveis: O estado lógico 0, o estado lógico 1 e um estado lógico de alta impedância, no qual a saída não tem efeito, pois está desconectada do resto do circuito e não tem influência sobre ele. A condição de três estados pode ser mais bem compreendida analisando-se uma saída “totem-pole tri-state” no circuito abaixo.

Saida em tristate Saída

D

Figura 3 – Circuito tri-state com transistores

Page 10: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

10

Os transistores T3 e T4 funcionam como chaves lógicas que levam a saída a nível 1 e 0 respectivamente. Todavia, quando a entrada desabilitadora está em nível 0 coloca os dois transistores em corte por meio do diodo D. Este drena o potencial de T2 para massa. Assim, a saída fica em alta impedância em relação à fonte (nível 1) e ao terra (nível 0). O símbolo do dispositivo de três estados é apresentado abaixo.

Figura 4 – Símbolo

Dispositivos de três estados podem ser acrescentados às linhas de dados de uma memória para que vários chips do sistema possam usar o mesmo barramento de comunicação. Essas chaves de três estados já incorporadas ao C. I. permitem conectar ou desconectar as linhas de saída do barramento de dados.

2.3 - Tempos de acesso

Tempo de acesso da RAM é o tempo necessário para que o dado registrado em uma posição endereçada seja transferido para os terminais de saída (tempo de acesso à leitura); ou o tempo necessário para que o dado colocado nos terminais de entrada seja gravado na posição endereçada (tempo de acesso à escrita). O tempo de acesso depende do chip utilizado e é fornecido pelo manual do fabricante. A tabela abaixo mostra os tempos relacionados à tecnologia de fabricação do chip.

Tecnologia Tempo de acesso (em ns)

TTL 60 a 200

ECL 10 a 40

PMOS estática 500 a 1000

NMOS estática 300 a 600

CMOS estática 400 a 700

PMOS dinâmica 400 a 700

NMOS dinâmica 200 a 550

2.4 – RAM

Entre as milhares memórias do tipo RAMs comercializadas atualmente, a 6116 de

tecnologia de fabricação MOS, será apresentada como exemplo. Essa memória é equivalente a 2128. Possui as seguintes características.

• Capacidade: 2K x 8 bits • Alimentação: simples de 5v • Tempo de acesso de chip enable (CE): 400 ns (Máximo) • Nível de tensão: compatível com nível TTL • Saída / entrada de dados comum • Não requer clocks ou “strobe”

Entrada Saída

D

Page 11: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

11

Descrição da pinagem

Figura 5 – Pinagem da memória RAM 6116 ou 2128

A correspondência entre pinos e sinais de entrada / saída é comentada na tabela a seguir.

Pino Sinal Função

1 A7 Bit 7 de endereço

2 A6 Bit 6 de endereço

3 A5 Bit 5 de endereço

4 A4 Bit 4 de endereço

5 A3 Bit 3 de endereço

6 A2 Bit 2 de endereço

7 A1 Bit 1 de endereço

8 A0 Bit 0 de endereço

9 D0 Bit 0 de dado

10 D1 Bit 1 de dado

11 D2 Bit 2 de dado

12 Vss Alimentação – GND = referencia 0 volt

13 D3 Bit 3 de dado

14 D4 Bit 4 de dado

15 D5 Bit 5 de dado

16 D6 Bit 6 de dado

17 D7 Bit 7 de dado

18 CE Habilita o chip quando em nível zero.

19 A10 Bit 10 de endereço

20 OE Habilita barramento de dado quando em nível zero (tri-state).

Page 12: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

12

21 WE Habilita escrita quando em nível zero; habilita leitura quando em nível 1

22 A9 Bit 9 de endereço

23 A8 Bit 8 de endereço

24 VCC Alimentação – Vcc = +5v

A tabela abaixo mostra os níveis necessários para ativar os pinos CE / OE e WE.

Seleção Leitura / Escrita Saída

CE / OE WE D0 a D7

H L Tri-state

H H Tri-state

L L Escrita (entrada de dados)

L H Leitura (saída de dados)

2.5 – ROM

ROM: “Ready Only Memory” – “Memória somente de leitura” – Memória não volátil, ou seja, sua informação é mantida mesmo sem alimentação. A memória ROM é equivalente a um grupo de registradores, onde cada um é capaz de armazenar permanentemente uma palavra. Os microcomputadores podem usar mais de uma ROM.

O número dessas memórias depende da extensão do programa a ser armazenado. As ROMs são usadas para armazenar não só programas principais como também sub-rotinas e microprogramas.

São também bastante úteis para o armazenamento de tabelas trigonométricas, tabelas de divisão e multiplicação, tabelas de logaritmos, tabela de raiz quadrada ou programas de partida e gerenciamento do sistema (programa monitor). Veja abaixo o esquema de uma ROM.

Figura 6 – Esquema de uma memória ROM

As entradas A0 até An formam as linhas de endereço, e a saída de leitura S corresponde ao dado gravado na posição selecionada pelo endereço. A ROM (“Read Only Memory”) é uma memória só de leitura, ou seja, uma vez gravada a informação não pode mais ser apagada. Para gravação, o processo é realizado no fabricante, que confecciona uma mascara que permite a produção das memórias. Os CD-ROM’s também possuem seu conteúdo fixo, logo são memórias ROM.

ROM Saída de leitura de dados

Endereço An .

A0

Controle

S

Page 13: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

13

A PROM (“Programmable Read Only Memory”) permite que o próprio usuário armazene os dados / programas desejados. Isso é feito com o auxílio de um programador PROM. A memória possui uma malha de linhas cruzadas em forma de grade semelhante à da ROM. Em cada interseção da grade está localizado um dispositivo (Diodo, transistor bipolar ou MOS) e em serie com cada dispositivo existe um elemento de interrupção (fusível ou diodo). Os elos fusíveis são queimados por meio da saturação de um transistor localizado na interseção linha / coluna cujo endereço foi selecionado pelo circuito de decodificação. Nas PROMs que utilizam diodos, os cruzamentos linha / coluna da grade são unidos por dois diodos ligados em serie oposta. Abaixo temos uma figura que mostra a estrutura e o esquema elétrico de uma PROM que se utiliza diodos.

Figura 7 – Estrutura de uma memória PROM por diodos

A EPROM (“Erasable Programmable Read Only Memory”), isto é, uma memória programável e apagável apenas de leitura. É uma ROM que pode ser apagada e reprogramada um número indeterminado de vezes. As informações são apagadas pela exposição do chip à luz ultravioleta (UV) de alta intensidade, a qual penetra por uma abertura de cristal (quartzo) existente no centro do circuito integrado. A EPROM não pode ser apagada seletivamente, isto é, não pode ter apenas parte de seus bits apagados. Quando exposta a UV, todos os bits são apagados. A EEPROM ou EAROM (“Eletrically Erasable Programmable Read Only Memory”) ou (“Eletrically Alterable Programmable Read Only Memory”), não necessitam de UV para serem apagadas e sim de impulsos elétricos. Uma outra vantagem é o fato de não ser necessário retirar esta memória do circuito para ser reprogramada. Apesar de serem memórias que apresentam características não voláteis, as informações que se encontram armazenadas tendem a se deteriorar com o tempo, o que não ocorre com as outras memórias da família ROM. Tem como grande desvantagem um custo elevado e que podem ser apagada somente 10 mil vezes.

A FLASH MEMORY são memórias com características similares a EEPROM e EPROM, em um produto que oferece as vantagens destas memórias sem o alto custo, onde temos:

- Não volátil, apagável eletricamente total ou por setor, no próprio circuito, grande densidade, alta velocidade de acesso e o já citado baixo custo.

A célula de memória Flash é semelhante à célula de uma EPROM, e é constituída por um único transistor. Na memória Flash, uma fina camada de oxido de silício forma a porta do transistor, permitindo apagar eletricamente a memória e uma maior densidade que as EEPROMs, com um custo menor.

Page 14: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

14

2.6 - EPROM As memórias bipolares são mais rápidas que as memórias MOSFETs. Entre as milhares

memórias ROMs comercializadas atualmente, a 2732-A de tecnologia de fabricação EPROM-MOS, será apresentada como exemplo. Possui as seguintes características.

• Capacidade: 4K x 8 bits • Alimentação: fonte única de 5v • Tempo de acesso: 450 ns (Máximo) • Tempo de programação total: 200s • Nível de tensão de programação: +21 v

Descrição da pinagem

Figura 7 – Pinagem da memória ROM 27C32.

A correspondência entre pinos e sinais de entrada / saída é comentada na tabela a seguir.

Pino Sinal Função

1 A7 Bit 7 de endereço

2 A6 Bit 6 de endereço

3 A5 Bit 5 de endereço

4 A4 Bit 4 de endereço

5 A3 Bit 3 de endereço

6 A2 Bit 2 de endereço

7 A1 Bit 1 de endereço

8 A0 Bit 0 de endereço

9 D0 Bit 0 de dado

10 D1 Bit 1 de dado

11 D2 Bit 2 de dado

Page 15: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

15

12 Vss Alimentação – GND = referencia 0 volt

13 D3 Bit 3 de dado

14 D4 Bit 4 de dado

15 D5 Bit 5 de dado

16 D6 Bit 6 de dado

17 D7 Bit 7 de dado

18 CE Habilita o chip quando em nível zero.

19 A10 Bit 10 de endereço

20 OE / Vpp Habilita barramento de dado quando em nível zero (tri-state). Passa para o modo de programação quando em +21 v

21 A11 Bit 11 de endereço

22 A9 Bit 9 de endereço

23 A8 Bit 8 de endereço

24 VCC Alimentação – Vcc = +5v

Antes de programar uma memória EPROM, é necessário verificar se esta apagada, onde deve apresentar todos os endereços em nível 1 e a leitura em qualquer posição de memória devera apresentar o dado FFh.

Para apagar esta memória o fabricante recomenda a exposição do CI à luz ultravioleta de intensidade 12mW por cm2, por um intervalo de tempo aproximado de 600s. A tabela abaixo mostra os níveis necessários para ativar os pinos CE / OE e WE.

Pinos Função leitura Saída não-habilitada

Baixo consumo

Programação (escrita)

Inibição

18 CE / PGM VIL Irrelevante VIH VIL VIH

20 OE / Vpp VIL VIH Irrelevante 21 v 21 v

24 Vcc 5 v 5 v 5 v 5 v 5 v

9 a 11

13 a 17

Saída de dados

Saída Q HI - Z HI - Z Entrada de dados

HI –Z

2.7 – Memória virtual O Windows, para poder acelerar o desempenho do microcomputador, cria uma área de memória virtual no espaço disponível do disco rígido. Assim, quando a memória RAM esta totalmente ocupada e o processador necessita de mais espaço para trabalhar, ele seleciona parte dos programas que não deve ser usado naquele momento e transfere para a área de memória virtual. Esse processo, apesar de ajudar no desempenho, é mais lento do que se o micro tivesse memória RAM suficiente para executar todas as instruções. O tempo de acesso ao disco rígido é bem maior que o tempo de acesso à memória RAM. Toda informação da memória virtual é apagada quando o micro é desligado.

Page 16: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

16

2.8 – Exercícios

1 – O que é memória e qual a sua função? ______________________________________________________________________________________________________________________________________________________________________________________________________ 2 – Defina memória RAM. Comente sobre suas principais características. ______________________________________________________________________________________________________________________________________________________________________________________________________ 3 – Qual a diferença entre uma memória RAM dinâmica e uma RAM estática ? ______________________________________________________________________________________________________________________________________________________________________________________________________ 4 – Qual a aplicação em que devemos utilizar uma memória RAM estática ? E a dinâmica ? ______________________________________________________________________________________________________________________________________________________________________________________________________ 5 – Comente sobre o dispositivo “tri-state”. Em quais componentes já temos esta implementação ? ______________________________________________________________________________________________________________________________________________________________________________________________________ 6 – Determine a capacidade de acesso das memórias abaixo relacionadas. a – Memória com pinos de endereçamento de A0 até A11 e 8 bits de dados. __________________________________________________________________ b – Memória com pinos de endereçamento de A0 até A13 e 8 bits de dados. __________________________________________________________________

Page 17: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

17

c – Memória com pinos de endereçamento de A0 até A15 e 8 bits de dados.

7 – Defina memória ROM. Comente sobre suas principais características. ______________________________________________________________________________________________________________________________________________________________________________________________________ 8 – Quais os tipos de memória ROM ? Comente sobre cada um dos tipos. ______________________________________________________________________________________________________________________________________________________________________________________________________ 9 – Antes de efetuarmos a programação em uma programação em uma memória EPROM, o que é necessário verificar. ______________________________________________________________________________________________________________________________________________________________________________________________________ 10 – Defina memória virtual e indique suas principais características. ______________________________________________________________________________________________________________________________________________________________________________________________________

Page 18: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

18

Anotações: ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ____________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________

Page 19: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

19

CAPÍTULO 3

Conceito básico de microprocessador

Microprocessador Dispositivo de entrada e saída Sistema de barramento Flags condição

Page 20: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

20

3 – CONCEITOS BASICO MICROPROCESSADORES

Antes de iniciarmos, é relevante citarmos a história dos microprocessadores, onde abaixo temos um breve resumo com destaques para algumas datas consideradas importantes. Na década de 40 o surgimento da válvula e o transistor (1948), na década de 50 a comercialização do transistor, na década de 60 os circuitos integrados do tipo SSI (“Small Scale Integrated” ou pequena escala de integração), na década de 70 os circuitos integrados do tipo MSI (“Medium Scale Integrated” ou media escala de integração). Em 1971 surgem os circuitos integrados do tipo LSI (“Large Scale de Integrated” ou com grande escala de integração), com o primeiro microprocessador de 4 bits o INTEL 4004, em 1972 a INTEL lança o 8008 uma CPU de 8 bits. Já em 1974 a INTEL começa a ter concorrentes, com o microprocessador 8080, dez vezes mais rápido que o anterior, a MOTOROLA lança o 6800 que durante muito tempo esteve presente nos primeiros microcomputadores. A partir daí tivemos em 1976 a TEXAS com o primeiro CPU de 16 bits, em 1977 a MOSTEK com o 6502 (Apple I, II e II plus) e a ZILOG com o Z80 (TRS80), um dos mais utilizados até hoje, em 1978 os circuitos integrados VLSI permitiram o surgimento de novos microprocessadores como o MOTOROLA 6809 a INTEL com o 8088 / 8086 e os microprocessadores BIT-SLICE (de 2 a 64 bits).

Década de 80: 1980 – MOTOROLA 68.000 em 1981 – MOTOROLA 68.010

1982 – INTEL 80186 / 80188 e o 80286 (com 130.000 transistores integrados)

1984 – MOTOROLA 68.020

1985 – INTEL 80386 ( 80386DX, ou i386)

1986 – MOTOROLA 68.030

1988 – INTEL 80386SX e em 1989 o i486 (1.200.000 transistores)

Década de 90: 1991 – INTEL i386SL, i486SX (os primeiros com tecnologia RISC)

1992 – INTEL i486 DX2/50 e o i486 DX2/66

1993 – INTEL Pentium

1995 – INTEL Pentium Pro

1997 – INTEL Pentium II

1998 – INTEL Pentium II 300, 266 MHz

1999 – INTEL Pentium III 600, 700 MHz

2000 – INTEL Pentium III 1000 MHz

2001 / 2002 – INTEL Pentium IV de até 2,7 GHz (Aproximadamente)

2003 / 2004 – INTEL Pentium IV de ate 3,6 GHz e o Athlon 64 da AMD

3.1 – Microprocessador

O microprocessador ou Unidade Central de Processamento (CPU) é um dispositivo

digital baseado numa única pastilha (CHIP). Esta pastilha, por si só, tem a capacidade de controlar e manipular dispositivos externos como: memórias, portas de I/O (entrada/saída) e outros circuitos.

Page 21: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

21

Os microprocessadores utilizam sistemas seqüenciais síncronos, ou seja, utilizando um CLOCK. A cada pulso de clock ou grupo de pulsos (pode ser de 3 em 3, por exemplo) executam-se uma função específica.

Hoje temos microprocessadores rodando com clock de 3GHz da INTEL, que pode executar centenas de milhões de instruções por segundo.

Um microprocessador pode ser divido segundo seus blocos funcionais:

• registradores e contadores; • unidade lógica e aritmética; • unidade de controle e sincronização.

Os registradores e contadores são utilizadas para o armazenamento temporário dos bits

dentro do microprocessador. Este tipo de tarefa é executado pelo registrador e decodificador de instrução, pelo contador de programa e pelo acumulador.

A Unidade Lógica Aritmética (ULA) é responsável pelas operações lógicas e aritméticas entre os bits, gerando uma outra palavra como saída. Estas operações são executadas entre o acumulador e o registrador temporário do microprocessador com os quais a ULA se comunica internamente e o resultado é armazenado no próprio acumulador.

A unidade de controle e sincronização coordena e controla todos os blocos funcionais do computador em uma seqüência lógica e sincronizada. A UCP chama as instruções da memória, decodifica-as e executa-as, além de alimentar as portas de entrada / saída a fim de operacionalizar as instruções recebidas, ou seja, ela recebe as instruções vindas do programa armazenado na memória de programa já decodificadas pelo decodificador de instruções e emite os sinais de sincronização e controle para as diversas partes do computador.

3.2 - Dispositivos de entrada / saída

É o meio pelo qual o usuário se comunica com o computador. É através desses dispositivos que o operador fornece informações ao sistema e recebe da máquina os resultados das operações executadas pelo computador. Existem componentes que viabilizam a interface com o usuário, tais como: portas seriais, portas paralelas, conversores análogo-digitais etc. Esses componentes estão interligados através de um sistema de barramento.

3.3 - Sistema de barramento Podemos definir o barramento como um conjunto de linhas físicas que possuem funções específicas dentro do sistema. É composto de 3 barramentos independentes: o barramento de endereços, o barramento de dados e o barramento de controle.

Barramento de endereços: é apenas saída tri-states ativas em nível alto, responsável pelo caminho de comunicação dentro do sistema.

Barramento de dados: Funciona como barramento bidirecional para intercâmbio de dados entre a UCP e a memória ou entre a UCP e periféricos de entrada e saída. Na saída de dados da CPU, estes são gerados pelo microprocessador e enviados a uma unidade selecionada pelo barramento de endereços. Na entrada de dados, estes são gerados por uma unidade particular e enviados ao microprocessador.

Barramento de controle: É responsável por enviar e receber sinais de controle necessários à transferência de dados no sistema. É composto basicamente de 4 tipos de sinais, sendo os de leitura e escrita em memória e os de entrada e saída através de dispositivos externos.

Page 22: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

22

Abaixo temos a arquitetura padrão de um microprocessador.

Decodificador deInstruções

Controle daCPU

Registrador deInstruções

Sinais de Controle

Sinais de controledo Sistema

Controle doBarramento de

Dados

Controle deEndereços

Registrador daCPU

ALU(Aritmetic Logic Unit)

Barramentode

Endereçosde 16 bits

Barramentode Dadosde 8 bits

Figura 8 – Arquitetura padrão de um microprocessador

Podemos destacar os seguintes blocos da arquitetura apresentada.

Registrador da CPU ou acumulador – Registrador principal, que contem o dado a ser processado. É o responsável por armazenar os resultados de adições, subtrações e outras operações executadas pelo sistema.

Controle da CPU também responsável pelo Apontador de Pilha – (“Stack Pointer – SP”) – Registrador que aponta para o endereço de retorno de sub-rotina, sendo este ultimo armazenado em uma pilha de memória. É necessário na inicialização carregar no apontador o endereço inicial da pilha.

Controle de endereços ou Contador de Programa – (“Program Counter – PC”) – Registrador que armazena o endereço de memória da próxima instrução a ser executada. O conteúdo do contador de programa é incrementado após a execução da instrução ou trocado por outro valor se a instrução em curso for de desvio de seqüência.

Decodificador de instrução – Circuito combinacional utilizado para determinar qual a próxima instrução a ser executada. Isto é feito a partir do código de operação armazenado previamente no registrador de instrução.

Registrador da CPU também responsável pelas Flags – Conjunto de flip-flops destinados a guardar as condições resultantes da execução de instruções. Tais flags são fundamentais no sentido em que se constituem no único mecanismo que o programador Assembly dispõe para desvios de processamento e implementação de algoritmos.

Page 23: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

23

Registradores auxiliares – Conjunto de registradores de rascunho que podem ser usados em conjunto ou separadamente para operações intermediarias, sem que seja necessário o acesso sistemático a memória. Registrador de instrução (RI) – Registrador que armazena a instrução que esta sendo executada.

Controle da CPU ou Unidade de Controle – Circuito seqüencial interno ao microprocessador que é utilizado para gerar os sinais de controle, necessários à execução das instruções previamente decodificadas.

Unidade Lógica Aritmética (ULA) – Circuito combinacional utilizado para operações lógicas e aritméticas envolvendo dois operando.

É importante salientar alguns aspectos referentes às condições dos Flags, que são células de 1 bit e que contem informações sobre os resultados das operações e indicam também a ocorrência de condições específicas dessas operações. As Flags são acionadas (setadas) pela ULA e a ela estão associadas. Cada microprocessador tem seus próprios bits de Flag. Abaixo temos mencionado as Flags mais comuns a serem encontradas na maioria dos microprocessadores.

3.4 - Flags condição

Um Flag é considerado “setado” quando se força o valor do bit para 1 e é “resetado”, forçando-se o bit do Flag para 0. Uma instrução que afeta Flag o modifica da seguinte forma.

Carry: Se o resultado da instrução provoca um “carry” na adição ou um “borrow” na subtração ou comparação, então a Flag de carry será setada. Se C = 1 resultado da operação com “carry ou borrow”, se não C = 0 então não ocorreu “carry ou borrow”.

Carry auxiliar: Quando a instrução causou um “carry” do bit 3 para o bit 4. Se AC = 1 significa que foi 1 na operação realizada, se AC = 0 não houve o “carry”.

Paridade: Se a soma dos bits do resultado da operação é 0. Se P = 1 significa que a paridade é par, se P = 0 significa que a paridade é impar.

Sinal: Se o bit mais significativo do resultado da operação tem valor 1 então o sinal da operação é negativo. Se S = 1 resultado negativo, se não S = 0 operação positiva.

Zero: Se o resultado da instrução tem valor zero. Se Z = 1 resultado zero da operação, se não Z = 0 resultado da operação diferente de zero.

Condição Flags

Função setado ressetado setado se:

C N

P/V H Z S X

Bit de carry soma/subtração paridade/over-flow half-carry zero sinal não usado

C -

PE - Z M -

NC -

PO -

NZ P -

vai um do bit 7 operação de subtração paridade par/over-flow vai um do bit 3 resultado zero resultado negativo

-

Observação: M = “minus” (menos) P = “plus” (mais)

Page 24: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

24

Os bits de flags estão posicionados do seguinte modo dentro do registrador F:

Posição do bit 7 6 5 4 3 2 1 0 Flags S Z X H X P/V N C

O nível lógico de cada bit do registrador F indica a condição de cada uma das flags e forma uma palavra binária. Assim, por exemplo, se o byte do registrador F apresentar a combinação 0100 0001, ocorre a seguinte situação:

7 6 5 4 3 2 1 0 S Z X H X P/V N C 0 1 0 0 0 0 0 1

ou seja: • bit 0 está em nível 1 informando que houve carry; • bit 1 está em nível 0 indicando que se trata de uma operação de soma; • os bits 2 e 4 em zero indicam condição de não-paridade e não-half-carry; • os bits 3 e 5 não são utilizados (nível 0); • bit 6 (flag de zero) em nível 1 informa que a operação lógica ou aritmética deu resultado

zero; • bit 7 (flag de sinal) em nível 0 indica que o resultado da operação é positivo.

Nesse caso, a palavra armazenada no registrador F é 41H porque 0100 = 4 e 0001 = 1.

Sempre que o conteúdo do registrador F for verificado, o resultado mostrado no display de dados aparecerá em código hexadecimal. A tradução desse resultado para a linguagem binária fornece a condição das flags naquele momento.

Page 25: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

25

3.5 – Exercícios

1 – Qual a função dos dispositivos de entrada e saída (I/O)? ______________________________________________________________________________________________________________________________________________________________________________________________________ 2 – O microprocessador é composto de três barramentos independentes. Quais são? Comente sobre eles. ______________________________________________________________________________________________________________________________________________________________________________________________________ 3 – Com base na arquitetura padrão de um microprocessador, explique a função de cada bloco:

• Acumulador____________________________________________________________________________________________________________

• Apontador da pilha___________________________________________ ___________________________________________________________

• Contador de programa_________________________________________ ___________________________________________________________

• Decodificador de instrução_____________________________________ ___________________________________________________________

• Flags_________________________________________________________________________________________________________________

• Registradores auxiliares_______________________________________ ___________________________________________________________

• Registrador de instrução _______________________________________ ___________________________________________________________

• Unidade de controle__________________________________________ ___________________________________________________________

• Unidade Lógica Aritmética (ULA)_______________________________ ___________________________________________________________

Page 26: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

26

4 – Para as somas abaixo relacionadas indique quais os Flags setados. a – + D6 b – + C3 c – + A2 d – + B5 7C 3D 5E 42

Page 27: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

27

Anotações: ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ____________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________

Page 28: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

28

CAPÍTULO 4

O Microcontrolador

A arquitetura do Microcontrolador Ciclos de máquina Introdução às interrupções O PIC 16F628 Registradores especiais

Page 29: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

29

4 – O MICROCONTROLADOR

O microcontrolador é um dispositivo que tem a função de controlar algum processo ou aspecto do ambiente. Componente de aplicação específica e uma vez implementado permite poucos recursos para alteração do processo em que foi utilizado. Como exemplo podemos citar o Televisor, Forno microondas, videocassete, celulares, brinquedos etc. Os microcontroladores estão revolucionando o projeto de equipamento eletrônico, não somente os sistemas convencionais estão se tornando mais sofisticados e baratos, como novas funcionalidades estão sendo possíveis de serem implementadas com um custo compatível com o mercado.

Os microprocessadores destinados ao mercado de computadores pessoais podiam e podem ser empregados como controladores, porém seu custo continua elevado para o tipo de tarefa que se deseja executar no controle dedicado. Por exemplo, utilizarmos um Pentium 4 no controle do número de lâmpadas acessas simultaneamente em uma residência.

Em virtude deste mercado, os fabricantes de circuitos lançaram então os microcontroladores, dispositivos que possuem integrados em uma única pastilha a CPU, RAM, EPROM ou EEPROM, E/S e controladores de interrupção, PWM’s etc. O surgimento destes dispositivos a um baixo custo provocou uma revolução nos métodos de projetos de sistemas de controle para o uso doméstico ou industrial. Os sistemas puramente mecânicos estão sendo alterados por circuitos eletrônicos mais confiáveis e baratos.

O microcontrolador é programável, pois toda a lógica de operação é estruturada na forma de um programa e gravada dentro do componente. Após isso, toda vez em que alimentarmos o microcontrolador o programa interno será executado.

4.1 - A arquitetura de um microcontrolador Para podermos entender mais facilmente a estrutura do microcontrolador, podemos imaginar como um dispositivo composto de seis partes: Clock, CPU, Porta de entrada, Porta de saída, Memória de dados, Memória de programa. Os dados dentro de um microcontrolador são manipulados em unidades chamadas palavras. Os microcontroladores PIC’s apresentam estrutura de máquina interna do tipo “Havard”, enquanto grande parte dos microcontroladores tradicionais apresenta uma arquitetura do tipo “Von-Newman”.

A diferença está na forma como os dados e os programas são processados pelo microcontrolador, onde na arquitetura “Von-Newman” existe apenas um barramento interno, geralmente de 8 bits, por onde passam as instruções e os dados. Já na arquitetura do tipo “Havard” existem dois barramentos internos, sendo um de dados e outro de instruções. No caso do PIC, o barramento de dados é sempre de 8 bits e o de instruções de 12, 14 ou 16 bits. O PIC 16F628, que será por nos estudado, possui palavras de dados de oito bits de tamanho, e palavras de instrução de 14 bits. Esse tipo de arquitetura permite que enquanto uma instrução é executada outra seja “buscada” da memória, o que torna o processamento mais rápido. Além disso, como o barramento de instrução é maior que 8 bits, o OPCODE da instrução já inclui o dado e o local onde ela vai operar (quando necessário), o que significa que apenas uma posição de memória é utilizada por instrução, economizando assim muita memória de programa. A largura de memória de programa de 24 bits, além de implementar diversas facilidades os coloca como dispositivos intermediários aos DSP, de fato são chamados de DSC (“Digital Signal Controller” – Controlador Digital de Sinais).

Os PIC’s utilizam uma tecnologia chamada RISC (“Reduced Instruction Set Computer” - Computador com Set de Instruções Reduzidas). Desta forma, os PIC’s possuem cerca de 35 instruções, muito menos que os microcontroladores convencionais CISC que chegam a possuir mais de 100 instruções.

Page 30: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

30

As linhas mais finas que partem do centro em direção à periferia do microcontrolador correspondem aos fios que interligam os blocos interiores aos pinos do invólucro do microcontrolador. O gráfico que se segue representa a parte principal de um microcontrolador.

Abaixo temos uma tabela com alguns exemplos da família PIC:

12 Bits 14 Bits 16 Bits

16C56 16F62x 18F242

16C57 16C7x 18F252

16C58 16F7x 18F258

16C505 16F8x 18F442

16HV540 16F87x 18F458

Page 31: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

31

Analisando a estrutura abaixo podemos definir:

Figura 9 – O Microcontrolador Básico

Clock – é o responsável pelo sincronismo entre todas as operações de um microcontrolador. Todos eventos que ocorrem dentro de um microcontrolador obedecem a uma lógica preestabelecida pelo fabricante e são processados em tempos determinados pela freqüência do clock. Normalmente, quanto maior a freqüência de clock de um microcontrolador, mais rápida é a execução das instruções. No caso dos microcontroladores, o clock é também utilizado como referência de tempo para execução de tarefas que devem ser repetidas a determinado intervalo de tempo, como por exemplo, a leitura de interfaces RS232C.

CPU – Vamos agora adicionar mais 3 locais de memória a um bloco específico para que possamos ter as capacidades de multiplicar, dividir, subtrair e mover o seus conteúdos de um local de memória para outro. A parte que vamos acrescentar é chamada "central processing unit" (CPU) ou Unidade Central de Processamento. Os locais de memória nela contidos chamam-se registros.

Os registros são, portanto, locais de memória cujo papel é ajudar a executar várias operações matemáticas ou quaisquer outras operações com dados, quaisquer que sejam os locais em que estes se encontrem.

CPU

Saída Entrada

Clock Memória de

Dados

Memória de Programas

Page 32: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

32

Vamos olhar para a situação atual. Nós temos duas entidades independentes (memória e CPU) que estão interligadas, deste modo, qualquer troca de dados é retardada bem como a funcionalidade do sistema é diminuída. Se, por exemplo, nós desejarmos adicionar os conteúdos de dois locais de memória e tornar a guardar o resultado na memória, nós necessitamos de uma ligação entre a memória e o CPU. Dito mais simplesmente, nós precisamos de obter um "caminho" através do qual os dados possam passar de um bloco para outro. A unidade central de processamento coordena todas as atividades dentro do microcontrolador. Ela organiza a execução das instruções e realiza as operações lógicas e aritméticas sobre os dados e envia os resultados para os diversos registros ou portas de entrada e saída.

Portas de entrada e saída – Estas localizações que acabamos de adicionar, chamam-se "portos". Existem vários tipos de portos: de entrada, de saída e de entrada/saída. Quando trabalhamos com portos primeiro de tudo é necessário escolher a porta com que queremos trabalhar e, em seguida, enviar ou receber dados para ou desse porto.

Quando se está a trabalhar com ele, a porta funciona como um local de memória. Qualquer coisa de que se está a ler ou em que se está a escrever e que é possível identificar facilmente nos pinos do microcontrolador. São os pontos através dos quais o microcontrolador interage com o ambiente externo. As portas assumem valores discretos, normalmente referenciados como 0 ou 1, correspondente a 0 v ou 5 v de saída. Alguns microcontroladores possuem uma ou mais portas de entrada especiais chamadas de “Interrupts”. Estas portas não exigem que a CPU fique vigiando a ocorrência do evento na porta, porque interrompem o programa sendo executado cada vez que ocorre um dado evento. Os “Interrupts” são uma das características mais utilizadas nos projetos em que se necessite de uma rapidez de resposta a eventos assíncronos, que podem ocorrer a qualquer instante.

Memória de dados – A memória é a parte do microcontrolador cuja função é guardar dados. A maneira mais fácil de explicar é descrevê-la como uma grande prateleira cheia de gavetas. Se supusermos que marcamos as gavetas de modo a elas não se confundirem umas com as outras, então o seu conteúdo será facilmente acessível. Basta saber a designação da gaveta e o seu conteúdo será conhecido.

Page 33: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

33

Os componentes de memória são exatamente a mesma coisa. Para um determinado endereço, nós obtemos o conteúdo desse endereço. Dois novos conceitos foram apresentados: endereçamento e memória. A memória é o conjunto de todos os locais de memória (gavetas) e endereçamento nada mais é que selecionar um deles. Isto significa que precisamos de selecionar o endereço desejado (gaveta) e esperar que o conteúdo desse endereço nos seja apresentado (abrir a gaveta). Além de ler de um local da memória (ler o conteúdo da gaveta), também é possível escrever num endereço da memória (introduzir um conteúdo na gaveta). Isto é feito utilizando uma linha adicional chamada linha de controle. Nós iremos designar esta linha por R/W (read/write) - ler/escrever. A linha de controle é usada do seguinte modo: se r/w=1, é executada uma operação de leitura, caso contrário é executada uma operação de escrita no endereço de memória. A memória é o primeiro elemento, mas precisamos de mais alguns para que o nosso microcontrolador possa trabalhar. É normalmente implementada na forma de RAM em que podemos ler e gravar com facilidade. A capacidade de memória RAM no microcontrolador é bem pequena, ela possui um barramento de 8bits, pois somente teremos o transito de dados entre a memória e a CPU. A memória RAM é dividida em duas partes distintas, uma para abrigar os registradores de funções especiais (SFR) e outra para abrigar os registradores de propósitos gerais (GPR).

Memória de programa – é onde residem as instruções que devem ser executadas pela CPU. O programa é gravado apenas uma vez e a partir daí o microcontrolador executa apenas este programa. A maior parte dos microcontroladores PIC, utiliza a memória EEPROM ou FLASH, que pode ser apagada por meios elétricos. Existem quatro tecnologias típicas de implementação: a ROM do tipo mascara, são identificados pelo sufixo “CR”; o OTP, identificado pelo sufixo “C”; a EPROM identificada pela janela característica e que pode ser do tipo “JW” com encapsulamento DIP ou “CL” para encapsulamento do tipo PLCC. E a memória FLASH. Uma característica importante da memória do microcontrolador PIC é que ela pode ser acessada por software. Também devido a características da arquitetura RISC, a instrução de chamada e de desvio tem disponíveis somente 11 bits para os endereços usados. Por esse motivo a memória de programa é dividida em paginas. Usamos o PCLATH para direcionar os endereços. X X X 4 3 2 1 0 7 6 5 4 3 2 1 0

“PC - Program Counter”

Page 34: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

34

4.2 - Ciclos de Máquina

Nos microcontroladores PIC, o sinal do clock é internamente dividido por quatro, portanto para um clock externo de 4 MHz, temos um clock interno de 1 MHz e conseqüentemente, cada ciclo de máquina dura 1µs.

A divisão do clock por quatro, forma as fases Q1, Q2, Q3 e Q4. O PC (program counter) é incrementado automaticamente na fase Q1 do ciclo de máquina e a instrução seguinte é buscada da memória de programa e armazenada no registrador de instruções no ciclo Q4. Ela é decodificada e executada no próximo ciclo, no intervalo de Q1 até Q4. Esta característica de buscar informações num ciclo de máquina e executá-la no próximo é conhecida como PIPELINE. Ela permite que quase todas as instruções sejam executadas em apenas um ciclo, gastando assim 1 µs (para um clock de 4 Mhz) e tornando o sistema muito mais rápido. As únicas exceções referem-se às instruções que geram “saltos” no PC, como chamadas de rotinas e retorno. Ao executar essas instruções, o PIPELINE deve ser primeiramente limpo para depois poder ser carregado novamente com o endereço correto, consumindo para isso 2 ciclos de máquina. Esse PIPELINE é facilmente implementado devido à arquitetura de “Havard”.

Vetor de reset – Trata-se do primeiro endereço da memória de programa que será executado quando o PIC começar a rodar, quando alimentado ou por “reset”. Na maioria dos modelos, o “reset” aponta para o endereço 0x00, mas em alguns modelos mais antigos ele pode apontar para o último endereço disponível.

Vetor de interrupção –As rotinas de interrupção serão armazenadas na área de programação , juntamente com todo o resto do programa. No entanto, existe um endereço que é reservado para o início do tratamento de todas as interrupções, nos modelos de PIC que possuem este recurso, esse endereço de vetor de interrupção é a posição 0x04.

Pilha – A pilha é o local, totalmente separado da memória de programação, em que serão armazenados os endereços de retorno quando utilizarmos instruções de chamadas de rotinas. Quando o programa é desviado para o começo de uma rotina por meio da instrução correta, o endereço seguinte ao ponto que estava sendo rodado é armazenado na pilha para que, ao fim da rotina, o programa possa retornar. O tamanho da pilha também varia de acordo com o modelo de PIC, e esse tamanho determina a quantidade de rotinas que podem ser chamadas ao mesmo tempo. Caso se tente chamar um número de rotinas maior que o tamanho da pilha, o endereço de retorno mais antigo será perdido. A estrutura para implementação da pilha é chamada de memória LIFO (Last In First Out). Quando a CPU armazena uma nova informação na pilha o comando é PUSH (empurrar), o desempilhamento é feito através da instrução POP (Pull Operation – Operação de puxar).

Registradores especiais – Nessa região da memória encontram-se todos os registradores especiais, denominados SFRs (special function register), utilizados pelo microcontrolador para execução do programa e processamento da ULA. Esses registradores ocupam espaço na RAM e podem ser acessados da mesma maneira que as variáveis do sistema, com mudança somente do endereço de acesso. A quantidade de SFRs depende do modelo de PIC, mas eles sempre são armazenados na parte baixa da memória (início dos endereços) e às vezes podem estar espalhadas em mais de um banco de memória.

Registradores de uso geral – Trata-se de uma área destinada ao armazenamento de variáveis definidas pelo usuário para serem escritas e lidas pelo programa. O tamanho dessa memória varia de acordo com o modelo de PIC e também pode ocupar mais de um banco.

EEPROM – A maior parte dos modelos de PIC, possuem esta memória interna.

Page 35: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

35

4.3 - Introdução às Interrupções Como o próprio nome diz, uma interrupção serve para interromper o programa imediatamente e desta forma realizar uma outra atitude instantaneamente. As interrupções são ações tratadas diretamente pelo “Hardware”, o que as torna muito rápidas e disponíveis em qualquer ponto do sistema. Quando uma interrupção acontece, o programa é paralisado e uma função específica é executada e depois o programa continua a ser executado no mesmo ponto em que estava. No PIC temos vários tipos de interrupções que podem ser provocadas de modo diferentes e com diferentes atuações. Nos modelos mais antigos, não possuíam nem interrupção e nos modelos mais novos da família PIC, podemos encontrar até 18 tipos diferentes de interrupções, como estamos estudando o PIC 16F628, somente iremos estudar quatro tipos de interrupções.

Interrupção de TIMER 0 - Essa interrupção acontece sempre que um contador de tempo interno, denominado TMR0 (Timer 0), estoura, ou seja, como ele é um contador de 8 bits, sempre que ele passar de 0xFF para 0x00. Utilizado principalmente para contagem de tempo. O TMR0 pode tanto ser incrementado pelo clock da máquina, como também por um sinal externo, o que neste caso ele passa a ser um contador de pulsos, com outra finalidade. O flag sinalizador da interrupção

E chamado de T0IF e o bit de controle é chamado de T0IE. Ambos se encontram no registrador INTCON.

Interrupção EXTERNA – Essa interrupção é gerada por um sinal externo ligado a uma porta específica do PIC, no caso a porta RB0, caso ela seja definida como entrada. Deste modo se podemos identificar e processar imediatamente um sinal externo.

Para que possa ser identificado, é necessário que se defina se a identificação será realizada na borda de subida ou descida do sinal, é necessário configurar a porta. A flag de sinalização da interrupção externa é chamada de INTF e o controle de habilitação é chamado de INTE e ambos se encontram no registrador INTCON.

Interrupção por MUDANÇA DE ESTADO – A interrupção por mudança de estado ocorre se existe a mudança do sinal sem se importar se foi na borda de subida ou descida. Esta interrupção esta ligada as porta RB4, RB5, RB6 e RB7 simultaneamente. Por isso se essas portas forem configuradas como entradas, a mudança de estado em qualquer uma delas irá gerar uma interrupção. Esse tipo de interrupção pode ser utilizado, por exemplo, para criar um sincronismo com a rede, para controle de um triac ou outro sistema qualquer. O flag sinalizador desta interrupção é chamado de RBIF e o sinal de controle é chamado de RBIE. Ambos se encontram sempre no registrador INTCON.

Interrupção de FIM NA ESCRITA NA EEPROM – Os PICs possuem uma memória EEPROM interna e essa interrupção serve para detectarmos o final de uma rotina de escrita nessa memória. A utilização da interrupção não é obrigatória para que a escrita funcione, mas como a EEPROM é lenta na hora de escrever, em alguns sistemas a sua utilização pode ser necessária para evitar uma parada durante a escrita na EEPROM. O flag sinalizador da interrupção é o EEIF e o bit de controle é chamado de EEIE.

Interrupções - Sempre que uma interrupção acontece (qualquer uma), o programa guarda o endereço da próxima linha a ser executada na pilha, e desvia para um endereço fixo da memória de programação. Basta então, nesse endereço (0x04), escrever a rotina que irá reconhecer e tratar a interrupção acontecida, sempre que o microcontrolador desvia para esse endereço, o bit GIE é desligado, quando se executa uma instrução de retorno de interrupção RETFIE, faz com que o bit GIE seja habilitado permitindo uma nova ocorrência de interrupção.

Page 36: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

36

Quando a rotina de interrupção for terminada, o programa automaticamente voltará ao ponto em que estava antes de ocorrer à interrupção. O atraso de tempo existente entre a ocorrência de um evento de interrupção e o efetivo desvio para o vetor de interrupção é chamado de latência de interrupções. Existem outros modos de interrupção, mas não será analisado.

4.4 – O PIC 16F628

O microcontrolador PIC 16F628 é versátil, compacto e possui como principais características:

• Microcontrolador de 18 pinos o que facilita a compatibilidade com outros em nível de hardware e software (como o 16F84).

• Baixo custo

• 15 pinos de I/O (Entrada ou Saída).

• Memória de programação FLASH de 2048 x 14 bits.

• Memória SRAM de 224 x 8 bits disponíveis.

• Memória EEPROM interna de 128 x 8 bits.

• 1 canal PWM com captura e amostragem (CCP).

• Facilidade de programação com 35 instruções.

• Capacidade de corrente de 25 mA por pino de I/O

• Oscilador 4 MHz.

• Tensão de operação entre 3.0 a 5.5 V (2.0 a 5.5 para versão LF).

4.5 - Descrição dos pinos

1 RA2/AN2/Vref RA1/AN1 18

2 RA3/AN3/CMP1 RA0/AN0 17

3 RA4/T0CKI/CMP2 RA7/OSC1/CLKIN 16

4 RA5/MCLR/THV RA6/OSC2/CLKOUT 15

5 Vss Vdd 14

6 RB0/INT RB7/T1OSI 13

7 RB1/RX/DT RB6/T1OSO/T1CKI 12

8 RB2/TX/CK RB5 11

9 RB3/CCP1 RB4/PGM 10

PIC 16F62X

Figura 10 – Pinagem do PIC 16F62X

Page 37: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

37

Pino Função Tipo Descrição

1 RA2/AN2/Vref Entrada e saída Porta A bit 2 / Entrada do comparador analógico / Saída da referencia de tensão.

2 RA3/AN3/CMP1 Entrada e saída Porta A bit3 / Entrada comparador analógico / Saída comparador 1.

3 RA4/T0CKI/CMP2 Entrada e saída Porta A bit 4 / Entrada clock externo do timer 0 / Saída comparador 2. Saída em dreno aberto.

4 RA5/MCLR/THV Entrada Porta A bit 5 / Reset CPU / tensão de programação.

5 Vss Alimentação Terra.

6 RB0/INT Entrada e saída Porta B bit 0 / Entrada de interrupção externa.

7 RB1/RX/DT Entrada e saída Porta B bit 1 / Recepção USART (modo assíncrono) / Dados (modo síncrono).

8 RB2/TX/CK Entrada e saída Porta B bit 2 / Transmissão USART (modo assíncrono) / Clock (modo síncrono)

9 RB3/CCP1 Entrada e saída Porta B bit 3 / Entrada e saída do modulo CCP.

10 RB4/PGM Entrada e saída Porta B bit 4 / E entrada de programação LVP.

11 RB5

Entrada e saída Porta B bit 5.

12 RB6/T1OSO/T1CKI Entrada e saída Porta B bit 6 / Saída oscilador TMR1 / Entrada de clock TMR1.

13 RB7/T1OSI Entrada e saída Porta B bit 7 / Entrada do oscilador de TMR1.

14 Vdd Alimentação Alimentação Positiva.

15 RA6/OSC2/CLKOUT Entrada e saída Porta A bit 6 / Entrada para cristal oscilador / Saída de clock.

16 RA7/OSC1/CLKIN Entrada e saída Porta A bit 7 / Entrada para cristal oscilador / Entrada de clock externo.

17 RA0/AN0 Entrada e saída Porta A bit 0 / Entrada comparador analógico.

18 RA1/AN1 Entrada e saída Porta A bit 1 / Entrada comparador analógico.

Page 38: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

38

4.6 - Considerações iniciais sobre o Hardware Alimentação – Como vimos na pinagem do 16F628, falamos sobre os pinos Vss e Vdd. Portanto, se tivermos uma fonte segura de 5 Vcc, ligando o GND ao pino 5 e o +5 V ao pino 14. É importante que essa fonte não tenha grandes variações de tensão (riplle) e ruídos. O PIC 16F628, apesar de ter sua tensão nominal em 5 Vcc, pode ser alimentado de 2.0 a 6.0 V, mas essa tensão não deve ficar variando durante sua utilização. Utilizar o capacitor com valor entre 100pF e 100nF em paralelo com os pinos de alimentação.

Osciladores – O oscilador do PIC 16F628 pode ser externo ou interno e sem ele o programa não é executado e nada funciona. O oscilador interno é capaz de operar em sete modos diferentes e somente em um modo externo. 1.Como um cristal de baixa potencia (até 200KHz) – 2.Cristal / Ressonador cerâmico (até 4MHz) – 3.Cristal / Ressonador cerâmico de alta freqüência (até 20MHz) – 4.Resistor externo sem saída de clock – 5.Resistor externo com saída de clock – 6.Oscilador RC interno sem saída de clock – 7.Oscilador RC interno com saída de clock – 8.Clock externo.

Cristal / Ressonador – Quando utilizamos um ressonador ou um cristal de quartzo mais dois capacitores, é possível implementar um oscilador de clock para o PIC. Devemos configurar o microcontrolador de acordo com o modo do oscilador em função da freqüência do cristal ou ressonador utilizado. Onde quando utilizarmos uma freqüência menor que 200KHz (modo LP), uma freqüência entre 200KHz e 4MHz (modo XT) e uma freqüência maior que 4MHz (modo HS). Os capacitores entre 10 e 33 pF.

23456789

1716151413121110

1 18

PIC16F628

C2XTAL

C1

Figura 11 – Oscilador a cristal

Oscilador / Resistor – É utilizado um resistor conectado ao pino RA7 ao terra para gerar o clock para a CPU. O oscilador trabalha com uma freqüência desde 10KHz a 8MHz e o resistor deve estar entre 38K e 1MΩ. Para definirmos esta operação o bit OSCF no registrador PCON, deve estar em 1.

Figura 12 – Oscilador resistor

RA7 / OSC1 / CLKIN RA6 / OSC2 / CLKOUT R

Page 39: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

39

Oscilador Interno – É um oscilador de 4MHz derivado de um clock obtido a partir de um oscilador RC interno. Esse oscilador possui razoável precisão com um valor típico de 4Mhz, com mínimo de 3,65 e máximo de 4,28Mhz. Permite uma maior disponibilidade dos pinos do PIC, pois RA6 e RA7 estão liberados. Para definirmos esta operação o bit OSCF no registrador PCON, deve estar em 0, se estiver em 1 estaremos com um clock de 37KHz. É necessário implementar no programa na etapa de configuração do microcontrolador a seguinte instrução “_INTRC_OSC_NOCLKOUT“ e retira-se a instrução _XT_OSC.

Clock Externo – Quando utilizarmos um clock externo para o PIC é necessário configurar o modo do oscilador para EC.

Figura 13 – Clock externo

Detector baixa tensão – É um detector de baixa tensão, conhecido também como detector de “Brown – out”, onde caso a tensão de alimentação diminuir abaixo do valor de Vz, um reset do MCU é implementado fazendo com que a CPU reinicialize o programa. Caso seja utilizada uma tensão baixa de alimentação é necessário desabilitar o bit BODEN = 0 para que não seja detectado.

Figura 14 – Detector baixa tensão

Temporizador de Power-Up – O temporizador de power-up (PWRT) pode ser utilizado para fazer com que o chip permaneça em reset por aproximadamente 72ms após o chip ter sido ligado. Deve ser utilizado sempre que possível devido ao fato do tempo de demora de estabilização da fonte de alimentação para todos os componentes envolvidos no circuito. Esse temporizador pode ser habilitado ou desabilitado somente durante a programação do chip.

Módulo Comparador Analógico – O modula comparador analógico consiste em um conjunto de dois comparadores analógicos internos, que podem realizar comparações entre si ou de tensões analógicas externas. O modulo possui apenas o um registrador CMCON, responsável pela configuração e controle dos comparadores internos.

RA7 / OSC1 / CLKIN RA6 / OSC2 / CLKOUT

Page 40: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

40

4.7 - Registradores especiais

Como vimos o microcontrolador PIC possui uma série de registradores especiais que são denominados SFR (Special Function Registers) que servem exatamente para guardar a configuração e o estado de funcionamento atual da máquina. Para efeito de padronização, cada bit dentro desses registradores receberá um nome, sendo também especificado se esse bit pode ser lido (R-Read) e/ou escrito (W-Write). Veremos agora para que serve e como é composto cada um desses registradores.

4.8 - Registradores Gerais Conhecendo o STATUS – Esse registrador serve para mostrar o estado da ULA, a forma do último reset e também para configurar a pagina de programação atual, quando necessário.

Registrador: STATUS Endereços: 03h, 83h, 103h e 183h

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

R/W R/W R/W R R R/W R/W R/W

IRP RP1 RP0 /TO /PD Z DC C

IRP – Seletor de banco de memória usado para endereçamento indireto.

0 = Banco 0 e 1 (00h – FFh). 1 = Banco 2 e 3 (100h – 1FFh)

* Manter sempre em 0 no 16F628

RP1 e RP0 – Seletor de banco de memória usado para endereçamento indireto.

00 = Banco 0 (00h – 7Fh). 01 = Banco 1 (80h – FFh).

10 = Banco 2 (100h – 17Fh). 11 = Banco 3 (180h – 1FFh).

* Cada banco possui 128 bits. O PIC 16F628 só possui os bancos 0 e 1. RP1 deve ser 0.

/TO – Indicação de Time-out.

0 = Indica que ocorreu um estouro de WatchDog (WDT).

1 = Indica que ocorreu um power-up ou foi executada a instrução CLRWDT ou SLEEP.

/PD – Indicação de Power-down.

0 = Indica que a instrução SLEEP foi executada.

1 = Indica que ocorreu um Power-up ou foi executada a instrução CLRWDT.

Z – Indicação de zero.

0 = Indica que o resultado da ultima operação (lógica ou aritmética) não foi zero.

1 = Indica que a ultima operação (lógica ou aritmética) resultou em zero.

Page 41: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

41

DC – Digit Carry/borrow.

0 = A ultima operação da ULA não ocasionou um estouro de dígito.

1 = A ultima operação da ULA ocasionou um estouro (carry) entre o bit 3 e 4, isto é o resultado ultrapassou os 4 bits menos significativos.

C – Carry.

0 = A ultima operação da ULA não ocasionou um estouro (carry)

1 = A ultima operação da ULA ocasionou um estouro (carry) no bit mais significativo.

Conhecendo o CMCON – O modulo comparador permite implementar diversos circuitos através dos comparadores analógicos, inclusive conversores A/D, como o de rampa ou conversores. Cada implementação é realizada através do registrador CMCON. Este registrador é implementado no PIC 16F628.

Registrador: CMCON Endereços: 1Fh

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

R R R/W R/W R/W R/W R/W R/W

C2OUT C1OUT C2INV C1INV CIS CM2 CM1 CM0

C2OUT – Bit indicativo do estado da saída do comparador 2.

0 = em “C2INV” 0 – entrada Vin+ < Vin -, 1 – entrada Vin+ > Vin -.

1 = em “C2INV” 0 – entrada Vin+ > Vin -, 1 – entrada Vin+ < Vin -.

C1OUT – Bit indicativo do estado da saída do comparador 1.

0 = em “C1INV” 0 – entrada Vin+ < Vin -, 1 – entrada Vin+ > Vin -.

1 = em “C1INV” 0 – entrada Vin+ > Vin -, 1 – entrada Vin+ < Vin -.

C2INV – Seleção de inversão do sinal de saída do comparador 2.

0 – Saída não invertida 1 – Saída invertida.

C1INV – Seleção de inversão do sinal de saída do comparador 1.

0 – Saída não invertida 1 – Saída invertida.

CIS – Seleção de entrada dos comparadores nos modos 1 e 2.

CM2, CM1 e CM0 – Seleção do modo de operação dos comparadores:

Page 42: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

42

CM2 CM1 CM0 Modo

0 0 0 0

0 0 1 1

0 1 0 2

0 1 1 3

1 0 0 4

1 0 1 5

1 1 0 6

1 1 1 7

Modo 0 – Neste modo os comparadores se encontram em reset, é o modo inicial de configuração dos comparadores. Neste modo, as saídas estão desligadas, mas os pinos RA0, RA1, RA2 e RA3 estão conectados às entradas dos comparadores, ou seja, como entradas analógicas.

Modo 1 – Dois comparadores com três entradas Multiplexadas onde temos 2 entradas conectadas à entrada inversora de C1 e ambos comparadores compartilham a mesma referência externa conectada à entrada inversora de RA2/AN2/Vref.

Modo 2 – Dois comparadores com quatro entradas multiplexadas onde temos os comparadores configurados com a entrada não inversora conectada ao módulo de referência de tensão interna (VREF). As entradas inversoras de cada comparador são multiplexadas.

Modo 3 – Dois comparadores com uma referência externa comum onde temos uma configuração na qual os dois comparadores possuem uma referência de tensão externa conectado ao pino RA2/AN2/Vref. Deste modo o pino RA3/AN3/CMP1 pode ser utilizado como I/O digital.

Modo 4 – Neste modo temos os dois comparadores independentes.

Modo 5 – Apenas o comparador C2 está em funcionamento e o comparador C1 permanece desligado, liberando os pinos RA0/AN0 e RA3/AN3/CMP1 para utilização como I/O digital.

Modos 6 – Neste modo têm os dois comparadores compartilhando a mesma referência externa comum (RA2/AN2/Vref). As saídas C1OUT e C2OUT encontram-se disponíveis externamente nos pinos RA3/AN3/CMP1 e RA4/T0CKI/CMP2 respectivamente.

Modo 7 – Neste modo os comparadores se encontram desligados e os pinos de RA0 a RA3 podem ser utilizados para I/O digital.

Page 43: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

43

Conhecendo o OPTION – Esse registrador serve para configurar uma série de opções para a operação do microcontrolador. Apesar de este registrador receber o nome OPTION, ele será referenciado em nossos programas pelo nome OPTION-REG, pois os PICs mais antigos possuíam uma instrução chamada OPTION.

Registrador: OPTION Endereços: 81h e 181h Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

R/W R/W R/W R/W R/W R/W R/W R/W

/RBPU INTEDG TOCS TOSE PSA PS2 PS1 PS0

/RBPU – Habilitação dos pull-ups internos para o PORTB.

0 = Pull-ups habilitado para todo pino do PORTB configurado como entrada.

1 = Pull-ups desabilitado.

INTEDG – Configuração da borda que gerará a interrupção externa no RB0.

0 = A interrupção irá ocorrer na borda de descida.

1 = A interrupção irá ocorrer na borda de subida.

TOCS – Configuração do incremento para o TMR0.

0 = TMR0 será incrementado internamente pelo clock da máquina.

1 = TMR0 será incrementado externamente pela mudança no pino RA4/T0CKI.

TOSE – Configuração da borda que incrementará o TMR0 no pino RA4/T0CKI quando TOCS = 1.

0 = Incremento na borda de subida. 1 = Incremento na borda de descida.

PSA – Configuração de aplicação do prescaler.

0 = O prescaler será aplicado ao TMR0. 1 = O prescaler será aplicado ao WDT.

* Para o TMR0 ser incrementado a cada ciclo de máquina é necessário que PSA = 1

PS2, PS1 e PS0 – Configuração do valor de prescaler.

Bits 2, 1, 0 TMR0 WDT

000 1:2 1:1

001 1:4 1:2

010 1:8 1:4

011 1:16 1:8

100 1:32 1:16

Page 44: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

44

101 1:64 1:32

110 1:128 1:64

111 1:256 1:128

Conhecendo o PCON – Esse registrador serve para sinalização de dois estados de reset. O reset por queda de tensão de alimentação (Brown-out) e o reset de inicialização (Power-on reset). Além disso, o bit 3 desse registrador controla o clock do chip quando nos modos de oscilador interno ou resistor externo.

Registrador: PCON Endereço: 8Eh

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

- - - - R/W - R/W R/W

- - - - OSCF - /POR /BOD

OSCF – Bit de controle do modo de operação do oscilador de clock interno.

0 = Clock de 37 KHz – somente nos modos de clock interno ou resistor externo.

1 = Clock de 4 MHz interno ou conforme resistor externo.

/POR – Sinalizador de reset de inicialização.

0 = Houve um reset do tipo POR – reset de inicialização.

1 = Não ocorreu o reset de inicialização.

/BOD – Sinalizador de reset por queda de tensão de alimentação (Brown-out).

0 = Houve reset por queda da tensão alimentação.

1 = Não houve reset por queda de tensão de alimentação.

Conhecendo o INTCON – Esse registrador serve para configurar e identificar as interrupções.

Registrador: INTCON Endereços: 0Bh e 8Bh

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

R/W R/W R/W R/W R/W R/W R/W R/W

GIE EEIE T0IE INTE RBIE T0IF INTF RBIF

GIE – Habilitação geral das interrupções (chave geral).

0 = Nenhuma interrupção será tratada.

1 = As interrupções habilitadas serão tratadas individualmente.

Page 45: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

45

EEIE – Habilitação da interrupção de final de escrita na EEPROM (chave individual).

0 = A interrupção não será tratada. 1 = A interrupção será tratada.

T0IE – Habilitação da interrupção de estouro de TMR0 (chave individual).

0 = A interrupção não será tratada. 1 = A interrupção será tratada.

INTE – Habilitação da interrupção externa no pino RB0 (chave individual).

0 = A interrupção não será tratada. 1 = A interrupção será tratada.

RBIE – Habilitação da interrupção por mudança de estado nos pinos RB4 a RB7 (chave individual).

0 = A interrupção não será tratada. 1 = A interrupção será tratada.

T0IF – Identificação da interrupção de estouro de TMR0.

0 = Esta interrupção não ocorreu. 1 = Esta interrupção ocorreu.

INTF – Identificação da interrupção externa no pino RB0.

0 = Esta interrupção não ocorreu. 1 = Esta interrupção ocorreu.

RBIF – Identificação da interrupção por mudança de estado nos pinos RB4 a RB7.

0 = Esta interrupção não ocorreu. 1 = Esta interrupção ocorreu.

Conhecendo o PIE1 – Possui a função de habilitação / desabilitação das chamadas interrupções periféricas.

Registrador: PIE1 Endereços: 8Ch

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

R/W R/W R/W R/W - R/W R/W R/W

EEIE CMIE RCIE TXIE - CCP1IE TMR2IE TMR1IE

EEIE – Habilitação de interrupção por término de escrita na EEPROM interna.

0 = Esta interrupção não ocorreu. 1 = Esta interrupção ocorreu.

CMIE – Habilitação de interrupção de mudança de estados dos comparadores analógicos.

0 = Esta interrupção não ocorreu. 1 = Esta interrupção ocorreu.

Page 46: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

46

RCIE – Habilitação de interrupção de mudança de estado dos comparadores.

0 = Esta interrupção não ocorreu. 1 = Esta interrupção ocorreu. TXIE – Habilitação de interrupção de transmissão USART.

0 = Esta interrupção não ocorreu. 1 = Esta interrupção ocorreu. CCP1IE – Habilitação de interrupção do modulo CCP.

0 = Esta interrupção não ocorreu. 1 = Esta interrupção ocorreu. TMR2IE – Habilitação de interrupção de transbordo do timer 2.

0 = Esta interrupção não ocorreu. 1 = Esta interrupção ocorreu. TMR1IE – Habilitação de interrupção de transbordo do timer 1.

0 = Esta interrupção não ocorreu. 1 = Esta interrupção ocorreu. O bit 3 do registrador deve ser sempre mantido em “0”. Para habilitar a CPU, utilizando uma das interrupções devemos setar o bit PEIE e o bit GIE no INTCON. Conhecendo o PIR1 – Localizado no banco “0” e abriga os flags sinalizadores de interrupções periféricas.

Registrador: PIR1 Endereços: 0Ch

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

R/W R/W R/W R/W - R/W R/W R/W

EEIE CMIF RCIF TXIF - CCP1IF TMR2IF TMR1IF

EEIF – Sinalizador de término de escrita na EEPROM.

0 = A escrita ainda não terminou ou não foi iniciada.

1 = A escrita terminou. CMIF – Sinalizador de mudança de estado na saída dos comparadores analógicos.

0 = Não houve mudança de estado nos comparadores.

1 = Houve mudança na saída dos comparadores. RCIF – Sinalizador de recepção de caractere na USART.

0 = Não houve recepção de novos caracteres.

1 = Um novo caractere foi recebido. TXIF – Sinalizador de transmissão na USART.

0 = Não houve transmissão na USART ou o TSR esta ocupado.

1 = O caractere armazenado no TXREG foi repassado para o TSR.

Page 47: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

47

CCPIF – Sinalizador de comparação / captura no módulo CCP.

0 = Não houve comparação válida / captura no módulo CCP.

1 = Houve comparação / captura no módulo CCP.

TMR2IF – Sinalizador de transbordo no timer 2.

0 – Não houve transbordo de contagem no TMR2.

1 – Houve transbordo de contagem no TMR2.

TMR1IF - Sinalizador de transbordo no timer 1.

0 – Não houve transbordo de contagem no TMR1.

1 – Houve transbordo de contagem no TMR1. Conhecendo o PCL – O PCL é um registrador que armazena os 8 bits menos significativos do PC (program counter), o qual indica a próxima linha do programa que será executado no momento. A cada ciclo de máquina o PC é automaticamente alterado, para que o programa possa ser executado. Esse registrador também pode ser alterado pelo programa, mas isto deve ser feito com extremo cuidado para que o sistema não se perca e/ou trave.

Registrador: PCL Endereços: 02h e 82h

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

R/W R/W R/W R/W R/W R/W R/W R/W

Parte baixa do PC

Conhecendo o PCLATH – Como a área de memória de programação do PIC 16F628 é maior que 256 bytes, não é possível acessá-la completamente com somente os 8 bits do PCL. Por isso, o PCLATH possui os 5 bits mais altos do PC. No PIC 16F628, esse registrador é controlado diretamente pelo hardware e não precisa ser acessado pelo programa.

Registrador: PCLATH Endereços: 0Ah e 8Ah

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

- - - R/W R/W R/W R/W R/W

Parte Alta do PC

4.8.1 - Registradores Portas Conhecendo os TRIS – Esses registradores servem para configurar os pinos das portas como entrada ou saída. Quando é colocado “1” em um bit do TRIS, o pino relacionado a ele é configurado como entrada. Para configurar o pino como saída, deve-se colocar “0” no bit relacionado. Basta relacionar “1” a palavra “Imput” (entrada) e “0” a palavra “Output” (saída). Para configurar o PORTA, deve ser utilizado o TRISA e para configurar o PORTB, deve ser utilizado o TRISB.

Page 48: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

48

Registrador: TRISA Endereços: 85h

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

R/W R/W R/W R/W R/W R/W R/W R/W

Ref. RA7 Ref. RA6 Ref. RA5 Ref. RA4 Ref. RA3 Ref. RA2 Ref. RA1 Ref. RA0

Registrador: TRISB Endereços: 86h e 186h

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

R/W R/W R/W R/W R/W R/W R/W R/W

Ref. RB7 Ref. RB6 Ref. RB5 Ref. RB4 Ref. RB3 Ref. RB2 Ref. RB1 Ref. RB0

As portas PORTA e PORTB – Como vimos o PIC 16F628 possui duas portas PORTA e PORTB. O estado dessas portas é acessado diretamente em duas posições distintas da memória. Quando um pino dessas portas é configurado como entrada ao lermos o seu bit relacionado, encontraremos diretamente o nível lógico aplicado a esse pino. Da mesma maneira, ao configurarmos um pino como saída, podemos alterar seu estado, escrevendo diretamente no bit relacionado.

Registrador: PORTA Endereços: 05h

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

R/W R/W R/W R/W R/W R/W R/W R/W

RA7 RA6 RA5 RA4 RA3 RA2 RA1 RA0

Registrador: PORTB Endereços: 06h e 106h

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

R/W R/W R/W R/W R/W R/W R/W R/W

RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0

4.8.2 – Contadores

O bloco de temporização que nos interessa bastante porque pode dar-nos informações acerca da hora, duração, protocolo, etc. A unidade básica do temporizador é um contador que é na realidade um registro cujo conteúdo aumenta de uma unidade num intervalo de tempo fixo, assim, anotando o seu valor durante os instantes de tempo T1 e T2 e calculando a sua diferença, nós ficamos a saber a quantidade de tempo decorrida. Esta é uma parte muito importante do microcontrolador, cujo domínio vai requerer muita da nossa atenção.

Page 49: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

49

Conhecendo o TMR0 – O TMR0 é um contador de 8 bits que pode ser acessado diretamente na memória, tanto par leitura quanto para a escrita. A diferença entre ele e os demais registradores é que seu incremento é automático e pode ser feito pelo clock da máquina ou por um sinal externo. É importante lembrar que o estouro desse contador pode gerar uma interrupção. É acessado por três registradores, o OPTION_REG, o TMR0 e o INTCON.

Registrador: TMR0 Endereços: 01h

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

R/W R/W R/W R/W R/W R/W R/W R/W

Contador automático de 8 bits

Conhecendo o TMR1 – O TMR1 é um módulo de 16 bits capaz de operar em três modos básicos, como temporizador síncrono, contador síncrono e assíncrono, com funções de prescaler interno, possibilidade de conexão de cristal externo e de reset gerado pelo módulo CCP. Possui uma filosofia similar ao do timer “0”, porém se destaca a presença de um registrador de controle destinado especificamente ao timer “1”, o T1CON e os registradores específicos para o armazenamento de contagem, (TMR1L e TMR1H). Relacionado aos registradores INTCON, PIR, PIE e T1CON, além dos já citados.

Conhecendo o TMR2 – O TMR2 é um temporizador de 8 bits com princípio de funcionamento similar ao do timer “0” e com características de pré-divisor, pós-divisor, capacidade de ligar ou desligar a contagem do módulo e o registrador de período (PR2). Tem o propósito básico de fornecer a base de tempo para o módulo CCP1. Relacionado aos registradores INTCON, PIR, PIE, TMR2, T2CON e PR2.

Conhecendo o WDT – O watchdog outra coisa que nos vai interessar é a fluência da execução do programa pelo microcontrolador durante a sua utilização. Suponha que como resultado de qualquer interferência (que ocorre frequentemente num ambiente industrial), o nosso microcontrolador pára de executar o programa ou, ainda pior, desata a trabalhar incorretamente.

Claro que, quando isto acontece com um computador, nós simplesmente carregamos no botão de reset e continuamos a trabalhar. Contudo, no caso do microcontrolador nós não podemos resolver o nosso problema deste modo, porque não temos botão. Para ultrapassar este obstáculo, precisamos de introduzir no nosso modelo um novo bloco chamado watchdog (cão de guarda). Este bloco é de fato outro contador que está continuamente a contar e que o nosso programa põe a zero sempre que é executado corretamente. No caso de o programa "encravar", o zero não vai ser escrito e o contador, por si só, encarregar-se-á de fazer o reset do microcontrolador quando alcançar o seu valor máximo. Isto vai fazer com que o programa corra de novo e desta vez corretamente. Este é um elemento importante para que qualquer programa se execute fiavelmente, sem precisar da intervenção do ser humano.

Page 50: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

50

O Watchdog Timer (WDT), popularmente conhecido como “cão de guarda”, também é um contador incrementado automaticamente, só que com um clock independente. O PIC possui um RC interno só para a operação WDT. Isto significa que seu tempo de incremento é constante, independentemente do oscilador utilizado para gerar o clock da máquina. O tempo normal de estouro do WDT é cerca de 18ms, mas pode variar de acordo com a tensão de alimentação e a temperatura. Uma outra característica desse contador é que ele não é acessível ao programador, nem para a escrita e nem para a leitura. O programador só pode utilizar um comando (CLRWT) para zerá-lo, o que é muito importante, pois se o WDT estourar (passar de 0xFF para 0x00), o sistema será automaticamente resetado, tornando a utilização do WDT muito importante para evitarmos que o sistema trave em determinadas situações. É importante saber também que o WDT pode ser desligado, como uma escolha de configuração na hora de gravar o microcontrolador, porém não permite que seja desligado durante a execução do programa. Conhecendo o PRESCALER – Acabamos de ver que o TMR0 pode ser incrementado pelo clock da máquina ou por um sinal externo, assim como o WDT é incrementado automaticamente e estoura a cada 18 ms. Desta maneira, é fácil efetuarmos cálculos de tempo com esses contadores. Só que ambos executam ações específicas no caso de estouro (interrupção ou reset). Como alterar então o tempo de estouro de cada um desses contadores? Para o TMR0 fica mais fácil, pois alterando o oscilador, alteramos também os seus incrementos. Mas isso é viável? E para o WDT, como podemos alterar seu tempo? Esta é a função do Prescaler. Trata-se de um divisor configurável que pode ser aplicado a um dos dois contadores. Temos aqui então a maior limitação do Prescaler, pois ele só pode ser aplicado a um dos contadores de cada vez (bit PSA do OPTION). Com esse divisor ativo, o tempo de estouro é multiplicado na ordem inversa. Por exemplo:

Um sistema este rodando a 4 MHz. Desta forma, temos um ciclo de máquina e conseqüentemente, uma instrução sendo rodada a cada 1µs. Sem o prescaler, o TMR0 também seria incrementado a cada 1µs. estourando em 256 µs. Se configurarmos o Prescaler em 1:4, o TMR0 só será incrementado a cada 4 ciclos de máquina, neste caso correspondem a 4 µs. O estouro aparecerá então em 1024 µs.

A mesma analogia pode ser aplicada ao WDT. Sem Prescaler, o WDT estoura em aproximadamente 18 ms. Se configurarmos o Prescaler em 1:4, ele irá estourar aproximadamente em 72 ms.

Para podermos configurar o Prescaler em 1:1 para o TMR0, é necessário aplicar o Prescaler ao WDT e desta maneira, o TMR0 ficará sem Prescaler, o que resultará em incremento de 1:1. 4.8.3 - EEPROM Conhecendo o EEADR – Trata-se de um registrador em que será especificado o endereço para escrita ou leitura da EEPROM interna do PIC 16F628, o qual possui uma memória de 128 bytes.

Registrador: EEADR Endereços: 9Bh

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

R/W R/W R/W R/W R/W R/W R/W R/W

Endereço de acesso a EEPROM

Page 51: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

51

Conhecendo o EEDATA – Esse registrador possui duas funções distintas: nas operações de escrita da EEPROM, ele deve ser preenchido com o dado a ser armazenado, já nas operações de leitura, ele armazena o dado lido.

Registrador: EEDATA Endereços: 9Ah

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

R/W R/W R/W R/W R/W R/W R/W R/W

Dado para escrita / leitura da EEPROM

Conhecendo os EECONS – Existem dois registradores de configuração da EEPROM: EECON1 e EECON2. Vejamos primeiramente o EECON1 que é responsável pelas operações de escrita e leitura da EEPROM.

Registrador: EECON1 Endereços: 9Ch Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

R/W R/W R/W R/W R/W R/W R/W R/W

- - - EEIF WRERR WREN WR RD

EEIF – Identificação da interrupção de final da escrita na EEPROM.

0 = Esta interrupção não ocorreu

1 = Esta interrupção ocorreu

* Esse bit se encontra neste registrador por não haver mais espaço no registrador INTCOM.

WRERR – Identificação de erro durante a escrita na EEPROM.

0 = Não ocorreu erro, a escrita foi completada

1 = Um erro ocorreu por uma escrita não terminada (um reset pode ter ocorrido).

WREN – Habilitação de escrita na EEPROM (bit de segurança).

0 = Não disponibiliza escrita na EEPROM.

1 = Disponibiliza escrita na EEPROM.

WR – Ciclo de escrita na EEPROM.

0 = Este bit só pode ser zerado pelo hardware, quando o ciclo de escrita termina.

1 = Inicia o ciclo de escrita.

RD – Ciclo de leitura na EEPROM.

0 = Este bit só pode ser zerado pelo hardware, quando o ciclo de leitura termina.

1 = Inicia o ciclo de leitura.

Page 52: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

52

Em relação ao EECON2, devemos comentar que não se trata de um registrador verdadeiramente implementado na memória. Ele só é utilizado durante a inicialização do ciclo de escrita na EEPROM por uma questão de segurança, evitando assim que a memória seja alterada acidentalmente.

Registrador: EECON2 Endereços: 9Dh

Utilizado para inicializar corretamente a escrita na EEPROM

4.8.4 - Endereçamento indireto

Conhecendo o FSR e o INDF – O FSR é um registrador em que pode ser escrito um outro endereço de memória que será acessado indiretamente, como se ele fosse apenas um ponteiro. Já o INDF não é um registrador realmente verdadeiro, trata-se somente de um espelho do endereço apontado pelo FSR.

Registrador: FSR Endereços: 04h e 84h

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

R/W R/W R/W R/W R/W R/W R/W R/W

Ponteiro para endereçamento indireto

Registrador: INDF Endereços: 00h e 80h

Valor do endereçamento indireto

Page 53: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

53

4.9 – Exercícios

1 – Qual a função do microcontrolador ? ______________________________________________________________________________________________________________________________________________________________________________________________________ __________________________________________________________________ 2 – Compare o microcontrolador com o microprocessador e indique suas principais diferenças. ____________________________________________________________________________________________________________________________________ __________________________________________________________________ __________________________________________________________________ ____________________________________________________________________________________________________________________________________ __________________________________________________________________ 3 – Imaginando o microcontrolador como um dispositivo de seis partes, indique quais são e como defini-las. ____________________________________________________________________________________________________________________________________ __________________________________________________________________ ____________________________________________________________________________________________________________________________________ __________________________________________________________________ 4 – Sabendo que o microcontrolador PIC utiliza uma tecnologia RISC, defina-a e indiquem quais as suas vantagens. ____________________________________________________________________________________________________________________________________ __________________________________________________________________ ____________________________________________________________________________________________________________________________________

Page 54: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

54

5 – Dentre os ciclos de máquina, a divisão do clock por quatro, forma as fases Q1, Q2, Q3, Q4. Explique a função Pipeline, com base nas informações anteriores. ____________________________________________________________________________________________________________________________________ __________________________________________________________________ ____________________________________________________________________________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 6 – Qual a função do vetor de reset, vetor de interrupção e a pilha ? ____________________________________________________________________________________________________________________________________ __________________________________________________________________ ____________________________________________________________________________________________________________________________________ __________________________________________________________________ 7 – Qual a diferença entre os registradores especiais e os registradores de uso geral ? ____________________________________________________________________________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 8 – Para que serve a interrupção nos microcontroladores PIC ? ____________________________________________________________________________________________________________________________________ __________________________________________________________________ 9 – Dentre os tipos de interrupção para os microcontroladores PIC, selecionamos somente quatro. Quais são e explique-as. ____________________________________________________________________________________________________________________________________ __________________________________________________________________

Page 55: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

55

____________________________________________________________________________________________________________________________________ __________________________________________________________________ 10 – Explique o procedimento executado pelo microcontrolador, sempre que uma interrupção acontece. ____________________________________________________________________________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 11 – Cite as principais características do microcontrolador 16F628. ____________________________________________________________________________________________________________________________________ __________________________________________________________________ ________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 12 – Comente sobre os circuitos osciladores para o microcntrolador PIC. ____________________________________________________________________________________________________________________________________ __________________________________________________________________ ____________________________________________________________________________________________________________________________________ __________________________________________________________________ 13 - Explique o comportamento do detector de baixa tensão para o microcontrolador PIC. __________________________________________________________________ __________________________________________________________________ __________________________________________________________________

Page 56: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

56

14 – Indique qual a função dos registradores abaixo relacionados. a – STATUS _______________________________________________________ __________________________________________________________________ b – OPTION________________________________________________________ __________________________________________________________________ c – PCON__________________________________________________________ __________________________________________________________________ d – INTCON________________________________________________________ __________________________________________________________________ e – PIE1___________________________________________________________ __________________________________________________________________ f – PIR1___________________________________________________________ __________________________________________________________________ g – PCL___________________________________________________________ __________________________________________________________________ h – PCLATH________________________________________________________ __________________________________________________________________ i – TRIS___________________________________________________________ __________________________________________________________________ j – PORTA e PORTB_________________________________________________ ____________________________________________________________________________________________________________________________________

Page 57: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

57

k – TMR0__________________________________________________________ __________________________________________________________________ l – TMR1__________________________________________________________ __________________________________________________________________ m – TRM2_________________________________________________________ __________________________________________________________________ n – WDT___________________________________________________________ __________________________________________________________________ o – PRESCALER____________________________________________________ __________________________________________________________________ p – EEPROM_______________________________________________________ __________________________________________________________________ q – EEDATA_______________________________________________________ __________________________________________________________________ r – EECONS________________________________________________________ __________________________________________________________________ s – FSR e INDF_____________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ __________________________________________________________________

Page 58: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

58

Anotações: ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ __________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Page 59: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

59

CAPÍTULO 5

Resumo e condições dos bancos de memória após o reset

Programação e linguagem de máquina Noções de fluxograma de programação O resumo das instruções

Page 60: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

60

5 – RESUMOS E CONDICOES DOS BANCOS DE MEMORIA APÓS RESET

Hex Nome Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Power-on Outros Reset

BANK 0

00 INDF Valor do endereço indireto (não é um registrador verdadeiro) ---- ---- ---- ----

01 TMR0 Contador TMR0 de 8 bits xxxx xxxx uuuu uuuu

02 PCL Parte baixa (8 bits menos significativos) do PC 0000 0000 0000 0000

03 STATUS IRP RP1 RP0 /TO /PD Z DC C 0001 1xxx 000q quuu

04 FSR Ponteiro para o endereçamento indireto à memória xxxx xxxx uuuu uuuu

05 PORTA RA7 RA6 RA5 RA4 RA3 RA2 RA1 RA0 xxxx 0000 xxxx 0000

06 PORTB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 xxxx xxxx uuuu uuuu

07 Não implementado no PIC 16f628. O valor lido é sempre zero.

08 Não implementado no PIC 16f628. O valor lido é sempre zero.

09 Não implementado no PIC 16f628. O valor lido é sempre zero.

0A PCLATH - - - Parte alta do PC ---0 0000 ---0 0000

0B INTCON GIE EEIE TOIE INTE RBIE TOIF INTF RBIF 0000 000x 0000 000u

0C PIR1 EEIE CMIF RCIF TXIF - CCP1IF TMR2IF TMR1IF 0000 -000 0000 –000

0D Não implementado no PIC 16f628. O valor lido é sempre zero.

0E TMR1L Registrador de acesso ao “LSB” do timer 1 xxxx xxxx xxxx xxxx

0F TMR1H Registrador de acesso ao “MSB” do timer 1 xxxx xxxx xxxx xxxx

10 T1CON - - T1CKPS TICKPS T10SCE T1SYN TMR1C TMR10 --00 0000 --uu uuuu

11 TMR2 Registrador de acesso ao conteúdo do timer 2 0000 0000 0000 0000

12 T2CON - TOU

TPS3

TOU

TPS2

TOU

TPS1

TOU

TPS0

TMR

20N

T2CK

PS0

T2CK

PS0 -000 0000 -uuu uuuu

13 Não implementado no PIC 16f628. O valor lido é sempre zero.

14 Não implementado no PIC 16f628. O valor lido é sempre zero.

15 CCPR1L Registrador de captura / comparação / PWM (LSB) xxx xxxx xxxx xxxx

16 CCPR1H Registrador de captura / comparação / PWM (LSB) xxx xxxx xxxx xxxx

17 CCP1CON - - CCP1X CCP1Y CCP1

M3

CCP1

M2

CCP1

M1

CCP1

M0 --00 0000 --00 0000

18 RCSTA SPEN RX9 SREN CREN ADEN FERR OERR RX9D 0000 –00x 0000 –00x

19 TXREG Registrador de transmissão de dados USART 0000 0000 0000 0000

1A RCREG Registrador de recepção de dados USART 0000 0000 0000 0000

1B Não implementado no PIC 16f628. O valor lido é sempre zero.

1C Não implementado no PIC 16f628. O valor lido é sempre zero.

1D Não implementado no PIC 16f628. O valor lido é sempre zero.

Page 61: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

61

1E Não implementado no PIC 16f628. O valor lido é sempre zero.

1F CMCON C2OUT C1OUT C2INV C1INV CIS CM2 CM1 CM0 0000 0000 0000 0000

BANK 1

80 INDF Valor do endereçamento indireto ---- ---- ---- ----

81 OPTION /RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0 1111 1111 1111 1111

82 PCL Parte baixa (8 bits menos significativos) do PC 0000 0000 0000 0000

83 STATUS IRP RP1 RP0 /TO /PD Z DC C 0001 1xxx 000q quuu

84 FSR Ponteiro para o endereçamento indireto xxxx xxxx uuuu uuuu

85 TRISA RA7 RA6 - RA4 RA3 RA2 RA1 RA0 1111 1111 1111 1111

86 TRISB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 1111 1111 1111 1111

87 Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----

88 Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----

89 Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----

8A PCLATH - - - Parte alta do PC ---0 0000 ---0 0000

8B INTCON GIE EEIE TOIE INTE RBIE TOIF INTF RBIF 0000 000x 0000 000u

8C PIE1 EEIE CMIE RCIE TXIE - CCP1IE TMR2IE TMR1IE 0000 -000 0000 –000

8D Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----

8E PCON - - - - OSCF - /POR /BOD ---- 1-0x ---- 1-uq

8F Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----

90 Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----

91 Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----

92 PR2 Registrador de período do timer 2 1111 1111 1111 1111

93 Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----

94 Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----

95 Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----

96 Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----

97 Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----

98 TXSTA CSRC TX9 TXEN SYNC - BRGH TRMT TX9D 0000 -010 0000 -010

99 SPBRG Registrador do gerador de Baud Rate (BRG) 0000 0000 0000 0000

9A EEDATA Registrador de dados da EEPROM xxxx xxxx xxxx xxxx

9B EEADR - Registrador de endereçamento da EEPROM xxxx xxxx xxxx xxxx

9C EECON1 - - - - WRERR WREN WR RD ---- x000 ---- q000

9D EECON2 Registrador de controle auxiliar da EEPROM ---- ---- ---- ----

9E Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----

9F VIRCON VRE VROE VRR - VR3 VR2 VR1 VR0 000- 0000 000- 0000

Page 62: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

62

BANK 2

100 INDF Valor do endereçamento indireto ---- ---- ---- ----

101 /RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0 1111 1111 1111 1111

102 PCL Parte baixa (8 bits menos significativos) do PC 0000 0000 0000 0000

103 STATUS IRP RP1 RP0 /TO /PD Z DC C 0001 1xxx 000q quuu

104 FSR Ponteiro para o endereçamento indireto xxxx xxxx uuuu uuuu

105 Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----

106 PORT B RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 1111 1111 1111 1111

107 Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----

108 Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----

109 Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----

10A PCLATH - - - Parte alta do PC ---0 0000 ---0 0000

10B INTCON GIE EEIE TOIE INTE RBIE TOIF INTF RBIF 0000 000x 0000 000u

11F Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----

BANK 3

180 INDF Valor do endereçamento indireto ---- ---- ---- ----

181 /RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0 1111 1111 1111 1111

182 PCL Parte baixa (8 bits menos significativos) do PC 0000 0000 0000 0000

183 STATUS IRP RP1 RP0 /TO /PD Z DC C 0001 1xxx 000q quuu

184 FSR Ponteiro para o endereçamento indireto xxxx xxxx uuuu uuuu

185 Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----

186 PORT B RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 1111 1111 1111 1111

187 Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----

188 Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----

189 Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----

18A PCLATH - - - Parte alta do PC ---0 0000 ---0 0000

18B INTCON GIE EEIE TOIE INTE RBIE TOIF INTF RBIF 0000 000x 0000 000u

19F Não implementado no PIC 16f628. O valor lido é sempre zero. ---- ---- ---- ----

* u – inalterado, x – desconhecido, q – depende de condição. Os endereços entre 10Ch até 11Fh no banco 2 e os endereços 18Ah até 19Fh não são implementados.

Page 63: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

63

5.1 - Programação e linguagem de máquina Para que um circuito microprocessado execute as tarefas para as quais foi projetado, é necessário que o programador informe ao sistema o que deseja que ele faça. Isso é feito com o auxilio de instruções organizadas numa seqüência lógica e coerente. Essa seqüência de instruções recebe o nome de programa. Os microcontroladores somente executam programas cujas instruções estejam codificadas em linguagem binária, também conhecidas como código de máquina.

Quando se programa um circuito microprocessado, utilizamos uma linguagem que abrevia os códigos (hexadecimal) em instruções mnemônicas. Os mnemônicos são mais fáceis de memorizar e facilitam a identificação das instruções. A programação é realizada em linguagem assembly e deve conter o código de operação, o operando e o comentário da instrução.

5.2 - Noções de fluxograma de programação Um fluxograma constitui-se de um conjunto de símbolos interligados por setas que indicam o sentido do fluxo do programa. Cada símbolo do fluxograma tem uma forma própria que define sua função. Abaixo temos uma tabela que apresenta apenas os símbolos mais utilizados e suficientes para desenvolver as atividades de programação.

Símbolo Descrição

Processamento Uma instrução ou grupo de instrução que executam uma função de processamento de programa

Terminal O ponto de início, término ou interrupção de um programa.

Decisão Símbolo utilizado para indicar a possibilidade de desvios para diversos outros pontos do programa de acordo com situações variáveis.

Processamento Predefinido Um grupo de operações não incluídas no diagrama de blocos. Ex: sub-rotinas.

Conexão de página Uma conexão utilizada para indicar uma entrada ou saída, ou para outra página do diagrama.

Direção de Fluxo A direção do fluxo de dados ou de processamento.

Page 64: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

64

Set de instruções, termos mais utilizados – Antes de apresentar o set de instruções é necessário que alguns termos utilizados na construção dos nomes das instruções sejam apresentados.

WORK – Trata-se de um registrador temporário para operações na ULA. No Assembler do PIC, ele é conhecido com W ou acumulador.

FILE – Referência a um registrador (posição de memória) propriamente dito. Utilizaremos a letra F para sua representação nos nomes de instruções e f nos argumentos delas.

LITERAL – Um numero qualquer que pode ser escrito na forma decimal, hexadecimal ou binária. Utilizaremos a letra L para sua representação nos nomes de instruções e k nos argumentos delas.

DESTINO – O local onde deve ser armazenado o resultado da operação. Existem somente dois destinos possíveis: F, que guardará o resultado no próprio registrador passado como argumento, ou W, que colocará o resultado em Work. Na verdade, a sintaxe das instruções, o destino deve ser expresso pelos números 0 (W) e 1 (F). No entanto, como veremos mais adiante, as letras F e W são definidas no “include” para facilitar a programação.

BIT – Bit especifico dentro de um byte, utilizaremos a letra B para sua representação nos nomes de instruções de bit.

TESTE – Quando queremos testar o estado de um bit, para descobrirmos se ele é zero ou um. Utilizaremos a letra T para representá-lo nos nomes das instruções.

SKIP – Significa “pulo” e é utilizado para criar desvios, pulando a próxima linha. Utilizaremos a letra S para representá-lo nos nomes das instruções.

SET – Refere-se ao ato de setar um bit, significa levá-lo ao estado Um. Utilizaremos a letra S para representá-lo nos nomes das instruções.

CLEAR – Refere-se ao “clear” de um bit, significa levá-lo ao estado Zero. Utilizaremos a letra C para representá-lo nos nomes das instruções.

ZERO – Algumas instruções podem gerar desvios se o resultado da operação efetuada for zero. Neste caso, utilizaremos a letra Z para indicar tal condição.

Outros termos utilizados são específicos das ações realizadas pelas instruções e são praticamente auto-explicativos. Citados abaixo.

ADD – Soma. AND – Lógica “E”.

CLR – Limpar, zerar (Clear) COM - Complemento

DEC – Decremento de uma unidade INC – Incremento de uma unidade

IOR – Lógica “OU” MOV – Mover, transferir para algum lugar.

RL – Rotacionar 1 bit para esquerda (Left) RR – Rotacionar 1 bit para direita (Right)

SUB – Subtração XOR – Lógica “OU exclusivo”.

SWAP – Inversão entre as partes alta e baixa de um registrador.

Para facilitar a compreensão das 35 instruções que compõe o PIC 16F628, vamos organizá-los em quatro grupos conforme as suas aplicações.

- Operações com registradores. - Operações com literais.

- Operações com bits - Controles.

Page 65: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

65

5.3 - O resumo das instruções A linha de PICs de 14 bits compartilha o mesmo conjunto de instruções. Isto facilita em muito a migração de um dispositivo para o outro, visto que poderemos reutilizar muito o software. O que diferencia são os registradores internos dos dispositivos.

Operações com registradores

Instrução Argumentos Descrição

ADDWF f,d Soma W e f guardando o resultado em d.

ANDWF f,d Lógica “E” entre W e f, guardando o resultado em d.

CLRF f Limpa f.

COMF f,d Calcula o complemento de f, guardando o resultado em d.

DECF f,d Decrementa f, guardando o resultado em d.

DECFSZ f,d Decrementa f, guardando o resultado em d e pula a próxima linha se o resultado for zero.

INCF f,d Incrementa f, guardando o resultado em d.

INCFSZ f,d Incrementa f, guardando o resultado em d e pula a próxima linha se o resultado for zero.

IORWF f,d Lógica “OU” entre W e f, guardando o resultado em d.

MOVF f,d Move o conteúdo de f para d (cópia).

MOVWF f Move o conteúdo de W para f (cópia).

RLF f,d Rotaciona o conteúdo de f um bit para esquerda.

RRF f,d Rotaciona o conteúdo de f um bit para direita.

SUBWF f,d Subtrai W d f (f - W), guardando o resultado em d.

SWAPF f,d Executa uma inversão entre as partes alta e baixa de f, guardando o resultado em d.

XORWF f,d Lógica “OU exclusivo” entre W e f, guardando o resultado em d.

Operações com literais

Instrução Argumentos Descrição

ADDLW k Soma k com W, guardando o resultado em W.

ANDLW k Lógica “E” entre K e W, guardando o resultado em W.

IORLW k Lógica “OU” entre K e W, guardando o resultado em W.

MOVLW k Move k para W.

SUBLW k Subtrai W de k (k – W), guardando o resultado em W.

XORLW k Lógica “OU exclusivo” entre K e W, guardando o resultado em W.

Operações com bits

Instrução Argumentos Descrição

BCF f,b Impõe 0 (zero) ao bit b do registrador f.

Page 66: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

66

BSF f,b Impõe 1 (um) ao bit b do registrador f.

BTFSC f,b Testa o bit b do registrador f, e pula a próxima linha se ele for 0 (zero).

BTFSS f,b Testa o bit b do registrador f, e pula a próxima linha se ele for 1 (um).

Controle

Instrução Argumentos Descrição

CLRW - Limpa W.

NOP - Gasta um ciclo de máquina sem fazer absolutamente nada.

CALL R Executa a rotina R.

CLRWDT - Limpa o registrador WDT para não acontecer o reset.

GOTO R Desvia para o ponto R, mudando o PC.

RETFIE - Retorna de uma interrupção.

RETLW K Retorna de uma rotina, com k em W.

RETURN - Retorna de uma rotina, sem afetar o W.

SLEEP - Coloca o PIC em modo de sleep (dormindo) para economia de energia.

Page 67: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

67

Anotações:

____________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________________________________________________________________________ _____________________________________________________________________________

Page 68: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

68

CAPÍTULO 6

Simulações com microprocessador PIC16F628

O programador JDM O programa ICPROG transferência de dados As instruções detalhadas do PIC

Page 69: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

69

6 – SIMULAÇÕES COM MICROPROCESSADOR PIC16F628

6.1 – Programador JDM – PIC Para que possamos gravar e ler microcontroladores PIC, se faz necessário à utilização de

um programa com função de programador e leitor de PIC. Sugerimos a utilização do programador JDM. Abaixo temos o hardware necessário para essa implementação e para a utilização do programador, temos que instalar o programa ICPROG. Explicado em seguida.

Lista de Material 1 – Conector DB9 fêmea de 90° para circuito impresso.

1 – Soquete de 18 pinos torneados para circuito integrado.

2 – Transistores BC548

1 – Diodo zener 8V2 de ½ W.

1 – Diodo zener 5V1 de ½ W.

1 – Led de Ø3mm (qualquer cor).

4 – Diodos 1N4148

1 - Capacitor radial de 100µf / 40V.

1 – Capacitor radial 22 µf / 16V.

1 – Resistor de 5,6 KΩ.

1 – Resistor de 10 KΩ.

1 – Resistor de 1,5 KΩ.

1 – Cabo de comunicação serial.

12345

6789

J1

D11

D12

Q2

Q1

D13

D14

D168V2

D17

5V1

+C2

100uF

+C3

22uF

D18

LED11

R10

R11R12

16F628

RA2RA3RA4MCLRVSSRB0RB1RB2RB3 RB4

RB5RB6RB7VDDOSC2OSC1RA0RA1

Figura 15 – Esquema elétrico

Page 70: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

70

6.2 – O programa ICPROG de transferência de dados para PIC

O gravador baseado no JDM (Jens Dyekjaer Madson) utiliza também as instruções da Microchip. Suporta a maioria dos microcontroladores PIC de 8, 18, 28 e 40 pinos com encapsulamento DIP que possuam o recurso de programação (gravação) serial. A gravação é simples e rápida, ele é conectado diretamente ao PC via interface serial RS-232 (conector DB-9) e não utiliza fonte de alimentação externa. Permite a gravação "ICSP" (in-circuit serial programming) ou seja, pode-se gravar o PIC já montado na placa de aplicação, reduzindo o tempo de desenvolvimento e permitindo a gravação de dispositivos com qualquer encapsulamento inclusive SMD. É fornecido montado e testado com cabo para conexão ao PC.

Os requisitos mínimos são:

Hardware - 8Mb de memória RAM e um processador 386

Software - Sistema Operacional Windows 95, 89, ME, NT, 2000 ou XP.

INSTALAÇÃO DO ICPROG

Para instalar o Software, basta criar uma pasta no disco local do seu PC e guardar o

arquivo icprog.exe. Se o seu sistema Operacional for NT ou 2000 será também necessário guardar o Driver na mesma pasta (icprog.sys). Todos os arquivos deveram ser colocados dentro da mesma pasta no seu disco local.

Para abrir a aplicação, faça duplo clique no ícone do icprog. Em sistemas baseados em NT, será necessário instalar o respectivo NT Driver (mais adiante será explicado como o instalar).

Ao abrir a aplicação pela 1ª vez, será apresentada uma janela de configuração de Hardware, esta janela pode ser mais tarde alterada conforme as necessidades, de inicio pode fechar a janela, clique no botão 'OK' para começar a utilizar a aplicação.

Figura 16 – Hardware settings

Page 71: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

71

Em Sistemas Operacionais NT e 2000 é necessário instalar um arquivo de Driver para

que o Software consiga comunicar com as portas de interface do PC (porta série e paralela), pois o Sistema Operacional (Windows) não permite o acesso direto das aplicações ao Hardware do PC.

Este Driver é instalado dentro do IC-Prog, bastando para isso abrir a aplicação e acessar o menu : Settings : Options Misc

Figura 17 - Options

Como citado acima é necessário ter instalado no computador o programa ICPROG. Para simulação também é importante que você tenha instalado no computador o programa MPLAB.

Desenvolva o programa no editor preferido (Sugestão MPLAB 6.62) em seguida compile o programa para que possa ser gerado *.HEX. O programa de extensão *.HEX devera ser carregado através do compilador ICPROG e transferido para o microcontrolador 16f628.

A tela de abertura se encontra na figura 18, onde muitas vezes se faz necessário que seja alterada a linguagem que esta sendo utilizada para manipulação do ICPROG, nesta implementação é necessário entrar no item configuração, opções e linguagem. Utilizar português. Já na tela abaixo vemos como carregar o programa de extensão HEX, onde já foi compilado utilizando-se o MPLAB ou do MPASM.

Page 72: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

72

Figura 18 – Tela de carregamento de arquivo no ICPROG Após ter carregado o arquivo de extensão HEX deve ser transferido para o

microcontrolador PIC. Com o cabo já conectado clicar no item comando e em programar tudo, em seguida o programa é transferido e verificado se não houve erro durante transferência.

selecione o tipo de

Programador antes de utilizar e as definições de

programação.

selecione o IC a programar

Page 73: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

73

selecione o Buffer de informação

Abra o arquivo de que contem a programação e o

arquivo de dados (caso exista).

Ajuste a configuração do IC.

( tipo de oscilador, fusíveis, etc. )

Transfira a programação para o hardware ( IC ).

Se não forem detectados erros o IC ficou

corretamente programado

Page 74: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

74

A lista abaixo, informa quais os Microcontroladores suportados pelo programador JDM.

IC-Prog C. I. Tipo Fabricante ver:

1.05Aver: 1.05

ver: 1.04C

ver: 1.04A

Observações

PIC12C508/A Microcontrolador Microchip • • • • PIC12C509/A Microcontrolador Microchip • • • • PIC 12CE518 Microcontrolador Microchip • • • • PIC12CE519 Microcontrolador Microchip • • • • PIC 12C671 Microcontrolador Microchip • • • • PIC12C672 Microcontrolador Microchip • • • •

PIC12CE673 Microcontrolador Microchip • • • • PIC12CE674 Microcontrolador Microchip • • • • PIC12F629 Microcontrolador Microchip • PIC12F675 Microcontrolador Microchip • PIC16C433 Microcontrolador Microchip • • • • PIC16C54 Microcontrolador Microchip • • • • PIC16C56 Microcontrolador Microchip • • • • PIC16C 58 Microcontrolador Microchip • • • • PIC16C61 Microcontrolador Microchip • • • •

PIC16C62A/B Microcontrolador Microchip • • • • PIC16C63/A Microcontrolador Microchip • • • •

16C64A Microcontrolador Microchip • • • • 16C65A/B Microcontrolador Microchip • • • • PIC16C66 Microcontrolador Microchip • • • • PIC16C67 Microcontrolador Microchip • • • • PIC16C71 Microcontrolador Microchip • • • •

PIC16C72/A Microcontrolador Microchip • • • • PIC16C/F73A/B Microcontrolador Microchip • • • • PIC16C/F74A/B Microcontrolador Microchip • • • •

PIC16C/F76 Microcontrolador Microchip • • • • PIC16C/F77 Microcontrolador Microchip • • • • PIC16F83 Microcontrolador Microchip • • • •

PIC16C/F84/A Microcontrolador Microchip • • • • PIC16C505 Microcontrolador Microchip • • • • PIC16C605 Microcontrolador Microchip • • PIC16C620 Microcontrolador Microchip • • • • PIC16C621 Microcontrolador Microchip • • • •

PIC16C622 /A Microcontrolador Microchip • • • • PIC16CE625 Microcontrolador Microchip • • • • PIC16F627 Microcontrolador Microchip • • • • PIC16F628 Microcontrolador Microchip • • • •

Page 75: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

75

PIC16C711 Microcontrolador Microchip • • • • PIC16C712 Microcontrolador Microchip • PIC16C715 Microcontrolador Microchip • • • • PIC16C765 Microcontrolador Microchip • • • • PIC16F870 Microcontrolador Microchip • • • • PIC16F871 Microcontrolador Microchip • • • • PIC16F872 Microcontrolador Microchip • • • • PIC16F873 Microcontrolador Microchip • • • •

PIC16F873 A Microcontrolador Microchip • PIC16F874 Microcontrolador Microchip • • • •

PIC16F874A Microcontrolador Microchip • PIC 16F876 Microcontrolador Microchip • • • • PIC16F876 Microcontrolador Microchip • PIC16F877 Microcontrolador Microchip • • • •

PIC16F877A Microcontrolador Microchip • PIC16C923 Microcontrolador Microchip • • • • PIC16C924 Microcontrolador Microchip • • • • PIC18F242 Microcontrolador Microchip • • PIC18F248 Microcontrolador Microchip • • PIC18F252 Microcontrolador Microchip • • • PIC18F258 Microcontrolador Microchip • • PIC18F442 Microcontrolador Microchip • • PIC18F448 Microcontrolador Microchip • • PIC18F452 Microcontrolador Microchip • • PIC18F458 Microcontrolador Microchip • •

6 . 3 – Display de Cristal Liquido Display de Cristal Liquido

Uma outra aplicação muito utilizada com microcontrolador é o display de LCD, onde podemos escrever caracteres alfanuméricos segundo código ASCII, esses dispositivos já possuem internamente um microcontrolador dedicado, por isso chamamos de LCD inteligente, e já possui armazenado o código ASCII, bastando via software enviar comandos de inicialização, de escrita ou até mesmo de leitura.

Existe uma gama muito grande de LCD no mercado, mas a maioria tem o hardware compatível. Nosso exemplo de aplicação vai utilizar o modo que utiliza o menor número de pinos possível, usaremos 4 bits para enviar os comandos e os dados. Apesar dos dados serem de 8 bits, esse modo permite que você divida os 8 bits em duas palavras de 4 bits, e o LCD inteligente monta os 8 bits automaticamente.

Page 76: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

76

Vejamos os pinos do LCD na tabela abaixo:

Page 77: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

77

6.4 – O Conjunto de instruções do microcontrolador PIC

ADDLW Efetua a soma de um literal no registrador W Sintaxe [label] ADDLW k Operação (W) + k – (W) Status C, DC, Z Codificação 0011 111x kkkk kkkk Descrição

O conteúdo do registrador W é somado com literal k e o resultado colocado no registrador W

Ciclos 1

ADDWF Efetua a soma do registrador W ao registro f Sintaxe [label] ADDWF f,d Operação (W) + (f) – (destino) Status C, DC, Z Codificação 0011 0111 dfff ffff Descrição

Soma o conteúdo do registro W ao registro f. Se <d é igual a zero o resultado é colocado no registro W. Se <d é igual a 1 o resultado é armazenado no registro f.

Ciclos 1

ANDLW Operação lógica <E entre o literal k e o registro W

Sintaxe [label] ANDLW k Operação (W) .AND. (k) – (W) Status Z Codificação 0011 1001 kkkk kkkk Descrição

Realiza a operação de lógica E (AND) entre o conteúdo do registrador W com literal o k e o resultado colocado no registrador W

Ciclos 1

Page 78: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

78

ANDWF Operação lógica <E entre o registro W com o registro f.

Sintaxe [label] ANDWF f,d Operação (W) .AND. (f) – (destino) Status Z Codificação 0000 0101 dfff ffff Descrição

Realiza a operação de lógica <E (AND) entre o conteúdo do registrador W e do registrador f. Se <d é igual a zero o resultado é colocado no registrador W. Se <d é igual a 1 o resultado é armazenado no registro f.

Ciclos 1

BCF Limpa um bit do registro f Sintaxe [label] BCF f.d Operação 0 – (f<b) Status Nenhum Codificação 0001 00bb bfff ffff Descrição Faz o bit <b do registro f ser igual a zero. Ciclos 1

BSF Seta o bit f Sintaxe [label] BSF f.d Operação 1 – (f<b) Status Nenhum Codificação 0001 01bb bfff ffff Descrição Faz o bit <b do registro f ser igual a um. Ciclos 1

Page 79: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

79

BTFSC Teste bit f e pula se for zero Sintaxe [label] BTFSC f, d Operação Desvia se f<b for igual à zero. Status Nenhum Codificação 0001 10bb bfff ffff Descrição Se o bit <b no registro <f for igual à zero,

pula a próxima instrução. Ciclos 1 se não houver o desvio, 2 se ocorrer o

desvio.

BTFSS Teste bit f e pula se for um Sintaxe [label] BTFSS f, d Operação Desvia se f<b for igual a um. Status Nenhum Codificação 0001 11bb bfff ffff Descrição Se o bit <b no registro <f for igual a um, pula

a próxima instrução. Ciclos 1 se não houver o desvio, 2 se ocorrer o

desvio.

CALL Chama uma sub-rotina Sintaxe [label] Call k Operação (PC) +1 – TOS

k – (PC <10C0), (PCLATH <4 -3) – (PC <12 – 11)

Status Nenhum Codificação 0010 0kkk kkkk kkkk Descrição Chama uma sub-rotina. Primeiro, o endereço

de retorno (PC +1) é colocado no stack. O endereço de 11 bits é armazenado nos bits <100 do PC. Os bits superiores do PC são carregados do registro PCLATH.

Ciclos 2

Page 80: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

80

CLRF Limpa o registro f Sintaxe [label] CLRF f Operação 0 – (f)

1 – Z Status Z Codificação 0001 0001 1fff ffff Descrição O conteúdo do registro <f é feito igual a zero

e o bit Z é feito igual a um. Ciclos 1

CLRW Limpa o registro W Sintaxe [label] CLRFW Operação 0 – (W)

1 – Z Status Z Codificação 0001 0001 0000 0011 Descrição O conteúdo do registro <W é feito igual a

zero e o bit Z é feito igual a um. Ciclos 1

CLRWDT Limpa o registro do watch dog Sintaxe [label] CLRWDT Operação 0 – (WDT)

0 – WDT preescalador 1 – TO (invertido) 1 – PD (invertido)

Status TO, PD Codificação 0000 0000 0110 0100 Descrição Faz o temporizador watch dog timer igual a

zero. Também zera o preescalador do watch dog. Os bits de estado TO e PD são feitos igual a 1.

Ciclos 1

Page 81: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

81

COMF Complementa o registro f Sintaxe [label] COMF f,d Operação (naof) – destino Status Z Codificação 0001 1001 dfff ffff Descrição O conteúdo do registro <f é complementado.

Se <d for igual a zero o resultado é colocado no registro W. Se <d for igual a 1 o resultado é colocado no registro <f.

Ciclos 1

DECF Decrementa f Sintaxe [label] DECF f,d Operação (f) – 1 – (destino) Status Z Codificação 0000 0011 dfff ffff Descrição Decrementa o registro <f. Se <d for igual a

zero o resultado será colocado no registro W. Se <d for igual a 1 o resultado será colocado no registro <f.

Ciclos 1

DECFSZ Decrementa f e pula se o resultado for zero Sintaxe [label] DECFSZ f,d Operação (f) – 1 – (destino), desvia se resultado igual a

zero. Status Nenhum Codificação 0000 1011 dfff ffff Descrição Decrementa o conteúdo do registro <f. Se <d

for igual a 0 e o resultado será colocado no registro W. Se <d for igual a 1 o resultado será colocado no registro <f. Se o resultado for zero a próxima instrução é descartada.

Ciclos 1 se não ocorrer o desvio. 2 se ocorrer o desvio.

Page 82: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

82

GOTO Desvia para o endereço especificado Sintaxe [label] GOTO k Operação k – (PC) < 100

PCLATH <4 3 – (PC <12 11) Status Nenhum Codificação 0010 1kkk kkkk kkkk Descrição Desvia o programa pra o endereço k. Os onze

bits k são carregados para o registro do PC <100. Os bits superiores do PC são carregados a partir do registro PCLATH.

Ciclos 2

INCF Incrementa f Sintaxe [label] INCF f,d Operação (f) + 1 – (destino) Status Z Codificação 0000 1010 dfff ffff Descrição Incrementa o conteúdo do registro <f. Se <d

for igual a zero o resultado será colocado no registro W. Se <d for igual a 1 o resultado será colocado no registro <f.

Ciclos 1

INCFSZ Incrementa f e pula se o resultado for zero Sintaxe [label] INCFSZ f,d Operação (f) – 1 – (destino), desvia se resultado igual a

zero. Status Nenhum Codificação 0000 1111 dfff ffff Descrição Incrementa o conteúdo do registro <f. Se <d

for igual a 0 e o resultado será colocado no registro W. Se <d for igual a 1 o resultado será colocado no registro <f. Se o resultado for zero a próxima instrução é descartada.

Ciclos 1 se não ocorrer o desvio. 2 se ocorrer o desvio.

Page 83: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

83

IORLW Ou inclusivo entre k e registrador W Sintaxe [label] IORLW k Operação (W) .OR. (k) – (W). Status Z Codificação 0011 1000 kkkk kkkk Descrição Realiza a operação lógica OU entre o registro

k e o registro W. O resultado é colocado no registro W.

Ciclos 1

IORWF Ou inclusivo entre f e registrador W Sintaxe [label] IORWF f,d Operação (W) .OR. (f) – (destino) Status Z Codificação 0011 0100 dfff ffff Descrição Realiza a operação lógica OU entre o registro

f e o registro W. Se <d for igual a zero o resultado é colocado no registro W. Se <d for igual a 1 o resultado é colocado no registro f.

Ciclos 1

MOVLW Move literal para o registro W Sintaxe [label] MOVLW k Operação k – (W) Status Nenhum Codificação 0011 00xx kkkk kkkk Descrição Carrega o valor do literal k para o registrador

W. Ciclos 1

Page 84: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

84

MOVF Movimenta f Sintaxe [label] MOVF f,d Operação (f) – destino Status Z Codificação 0000 1000 dfff fffff Descrição O conteúdo do registro f é colocado no

destino. Se d for igual a 0 o destino será o registrador W. Se d for igual a 1 o destino será o próprio registrador. Esta instrução pode ser utilizada para verificarmos se o conteúdo de um registrador é zero, pois o flag Z é alterado.

Ciclos 1

MOVWF Movimenta o registro W para o f Sintaxe [label] MOVWF f Operação (W) – (f) Status Nenhum Codificação 0000 0000 1fff fffff Descrição Movimenta os dados do registrador W para o

registro f. Ciclos 1

NOP Nenhuma operação Sintaxe [label] NOP Operação Nada Status Nenhum Codificação 0000 0000 0000 0000 Descrição Não executa nenhuma instrução. É útil

quando utilizado como ajuste fino de laços de temporização.

Ciclos 1

Page 85: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

85

RETFIE Retorno de uma interrupção. Sintaxe [label] RETFIE Operação TOS - (PC)

1 – GIE Status Nenhum Codificação 0000 0000 0000 1001 Descrição O topo do stack (TOS) é carregado no PC. Os

interrupts são habilitados de uma forma global pelo flag GIOE. O apontador do stack pointer é diminuído de um (POP).

Ciclos 2

RETLW Retorna com um literal na W. Sintaxe [label] RETLW k Operação k – (W)

TOS – (PC) Status Nenhum Codificação 1100 01xx kkkk kkkk Descrição O registrador W é carregado como valor de

k. O contador de programa assume o valor do topo do stack. Equivale a uma instrução de retorno de sub-rotina sendo que o registro W retorna com o valor desejado.

Ciclos 2

RETURN Retorna da sub-rotina. Sintaxe [label] RETURN Operação TOS – (PC) Status Nenhum Codificação 0000 0000 0000 1000 Descrição O contador de programa assume o valor do

topo do stack. O apontador do stack é atualizado (POP).

Ciclos 2

Page 86: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

86

RLF Desloca f para esquerda usando o carry. Sintaxe [label] RLF f,d Operação Veja a descrição Status C Codificação 0000 1101 dfff ffff Descrição O conteúdo do registro <f é deslocado de um

bit para a esquerda, sendo que o bit 7 é enviado para carry. O conteúdo do carry é enviado para o bit 0. Se <d for igual a zero o resultado é colocado no registrador W, se for igual a 1 o resultado é colocado no registro <f.

Ciclos 1

RRF Desloca f para direita usando o carry. Sintaxe [label] RRF f,d Operação Veja a descrição Status C Codificação 0000 1100 dfff ffff Descrição O conteúdo do registro <f é deslocado de um

bit para a direita, sendo que o bit 0 é enviado para carry. O conteúdo do carry é enviado para o bit 7. Se <d for igual a zero o resultado é colocado no registrador W, se for igual a 1 o resultado é colocado no registro <f.

Ciclos 1

Page 87: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

87

SLEEP Vai para o modo de repouso (stand by) Sintaxe [label] SLEEP Operação 00 – WDT

0 – pré-escalador do WDT 1 – TO barra 0 – PD barra

Status TO, PD barra Codificação 0000 0000 0110 0011 Descrição O bit de power down, (PD) é feito igual a

zero. O bit de estouro de tempo (time-out) é feito igual a 1. Os temporizadores do watch dog timer e seu pré-escalador são zerados. O processador assume o modo SLEEP, com o oscilador parado. Para sair deste modo somente com reset ou interrupção.

Ciclos 1

SUBLW Subtrai de um literal o valor do registrador W.Sintaxe [label] SUBLW k Operação k – (W) – (W) Status C, DC, Z Codificação 0011 110x kkkk kkkk Descrição Subtrai do valor do literal <k o conteúdo do

registrador W. O resultado é colocado em W. Ciclos 2

Page 88: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

88

SUBWF Subtrai o registro <f do conteúdo do registro W

Sintaxe [label] SUBWF f,d Operação (f) – (W) –(dest) Status C, DC, Z Codificação 0000 0010 dfff ffff Descrição Subtrai do registrador f o conteúdo do

registrador W. Se <d é igual a zero o resultado é colocado no registro W. Se <d é igual a 1 o resultado é armazenado no registro f.

Ciclos 1

SWAPF Inverte bits em f Sintaxe [label] SWAPF f,d Operação (f<3,0) – (dest <7.4)

(f<7,4) – (dest <3,0) Status Nenhum Codificação 0000 1110 dfff ffff Descrição Troca de posição os nibles do registrador f. Se

<d é igual a zero o resultado é colocado no registro W. Se <d é igual a 1 o resultado é armazenado no registro f.

Ciclos 1

XORLW Ou exclusivo entre k e o registro W Sintaxe [label] XORLW k Operação (W) . XOR. (k) – (W) Status Z Codificação 0011 1010 kkkk kkkk Descrição Realiza a operação lógica OU EXCLUSIVO

entre o registrador k e o registro W. O resultado é colocado no registro W.

Ciclos 1

Page 89: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

89

XORWF Ou exclusivo entre o registro W e f Sintaxe [label] XORWF f,d Operação (W) . XOR. (f) – (destino) Status Z Codificação 0011 0100 dfff ffff Descrição Realiza a operação lógica OU EXCLUSIVO

entre o registro f e o registro W. Se ,d for igual a 0 o resultado é colocado no registro W. Se <d for igual a 1 o resultado é colocado no registro f.

Ciclos 1

Page 90: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

90

; * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * ; * NOME DO PROJETO * ; * CLIENTE * ; TRAB00 DATA: 10/10/XX * ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * ; * DESCRIÇÃO DO ARQUIVO * ; *-----------------------------------------------------------------------------------------------------------* ; * MODELO PARA PIC 16F628 OU 16F627 * ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* ARQUIVOS DE DEFINIÇÕES *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

#INCLUDE <P16F628.INC> ;ARQUIVO PADRÃO MICROCHIP PARA 16F628

__CONFIG _BODEN_ON & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* PAGINAÇÃO DE MEMÓRIA *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;DEFINIÇÃO DE COMANDOS PARA ALTERAÇÃO DA PÁGINA DE MEMÓRIA

#DEFINE BANK0 BCF STATUS,RP0 ;SETA BANK 0 DE MEMÓRIA

#DEFINE BANK1 BSF STATUS,RP0 ;SETA BANK 1 DE MAMÓRIA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* VARIÁVEIS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DOS NOMES E ENDEREÇOS DE TODAS AS VARIÁVEIS UTILIZADAS

; PELO SISTEMA

CBLOCK 0x20 ;ENDEREÇO INICIAL DA MEMÓRIA DE

;USUÁRIO

W_TEMP ;REGISTRADORES TEMPORÁRIOS PARA USO

STATUS_TEMP ;JUNTO ÀS INTERRUPÇÕES NOVAS VARIÁVEIS

ENDC ;FIM DO BLOCO DE MEMÓRIA

Page 91: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

91

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* FLAGS INTERNOS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DE TODOS OS FLAGS UTILIZADOS PELO SISTEMA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* CONSTANTES *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DE TODAS AS CONSTANTES UTILIZADAS PELO SISTEMA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* ENTRADAS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DE TODOS OS PINOS QUE SERÃO UTILIZADOS COMO ENTRADA

; RECOMENDAMOS TAMBÉM COMENTAR O SIGNIFICADO DOS ESTADOS (0 E 1)

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* SAÍDAS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DE TODOS OS PINOS QUE SERÃO UTILIZADOS COMO SAÍDA

; RECOMENDAMOS TAMBÉM COMENTAR O SIGNIFICADO DOS ESTADOS (0 E 1)

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* VETOR DE RESET *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

ORG 0x00 ;ENDEREÇO INICIAL DE PROCESSAMENTO

GOTO INICIO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* INÍCIO DA INTERRUPÇÃO *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; ENDEREÇO DE DESVIO DAS INTERRUPÇÕES. A PRIMEIRA TAREFA É SALVAR

;OS VALORES DE "W" E "STATUS" PARA RECUPERAÇÃO FUTURA

ORG 0x04 ;ENDEREÇO INICIAL DA INTERRUPÇÃO

MOVWF W_TEMP ;COPIA W PARA W_TEMP

SWAPF STATUS,W

MOVWF STATUS_TEMP ;COPIA STATUS PARA STATUS_TEMP

Page 92: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

92

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* ROTINA DE INTERRUPÇÃO *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; AQUI SERÁ ESCRITA AS ROTINAS DE RECONHECIMENTO E TRATAMENTO DAS

; INTERRUPÇÕES

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* ROTINA DE SAÍDA DA INTERRUPÇÃO *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; OS VALORES DE "W" E "STATUS" DEVEM SER RECUPERADOS ANTES DE

; RETORNAR DA INTERRUPÇÃO

SAI_INT

SWAPF STATUS_TEMP,W

MOVWF STATUS ;MOVE STATUS_TEMP PARA STATUS

SWAPF W_TEMP,F

SWAPF W_TEMP,W ;MOVE W_TEMP PARA W

RETFIE

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* ROTINAS E SUBROTINAS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; CADA ROTINA OU SUBROTINA DEVE POSSUIR A DESCRIÇÃO DE ;FUNCIONAMENTO E UM NOME COERENTE ÀS SUAS FUNÇÕES.

SUBROTINA1

;CORPO DA ROTINA

RETURN

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* INICIO DO PROGRAMA *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

INICIO

BANK0 ;ALTERA PARA O BANCO 0

MOVLW B'00000111' ;DEFINE O MODO DE OPERAÇÃO

MOVWF CMCON ;DO COMPARADOR ANALÓGICO

BANK1 ;ALTERA PARA O BANCO 1

MOVLW B'00000000'

Page 93: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

93

MOVWF TRISA ;DEFINE ENTRADAS E SAÍDAS DO PORTA

MOVLW B'00000000'

MOVWF TRISB ;DEFINE ENTRADAS E SAÍDAS DO PORTB

MOVLW B'10000100'

MOVWF OPTION_REG ;DEFINE OPÇÕES DE OPERAÇÃO

MOVLW B'00000000'

MOVWF INTCON ;DEFINE OPÇÕES DE INTERRUPÇÕES

BANK0 ;RETORNA PARA O BANCO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* INICIALIZAÇÃO DAS VARIÁVEIS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* ROTINA PRINCIPAL *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

MAIN

;CORPO DA ROTINA PRINCIPAL

GOTO MAIN

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* FIM DO PROGRAMA *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

END

Page 94: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

94

; * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * ; * NOME DO PROJETO * ; * CLIENTE * ; TRAB01 DATA: 10/10/XX * ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * ; * DESCRIÇÃO DO ARQUIVO * ; *-----------------------------------------------------------------------------------------------------------* ;* SISTEMA MUITO SIMPLES PARA REPRESENTAR UM LED ACESO *

;* *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* ARQUIVOS DE DEFINIÇÕES *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

#INCLUDE <P16F628.INC> ;ARQUIVO PADRÃO MICROCHIP PARA 16F628

__CONFIG _BODEN_ON & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* PAGINAÇÃO DE MEMÓRIA *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;DEFINIÇÃO DE COMANDOS DE USUÁRIO PARA ALTERAÇÃO DA PÁGINA DE MEMÓRIA

#DEFINE BANK0 BCF STATUS,RP0 ;SETA BANK 0 DE MEMÓRIA

#DEFINE BANK1 BSF STATUS,RP0 ;SETA BANK 1 DE MAMÓRIA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* VARIÁVEIS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DOS NOMES E ENDEREÇOS DE TODAS AS VARIÁVEIS UTILIZADAS

; PELO SISTEMA

CBLOCK 0x20 ;ENDEREÇO INICIAL DA MEMÓRIA DE

;USUÁRIO

W_TEMP ;REGISTRADORES TEMPORÁRIOS PARA

STATUS_TEMP ;INTERRUPÇÕES

TEMPO01 ;ESTAS VARIÁVEIS CONTAM O TEMPO DE PISCAGEM

TEMPO02 ;DOS LEDS

ENDC ;FIM DO BLOCO DE MEMÓRIA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* FLAGS INTERNOS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Page 95: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

95

; DEFINIÇÃO DE TODOS OS FLAGS UTILIZADOS PELO SISTEMA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* CONSTANTES *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DE TODAS AS CONSTANTES UTILIZADAS PELO SISTEMA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* ENTRADAS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DE TODOS OS PINOS QUE SERÃO UTILIZADOS COMO ENTRADA

; RECOMENDAMOS TAMBÉM COMENTAR O SIGNIFICADO DE SEUS ESTADOS (0 E 1)

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* SAÍDAS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DE TODOS OS PINOS QUE SERÃO UTILIZADOS COMO SAÍDA

; RECOMENDAMOS TAMBÉM COMENTAR O SIGNIFICADO DE SEUS ESTADOS (0 E 1)

#DEFINE LED PORTB,0 ;PORTA DO LED

; 0 -> APAGADO

; 1 -> ACESO

#DEFINE LED1 PORTB,1 ;PORTA DO LED1

; 0 -> APAGADO

; 1 -> ACESO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* VETOR DE RESET *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

ORG 0x00 ;ENDEREÇO INICIAL DE PROCESSAMENTO

GOTO INICIO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* INÍCIO DA INTERRUPÇÃO *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; AS INTERRUPÇÕES NÃO SERÃO UTILIZADAS, POR ISSO PODEMOS SUBSTITUIR

; TODO O SISTEMA EXISTENTE NO ARQUIVO MODELO PELO APRESENTADO ABAIXO

; ESTE SISTEMA NÃO É OBRIGATÓRIO, MAS PODE EVITAR PROBLEMAS FUTUROS

ORG 0x04 ;ENDEREÇO INICIAL DA INTERRUPÇÃO

RETFIE ;RETORNA DA INTERRUPÇÃO

Page 96: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

96

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; ROTINA DE DELAY *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

DELAY

MOVLW .1000

MOVWF TEMPO02

DL1

MOVLW .200

MOVWF TEMPO01

DL2

NOP

NOP

DECFSZ TEMPO01,F

GOTO DL2

DECFSZ TEMPO02,F

GOTO DL1

RETURN

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* INICIO DO PROGRAMA *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

INICIO

BANK0 ;ALTERA PARA O BANCO 0

CLRF PORTA ;LIMPA O PORTA

CLRF PORTB ;LIMPA O PORTB

BANK1 ;ALTERA PARA O BANCO 1

MOVLW B'00000000'

MOVWF TRISA ;DEFINE TODO O PORTA COMO SAÍDA

MOVLW B'00000000'

MOVWF TRISB ;DEFINE TODO O PORTB COMO SAÍDA

MOVLW B'10000000'

MOVWF OPTION_REG ;PRESCALER 1:2 NO TMR0

;PULL-UPS DESABILITADOS

Page 97: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

97

;AS DEMAIS CONFG. SÃO IRRELEVANTES

MOVLW B'00000000'

MOVWF INTCON ;TODAS AS INTERRUPÇÕES DESLIGADAS

BANK0 ;RETORNA PARA O BANCO 0

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* INICIALIZAÇÃO DAS VARIÁVEIS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* ROTINA PRINCIPAL *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

MAIN

BSF LED ;ACENDE O LED0

BSF LED1 ;ACENDE O LED1

CALL DELAY

BCF LED

BCF LED1

CALL DELAY

GOTO MAIN ;RETORNA AO LOOP PRINCIPAL

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* FIM DO PROGRAMA *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

END ;OBRIGATÓRIO

Page 98: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

98

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* BOTÃO E LED - EX1 * ;* KIT PIC 16F628 * ;* TRAB02 DATA: 10/10/01 * ;* * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* DESCRIÇÃO DO ARQUIVO * ;*-------------------------------- ------------------------------------------------------------------------* ;* SISTEMA MUITO SIMPLES PARA REPRESENTAR O ESTADO DE * ;* UM BOTÃO ATRAVÉS DE UM LED. * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* ARQUIVOS DE DEFINIÇÕES *

;* * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * *

#INCLUDE <P16F628.INC> ;ARQUIVO PADRÃO MICROCHIP PARA 16F628

__CONFIG _BODEN_ON & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* PAGINAÇÃO DE MEMÓRIA *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;DEFINIÇÃO DE COMANDOS DE USUÁRIO PARA ALTERAÇÃO DA PÁGINA DE MEMÓRIA

#DEFINE BANK0 BCF STATUS,RP0 ;SETA BANK 0 DE MEMÓRIA

#DEFINE BANK1 BSF STATUS,RP0 ;SETA BANK 1 DE MAMÓRIA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* VARIÁVEIS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DOS NOMES E ENDEREÇOS DE TODAS AS VARIÁVEIS UTILIZADAS

; PELO SISTEMA

CBLOCK 0x20 ;ENDEREÇO INICIAL DA MEMÓRIA DE USUÁRIO

W_TEMP ;REGISTRADORES TEMPORÁRIOS PARA

STATUS_TEMP ;INTERRUPÇÕES

;ESTAS VARIÁVEIS NEM SERÃO UTILIZADAS

ENDC ;FIM DO BLOCO DE MEMÓRIA

Page 99: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

99

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* FLAGS INTERNOS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DE TODOS OS FLAGS UTILIZADOS PELO SISTEMA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* CONSTANTES *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DE TODAS AS CONSTANTES UTILIZADAS PELO SISTEMA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* ENTRADAS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DE TODOS OS PINOS QUE SERÃO UTILIZADOS COMO ENTRADA

; RECOMENDAMOS TAMBÉM COMENTAR O SIGNIFICADO DE SEUS ESTADOS (0 E 1)

#DEFINE BOTAO PORTA,2 ;PORTA DO BOTÃO

; 0 -> PRESSIONADO

; 1 -> LIBERADO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* SAÍDAS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DE TODOS OS PINOS QUE SERÃO UTILIZADOS COMO SAÍDA

; RECOMENDAMOS TAMBÉM COMENTAR O SIGNIFICADO DE SEUS ESTADOS (0 E 1)

#DEFINE LED PORTB,0 ;PORTA DO LED

; 0 -> APAGADO

; 1 -> ACESO

#DEFINE LED1 PORTB,1 ;PORTA DO LED1

; 0 -> APAGADO

; 1 -> ACESO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* VETOR DE RESET *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

ORG 0x00 ;ENDEREÇO INICIAL DE PROCESSAMENTO

GOTO INICIO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* INÍCIO DA INTERRUPÇÃO *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Page 100: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

100

; AS INTERRUPÇÕES NÃO SERÃO UTILIZADAS, POR ISSO PODEMOS SUBSTITUIR

; TODO O SISTEMA EXISTENTE NO ARQUIVO MODELO PELO APRESENTADO ABAIXO

; ESTE SISTEMA NÃO É OBRIGATÓRIO, MAS PODE EVITAR PROBLEMAS FUTUROS

ORG 0x04 ;ENDEREÇO INICIAL DA INTERRUPÇÃO

RETFIE ;RETORNA DA INTERRUPÇÃO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* INICIO DO PROGRAMA *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

INICIO

BANK0 ;ALTERA PARA O BANCO 0

MOVLW B'00000111' ;DEFINE O MODO DE OPERAÇÃO

MOVWF CMCON ;DO COMPARADOR ANALÓGICO

CLRF PORTA ;LIMPA O PORTA

CLRF PORTB ;LIMPA O PORTB

BANK1 ;ALTERA PARA O BANCO 1

MOVLW B'00000100' ;DEFINE RA2 COMO ENTRADA E DEMAIS

MOVWF TRISA ;COMO SAÍDAS

MOVLW B'00000000'

MOVWF TRISB ;DEFINE TODO O PORTB COMO SAÍDA

MOVLW B'10000000'

MOVWF OPTION_REG ;PRESCALER 1:2 NO TMR0

;PULL-UPS DESABILITADOS

;AS DEMAIS CONFG. SÃO IRRELEVANTES

MOVLW B'00000000'

MOVWF INTCON ;TODAS AS INTERRUPÇÕES DESLIGADAS

BANK0 ;RETORNA PARA O BANCO 0

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* INICIALIZAÇÃO DAS VARIÁVEIS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* ROTINA PRINCIPAL *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Page 101: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

101

MAIN

BTFSC BOTAO ;O BOTÃO ESTÁ PRESSIONADO?

GOTO BOTAO_LIB ;NÃO, ENTÃO TRATA BOTÃO LIBERADO

GOTO BOTAO_PRES ;SIM, ENTÃO TRATA BOTÃO PRESSIONADO

BOTAO_LIB

BCF LED ;APAGA O LED

BCF LED1

GOTO MAIN ;RETORNA AO LOOP PRINCIPAL

BOTAO_PRES

BSF LED ;ACENDE O LED

BSF LED1

GOTO MAIN ;RETORNA AO LOOP PRINCIPAL

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* FIM DO PROGRAMA *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

END ;OBRIGATÓRIO

Page 102: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

102

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* CONTADOR SIMPLIFICADO - EX2 * ;* KIT PIC 16F628 * ;* TRAB03 DATA: 30/10/01 * ;* * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * ;* DESCRIÇÃO DO ARQUIVO * ;*---------------- -------------------------------------------------------------------------* ;* SISTEMA MUITO SIMPLES PARA INCREMENTAR ATÉ UM DETERMINADO * ;* VALOR (MAX) DE DEPOIS DECREMENTAR ATÉ OUTRO (MIN). * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* ARQUIVOS DE DEFINIÇÕES *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

#INCLUDE <P16F628.INC> ;ARQUIVO PADRÃO MICROCHIP PARA 16F628

__CONFIG _BODEN_ON & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* PAGINAÇÃO DE MEMÓRIA *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;DEFINIÇÃO DE COMANDOS DE USUÁRIO PARA ALTERAÇÃO DA PÁGINA DE MEMÓRIA

#DEFINE BANK0 BCF STATUS,RP0 ;SETA BANK 0 DE MEMÓRIA

#DEFINE BANK1 BSF STATUS,RP0 ;SETA BANK 1 DE MAMÓRIA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* VARIÁVEIS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DOS NOMES E ENDEREÇOS DE TODAS AS VARIÁVEIS UTILIZADAS

; PELO SISTEMA

CBLOCK 0x20 ;ENDEREÇO INICIAL DA MEMÓRIA DE USUÁRIO

W_TEMP ;REGISTRADORES TEMPORÁRIOS PARA

STATUS_TEMP ;INTERRUPÇÕES VARIÁVEIS NEM SERÃO UTILIZADAS

CONTADOR ;ARMAZENA O VALOR DA CONTAGEM

FLAGS ;ARMAZENA OS FLAGS DE CONTROLE

FILTRO ;FILTRAGEM PARA O BOTÃO

ENDC ;FIM DO BLOCO DE MEMÓRIA

Page 103: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

103

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* FLAGS INTERNOS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DE TODOS OS FLAGS UTILIZADOS PELO SISTEMA

#DEFINE SENTIDO FLAGS,0 ;FLAG DE SENTIDO

; 0 -> SOMANDO

; 1 -> SUBTRAINDO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* CONSTANTES *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DE TODAS AS CONSTANTES UTILIZADAS PELO SISTEMA

MIN EQU .10 ;VALOR MÍNIMO PARA O CONTADOR

MAX EQU .30 ;VALOR MÁXIMO PARA O CONTADOR

T_FILTRO EQU .230 ;FILTRO PARA BOTÃO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* ENTRADAS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DE TODOS OS PINOS QUE SERÃO UTILIZADOS COMO ENTRADA

; RECOMENDAMOS TAMBÉM COMENTAR O SIGNIFICADO DE SEUS ESTADOS (0 E 1)

#DEFINE BOTAO PORTA,2 ;PORTA DO BOTÃO

; 0 -> PRESSIONADO

; 1 -> LIBERADO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* SAÍDAS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DE TODOS OS PINOS QUE SERÃO UTILIZADOS COMO SAÍDA

; RECOMENDAMOS TAMBÉM COMENTAR O SIGNIFICADO DE SEUS ESTADOS (0 E 1)

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* VETOR DE RESET *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

ORG 0x00 ;ENDEREÇO INICIAL DE PROCESSAMENTO

GOTO INICIO

Page 104: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

104

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* INÍCIO DA INTERRUPÇÃO *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; AS INTERRUPÇÕES NÃO SERÃO UTILIZADAS, POR ISSO PODEMOS SUBSTITUIR

; TODO O SISTEMA EXISTENTE NO ARQUIVO MODELO PELO APRESENTADO ABAIXO

; ESTE SISTEMA NÃO É OBRIGATÓRIO, MAS PODE EVITAR PROBLEMAS FUTUROS

ORG 0x04 ;ENDEREÇO INICIAL DA INTERRUPÇÃO

RETFIE ;RETORNA DA INTERRUPÇÃO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* INICIO DO PROGRAMA *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

INICIO

BANK1 ;ALTERA PARA O BANCO 1

MOVLW B'00000100'

MOVWF TRISA ;DEFINE RA2 COMO ENTRADA E DEMAIS COMO SAÍDAS

MOVLW B'00000000'

MOVWF TRISB ;DEFINE TODO O PORTB COMO SAÍDA

MOVLW B'10000000'

MOVWF OPTION_REG ;PRESCALER 1:2 NO TMR0 ;PULL-UPS DESABILITADOS

;AS DEMAIS CONFG. SÃO IRRELEVANTES

MOVLW B'00000000'

MOVWF INTCON ;TODAS AS INTERRUPÇÕES DESLIGADAS

BANK0 ;RETORNA PARA O BANCO 0

MOVLW B'00000111' ;DEFINE O MODO DE OPERAÇÃO

MOVWF CMCON ;DO COMPARADOR ANALÓGICO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* INICIALIZAÇÃO DAS VARIÁVEIS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

CLRF PORTA ;LIMPA O PORTA

CLRF PORTB ;LIMPA O PORTB

MOVLW MIN

MOVWF CONTADOR ;INICIA CONTADOR = V_INICIAL

Page 105: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

105

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* ROTINA PRINCIPAL *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

MAIN

MOVLW T_FILTRO

MOVWF FILTRO ;INICIALIZA FILTRO = T_FILTRO

CHECA_BT

BTFSC BOTAO ;O BOTÃO ESTÁ PRESSIONADO?

GOTO MAIN ;NÃO, ENTÃO CONTINUA ESPERANDO SIM

DECFSZ FILTRO,F ;DECREMENTA O FILTRO DO BOTÃO

GOTO CHECA_BT ;NÃO, CONTINUA ESPERANDO SIM

TRATA_BT

BTFSS SENTIDO ;DEVE SOMAR (SENTIDO=0)?

GOTO SOMA ;SIM , ;NÃO

SUBTRAI

DECF CONTADOR,F ;DECREMENTA O CONTADOR

MOVLW MIN ;MOVE O VALOR MÍNIMO PARA W

SUBWF CONTADOR,W ;SUBTRAI O VALOR DE W (MIN) DE CONTADOR

BTFSC STATUS,C ;TESTA CARRY. RESULTADO NEGATIVO?

GOTO ATUALIZA ;NÃO, ENTÃO CONTA >= MIN

;SIM, ENTÃO CONTA < MIN

INCF CONTADOR,F ;INCREMENTA CONTADOR NOVAMENTE

;POIS PASSOU DO LIMITE

BCF SENTIDO ;MUDA SENTIDO PARA SOMA

GOTO MAIN ;VOLTA AO LOOP PRINCIPAL

SOMA

INCF CONTADOR,F ;INCREMENTA O CONTADOR

MOVLW MAX ;MOVE O VALOR MÁXIMO PARA W

SUBWF CONTADOR,W ;SUBTRAI O VALOR DE W (MIN) DE CONTADOR

BTFSS STATUS,C ;TESTA CARRY. RESULTADO NEGATIVO?

GOTO ATUALIZA ;SIM, ENTÃO CONTA < MAX

;NÃO, ENTÃO CONTA >= MAX

BSF SENTIDO ;MUDA SENTIDO PARA SUBTRAÇÃO

GOTO MAIN ;VOLTA AO LOOP PRINCIPAL

Page 106: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

106

ATUALIZA

MOVF CONTADOR,W ;COLOCA CONTADOR EM W

MOVWF PORTB ;ATUALIZA O PORTB PARA

;VISUALIZARMOS O VALOR DE CONTADOR

BTFSS BOTAO ;O BOTÃO CONTINUA PRESSIONADO?

GOTO $-1 ;SIM, ENTÃO ESPERA LIBERAÇÃO PARA

;QUE O CONTADOR NÃO DISPARE

GOTO MAIN ;NÃO, VOLTA AO LOOP PRINCIPAL

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* FIM DO PROGRAMA *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

END ;OBRIGATÓRIO

Page 107: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

107

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* PISCA-PISCA - EX3 * ;* KIT PIC 16F628 * ;* TRAB04 DATA: 30/10/XX * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* DESCRIÇÃO DO ARQUIVO * ;*--------------------------- -----------------------------------------------------* ;* PISCA-PISCA VARIÁVEL PARA DEMONSTRAR A IMPLEMENTAÇÃO DE * ;* DELAYS E A INVERSÃO DE PORTAS. * ;* * * * * * * * * * * * * * * * ** * * * * * ** * * * ** * * * * * ** * * * ** * * * * * ** ** * * * * * * * * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* ARQUIVOS DE DEFINIÇÕES *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

#INCLUDE <P16F628.INC> ;ARQUIVO PADRÃO MICROCHIP PARA 16F628

__CONFIG _BODEN_ON & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* PAGINAÇÃO DE MEMÓRIA *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;DEFINIÇÃO DE COMANDOS DE USUÁRIO PARA ALTERAÇÃO DA PÁGINA DE MEMÓRIA

#DEFINE BANK0 BCF STATUS,RP0 ;SETA BANK 0 DE MEMÓRIA

#DEFINE BANK1 BSF STATUS,RP0 ;SETA BANK 1 DE MAMÓRIA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* VARIÁVEIS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DOS NOMES E ENDEREÇOS DE TODAS AS VARIÁVEIS UTILIZADAS

; PELO SISTEMA

CBLOCK 0x20 ;ENDEREÇO INICIAL DA MEMÓRIA DE USUÁRIO

W_TEMP ;REGISTRADORES TEMPORÁRIOS PARA

STATUS_TEMP ;INTERRUPÇÕES ESTAS VARIÁVEIS NEM

Page 108: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

108

CONTADOR ;BASE DE TEMPO PARA A PISCADA

FILTRO ;FILTRAGEM PARA O BOTÃO

TEMPO1 ;REGISTRADORES AUXILIARES DE TEMPO

TEMPO2

TEMPO3

ENDC ;FIM DO BLOCO DE MEMÓRIA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* FLAGS INTERNOS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DE TODOS OS FLAGS UTILIZADOS PELO SISTEMA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* CONSTANTES *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DE TODAS AS CONSTANTES UTILIZADAS PELO SISTEMA

MIN EQU .10

MAX EQU .240

STEP EQU .5

MULTIPLO EQU .5

;A CONSTANTE DISPLAY REPRESENTA O SÍMBOLO QUE APARECERÁ PISCANDO NO

;DISPLAY. 1=LED LIGADO E 0=LED DESLIGADO. A RELAÇÃO ENTRE BITS E

;SEGMENTOS É A SEGUINTE: 'EDC.BAFG'

DISPLAY EQU B''11011010' ;(LETRA H)

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* ENTRADAS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DE TODOS OS PINOS QUE SERÃO UTILIZADOS COMO ENTRADA

; RECOMENDAMOS TAMBÉM COMENTAR O SIGNIFICADO DE SEUS ESTADOS (0 E 1)

#DEFINE BT1 PORTA,1 ;BOTÃO 1 - INCREMENTA

; 0 -> PRESSIONADO

; 1 -> LIBERADO

Page 109: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

109

#DEFINE BT2 PORTA,2 ;BOTÃO 2 - DECREMENTA

; 0 -> PRESSIONADO

; 1 -> LIBERADO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* SAÍDAS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DE TODOS OS PINOS QUE SERÃO UTILIZADOS COMO SAÍDA

; RECOMENDAMOS TAMBÉM COMENTAR O SIGNIFICADO DE SEUS ESTADOS (0 E 1)

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* VETOR DE RESET *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

ORG 0x00 ;ENDEREÇO INICIAL DE PROCESSAMENTO

GOTO INICIO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* INÍCIO DA INTERRUPÇÃO *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; AS INTERRUPÇÕES NÃO SERÃO UTILIZADAS, POR ISSO PODEMOS SUBSTITUIR

; TODO O SISTEMA EXISTENTE NO ARQUIVO MODELO PELO APRESENTADO ABAIXO

; ESTE SISTEMA NÃO É OBRIGATÓRIO, MAS PODE EVITAR PROBLEMAS FUTUROS

ORG 0x04 ;ENDEREÇO INICIAL DA INTERRUPÇÃO

RETFIE ;RETORNA DA INTERRUPÇÃO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* ROTINA DE DELAY *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; ESTA ROTINA AGUARDA TANTOS MILISEGUNDOS QUANTO O VALOR PASSADO

; POR W. POR EXEMPLO, SE W = .200, ELA AGUARDARÁ 200 MILISEGUNDOS.

; O DELAY PRINCIPAL DURA 1ms, POIS POSSUI 5 INSTRUÇÕES (5us) E É

; RODADO 200 VEZES (TEMPO1). PORTANTO 200 * 5us = 1ms.

; O DELAY PRINCIPAL É RODADO TANTAS VEZES QUANTO FOR O VALOR DE

; TEMPO2, O QUAL É INICIADO COM O VALOR PASSADO EM W.

Page 110: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

110

DELAY

MOVWF TEMPO2 ;INICIA TEMPO 2 COM VALOR EM W

DL1

MOVLW .200

MOVWF TEMPO1

DL2 ;ESTE DELAY DURA 1ms (5*200)

NOP

NOP

DECFSZ TEMPO1,F ;DECREMENTA TEMPO1. ACABOU?

GOTO DL2 ;NÃO, CONTINUA AGUARDANDO SIM

DECFSZ TEMPO2,F ;DECREMENTA TEMPO2. ACABOU?

GOTO DL1 ;NÃO, CONTINUA AGUARDANDO SIM

RETURN

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* INICIO DO PROGRAMA *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

INICIO

BANK0 ;ALTERA PARA O BANCO 0

MOVLW B'00000111'

MOVWF CMCON ;DEFINE O MODO DE OPERAÇÃO DO ;COMPARADOR ANALÓGICO

BANK1 ;ALTERA PARA O BANCO 1

MOVLW B'00000110'

MOVWF TRISA ;DEFINE RA1 E 2 COMO ENTRADA E DEMAIS SAÍDAS

MOVLW B'00000000'

MOVWF TRISB ;DEFINE TODO O PORTB COMO SAÍDA

MOVLW B'10000000'

MOVWF OPTION_REG ;PRESCALER 1:2 TMR0

;PULL-UPS DESABILITADOS

;AS DEMAIS CONFG. SÃO IRRELEVANTES

MOVLW B'00000000'

MOVWF INTCON ;TODAS AS INTERRUPÇÕES DESLIGADAS

BANK0 ;RETORNA PARA O BANCO 0

Page 111: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

111

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* INICIALIZAÇÃO DAS VARIÁVEIS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

CLRF PORTA ;LIMPA O PORTA

MOVLW DISPLAY

MOVWF PORTB ;ACENDE O VALOR CERTO NO DISPLAY

MOVLW MIN

MOVWF CONTADOR ;INICIA CONTADOR COM VALOR MIN.

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* ROTINA PRINCIPAL *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

MAIN

MOVLW MULTIPLO

MOVWF TEMPO3 ;INICIA COMTADOR DE MULTIPLICAÇÃO,

;POIS OS TEMPOS GERADOS POR DELAY

;SÃO MUITO PEQUENOS, GERANDO FREQ.

;MUITO ALTAS PARA A VISUALIZAÇÃO.

MAIN1

MOVF CONTADOR,W ;COLOCA CONTADOR EM W

;PARA CHAMAR A ROTINA DE DELAY

CALL DELAY ;CHAMA ROTINA DE DELAY

BTFSS BT1 ;BOTÃO 1 PRESSIONADO?

GOTO INCREMENTA ;SIM, DEVE INCREMENTAR NÃO

BTFSS BT2 ;BOTÃO 2 PRESSIONADO?

GOTO DECREMENTA ;SIM, DEVE DECREMENTAR NÃO

DECFSZ TEMPO3,F ;DECREMENTA CONTADOR MULT. ACABOU?

GOTO MAIN1 ;NÃO, CONTINUA AGUARDANDO SIM

MOVLW DISPLAY ;APÓS TRANSCORRIDO O TEMPO, IRÁ

;INVERTER OS LEDS CORRETOS ATRAVÉS

;DA MÁSCARA "DISPLAY" E DA OPERAÇÃO XOR

XORWF PORTB,F ;INVERTE LEDS -> PISCA

GOTO MAIN ;COMEÇA NOVAMENTE

Page 112: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

112

DECREMENTA

MOVLW STEP

SUBWF CONTADOR,F ;DECREMENTA O CONTADOR EM STEP

MOVLW MIN ;MOVE O VALOR MÍNIMO PARA W

SUBWF CONTADOR,W ;SUBTRAI O VALOR DE W (MIN) DE CONTADOR

BTFSC STATUS,C ;TESTA CARRY. RESULTADO NEGATIVO?

GOTO MAIN ;NÃO, ENTÃO CONTA >= MIN

;SIM, ENTÃO CONTA < MIN

MOVLW MIN

MOVWF CONTADOR ;ACERTA CONTADOR NO MÍNIMO, POIS

;PASSOU DO VALOR

BTFSS BT2 ;BOTÃO 2 CONTINUA PRESSIONADO?

GOTO $-1 ;SIM, AGUARDA LIBERAÇÃO SE NÃO

GOTO MAIN ;VOLTA AO LOOP PRINCIPAL

INCREMENTA

MOVLW STEP

ADDWF CONTADOR,F ;INCREMENTA O CONTADOR EM STEP

MOVLW MAX ;MOVE O VALOR MÁXIMO PARA W

SUBWF CONTADOR,W ;SUBTRAI O VALOR DE W (MIN) DE CONTADOR

BTFSS STATUS,C ;TESTA CARRY. RESULTADO NEGATIVO?

GOTO MAIN ;SIM, ENTÃO CONTA < MAX

;NÃO, ENTÃO CONTA >= MAX

MOVLW MAX

MOVWF CONTADOR ;ACERTA CONTADOR NO MÁXIMO, POIS

;PASSOU DO VALOR

BTFSS BT1 ;BOTÃO 1 CONTINUA PRESSIONADO?

GOTO $-1 ;SIM, AGUARDA LIBERAÇÃO SE NÃO

GOTO MAIN ;VOLTA AO LOOP PRINCIPAL

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* FIM DO PROGRAMA *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

END ;OBRIGATÓRIO

Page 113: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

113

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* CONTADOR MELHORADO - EX4 * ;* KIT PIC 16F628 * ;* TRAB05 DATA: 30/10/XX * ;* * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * ;* DESCRIÇÃO DO ARQUIVO * ;*-------------- -------------------------------------------------------------------* ;* CONTADOR QUE UTILIZA DOIS BOTÕES PARA INCREMENTAR E DECRE- * ;* MENTAR O VALOR CONTROLADO PELA VARIÁVEL "CONTADOR". ESTA * ;* VARIÁVEL ESTÁ LIMITADA PELAS CONSTANTES "MIN" E "MAX". * ;* O VALOR DO CONTADOR É MOSTRADO NO DISPLAY. * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* ARQUIVOS DE DEFINIÇÕES *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

#INCLUDE <P16F628.INC> ;ARQUIVO PADRÃO MICROCHIP PARA 16F628

__CONFIG _BODEN_ON & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* PAGINAÇÃO DE MEMÓRIA *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;DEFINIÇÃO DE COMANDOS DE USUÁRIO PARA ALTERAÇÃO DA PÁGINA DE MEMÓRIA

#DEFINE BANK0 BCF STATUS,RP0 ;SETA BANK 0 DE MEMÓRIA

#DEFINE BANK1 BSF STATUS,RP0 ;SETA BANK 1 DE MAMÓRIA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* VARIÁVEIS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DOS NOMES E ENDEREÇOS DE TODAS AS VARIÁVEIS UTILIZADAS

; PELO SISTEMA

CBLOCK 0x20 ;ENDEREÇO INICIAL DA MEMÓRIA DE USUÁRIO

W_TEMP ;REGISTRADORES TEMPORÁRIOS PARA

STATUS_TEMP ;INTERRUPÇÕES VARIÁVEIS NAO UTILIZADAS

CONTADOR ;ARMAZENA O VALOR DA CONTAGEM

Page 114: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

114

FLAGS ;ARMAZENA OS FLAGS DE CONTROLE

FILTRO1 ;FILTRAGEM PARA O BOTÃO 1

FILTRO2 ;FILTRAGEM PARA O BOTÃO 2

ENDC ;FIM DO BLOCO DE MEMÓRIA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* FLAGS INTERNOS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DE TODOS OS FLAGS UTILIZADOS PELO SISTEMA

#DEFINE ST_BT1 FLAGS,0 ;STATUS DO BOTÃO 1

#DEFINE ST_BT2 FLAGS,1 ;STATUS DO BOTÃO 2

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* CONSTANTES *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DE TODAS AS CONSTANTES UTILIZADAS PELO SISTEMA

MIN EQU .0 ;VALOR MÍNIMO PARA O CONTADOR

MAX EQU .15 ;VALOR MÁXIMO PARA O CONTADOR

T_FILTRO EQU .255 ;FILTRO PARA BOTÃO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* ENTRADAS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DE TODOS OS PINOS QUE SERÃO UTILIZADOS COMO ENTRADA

; RECOMENDAMOS TAMBÉM COMENTAR O SIGNIFICADO DE SEUS ESTADOS (0 E 1)

#DEFINE BOTAO1 PORTA,1 ;PORTA DO BOTÃO

; 0 -> PRESSIONADO

; 1 -> LIBERADO

#DEFINE BOTAO2 PORTA,2 ;PORTA DO BOTÃO

; 0 -> PRESSIONADO

; 1 -> LIBERADO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* SAÍDAS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Page 115: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

115

; DEFINIÇÃO DE TODOS OS PINOS QUE SERÃO UTILIZADOS COMO SAÍDA

; RECOMENDAMOS TAMBÉM COMENTAR O SIGNIFICADO DE SEUS ESTADOS (0 E 1)

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* VETOR DE RESET *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

ORG 0x00 ;ENDEREÇO INICIAL DE PROCESSAMENTO

GOTO INICIO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* INÍCIO DA INTERRUPÇÃO *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; AS INTERRUPÇÕES NÃO SERÃO UTILIZADAS, POR ISSO PODEMOS SUBSTITUIR

; TODO O SISTEMA EXISTENTE NO ARQUIVO MODELO PELO APRESENTADO ABAIXO

; ESTE SISTEMA NÃO É OBRIGATÓRIO, MAS PODE EVITAR PROBLEMAS FUTUROS

ORG 0x04 ;ENDEREÇO INICIAL DA INTERRUPÇÃO

RETFIE ;RETORNA DA INTERRUPÇÃO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* ROTINA DE CONVERSÃO BINÁRIO -> DISPLAY *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; ESTA ROTINA IRÁ RETORNAR EM W, O SIMBOLO CORRETO QUE DEVE SER

; MOSTRADO NO DISPLAY PARA CADA VALOR DE CONTADOR. O RETORNO JÁ ESTÁ

; FORMATADO PARA AS CONDIÇÕES DE LIGAÇÃO DO DISPLAY AO PORTB.

CONVERTE

MOVF CONTADOR,W ;COLOCA CONTADOR EM W

ANDLW B'00001111' ;MASCARA VALOR DE CONTADOR

;CONSIDERAR SOMENTE ATÉ 15

ADDWF PCL,F

; B'GFABCDE.' ; POSIÇÃO CORRETA DOS SEGUIMENTOS

RETLW B'01111110' ; 00 - RETORNA SÍMBOLO CORRETO 0

RETLW B'00011000' ; 01 - RETORNA SÍMBOLO CORRETO 1

RETLW B'10110110' ; 02 - RETORNA SÍMBOLO CORRETO 2

RETLW B'10111100' ; 03 - RETORNA SÍMBOLO CORRETO 3

RETLW B'11011000' ; 04 - RETORNA SÍMBOLO CORRETO 4

RETLW B'11101100' ; 05 - RETORNA SÍMBOLO CORRETO 5

Page 116: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

116

RETLW B'11101110' ;06 - RETORNA SÍMBOLO CORRETO 6

RETLW B'00111000' ; 07 - RETORNA SÍMBOLO CORRETO 7

RETLW B'11111110' ; 08 - RETORNA SÍMBOLO CORRETO 8

RETLW B'11111100' ; 09 - RETORNA SÍMBOLO CORRETO 9

RETLW B'11111010' ; 10 - RETORNA SÍMBOLO CORRETO A

RETLW B'11001110' ; 11 - RETORNA SÍMBOLO CORRETO b

RETLW B'01100110' ; 12 - RETORNA SÍMBOLO CORRETO C

RETLW B'10011110' ; 13 - RETORNA SÍMBOLO CORRETO d

RETLW B'11100110' ; 14 - RETORNA SÍMBOLO CORRETO E

RETLW B'11100010' ; 15 - RETORNA SÍMBOLO CORRETO F

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* INICIO DO PROGRAMA *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

INICIO

BANK0 ;ALTERA PARA O BANCO 0

MOVLW B'00000111'

MOVWF CMCON ;DEFINE O MODO DE OPERAÇÃO DO

;COMPARADOR ANALÓGICO

BANK1 ;ALTERA PARA O BANCO 1

MOVLW B'00000110'

MOVWF TRISA ;DEFINE RA1 E 2 COMO ENTRADA

;E DEMAIS COMO SAÍDAS

MOVLW B'00000000'

MOVWF TRISB ;DEFINE TODO O PORTB COMO SAÍDA

MOVLW B'10000000'

MOVWF OPTION_REG ;PRESCALER 1:2 NO TMR0

;PULL-UPS DESABILITADOS

;AS DEMAIS CONFG. SÃO IRRELEVANTES

MOVLW B'00000000'

MOVWF INTCON ;TODAS INTERRUPÇÕES DESLIGADAS

BANK0 ;RETORNA PARA O BANCO 0

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* INICIALIZAÇÃO DAS VARIÁVEIS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Page 117: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

117

CLRF PORTA ;LIMPA O PORTA

CLRF PORTB ;LIMPA O PORTB

CLRF FLAGS ;LIMPA TODOS OS FLAGS

MOVLW MIN

MOVWF CONTADOR ;INICIA CONTADOR = MIN

GOTO ATUALIZA ;ATUALIZA O DISPLAY INICIALMENTE

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* ROTINA PRINCIPAL *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

MAIN

MOVLW T_FILTRO

MOVWF FILTRO1 ;INICIALIZA FILTRO1 = T_FILTRO

MOVWF FILTRO2 ;INICIALIZA FILTRO2 = T_FILTRO

CHECA_BT1

BTFSC BOTAO1 ;O BOTÃO 1 ESTÁ PRESSIONADO?

GOTO BT1_LIB ;NÃO, ENTÃO TRATA COMO LIBERADO SE SIM

DECFSZ FILTRO1,F ;DECREMENTA FILTRO DO BOTÃO TERMINOU?

GOTO CHECA_BT1 ;NÃO, CONTINUA ESPERANDO SE SIM

BTFSS ST_BT1 ;BOTÃO JÁ ESTAVA PRESSIONADO?

GOTO DEC ;NÃO, EXECUTA AÇÃO DO BOTÃO

GOTO CHECA_BT2 ;SIM, CHECA BOTÃO 2

BT1_LIB

BCF ST_BT1 ;MARCA BOTÃO 1 COMO LIBERADO

CHECA_BT2

BTFSC BOTAO2 ;O BOTÃO 2 ESTÁ PRESSIONADO?

GOTO BT2_LIB ;NÃO, ENTÃO TRATA COMO LIBERADO SE SIM

DECFSZ FILTRO2,F ;DECREMENTA O FILTRO BOTÃO TERMINOU?

GOTO CHECA_BT2 ;NÃO, CONTINUA ESPERANDO SE SIM

BTFSS ST_BT2 ;BOTÃO JÁ ESTAVA PRESSIONADO?

GOTO INC ;NÃO, EXECUTA AÇÃO DO BOTÃO

GOTO MAIN ;SIM, VOLTA AO LOOPING

Page 118: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

118

BT2_LIB

BCF ST_BT2 ;MARCA BOTÃO 2 COMO LIBERADO

GOTO MAIN ;RETORNA AO LOOPING

DEC ;AÇÃO DE DECREMENTAR

BSF ST_BT1 ;MARCA BOTÃO 1 COMO JÁ PRESSIONADO

MOVF CONTADOR,W ;COLOCA CONTADOR EM W

XORLW MIN ;APLICA XOR ENTRE CONTADOR E MIN

BTFSC STATUS,Z ;RESULTOU EM ZERO?

GOTO MAIN ;SIM, RETORNA SEM AFETAR CONT. SE NÃO

DECF CONTADOR,F ;DECREMENTA O CONTADOR

GOTO ATUALIZA ;ATUALIZA O DISPLAY

INC ;AÇÃO DE INCREMENTAR

BSF ST_BT2 ;MARCA BOTÃO 2 COMO JÁ PRESSIONADO

MOVF CONTADOR,W ;COLOCA CONTADOR EM W

XORLW MAX ;APLICA XOR ENTRE CONTADOR E MAX

BTFSC STATUS,Z ;RESULTOU EM ZERO?

GOTO MAIN ;SIM, RETORNA SEM AFETAR CONT. SE NÃO

INCF CONTADOR,F ;INCREMENTA O CONTADOR

GOTO ATUALIZA ;ATUALIZA O DISPLAY

ATUALIZA

CALL CONVERTE ;CONVERTE CONTADOR NO NÚMERO

MOVWF PORTB ;ATUALIZA O PORTB PARA

GOTO MAIN ;NÃO, VOLTA AO LOOP PRINCIPAL

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* FIM DO PROGRAMA *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

END ;OBRIGATÓRIO

Page 119: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

119

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* TIMER DE SEGUNDOS - EX5 * ;* KIT PIC 16F628 * ;* TRAB06 DATA: 30/10/XX * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* DESCRIÇÃO DO ARQUIVO * ;*------------------------------------------- --------------------------------------* ;* TIMER DECRESCENTE EM SEGUNDOS. O VALOR INICIAL É DETERMINADO * ;* PELA CONSTANTE V_INICIO E PODE ESTAR ENTRE 1 E 9 SEGUNDOS. ;* O BOTÃO 1 DISPARA O TIMER, MOSTRANDO O TEMPO RESTANTE NO * ;* DISPLAY. O BOTÃO 2 PARALIZA O TIMER. O LED É UTILIZADO PARA * ;* INDICAR O ESTADO ATUAL DO TIMER: ACESO=RODANDO E ;APAGADO=PARADO * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* ARQUIVOS DE DEFINIÇÕES *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

#INCLUDE <P16F628.INC> ;ARQUIVO PADRÃO MICROCHIP PARA 16F628

__CONFIG _BODEN_ON & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* PAGINAÇÃO DE MEMÓRIA *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;DEFINIÇÃO DE COMANDOS DE USUÁRIO PARA ALTERAÇÃO DA PÁGINA DE MEMÓRIA

#DEFINE BANK0 BCF STATUS,RP0 ;SETA BANK 0 DE MEMÓRIA

#DEFINE BANK1 BSF STATUS,RP0 ;SETA BANK 1 DE MAMÓRIA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* VARIÁVEIS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DOS NOMES E ENDEREÇOS DE TODAS AS VARIÁVEIS UTILIZADAS

; PELO SISTEMA

CBLOCK 0x20 ;ENDEREÇO INICIAL DA MEMÓRIA DE USUÁRIO

W_TEMP ;REGISTRADORES TEMPORÁRIOS PARA

STATUS_TEMP ;INTERRUPÇÕES

Page 120: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

120

TEMPO ;ARMAZENA O VALOR DO TEMPO

FLAGS ;ARMAZENA OS FLAGS DE CONTROLE

TEMP1 ;REGISTRADORES AUXILIARES

TEMP2

FILTRO1 ;FILTROS DOS BOTÕES

FILTRO2

ENDC ;FIM DO BLOCO DE MEMÓRIA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* FLAGS INTERNOS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DE TODOS OS FLAGS UTILIZADOS PELO SISTEMA

#DEFINE F_FIM FLAGS,0 ;FLAG DE FIM DE TEMPO

#DEFINE ST_BT1 FLAGS,1 ;STATUS DO BOTÃO 1

#DEFINE ST_BT2 FLAGS,2 ;STATUS DO BOTÃO 2

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* CONSTANTES *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DE TODAS AS CONSTANTES UTILIZADAS PELO SISTEMA

V_INICIO EQU .15 ;VALOR INICIAL DO TIMER (1 A 15 SEG.)

T_FILTRO EQU .255 ;VALOR DO FILTRO DOS BOTÕES

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* ENTRADAS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DE TODOS OS PINOS QUE SERÃO UTILIZADOS COMO ENTRADA

; RECOMENDAMOS TAMBÉM COMENTAR O SIGNIFICADO DE SEUS ESTADOS (0 E 1)

#DEFINE BOTAO1 PORTA,1 ;PORTA DO BOTÃO

; 0 -> PRESSIONADO

; 1 -> LIBERADO

#DEFINE BOTAO2 PORTA,2 ;PORTA DO BOTÃO

; 0 -> PRESSIONADO

; 1 -> LIBERADO

Page 121: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

121

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* SAÍDAS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DE TODOS OS PINOS QUE SERÃO UTILIZADOS COMO SAÍDA

; RECOMENDAMOS TAMBÉM COMENTAR O SIGNIFICADO DE SEUS ESTADOS (0 E 1)

#DEFINE LED PORTA,3 ;LED

;0 -> DESLIGADO

;1 -> LIGADO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* VETOR DE RESET *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

ORG 0x00 ;ENDEREÇO INICIAL DE PROCESSAMENTO

GOTO INICIO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* INÍCIO DA INTERRUPÇÃO *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; UTILIZAREMOS SOMENTE A INTERRUÇÃO DE TMR0, MAS EFETUAREMOS O TESTE

; PARA TERMOS CERTEZA DE QUE NENHUM PROBLEMA ACONTECEU. É NECESSÁRIO

; SALVAR E RECUPERAR OS VALOR DE W E STATUS.

ORG 0x04 ;ENDEREÇO INICIAL DA INTERRUPÇÃO

MOVWF W_TEMP ;SALVA W EM W_TEMP

SWAPF STATUS,W

MOVWF STATUS_TEMP ;SALVA STATUS EM STATUS_TEMP

BTFSS INTCON,T0IF ;É INTERRUPÇÃO DE TMR0?

GOTO SAI_INT ;NÃO, SAI SE AÇÃO SE SIM

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* TRATAMENTO DA INTERRUPÇÃO DE TMR0 *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; ESTA ROTINA IRÁ CONTAR O TEMPO, E QUANDO PASSAR 1 SEGUNDO, A VARI-

; ÁVEL "TEMPO" SERÁ DECREMENTADA.

; 1 SEGUNDO = 64us (PRESCALER) X 125 (TMR0) X 125 (TEMP1)

Page 122: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

122

BCF INTCON,T0IF ;LIMPA FLAG DA INT.

MOVLW .256-.125

MOVWF TMR0 ;REINICIA TMR0

DECFSZ TEMP1,F ;DECREM. CONTADOR AUXILIAR SE FIM?

GOTO SAI_INT ;NÃO, SAI SEM AÇÃO SE SIM

MOVLW .125

MOVWF TEMP1 ;REINICIALIZA TEMPO AUXILIAR

BTFSC F_FIM ;JÁ CHEGOU AO FIM?

GOTO SAI_INT ;SIM, ENTÃO NÃO DECREMENTA O TEMPO

;NÃO

DECFSZ TEMPO,F ;DECREMENTA TEMPO. ACABOU?

GOTO SAI_INT ;NÃO, SAI DA INTERRUPÇãO SE SIM

BSF F_FIM ;MARCA FIM DO TEMPO

GOTO SAI_INT ;SAI DA INTERRUPÇÃO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* FIM DA INTERRUPÇÃO *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

SAI_INT

SWAPF STATUS_TEMP,W

MOVWF STATUS ;RECUPERA STATUS

SWAPF W_TEMP,F

SWAPF W_TEMP,W ;RECUPERA W

RETFIE ;RETORNA DA INTERRUPÇÃO

;* * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * *

;* ROTINA DE CONVERSÃO BINÁRIO -> DISPLAY *

;* * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * *

; ESTA ROTINA IRÁ RETORNAR EM W, O SIMBOLO CORRETO QUE DEVE SER

; MOSTRADO NO DISPLAY PARA CADA VALOR DE CONTADOR. O RETORNO JÁ ESTÁ

; FORMATADO PARA AS CONDIÇÕES DE LIGAÇÃO DO DISPLAY AO PORTB.

CONVERTE

MOVF TEMPO,W ;COLOCA CONTADOR EM W

ANDLW B'00001111' ;MASCARA VALOR DE CONTADOR

;CONSIDERAR SOMENTE ATÉ 15

ADDWF PCL,F

Page 123: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

123

; B'GFABCDE.' ; POSIÇÃO CORRETA DOS SEGUIMENTOS

RETLW B'01111110' ; 00 - RETORNA SÍMBOLO CORRETO 0

RETLW B'00011000' ; 01 - RETORNA SÍMBOLO CORRETO 1

RETLW B'10110110' ; 02 - RETORNA SÍMBOLO CORRETO 2

RETLW B'10111100' ; 03 - RETORNA SÍMBOLO CORRETO 3

RETLW B'11011000' ; 04 - RETORNA SÍMBOLO CORRETO 4

RETLW B'11101100' ; 05 - RETORNA SÍMBOLO CORRETO 5

RETLW B'11101110' ; 06 - RETORNA SÍMBOLO CORRETO 6

RETLW B'00111000' ; 07 - RETORNA SÍMBOLO CORRETO 7

RETLW B'11111110' ; 08 - RETORNA SÍMBOLO CORRETO 8

RETLW B'11111100' ; 09 - RETORNA SÍMBOLO CORRETO 9

RETLW B'11111010' ; 10 - RETORNA SÍMBOLO CORRETO A

RETLW B'11001110' ; 11 - RETORNA SÍMBOLO CORRETO b

RETLW B'01100110' ; 12 - RETORNA SÍMBOLO CORRETO C

RETLW B'10011110' ; 13 - RETORNA SÍMBOLO CORRETO d

RETLW B'11100110' ; 14 - RETORNA SÍMBOLO CORRETO E

RETLW B'11100010' ; 15 - RETORNA SÍMBOLO CORRETO F

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* ROTINA DE ATUALIZAÇÃO DO DISPLAY *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; ESTA ROTINA CONVERTE O VALOR DE TEMPO ATRAVÉS DA ROTINA CONVERTE

; E ATUALIZA O PORTB PARA ACENDER O DISPLAY CORRETAMENTE

ATUALIZA

CALL CONVERTE ;CONVERTE CONTADOR NO NÚMERO DO

;DISPLAY

MOVWF PORTB ;ATUALIZA O PORTB PARA

;VISUALIZARMOS O VALOR DE CONTADOR

;NO DISPLAY

RETURN ;NÃO, RETORNA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* ROTINA DE DESLIGAR O TIMER *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; EXECUTA AS AÇÕES NECESSÁRIAS PARA DESLIGAR O TIMER

DESL_TIMER

Page 124: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

124

BCF INTCON,GIE ;DESLIGA CHAVE GERAL DE INT.

BCF LED ;APAGA O LED

RETURN ;RETORNA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* ROTINA DE LIGAR O TIMER *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; ESTA ROTINA EXECUTA AS AÇÕES NECESSÁRIAS PARA LIGAR O TIMER

LIGA_TIMER

BTFSC INTCON,GIE ;TIMER JÁ ESTA LIGADO?

RETURN ;SIM, RETORNA DIRETO SE NÃO

BCF INTCON,T0IF ;LIMPA FLAG DE INT. DE TMR0

MOVLW .256-.125

MOVWF TMR0 ;INICIA TMR0 CORRETAMENTE

MOVLW .125

MOVWF TEMP1 ;INICIA TEMP1 CORRETAMENTE

BSF INTCON,GIE ;LIGA CHAVE GERAL DE INTERRUPÇÕES

BSF LED ;ACENDE O LED

RETURN ;RETORNA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* INICIO DO PROGRAMA *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

INICIO

BANK0 ;ALTERA PARA O BANCO 0

MOVLW B'00000111'

MOVWF CMCON ;DEFINE O MODO DE OPERAÇÃO

;DO COMPARADOR ANALÓGICO

BANK1 ;ALTERA PARA O BANCO 1

MOVLW B'00000110'

MOVWF TRISA ;DEFINE RA1 E 2 COMO ENTRADA E DEMAIS

;COMO SAÍDAS

MOVLW B'00000000'

MOVWF TRISB ;DEFINE TODO O PORTB COMO SAÍDA

MOVLW B'10000101'

Page 125: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

125

MOVWF OPTION_REG ;PRESCALER 1:64 NO TMR0

;PULL-UPS DESABILITADOS

;AS DEMAIS CONFG. SÃO IRRELEVANTES

MOVLW B'00100000'

MOVWF INTCON ;HABILITADA SOMENTE INTERRUPÇÃO TMR0

;CHAVE GERAL INTERRUÇÕES DESLIGADAS

BANK0 ;RETORNA PARA O BANCO 0

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* INICIALIZAÇÃO DAS VARIÁVEIS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

CLRF PORTA ;LIMPA O PORTA

CLRF PORTB ;LIMPA O PORTB

CLRF FLAGS ;LIMPA TODOS OS FLAGS

MOVLW V_INICIO

MOVWF TEMPO ;INICIA TEMPO = V_INICIO

CALL ATUALIZA ;ATUALIZA O DISPLAY INICIALMENTE

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* ROTINA PRINCIPAL *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

MAIN

BTFSC F_FIM ;CHEGOU AO FIM?

CALL DESL_TIMER ;SIM, ENTÃO DESLIGA O TIMER SE NÃO

CALL ATUALIZA ;ATUALIZA O DISPLAY

MOVLW T_FILTRO

MOVWF FILTRO1 ;INICIALIZA FILTRO1 = T_FILTRO

MOVWF FILTRO2 ;INICIALIZA FILTRO2 = T_FILTRO

CHECA_BT1

BTFSC BOTAO1 ;O BOTÃO 1 ESTÁ PRESSIONADO?

GOTO BT1_LIB ;NÃO, ENTÃO TRATA COMO LIBERADO

;SIM

DECFSZ FILTRO1,F ;DECREMENTA O FILTRO DO BOTÃO

;TERMINOU?

Page 126: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

126

GOTO CHECA_BT1 ;NÃO, CONTINUA ESPERANDO SE SIM

BTFSS ST_BT1 ;BOTÃO JÁ ESTAVA PRESSIONADO?

GOTO ACAO_BT1 ;NÃO, EXECUTA AÇÃO DO BOTÃO

GOTO CHECA_BT2 ;SIM, CHECA BOTÃO 2

BT1_LIB

BCF ST_BT1 ;MARCA BOTÃO 1 COMO LIBERADO

CHECA_BT2

BTFSC BOTAO2 ;O BOTÃO 2 ESTÁ PRESSIONADO?

GOTO BT2_LIB ;NÃO, ENTÃO TRATA COMO LIBERADO SIM

DECFSZ FILTRO2,F ;DECREMENTA O FILTRO DO BOTÃO

;TERMINOU?

GOTO CHECA_BT2 ;NÃO, CONTINUA ESPERANDO SE SIM

BTFSS ST_BT2 ;BOTÃO JÁ ESTAVA PRESSIONADO?

GOTO ACAO_BT2 ;NÃO, EXECUTA AÇÃO DO BOTÃO

GOTO MAIN ;SIM, VOLTA AO LOOPING

BT2_LIB

BCF ST_BT2 ;MARCA BOTÃO 2 COMO LIBERADO

GOTO MAIN ;RETORNA AO LOOPING

ACAO_BT1 ;AÇÃO PARA O BOTÃO 1

BSF ST_BT1 ;MARCA BOTÃO 1 COMO JÁ PRESSIONADO

CALL LIGA_TIMER ;LIGA O TIMER

GOTO MAIN

ACAO_BT2 ;AÇÃO PARA O BOTÃO 2

BSF ST_BT2 ;MARCA BOTÃO 2 COMO JÁ PRESSIONADO

CALL DESL_TIMER ;DESLIGA O TIMER

GOTO MAIN ;NÃO, VOLTA AO LOOP PRINCIPAL

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* FIM DO PROGRAMA *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

END ;OBRIGATÓRIO

Page 127: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

127

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* CONTADOR FINAL - EX6 * ;* KIT PIC 16F628 * ;* TRAB07 30/10/01 * ;* * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * ;* DESCRIÇÃO DO ARQUIVO * ;*-----------------------------------------------------------------* ;* CONTADOR QUE UTILIZA DOIS BOTÕES PARA INCREMENTAR E DECRE- *

;* MENTAR O VALOR CONTROLADO PELA VARIÁVEL "CONTADOR". ESTA *

;* VARIÁVEL ESTÁ LIMITADA PELAS CONSTANTES "MIN" E "MAX". *

;* O VALOR DO CONTADOR É MOSTRADO NO DISPLAY E ARMAZENADO NA *

;* EEPROM PARA NÃO SER PERDIDO MESMO NO CASO DE RESET. *

;* * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* ARQUIVOS DE DEFINIÇÕES *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

#INCLUDE <P16F628.INC> ;ARQUIVO PADRÃO MICROCHIP PARA 16F628

__CONFIG _BODEN_ON & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* PAGINAÇÃO DE MEMÓRIA *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;DEFINIÇÃO DE COMANDOS DE USUÁRIO PARA ALTERAÇÃO DA PÁGINA DE MEMÓRIA

#DEFINE BANK0 BCF STATUS,RP0 ;SETA BANK 0 DE MEMÓRIA

#DEFINE BANK1 BSF STATUS,RP0 ;SETA BANK 1 DE MAMÓRIA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* VARIÁVEIS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DOS NOMES E ENDEREÇOS DE TODAS AS VARIÁVEIS UTILIZADAS

; PELO SISTEMA

CBLOCK 0x20 ;ENDEREÇO INICIAL DA MEMÓRIA DE USUÁRIO

W_TEMP ;REGISTRADORES TEMPORÁRIOS PARA

STATUS_TEMP ;INTERRUPÇÕES VARIÁVEIS NÃO UTILIZADAS

Page 128: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

128

CONTADOR ;ARMAZENA O VALOR DA CONTAGEM

FLAGS ;ARMAZENA OS FLAGS DE CONTROLE

FILTRO1 ;FILTRAGEM PARA O BOTÃO 1

FILTRO2 ;FILTRAGEM PARA O BOTÃO 2

ENDC ;FIM DO BLOCO DE MEMÓRIA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* FLAGS INTERNOS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DE TODOS OS FLAGS UTILIZADOS PELO SISTEMA

#DEFINE ST_BT1 FLAGS,0 ;STATUS DO BOTÃO 1

#DEFINE ST_BT2 FLAGS,1 ;STATUS DO BOTÃO 2

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* CONSTANTES *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DE TODAS AS CONSTANTES UTILIZADAS PELO SISTEMA

MIN EQU .0 ;VALOR MINIMO PARA O CONTADOR

MAX EQU .15 ;VALOR MÁXIMO PARA O CONTADOR

T_FILTRO EQU .255 ;FILTRO PARA BOTÃO

POS_MEM EQU .0 ;ENDEREÇO DA EEPROM ONDE SERÁ

;ARMAZENADO O VALOR DO CONTADOR

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* ENTRADAS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DE TODOS OS PINOS QUE SERÃO UTILIZADOS COMO ENTRADA

; RECOMENDAMOS TAMBÉM COMENTAR O SIGNIFICADO DE SEUS ESTADOS (0 E 1)

#DEFINE BOTAO1 PORTA,1 ;PORTA DO BOTÃO

; 0 -> PRESSIONADO

; 1 -> LIBERADO

#DEFINE BOTAO2 PORTA,2 ;PORTA DO BOTÃO

; 0 -> PRESSIONADO

; 1 -> LIBERADO

Page 129: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

129

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* SAÍDAS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DE TODOS OS PINOS QUE SERÃO UTILIZADOS COMO SAÍDA

; RECOMENDAMOS TAMBÉM COMENTAR O SIGNIFICADO DE SEUS ESTADOS (0 E 1)

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* INICIALIZAÇÃO DA EEPROM *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

ORG H'2100'+POS_MEM ;INÍCIO DA EEPROM

DE .5 ;VALOR INICIAL PARA CONTADOR = 5

;VIDE DIRETRIZ "DE" NO APÊNDICE B

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* VETOR DE RESET *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

ORG 0x00 ;ENDEREÇO INICIAL DE PROCESSAMENTO

GOTO INICIO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* INÍCIO DA INTERRUPÇÃO *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; AS INTERRUPÇÕES NÃO SERÃO UTILIZADAS, POR ISSO PODEMOS SUBSTITUIR

; TODO O SISTEMA EXISTENTE NO ARQUIVO MODELO PELO APRESENTADO ABAIXO

; ESTE SISTEMA NÃO É OBRIGATÓRIO, MAS PODE EVITAR PROBLEMAS FUTUROS

ORG 0x04 ;ENDEREÇO INICIAL DA INTERRUPÇÃO

RETFIE ;RETORNA DA INTERRUPÇÃO

;* * * * * * * * * * * ** * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * *

;* ROTINA DE CONVERSÃO BINÁRIO -> DISPLAY *

;* * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; ESTA ROTINA IRÁ RETORNAR EM W, O SIMBOLO CORRETO QUE DEVE SER

; MOSTRADO NO DISPLAY PARA CADA VALOR DE CONTADOR. O RETORNO JÁ ESTÁ

; FORMATADO PARA AS CONDIÇÕES DE LIGAÇÃO DO DISPLAY AO PORTB.

Page 130: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

130

CONVERTE

MOVF CONTADOR,W ;COLOCA CONTADOR EM W

ANDLW B'00001111' ;MASCARA VALOR DE CONTADOR

;CONSIDERAR SOMENTE ATÉ 15

ADDWF PCL,F

; B'GFABCDE.' ; POSIÇÃO CORRETA DOS SEGUIMENTOS

RETLW B'01111110' ; 00 - RETORNA SÍMBOLO CORRETO 0

RETLW B'00011000' ; 01 - RETORNA SÍMBOLO CORRETO 1

RETLW B'10110110' ; 02 - RETORNA SÍMBOLO CORRETO 2

RETLW B'10111100' ; 03 - RETORNA SÍMBOLO CORRETO 3

RETLW B'11011000' ; 04 - RETORNA SÍMBOLO CORRETO 4

RETLW B'11101100' ; 05 - RETORNA SÍMBOLO CORRETO 5

RETLW B'11101110' ; 06 - RETORNA SÍMBOLO CORRETO 6

RETLW B'00111000' ; 07 - RETORNA SÍMBOLO CORRETO 7

RETLW B'11111110' ; 08 - RETORNA SÍMBOLO CORRETO 8

RETLW B'11111100' ; 09 - RETORNA SÍMBOLO CORRETO 9

RETLW B'11111010' ; 10 - RETORNA SÍMBOLO CORRETO A

RETLW B'11001110' ; 11 - RETORNA SÍMBOLO CORRETO b

RETLW B'01100110' ; 12 - RETORNA SÍMBOLO CORRETO C

RETLW B'10011110' ; 13 - RETORNA SÍMBOLO CORRETO d

RETLW B'11100110' ; 14 - RETORNA SÍMBOLO CORRETO E

RETLW B'11100010' ; 15 - RETORNA SÍMBOLO CORRETO F

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* ROTINA DE LEITURA NA E2PROM *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; ESTA ROTINA LÊ O BYTE DO ENDEREÇO ACERTADO POR EEADR E COLOCA

; O VALOR EM W.

LE_E2PROM

BANK1 ;BANCO 1

BSF EECON1,RD ;PREPARA LEITURA

MOVF EEDATA,W ;COLOCA DADO EM W

BANK0

RETURN ;RETORNA

Page 131: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

131

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* ROTINA DE ESCRITA NA E2PROM *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; ESTA ROTINA ESCREVE O DADO PASSSADO EM W NO ENDEREÇO ACERTADO

; ANTERIORMENTE EM EEADR

ESCR_E2PROM

BANK1 ;BANCO 1

MOVWF EEDATA ;ACERTA DADO PASSADO EM W

BCF INTCON,GIE ;DESABILITA INTERRUPÇÕES

BSF EECON1,WREN ;HABILITA ESCRITA

MOVLW 0X55 ;INICIALIZAÇÃO DA ESCRITA

MOVWF EECON2

MOVLW 0XAA

MOVWF EECON2

BSF EECON1,WR ;INICIA ESCRITA

BCF EECON1,WREN

BTFSC EECON1,WR ;ACABOU ESCRITA?

GOTO $-1 ;NÃO, AGUARDA

BANK0 ;SIM, BANCO 0

BSF INTCON,GIE ;HABILITA INTERRUPÇÕES

RETURN ;RETORNA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* ROTINA DE LEITURA DO VALOR DO CONTADOR *

;* * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * *

; ESTA ROTINA LÊ O VALOR DA MEMÓRIA E COLOCA O RESULTADO NA

; VARIÁVEL "CONTADOR".

LE_CONTA

MOVLW POS_MEM

BANK1

MOVWF EEADR ;ACERTA O ENDEREÇO PARA LEITURA

CALL LE_E2PROM ;EFETUA A LEITURA DA EEPROM

MOVWF CONTADOR ;ATUALIZA O CONTADOR

RETURN ;RETORNA

Page 132: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

132

;* * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* ROTINA DE ESCRITA DO VALOR DO CONTADOR *

;* * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; ESTA ROTINA ESCREVE O VALOR ATUAL DE CONTADOR NA MEMÓRIA EEPROM

ESCR_CONTA

MOVLW POS_MEM

BANK1

MOVWF EEADR ;ACERTA O ENDEREÇO PARA LEITURA

BANK0

MOVF CONTADOR,W ;COLOCA CONTADOR EM W

CALL ESCR_E2PROM ;EFETUA A ESCRITA EEPROM

RETURN ;RETORNA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* INICIO DO PROGRAMA *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

INICIO

BANK1 ;ALTERA PARA O BANCO 1

MOVLW B'00000110'

MOVWF TRISA ;DEFINE RA1 E 2 COMO ENTRADA E DEMAIS

;COMO SAÍDAS

MOVLW B'00000000'

MOVWF TRISB ;DEFINE TODO O PORTB COMO SAÍDA

MOVLW B'10000000'

MOVWF OPTION_REG ;PRESCALER 1:2 NO TMR0

;PULL-UPS DESABILITADOS

;AS DEMAIS CONFG. SÃO IRRELEVANTES

MOVLW B'00000000'

MOVWF INTCON ;TODAS AS INTERRUPÇÕES DESLIGADAS

BANK0 ;RETORNA PARA O BANCO 0

MOVLW B'00000111'

MOVWF CMCON ;DEFINE O MODO DE OPERAÇÃO

;DO COMPARADOR ANALÓGICO

Page 133: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

133

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* INICIALIZAÇÃO DAS VARIÁVEIS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

CLRF PORTA ;LIMPA O PORTA

CLRF PORTB ;LIMPA O PORTB

CLRF FLAGS ;LIMPA TODOS OS FLAGS

CALL LE_CONTA ;INICIALIZA CONTADOR COM VALOR

;DA EEPROM

GOTO ATUALIZA ;ATUALIZA O DISPLAY INICIALMENTE

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* ROTINA PRINCIPAL *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

MAIN

MOVLW T_FILTRO

MOVWF FILTRO1 ;INICIALIZA FILTRO1 = T_FILTRO

MOVWF FILTRO2 ;INICIALIZA FILTRO2 = T_FILTRO

CHECA_BT1

BTFSC BOTAO1 ;O BOTÃO 1 ESTÁ PRESSIONADO?

GOTO BT1_LIB ;NÃO, ENTÃO TRATA COMO LIBERADO

;SIM

DECFSZ FILTRO1,F ;DECREMENTA O FILTRO DO BOTÃO

;TERMINOU?

GOTO CHECA_BT1 ;NÃO, CONTINUA ESPERANDO

;SIM

BTFSS ST_BT1 ;BOTÃO JÁ ESTAVA PRESSIONADO?

GOTO DEC ;NÃO, EXECUTA AÇÃO DO BOTÃO

GOTO CHECA_BT2 ;SIM, CHECA BOTÃO 2

BT1_LIB

BCF ST_BT1 ;MARCA BOTÃO 1 COMO LIBERADO

CHECA_BT2

BTFSC BOTAO2 ;O BOTÃO 2 ESTÁ PRESSIONADO?

GOTO BT2_LIB ;NÃO, ENTÃO TRATA COMO LIBERADO

;SIM

Page 134: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

134

DECFSZ FILTRO2,F ;DECREMENTA O FILTRO DO BOTÃO

;TERMINOU?

GOTO CHECA_BT2 ;NÃO, CONTINUA ESPERANDO

;SIM

BTFSS ST_BT2 ;BOTÃO JÁ ESTAVA PRESSIONADO?

GOTO INC ;NÃO, EXECUTA AÇÃO DO BOTÃO

GOTO MAIN ;SIM, VOLTA AO LOOPING

BT2_LIB

BCF ST_BT2 ;MARCA BOTÃO 2 COMO LIBERADO

GOTO MAIN ;RETORNA AO LOOPING

DEC ;AÇÃO DE DECREMENTAR

BSF ST_BT1 ;MARCA BOTÃO 1 COMO JÁ PRESSIONADO

MOVF CONTADOR,W ;COLOCA CONTADOR EM W

XORLW MIN ;APLICA XOR ENTRE CONTADOR E MIN

;PARA TESTAR IGUALDADE. SE FOREM

;IGUAIS, O RESULTADO SERÁ ZERO

BTFSC STATUS,Z ;RESULTOU EM ZERO?

GOTO MAIN ;SIM, RETORNA SEM AFETAR CONT.

;NÃO

DECF CONTADOR,F ;DECREMENTA O CONTADOR

CALL ESCR_CONTA ;ATUALIZA O VALOR DE CONTADOR NA

;EEPROM

GOTO ATUALIZA ;ATUALIZA O DISPLAY

INC ;AÇÃO DE INCREMENTAR

BSF ST_BT2 ;MARCA BOTÃO 2 COMO JÁ PRESSIONADO

MOVF CONTADOR,W ;COLOCA CONTADOR EM W

XORLW MAX ;APLICA XOR ENTRE CONTADOR E MAX

;PARA TESTAR IGUALDADE. SE FOREM

;IGUAIS, O RESULTADO SERÁ ZERO

BTFSC STATUS,Z ;RESULTOU EM ZERO?

GOTO MAIN ;SIM, RETORNA SEM AFETAR CONT.

;NÃO

INCF CONTADOR,F ;INCREMENTA O CONTADOR

CALL ESCR_CONTA ;ATUALIZA O VALOR DE CONTADOR NA

;EEPROM

Page 135: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

135

ATUALIZA ;ATUALIZAÇÃO DO DISPLAY

CALL CONVERTE ;CONVERTE CONTADOR NO NÚMERO DO

;DISPLAY

MOVWF PORTB ;ATUALIZA O PORTB PARA

;VISUALIZARMOS O VALOR DE CONTADOR

;NO DISPLAY

GOTO MAIN ;NÃO, VOLTA AO LOOP PRINCIPAL

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* FIM DO PROGRAMA *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

END ;OBRIGATÓRIO

Page 136: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

136

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* DIMMER * ;* KIT PIC 16F628 * ;* DATA: 11/06/XX * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* DESCRIÇÃO DO ARQUIVO * ;*-----------------------------------------------------------------* ;* CONTADOR QUE UTILIZA DOIS BOTÕES PARA INCREMENTAR E DECRE- * ;* MENTAR O VALOR CONTROLADO PELA VARIÁVEL "CONTADOR". ESTA * ;* VARIÁVEL ESTÁ LIMITADA PELAS CONSTANTES "MIN" E "MAX". * ;* O VALOR DO CONTADOR É MOSTRADO NO DISPLAY. * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* ARQUIVOS DE DEFINIÇÕES *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

#INCLUDE <P16F628.INC> ;ARQUIVO PADRÃO MICROCHIP PARA 16F628

__CONFIG _BODEN_ON & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* PAGINAÇÃO DE MEMÓRIA *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;DEFINIÇÃO DE COMANDOS DE USUÁRIO PARA ALTERAÇÃO DA PÁGINA DE MEMÓRIA

#DEFINE BANK0 BCF STATUS,RP0 ;SETA BANK 0 DE MEMÓRIA

#DEFINE BANK1 BSF STATUS,RP0 ;SETA BANK 1 DE MAMÓRIA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* VARIÁVEIS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DOS NOMES E ENDEREÇOS DE TODAS AS VARIÁVEIS UTILIZADAS

; PELO SISTEMA

CBLOCK 0x20 ;ENDEREÇO INICIAL DA MEMÓRIA DE USUÁRIO

W_TEMP ;REGISTRADORES TEMPORÁRIOS PARA

STATUS_TEMP ;INTERRUPÇÕES

Page 137: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

137

INTENSIDADE ;ARMAZENA O VALOR DA CONTAGEM

FLAGS ;ARMAZENA OS FLAGS DE CONTROLE

FILTRO11 ;FILTRAGEM 1 PARA O BOTÃO 1

FILTRO12 ;FILTRAGEM 2 PARA O BOTÃO 1

FILTRO21 ;FILTRAGEM 1 PARA O BOTÃO 2

FILTRO22 ;FILTRAGEM 2 PARA O BOTÃO 2

TEMPO ;INTERVALOS DE 1 MS

ENDC ;FIM DO BLOCO DE MEMÓRIA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* FLAGS INTERNOS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DE TODOS OS FLAGS UTILIZADOS PELO SISTEMA

#DEFINE ST_BT1 FLAGS,0 ;STATUS DO BOTÃO 1

#DEFINE ST_BT2 FLAGS,1 ;STATUS DO BOTÃO 2

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* CONSTANTES *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DE TODAS AS CONSTANTES UTILIZADAS PELO SISTEMA

MIN EQU .0 ;VALOR MÍNIMO PARA O INTENSIDADE

MAX EQU .15 ;VALOR MÁXIMO PARA O INTENSIDADE

T_FILTRO EQU .20 ;FILTRO PARA BOTÃO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* ENTRADAS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DE TODOS OS PINOS QUE SERÃO UTILIZADOS COMO ENTRADA

; RECOMENDAMOS TAMBÉM COMENTAR O SIGNIFICADO DE SEUS ESTADOS (0 E 1)

#DEFINE BOTAO1 PORTA,1 ;PORTA DO BOTÃO

; 0 -> PRESSIONADO

; 1 -> LIBERADO

#DEFINE BOTAO2 PORTA,2 ;PORTA DO BOTÃO

; 0 -> PRESSIONADO

; 1 -> LIBERADO

Page 138: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

138

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* SAÍDAS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DE TODOS OS PINOS QUE SERÃO UTILIZADOS COMO SAÍDA

; RECOMENDAMOS TAMBÉM COMENTAR O SIGNIFICADO DE SEUS ESTADOS (0 E 1)

#DEFINE LAMPADA PORTA,0 ;DEFINE LAMPADA NO PINO17

;0 LAMP. APAGADA

;1 LAMP. ACESA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* VETOR DE RESET *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

ORG 0x00 ;ENDEREÇO INICIAL DE PROCESSAMENTO

GOTO INICIO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* INÍCIO DA INTERRUPÇÃO *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; AS INTERRUPÇÕES NÃO SERÃO UTILIZADAS, POR ISSO PODEMOS SUBSTITUIR

; TODO O SISTEMA EXISTENTE NO ARQUIVO MODELO PELO APRESENTADO ABAIXO

; ESTE SISTEMA NÃO É OBRIGATÓRIO, MAS PODE EVITAR PROBLEMAS FUTUROS

ORG 0x04 ;ENDEREÇO INICIAL DA INTERRUPÇÃO

MOVWF W_TEMP ;SALVA W EM W_TEMP

SWAPF STATUS,W

MOVWF STATUS_TEMP ;SALVA STATUS EM STATUS_TEMP

BTFSS INTCON,T0IF ;É INTERRUPÇÃO DE TMR0?

GOTO SAI_INT ;NÃO, SAI SE AÇÃO SE SIM

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* TRATAMENTO DA INTERRUPÇÃO DE TMR0 *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; ESTA ROTINA IRÁ CONTAR O TEMPO, E QUANDO PASSAR 1 SEGUNDO, A VARI-

; ÁVEL "TEMPO" SERÁ DECREMENTADA.

; 1 SEGUNDO = 64us (PRESCALER) X 125 (TMR0) X 125 (TEMP1)

Page 139: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

139

BCF INTCON,T0IF ;LIMPA FLAG DA INT.

MOVLW .256-.250 ;SETA TIMER P250MS

MOVWF TMR0 ;REINICIA TMR0

INCF TEMPO,F ;INCREMENTA TEMPO

MOVLW .16 ;COLOCA 16 EM WORK

XORWF TEMPO,W ;COMPARA TEMPO COM 16

BTFSC STATUS,Z ;TESTA BIT Z DO REG. STATUS

CLRF TEMPO ;ZERA TEMPO

MOVLW .15 ;COLOCA 15 EM W

XORWF INTENSIDADE,W ;COMPARA INTENSIDADE COM 15

BTFSC STATUS,Z ;TESTA BIT Z DO REG. STATUS

GOTO LIGA_LAMPADA

MOVF INTENSIDADE,W ;MOVE INTENSIDADE PARA W

SUBWF TEMPO,W ;SUBTRAI TEMPO DE INTENSIDADE

BTFSS STATUS,C ;TESTA BIC C DO REG. STATUS

;VERIFICA TEMPO MENOR QUE INTENSIDADE

GOTO LIGA_LAMPADA

BCF LAMPADA ;DESLIGA LAMPADA

GOTO SAI_INT

LIGA_LAMPADA

BSF LAMPADA ;LIGA LAMPADA

GOTO SAI_INT ;SAI DA INTERRUPÇÃO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* FIM DA INTERRUPÇÃO *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

SAI_INT

SWAPF STATUS_TEMP,W

MOVWF STATUS ;RECUPERA STATUS

SWAPF W_TEMP,F

SWAPF W_TEMP,W ;RECUPERA W

RETFIE ;RETORNA DA INTERRUPÇÃO

Page 140: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

140

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* ROTINA DE CONVERSÃO BINÁRIO -> DISPLAY *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; ESTA ROTINA IRÁ RETORNAR EM W, O SIMBOLO CORRETO QUE DEVE SER

; MOSTRADO NO DISPLAY PARA CADA VALOR DE INTENSIDADE. O RETORNO JÁ ESTÁ

; FORMATADO PARA AS CONDIÇÕES DE LIGAÇÃO DO DISPLAY AO PORTB.

CONVERTE

MOVF INTENSIDADE,W ;COLOCA INTENSIDADE EM W

ANDLW B'00001111' ;MASCARA VALOR DE INTENSIDADE

;CONSIDERAR SOMENTE ATÉ 15

ADDWF PCL,F

; B'GFABCDE.' ; POSIÇÃO CORRETA DOS SEGUIMENTOS

RETLW B'01111110' ; 00 - RETORNA SÍMBOLO CORRETO 0

RETLW B'00011000' ; 01 - RETORNA SÍMBOLO CORRETO 1

RETLW B'10110110' ; 02 - RETORNA SÍMBOLO CORRETO 2

RETLW B'10111100' ; 03 - RETORNA SÍMBOLO CORRETO 3

RETLW B'11011000' ; 04 - RETORNA SÍMBOLO CORRETO 4

RETLW B'11101100' ; 05 - RETORNA SÍMBOLO CORRETO 5

RETLW B'11101110' ; 06 - RETORNA SÍMBOLO CORRETO 6

RETLW B'00111000' ; 07 - RETORNA SÍMBOLO CORRETO 7

RETLW B'11111110' ; 08 - RETORNA SÍMBOLO CORRETO 8

RETLW B'11111100' ; 09 - RETORNA SÍMBOLO CORRETO 9

RETLW B'11111010' ; 10 - RETORNA SÍMBOLO CORRETO A

RETLW B'11001110' ; 11 - RETORNA SÍMBOLO CORRETO b

RETLW B'01100110' ; 12 - RETORNA SÍMBOLO CORRETO C

RETLW B'10011110' ; 13 - RETORNA SÍMBOLO CORRETO d

RETLW B'11100110' ; 14 - RETORNA SÍMBOLO CORRETO E

RETLW B'11100010' ; 15 - RETORNA SÍMBOLO CORRETO F

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* INICIO DO PROGRAMA *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

INICIO

BANK0 ;ALTERA PARA O BANCO 0

MOVLW B'00000111'

MOVWF CMCON ;DEFINE O MODO DE OPERAÇÃO DO

;COMPARADOR ANALÓGICO

Page 141: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

141

BANK1 ;ALTERA PARA O BANCO 1

MOVLW B'00000110'

MOVWF TRISA ;DEFINE RA1 E 2 COMO ENTRADA E DEMAIS

;COMO SAÍDAS

MOVLW B'00000000'

MOVWF TRISB ;DEFINE TODO O PORTB COMO SAÍDA

MOVLW B'10000001'

MOVWF OPTION_REG ;PRESCALER 1:4 NO TMR0

;PULL-UPS DESABILITADOS

;AS DEMAIS CONFG. SÃO IRRELEVANTES

MOVLW B'10100000'

MOVWF INTCON ;CHAVE GERAL E TMR0 ATIVADAS

BANK0 ;RETORNA PARA O BANCO 0

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* INICIALIZAÇÃO DAS VARIÁVEIS *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

CLRF PORTA ;LIMPA O PORTA

CLRF PORTB ;LIMPA O PORTB

CLRF FLAGS ;LIMPA TODOS OS FLAGS

MOVLW MIN

MOVWF INTENSIDADE ;INICIA INTENSIDADE = MIN

MOVLW .256-.250 ;SETA TIMER P250MS

MOVWF TMR0 ;REINICIA TMR0

GOTO ATUALIZA ;ATUALIZA O DISPLAY INICIALMENTE

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* ROTINA PRINCIPAL *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

MAIN

CLRF FILTRO11

CLRF FILTRO21

MOVLW T_FILTRO

MOVWF FILTRO12 ;INICIALIZA FILTRO1 = T_FILTRO

MOVWF FILTRO22 ;INICIALIZA FILTRO2 = T_FILTRO

Page 142: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

142

CHECA_BT1

BTFSC BOTAO1 ;O BOTÃO 1 ESTÁ PRESSIONADO?

GOTO BT1_LIB ;NÃO, ENTÃO TRATA COMO LIBERADO

;SIM

DECFSZ FILTRO11,F ;DECREMENTA O FILTRO DO BOTÃO

;TERMINOU?

GOTO CHECA_BT1 ;NÃO, CONTINUA ESPERANDO

;SIM

DECFSZ FILTRO12,F ;DECREMENTA O FILTRO DO BOTÃO

;TERMINOU?

GOTO CHECA_BT1 ;NÃO, CONTINUA ESPERANDO

;SIM

BTFSS ST_BT1 ;BOTÃO JÁ ESTAVA PRESSIONADO?

GOTO DEC ;NÃO, EXECUTA AÇÃO DO BOTÃO

GOTO CHECA_BT2 ;SIM, CHECA BOTÃO 2

BT1_LIB

BCF ST_BT1 ;MARCA BOTÃO 1 COMO LIBERADO

CHECA_BT2

BTFSC BOTAO2 ;O BOTÃO 2 ESTÁ PRESSIONADO?

GOTO BT2_LIB ;NÃO, ENTÃO TRATA COMO LIBERADO

;SIM

DECFSZ FILTRO21,F ;DECREMENTA O FILTRO DO BOTÃO

;TERMINOU?

GOTO CHECA_BT2 ;NÃO, CONTINUA ESPERANDO

;SIM

DECFSZ FILTRO22,F ;DECREMENTA O FILTRO DO BOTÃO

;TERMINOU?

GOTO CHECA_BT2 ;NÃO, CONTINUA ESPERANDO

;SIM

BTFSS ST_BT2 ;BOTÃO JÁ ESTAVA PRESSIONADO?

GOTO INC ;NÃO, EXECUTA AÇÃO DO BOTÃO

GOTO MAIN ;SIM, VOLTA AO LOOPING

BT2_LIB

BCF ST_BT2 ;MARCA BOTÃO 2 COMO

LIBERADO

GOTO MAIN ;RETORNA AO LOOPING

Page 143: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

143

DEC ;AÇÃO DE DECREMENTAR

BSF ST_BT1 ;MARCA BOTÃO 1 COMO JÁ PRESSIONADO

MOVF INTENSIDADE,W ;COLOCA INTENSIDADE EM W

XORLW MIN ;APLICA XOR ENTRE INTENSIDADE E MIN

;PARA TESTAR IGUALDADE. SE FOREM

;IGUAIS, O RESULTADO SERÁ ZERO

BTFSC STATUS,Z ;RESULTOU EM ZERO?

GOTO MAIN ;SIM, RETORNA SEM AFETAR CONT.

;NÃO

DECF INTENSIDADE,F ;DECREMENTA O INTENSIDADE

GOTO ATUALIZA ;ATUALIZA O DISPLAY

INC ;AÇÃO DE INCREMENTAR

BSF ST_BT2 ;MARCA BOTÃO 2 COMO JÁ PRESSIONADO

MOVF INTENSIDADE,W ;COLOCA INTENSIDADE EM W

XORLW MAX ;APLICA XOR ENTRE INTENSIDADE E MAX

;PARA TESTAR IGUALDADE. SE FOREM

;IGUAIS, O RESULTADO SERÁ ZERO

BTFSC STATUS,Z ;RESULTOU EM ZERO?

GOTO MAIN ;SIM, RETORNA SEM AFETAR CONT.

;NÃO

INCF INTENSIDADE,F ;INCREMENTA O INTENSIDADE

GOTO ATUALIZA ;ATUALIZA O DISPLAY

ATUALIZA

CALL CONVERTE ;CONVERTE INTENSIDADE NO NÚMERO DO

;DISPLAY

MOVWF PORTB ;ATUALIZA O PORTB PARA

;VISUALIZARMOS O VALOR DE INTENSIDADE

;NO DISPLAY

GOTO MAIN ;NÃO, VOLTA AO LOOP PRINCIPAL

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* FIM DO PROGRAMA *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

END ;OBRIGATÓRIO

Page 144: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

Esquema elétrico

LigDesl

LigDesl

D21LED12

D20LED14D19

LED13

D18

LED11

+

C3

22uF

+

C2100uF

D17

5V1

D168V2

D14

J4

J5

D13

+V15V

D15

LED10

Q7

+V15V

J3

J2

Q6

Q1

Q2 Q5 Q4Q3

D12

D11

12345

6789

J1

IN

COM

OUT

U6

VE

Con. VE

+V5V

D10 LED9

+

C1

D9

S1S3S4 S2

S5

LED4

LED3

LED2

LED1

LED6

LED5

LED7

LED8

XTAL

abcdefg.

Gnd

DISP1

abcdefg.

Gnd

DISP2

abcdefg.

Gnd

DISP3

abcdefg.

Gnd

DISP4

VCCVDD

RB0RB1RB2RB3RB4RB5RB6RB7RA0

RA1RA2RA3RA4

RA5RA6RA7

U7

16F628

RA2RA3RA4MCLRVSSRB0RB1RB2RB3 RB4

RB5RB6RB7VDD

OSC2OSC1RA0RA1

R1

R2R3

R4

R5R6

R7

R8

R31R30

R29

2K2

R28

L1

R27R26

R25R24R23R22

R21R20

R19

R18

R17

R9

R16 R15

R14

R13

R12

R11

R10

Page 145: Apostila PIC 16F628 (Prof. Wagner de Aguiar - IfSP)

Lista básica de materiais necessários à montagem do Kit de microcontrolador PIC – Modelo WM002

1 – Microcontrolador PIC16F628 1 – Conector DB9 fêmea 90° para circuito impresso (necessário) 4 – Displays de sete segmentos catodo comum (400 X 600 Mils) 1 – Soquetes de 18 pinos torneados para CI 1 – Barra com 80 pinos torneados para CI 5 – Teclas para circuito impresso (tipo TACT) (confirmar tamanho) Média 1 – Diodo Zener 8V2 ½ W – D4 1 – Diodo Zener 5V1 ½ W – D3 4 – Diodo 1N4148 – D1, D2, D5, D6 7 – Transistor BC548 – Q1, Q2, Q3, Q5, Q7 2 – Transistores PNP uso geral BC557 – Q4, Q6 9 – Resistores de 470 ohms, 1/8 W ou mais. – R1, até R8, R27 10 – resistores de 2K2 ohms – R13, R14, R15, R16, R26, R29, R30, R31,R32,R33 8 – resistores de 330 ohms – R18, R19, R20, R21, R22, R23, R24, R25 2 – Resistores de 10 K ohms – R17 e R2 WM003 1 – Resistor de 10 ohms – R28 1 – Resistor de 1K ohms – R9 1 – Resistor de 1K5 ohms – R1 WM003 1 – Regulador de tensão LM 7805 (5V 1A) 1 – Cabo de comunicação serial 1 – Ressonador cerâmico de 4MHz 1 – Capacitor de 1000 µF 25V, eletrolítico radial. – C1 1 – Capacitor de 100 µF 25V, eletrolítico radial. – C2 WM003 1 – Capacitor de 22 µF 25V, eletrolítico radial. – C1 WM003 1 – Ponte retificadora de 0,5 A 30 V redonda. 1 – Chave 1 pólo 2 posições para circuito impresso (ver amostra) 14 – Leds Ø 3 mm (5 – verde, 2 – amarelo, 2 – verde e 5- outra cor) 2 – Conectores fêmea RJ11 com 6 vias para placa de circuito impresso 2 – Conectores RJ11 com 6 vias 0,5m – Cabo para RJ11 com 6 vias 6 – Jumper fêmea de 2,54 mm 1 – Conector para ligar a alimentação 1 – Fonte de 9,0 VCC 0,3A ou somente o trafo com cabo de ligação Barra de pinos com espaçamento de 2,54 mm (30 pinos) 1 – Soquete tipo rosca para lâmpada de 12vcc 1 – Lâmpada de 12V com rosca