Você está na página 1de 148

CAPTULO 1

Blocos funcionais do microcomputador

Introduo O microcomputador Blocos Funcionais

1 BREVE HISTORIA DOS MICROCOMPUTADORES

1.1 - Introduo
Os avanos tecnolgicos conseguidos na fabricao de semicondutores permitiram o surgimento dos microprocessadores. Com isso, foi possvel que os computadores se tornassem cada vez mais compactos e seus custos mais acessveis, permitindo uma ampliao nas possibilidades de suas utilizaes. Onde no se imaginava utilizar sistemas computadorizados h poucos anos atrs, hoje j se faz um amplo uso do computador. Como a indstria tem como principal objetivo, um aumento na qualidade de seus produtos e aumentar a quantidade de produtos fabricados no mesmo tempo, indispensvel que os profissionais do ramo eletrnico tenham um bom conhecimento sobre seu funcionamento. A seguir so apresentados alguns eventos cronologicamente, que podem ser considerados como relevantes para a histria do atual microcomputador. Foram estas idias iniciais que levaram a tecnologia ao que ela hoje. 1642 Com 19 anos de idade Pascal inventa a primeira calculadora automtica (inteiramente mecnica) para ajudar o pai que era cobrador de impostos. 1820 Charles Babbage inventa a Difference Engine para uso na navegao naval, apenas somava e subtraa. 1834 Charles Babbage tenta criar a Analytical Engine, o primeiro computador digital programvel totalmente mecnico. Gasta 17000 libras do governo britnico e toda a sua fortuna pessoal no projeto. No entanto, problemas de natureza mecnica nunca permitiram que a mquina funcionasse com xito. 1936 Surge o primeiro computador a rels projetado por um estudante de engenharia alemo, nunca chegou a ser usado, pois foi destrudo durante um bombardeio de Berlim pelos aliados. 1943 Colossus: Primeiro computador eletrnico encomendado pelo governo britnico para decifrar comunicaes dos submarinos alemes, cifradas com outra mquina chamada Enigma. Possua dimenses gigantescas, cerca de 1.500 vlvulas e era capaz de processar cerca de 5.000 caracteres por segundo. 1944 Mark I: Primeiro computador americano de uso genrico produzido como o apoio da IBM (International Business Machines), projetado em Harvard. Armazenava 72 words de 23 dgitos e tinha um tempo de instruo de 6s. Media dezoito metros de comprimento, por dois metros e meio de altura. 1946 ENIAC (Electronic Numerical Integrator and Calculator): Primeiro computador a se tornar amplamente conhecido. Construdo com 18 mil vlvulas, consumia 178kW de energia e ocupava uma rea de 167m2 na Universidade da Pennsylvania (EUA). Sua construo demorou trs anos e custou US$ 500.000,00. Em vez da lgica binria, ele trabalhava com nmeros decimais. Incapaz de armazenar programas em memria exigia que um programador conectasse um grande nmero de cabos que definia os cdigos a serem processados. Hoje seu poder de processamento caberia num quadrado de silcio com menos de 0,5mm de lado. Foi construdo para clculo de ngulos de artilharia, mas s ficou pronto depois da guerra. 1949 EDSAC (Electronic Delay Storage Automatic Computer): Primeiro computador que armazenava programas em memria. 1951 WHIRLWIND I: Primeiro computador de tempo real desenvolvido no MIT (Massachusetts Institute of Technology). 1951 UNIVAC (Universal Automated Computer): Primeiro computador comercialmente 2

vendido. 1952 IAS: O matemtico Von Neumann cria a arquitetura que ainda hoje utilizada na maioria dos computadores. 1962 7094: Mquina criada pela IBM que dominou o mercado cientfico no incio dos anos 60. 1964 A IBM cria a famlia 360, a primeira famlia de produtos de informtica. 1971 A Intel lana o 4004, primeiro processador programvel de 4 bits em um nico chip. A rpida evoluo na tecnologia dos microprocessadores se deve principalmente capacidade de se integrar cada vez mais transistores em uma nica pastilha. Foi ento criada uma terminologia para identificar a escala de integrao dos componentes. Os primeiros chips de semicondutores possuam um transistor cada, avanos subseqentes adicionaram mais e mais transistores a esses chips, e como conseqncia mais funes individuais ou sistemas eram integrados ao mesmo ao longo do tempo. As terminologias utilizadas so: SSI (Small Scale of Integration) Dezenas de transistores por chip. MSI (Medium Scale of Integration) Centenas de transistores por chip. LSI (Large Scale of Integration) Dezenas de milhares de transistores por chip. VLSI (Very Large Scale of Integration) Centenas de milhares de transistores por chip. ULSI (Ultra Large Scale of Integration) Milhes de Transistores por chip. Tabela 1.1 Tamanho dos transistores, quantidade e freqncia de trabalho (maior) dos microprocessadores da Intel ao longo dos anos, mostrando a velocidade da evoluo tecnolgica da microeletrnica. Ano 1971 1972 1974 1978 1979 1982 1985 1989 1993 1995 1997 1999 2000 2002 2005 2006 2007 2008 Processador 4004 8008 8080 8086 8088 286 386 486 Pentium Pentium Pro Pentium II Pentium III Pentium 4 Pentium M Pentium D Core2 Duo Quad Core 2 Core i7 Comprimento de canal do transistor (L) 10m 10m 6m 3m 3m 1,5m 1,5m 1m 0,8m 0,6m 0,25m 0,18m 0,18m 90 nm 65 nm 65 nm 45 nm 45 nm Nmero de Transistores 2.300 3.500 4.500 29.000 29.000 134.000 275.000 1.200.000 3.100.000 5.500.000 7.500.000 9.500.000 42.000.000 55.000.000 291.000.000 291.000.000 820.000.000 781.000.000 Freqncia Inicial de Operao 108 kHz 500 - 800 kHz 2 MHz 5 MHz 5 MHz 6 MHz 16 MHz 25 MHz 66 MHz 200 MHz 300 MHz 500 MHz 1,5 GHz 1,7 GHz 3,2 GHz 2,93 GHz > 3GHz 2,66 GHz

1.2 - O microcomputador
um equipamento cuja funo executar automaticamente uma seqncia de operaes para as quais foi anteriormente programado. Os microcomputadores so equipamentos capazes de executarem diferentes tarefas para atender s vrias necessidades do usurio, os quais podem ter finalidades gerais. Quando utilizamos em aplicaes gerais como os microcomputadores comercializados, definimos como sendo os de finalidades gerais. Para poderem atender uma aplicao determinada, so projetados os de finalidades especficas. Os dados nos computadores so armazenados e expressos em linguagem binria que utiliza os dgitos 0 e 1. Essas condies so obtidas por meio de flip-flop, que so dispositivos de armazenamento nos sistemas de computadores. O bit pode ser definido como uma unidade bsica de representao de dados em qualquer sistema de computador. Os computadores processam dados com extenso de 8 bits ou um de seus mltiplos, 16, 32, 64. Determinados nmeros de bits so 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 instruo. O que torna imprescindvel citarmos as definies de: Hardware: Consiste de circuitos eletrnicos responsveis pela execuo direta de instrues em linguagem de mquina: C. Is, placas de circuitos impressos, cabos, fontes de alimentao etc. Software: O grupo ou conjunto de instrues apresentadas ao computador chama-se programa, o qual consiste de algoritmos, que o processo pelo qual as operaes lgicas so executadas pela mquina. Firmware: Consiste de um software embutido em circuitos eletrnicos. comum dizer que qualquer operao feita por software pode tambm ser construda por hardware e qualquer instruo executada pelo hardware pode tambm ser simulada por software.

1.3 - Arquitetura e Organizao de Computadores


Ao se trabalhar com sistemas computadorizados, comum a utilizao dos termos arquitetura e organizao. A arquitetura de um computador refere-se aos atributos de um sistema que so visveis para o programador. Exemplos de atributos associados arquitetura de um computador: Conjunto de instrues. Como feita a representao de dados (nmeros, caracteres). Mecanismos de entrada e sada. Formas de endereamento da memria. Registradores (nmero e tipos). J a organizao de um computador, refere-se s suas unidades operacionais e suas interconexes que realizam as especificaes dadas pela arquitetura. Exemplos de atributos associados organizao de um computador: Conjuntos de sinais de controle. Interfaces entre o computador e seus perifricos. 4

Tecnologia da memria utilizada. Um exemplo que mostra a diferena de arquitetura e organizao claramente visto quando se coloca em pauta as seguintes questes: Vale a pena ter uma instruo no meu computador que faa multiplicao? (Este assunto est diretamente relacionado arquitetura da mquina). Como vou realizar a multiplicao: vrios passos, pipeline...? (Este assunto est diretamente relacionado organizao da mquina).

1.4 - Blocos funcionais


Qualquer sistema de microcomputador formado basicamente pelos seguintes blocos funcionais: - unidade de memria - unidade central de processamento (UCP) - unidade de entrada / sada - dispositivo de interface - DMA Abaixo um diagrama da estrutura geral de um microcomputador.
CPU

INTERFACE

MEMRIA

DMA

DISPOSITIVO DE I/0

Figura 1 Sistema de Microcomputador tpico e suas interfaces Os blocos funcionais representados no diagrama acima so construdos com circuitos integrados (C. Is). Os circuitos integrados so componentes que possuem um elevado nvel de integrao de componentes em uma nica pastilha, esse processo denominado de LSI Large Scale Integration, ou seja Integrao em larga escala. O conjunto de C.Is. que forma os blocos funcionais de um computador tambm 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: memrias, portas de I/O (entrada/sada) e outros circuitos. Os microprocessadores utilizam sistemas seqenciais sncronos, ou seja, utilizando um CLOCK. A cada pulso de clock ou grupo de pulsos (pode ser de 3 em 3, por exemplo) executamse uma funo especfica. 5

Hoje temos microprocessadores rodando com clock de 3GHz da INTEL, que pode executar centenas de milhes de instrues por segundo. Um microprocessador pode ser divido segundo seus blocos funcionais: * * * registradores e contadores; unidade lgica e aritmtica; unidade de controle e sincronizao.

Os registradores e contadores so utilizados para o armazenamento temporrio dos bits dentro do microprocessador. Este tipo de tarefa executado pelo registrador e decodificador de instruo, pelo contador de programa e pelo acumulador. A Unidade Lgica Aritmtica (ULA) responsvel pelas operaes lgicas e aritmticas entre os bits, gerando uma outra palavra como sada. Estas operaes so executadas entre o acumulador e o registrador temporrio do microprocessador com os quais a ULA se comunica internamente e o resultado armazenado no prprio acumulador. A unidade de controle e sincronizao coordena e controla todas os blocos funcionais do computador em uma seqncia lgica e sincronizada. Ela recebe as instrues vindas do programa armazenado na memria de programa j decodificado pelo decodificador de instrues e emite os sinais de sincronizao e controle para as diversas partes do computador. Unidade de Memria A unidade de memria parte do sistema na qual so armazenados os dados e os programas que podem ser executados pelo computador. A unidade de memria possui dois tipos de memria: * * Memria de Leitura (ROM - Read Only Memory); Memria de Acesso Aleatrio (RAM - Randomic Acess Memory).

Na ROM, correspondente parte de unidade de memria que armazena as instrues que constituem o programa monitor. A memria RAM parte da memria responsvel pelo armazenamento dos dados que sero usados durante a execuo do programa. Para que seja possvel localizar uma entre muitos dados armazenados na memria necessrio que as posies destes dados sejam numeradas. Essas posies so chamadas de endereos. No prximo capitulo vamos estudar os diversos tipos e principais caractersticas das memrias. Unidade de I/O As unidades de I/O so as interfaces pelos quais o usurio comunica-se com o computador e vice-versa. As unidades de I/O possuem conexo com dispositivos chamados unidades perifricas, tais como: teclados, terminais de vdeo, impressoras, etc. Interface A interface um dispositivo que auxilia na transferncia de informaes entre a Unidade Central de Processamento e dispositivos perifricos. Ela usada principalmente em sistemas que possuem somente uma CPU e vrios dispositivos perifricos. DMA DMA ou Direct Memory Acess (Acesso Direto Memria) o processo de comunicao direta entre dispositivos perifricos e memria. Este processo se deve ao fato da necessidade de se aumentar velocidade de transferncia de dados. 6

1.4 Exerccios 1 Qual o principal objetivo da aplicao do microcontrolador na industria ? __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 2 Qual a funo do microcomputador e qual sua finalidade ? __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 3 Defina: a Hardware __________________________________________________________________ __________________________________________________________________ b Software __________________________________________________________________ __________________________________________________________________ c firmware __________________________________________________________________ __________________________________________________________________ 4 Quais os blocos bsicos que compe o microcomputador ? Defina-os. __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________

Anotaes:
__________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________
8

CAPTULO 2

Memria

RAM ROM

2 MEMRIA
Memria parte do sistema onde so armazenados os programas e dados necessrios realizao das operaes efetuadas pelo computador. A memria equivalente a milhares de registradores, cada um armazenando uma palavra binria. Os microcomputadores de 8 bits utilizam memrias de semicondutores com at 65536 posies, cada uma capaz de armazenar um byte de informao. Alm das memrias de semicondutores, outros dispositivos mais comuns tambm podem ser citados: Carto de papel perfurado, fita magntica, disco magntico, tambor magntico, ncleo magntico, memria de bolha. Memrias que possuem a caracterstica de podermos acessar qualquer registrador da memria de modo aleatrio sem antes percorrermos toda a estrutura da memria atravs de endereo dos registradores desejados, so conhecidas como memrias de acesso randmico. Diferente das memrias de acesso seqenciais onde muito mais rpido acessarmos a memria seqencialmente j que para acessarmos dados em diferentes posies da memria h a necessidade de se percorrer a estrutura ate chegarmos no ponto desejado, implicando num tempo maior de leitura. Dentre os vrios tipos de memria, as mais comuns so as memrias RAM e as memrias ROM.

2.1 Memrias RAM


RAM: Random Access Memory Memria de Acesso Randmico tambm conhecida como memria de leitura e gravao, a qual um tipo de memria que se pode ler e escrever dados binrios. A RAM utilizada para armazenar programas temporrios e dados que sero alterados no decorrer da execuo do programa. Os dados na memria RAM so retidos apenas enquanto a fonte permanece ligada, a RAM uma memria voltil. Endereo An . A0 RAM Controle Sada / Entrada de dados

Figura 2 Ilustrao de memria RAM As RAMs podem ser do tipo dinmicas ou estticas. RAM dinmica: (DRAM Dynamic Random Access Memory). a memria que perde a informao armazenada mesmo quando a alimentao constante. Isso acontece porque cada clula da DRAM apresenta um transistor MOSFET e um capacitor que armazena um dado (1 bit). O transistor fica em srie com o capacitor de armazenamento e cumpre a funo de uma chave que permite a entrada ou sada da carga do capacitor quando o pino WE ativado. Devido s fugas de carga do capacitor, h necessidade de reposio dessas cargas atravs de um pulso de REFRESH, vindo do microprocessador. Esse processo requer que todas as clulas de armazenamento sejam endereadas pelo menos uma vez a cada 2 milissegundos. Um circuito contador externo a memria geralmente incorporado ao sistema para ativar o barramento de endereo, quando o microprocessador no est acessando a memria. 10

Existem vrios tipos de memrias 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 sada de dados de um endereo enquanto seta um novo endereo. Utilizada em sistemas de fonte de informao. VRAM (Vdeo RAM). Utilizadas em aceleradores de vdeo. RDRAM - (Rambus DRAM). Fabricada pela Rambus Inc, por isso RDRAM, possui algumas desvantagens em alguns aspectos, em compensao tem uma taxa de transferncia de dados muito alta, cerca de 1000Mbps contra 200Mbps das DRAM comuns. utilizada principalmente em aceleradores de vdeo e em certos videogames, como o Ultra 64 da Nintendo. PSRAM (Pseodo Static Ram). Memria RAM dinmica que simula uma RAM esttica. uma alternativa barata para substituir as RAMs estticas, que so 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 memria principal e memria cach num nico chip. O controlador da memria cach deve ser adicionado externamente. RAM esttica: (SRAM Static Random Access Memory). uma memria que no necessita de circuitos adicionais em um microprocessador e as informaes permanecem registradas enquanto no houver nova escrita, ou no faltar alimentao aos biestveis utilizados na construo da clula de memria. Enquanto a alimentao for mantida constante, o biestvel permanece travado e pode armazenar o bit indefinidamente. mais rpida que a DRAM, mas por causa de sua pouca densidade de informao temos menor capacidade de armazenamento do que uma DRAM. Geralmente so mais caras que as DRAM e so utilizadas principalmente em locais onde a velocidade extremamente importante como na memria cach.

2.2 - Memrias RAM com dispositivos de trs estados


Dispositivos trs estados (ou tri-state) so dispositivos lgicos nos quais existem trs estados de sada possveis: O estado lgico 0, o estado lgico 1 e um estado lgico de alta impedncia, no qual a sada no tem efeito, pois est desconectada do resto do circuito e no tem influncia sobre ele. A condio de trs estados pode ser mais bem compreendida analisando-se uma sada totem-pole tri-state no circuito abaixo.

Sada

Saida em tristate

Figura 3 Circuito tri-state com transistores

11

Os transistores T3 e T4 funcionam como chaves lgicas que levam a sada a nvel 1 e 0 respectivamente. Todavia, quando a entrada desabilitadora est em nvel 0 coloca os dois transistores em corte por meio do diodo D. Este drena o potencial de T2 para massa. Assim, a sada fica em alta impedncia em relao fonte (nvel 1) e ao terra (nvel 0). O smbolo do dispositivo de trs estados apresentado abaixo. Entrada Sada

D Figura 4 Smbolo Dispositivos de trs estados podem ser acrescentados s linhas de dados de uma memria para que vrios chips do sistema possam usar o mesmo barramento de comunicao. Essas chaves de trs estados j incorporadas ao C. I. permitem conectar ou desconectar as linhas de sada do barramento de dados.

2.3 - Tempos de acesso


Tempo de acesso da RAM o tempo necessrio para que o dado registrado em uma posio endereada seja transferido para os terminais de sada (tempo de acesso leitura); ou o tempo necessrio para que o dado colocado nos terminais de entrada seja gravado na posio endereada (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 fabricao do chip. Tecnologia TTL ECL PMOS esttica NMOS esttica CMOS esttica PMOS dinmica NMOS dinmica Tempo de acesso (em ns) 60 a 200 10 a 40 500 a 1000 300 a 600 400 a 700 400 a 700 200 a 550

2.4 RAM
Entre as milhares memrias do tipo RAMs comercializadas atualmente, a 6116 de tecnologia de fabricao MOS, ser apresentada como exemplo. Essa memria equivalente a 2128. Possui as seguintes caractersticas. Capacidade: 2K x 8 bits Alimentao: simples de 5v Tempo de acesso de chip enable (CE): 400 ns (Mximo) Nvel de tenso: compatvel com nvel TTL Sada / entrada de dados comum No requer clocks ou strobe 12

Descrio da pinagem

10

Figura 5 Pinagem da memria RAM 6116 ou 2128 A correspondncia entre pinos e sinais de entrada / sada comentada na tabela a seguir. Pino 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Sinal A7 A6 A5 A4 A3 A2 A1 A0 D0 D1 D2 Vss D3 D4 D5 D6 D7 CE A10 OE Bit 7 de endereo Bit 6 de endereo Bit 5 de endereo Bit 4 de endereo Bit 3 de endereo Bit 2 de endereo Bit 1 de endereo Bit 0 de endereo Bit 0 de dado Bit 1 de dado Bit 2 de dado Alimentao GND = referencia 0 volt Bit 3 de dado Bit 4 de dado Bit 5 de dado Bit 6 de dado Bit 7 de dado Habilita o chip quando em nvel zero. Bit 10 de endereo Habilita barramento de dado quando em nvel zero (tri-state). 13 Funo

21 22 23 24

WE A9 A8 VCC

Habilita escrita quando em nvel zero; habilita leitura quando em nvel 1 Bit 9 de endereo Bit 8 de endereo Alimentao Vcc = +5v

A tabela abaixo mostra os nveis necessrios para ativar os pinos CE / OE e WE. Seleo CE / OE H H L L Leitura / Escrita WE L H L H Sada D0 a D7 Tri-state Tri-state Escrita (entrada de dados) Leitura (sada de dados)

2.5 ROM
ROM: Ready Only Memory Memria somente de leitura Memria no voltil, ou seja, sua informao mantida mesmo sem alimentao. A memria 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 nmero dessas memrias depende da extenso do programa a ser armazenado. As ROMs so usadas para armazenar no s programas principais como tambm sub-rotinas e microprogramas. So tambm bastante teis para o armazenamento de tabelas trigonomtricas, tabelas de diviso e multiplicao, tabelas de logaritmos, tabela de raiz quadrada ou programas de partida e gerenciamento do sistema (programa monitor). Veja abaixo o esquema de uma ROM. Endereo An . A0 ROM Controle S Sada de leitura de dados

Figura 6 Esquema de uma memria ROM As entradas A0 at An formam as linhas de endereo, e a sada de leitura S corresponde ao dado gravado na posio selecionada pelo endereo. A ROM (Read Only Memory) uma memria s de leitura, ou seja, uma vez gravada a informao no pode mais ser apagada. Para gravao, o processo realizado no fabricante, que confecciona uma mascara que permite a produo das memrias. Os CD-ROMs tambm possuem seu contedo fixo, logo so memrias ROM. 14

A PROM (Programmable Read Only Memory) permite que o prprio usurio armazene os dados / programas desejados. Isso feito com o auxlio de um programador PROM. A memria possui uma malha de linhas cruzadas em forma de grade semelhante da ROM. Em cada interseo da grade est localizado um dispositivo (Diodo, transistor bipolar ou MOS) e em serie com cada dispositivo existe um elemento de interrupo (fusvel ou diodo). Os elos fusveis so queimados por meio da saturao de um transistor localizado na interseo linha / coluna cujo endereo foi selecionado pelo circuito de decodificao. Nas PROMs que utilizam diodos, os cruzamentos linha / coluna da grade so unidos por dois diodos ligados em serie oposta. Abaixo temos uma figura que mostra a estrutura e o esquema eltrico de uma PROM que se utiliza diodos.

Figura 7 Estrutura de uma memria PROM por diodos A EPROM (Erasable Programmable Read Only Memory), isto , uma memria programvel e apagvel apenas de leitura. uma ROM que pode ser apagada e reprogramada um nmero indeterminado de vezes. As informaes so apagadas pela exposio 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 no pode ser apagada seletivamente, isto , no pode ter apenas parte de seus bits apagados. Quando exposta a UV, todos os bits so apagados. A EEPROM ou EAROM (Eletrically Erasable Programmable Read Only Memory) ou (Eletrically Alterable Programmable Read Only Memory), no necessitam de UV para serem apagadas e sim de impulsos eltricos. Uma outra vantagem o fato de no ser necessrio retirar esta memria do circuito para ser reprogramada. Apesar de serem memrias que apresentam caractersticas no volteis, as informaes que se encontram armazenadas tendem a se deteriorar com o tempo, o que no ocorre com as outras memrias da famlia ROM. Tem como grande desvantagem um custo elevado e que podem ser apagada somente 10 mil vezes. A FLASH MEMORY so memrias com caractersticas similares a EEPROM e EPROM, em um produto que oferece as vantagens destas memrias sem o alto custo, onde temos: - No voltil, apagvel eletricamente total ou por setor, no prprio circuito, grande densidade, alta velocidade de acesso e o j citado baixo custo. A clula de memria Flash semelhante clula de uma EPROM, e constituda por um nico transistor. Na memria Flash, uma fina camada de oxido de silcio forma a porta do transistor, permitindo apagar eletricamente a memria e uma maior densidade que as EEPROMs, com um custo menor. 15

2.6 - EPROM
As memrias bipolares so mais rpidas que as memrias MOSFETs. Entre as milhares memrias ROMs comercializadas atualmente, a 2732-A de tecnologia de fabricao EPROMMOS, ser apresentada como exemplo. Possui as seguintes caractersticas. Capacidade: 4K x 8 bits Alimentao: fonte nica de 5v Tempo de acesso: 450 ns (Mximo) Tempo de programao total: 200s Nvel de tenso de programao: +21 v Descrio da pinagem

Figura 7 Pinagem da memria ROM 27C32. A correspondncia entre pinos e sinais de entrada / sada comentada na tabela a seguir. Pino 1 2 3 4 5 6 7 8 9 10 11 Sinal A7 A6 A5 A4 A3 A2 A1 A0 D0 D1 D2 Bit 7 de endereo Bit 6 de endereo Bit 5 de endereo Bit 4 de endereo Bit 3 de endereo Bit 2 de endereo Bit 1 de endereo Bit 0 de endereo Bit 0 de dado Bit 1 de dado Bit 2 de dado 16 Funo

12 13 14 15 16 17 18 19 20 21 22 23 24

Vss D3 D4 D5 D6 D7 CE A10

Alimentao GND = referencia 0 volt Bit 3 de dado Bit 4 de dado Bit 5 de dado Bit 6 de dado Bit 7 de dado Habilita o chip quando em nvel zero. Bit 10 de endereo

OE / Vpp Habilita barramento de dado quando em nvel zero (tri-state). Passa para o modo de programao quando em +21 v A11 A9 A8 VCC Bit 11 de endereo Bit 9 de endereo Bit 8 de endereo Alimentao Vcc = +5v

Antes de programar uma memria EPROM, necessrio verificar se esta apagada, onde deve apresentar todos os endereos em nvel 1 e a leitura em qualquer posio de memria devera apresentar o dado FFh. Para apagar esta memria o fabricante recomenda a exposio do CI luz ultravioleta de intensidade 12mW por cm2, por um intervalo de tempo aproximado de 600s. A tabela abaixo mostra os nveis necessrios para ativar os pinos CE / OE e WE. Pinos 18 20 24 9 a 11 13 a 17 Funo CE / PGM OE / Vpp Vcc Sada de dados leitura VIL VIL 5v Sada Q Sada nohabilitada Irrelevante VIH 5v HI - Z Baixo consumo VIH Irrelevante 5v HI - Z Programao (escrita) VIL 21 v 5v Entrada de dados Inibio VIH 21 v 5v HI Z

2.7 Memria virtual


O Windows, para poder acelerar o desempenho do microcomputador, cria uma rea de memria virtual no espao disponvel do disco rgido. Assim, quando a memria RAM esta totalmente ocupada e o processador necessita de mais espao para trabalhar, ele seleciona parte dos programas que no deve ser usado naquele momento e transfere para a rea de memria virtual. Esse processo, apesar de ajudar no desempenho, mais lento do que se o micro tivesse memria RAM suficiente para executar todas as instrues. O tempo de acesso ao disco rgido bem maior que o tempo de acesso memria RAM. Toda informao da memria virtual apagada quando o micro desligado. 17

2.8 Exerccios 1 O que memria e qual a sua funo? __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 2 Defina memria RAM. Comente sobre suas principais caractersticas. __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 3 Qual a diferena entre uma memria RAM dinmica e uma RAM esttica ? __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 4 Qual a aplicao em que devemos utilizar uma memria RAM esttica ? E a dinmica ? __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 5 Comente sobre o dispositivo tri-state. Em quais componentes j temos esta implementao ? __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 6 Determine a capacidade de acesso das memrias abaixo relacionadas. a Memria com pinos de endereamento de A0 at A11 e 8 bits de dados. __________________________________________________________________ b Memria com pinos de endereamento de A0 at A13 e 8 bits de dados. __________________________________________________________________
18

c Memria com pinos de endereamento de A0 at A15 e 8 bits de dados.

7 Defina memria ROM. Comente sobre suas principais caractersticas. __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 8 Quais os tipos de memria ROM ? Comente sobre cada um dos tipos. __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 9 Antes de efetuarmos a programao em uma programao em uma memria EPROM, o que necessrio verificar. __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 10 Defina memria virtual e indique suas principais caractersticas. __________________________________________________________________ __________________________________________________________________ __________________________________________________________________

19

Anotaes:
__________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________
20

CAPTULO 3

Conceito bsico de microprocessador

Microprocessador Dispositivo de entrada e sada Sistema de barramento Flags condio

21

3 CONCEITOS BASICO MICROPROCESSADORES


Antes de iniciarmos, relevante citarmos a histria dos microprocessadores, onde abaixo temos um breve resumo com destaques para algumas datas consideradas importantes. Na dcada de 40 o surgimento da vlvula e o transistor (1948), na dcada de 50 a comercializao do transistor, na dcada de 60 os circuitos integrados do tipo SSI (Small Scale Integrated ou pequena escala de integrao), na dcada de 70 os circuitos integrados do tipo MSI (Medium Scale Integrated ou media escala de integrao). Em 1971 surgem os circuitos integrados do tipo LSI (Large Scale de Integrated ou com grande escala de integrao), com o primeiro microprocessador de 4 bits o INTEL 4004, em 1972 a INTEL lana o 8008 uma CPU de 8 bits. J em 1974 a INTEL comea a ter concorrentes, com o microprocessador 8080, dez vezes mais rpido que o anterior, a MOTOROLA lana 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). Dcada 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) Dcada 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: memrias, portas de I/O (entrada/sada) e outros circuitos. 22

Os microprocessadores utilizam sistemas seqenciais sncronos, ou seja, utilizando um CLOCK. A cada pulso de clock ou grupo de pulsos (pode ser de 3 em 3, por exemplo) executamse uma funo especfica. Hoje temos microprocessadores rodando com clock de 3GHz da INTEL, que pode executar centenas de milhes de instrues por segundo. Um microprocessador pode ser divido segundo seus blocos funcionais: * * * registradores e contadores; unidade lgica e aritmtica; unidade de controle e sincronizao.

Os registradores e contadores so utilizadas para o armazenamento temporrio dos bits dentro do microprocessador. Este tipo de tarefa executado pelo registrador e decodificador de instruo, pelo contador de programa e pelo acumulador. A Unidade Lgica Aritmtica (ULA) responsvel pelas operaes lgicas e aritmticas entre os bits, gerando uma outra palavra como sada. Estas operaes so executadas entre o acumulador e o registrador temporrio do microprocessador com os quais a ULA se comunica internamente e o resultado armazenado no prprio acumulador. A unidade de controle e sincronizao coordena e controla todos os blocos funcionais do computador em uma seqncia lgica e sincronizada. A UCP chama as instrues da memria, decodifica-as e executa-as, alm de alimentar as portas de entrada / sada a fim de operacionalizar as instrues recebidas, ou seja, ela recebe as instrues vindas do programa armazenado na memria de programa j decodificadas pelo decodificador de instrues e emite os sinais de sincronizao e controle para as diversas partes do computador.

3.2 - Dispositivos de entrada / sada


o meio pelo qual o usurio se comunica com o computador. atravs desses dispositivos que o operador fornece informaes ao sistema e recebe da mquina os resultados das operaes executadas pelo computador. Existem componentes que viabilizam a interface com o usurio, tais como: portas seriais, portas paralelas, conversores anlogo-digitais etc. Esses componentes esto interligados atravs de um sistema de barramento.

3.3 - Sistema de barramento


Podemos definir o barramento como um conjunto de linhas fsicas que possuem funes especficas dentro do sistema. composto de 3 barramentos independentes: o barramento de endereos, o barramento de dados e o barramento de controle. Barramento de endereos: apenas sada tri-states ativas em nvel alto, responsvel pelo caminho de comunicao dentro do sistema. Barramento de dados: Funciona como barramento bidirecional para intercmbio de dados entre a UCP e a memria ou entre a UCP e perifricos de entrada e sada. Na sada de dados da CPU, estes so gerados pelo microprocessador e enviados a uma unidade selecionada pelo barramento de endereos. Na entrada de dados, estes so gerados por uma unidade particular e enviados ao microprocessador. Barramento de controle: responsvel por enviar e receber sinais de controle necessrios transferncia de dados no sistema. composto basicamente de 4 tipos de sinais, sendo os de leitura e escrita em memria e os de entrada e sada atravs de dispositivos externos. Abaixo temos a arquitetura padro de um microprocessador. 23

Sinais de controle do Sistema

Decodificador de Instrues

Controle da CPU

Sinais de Controle Registrador de Instrues

Controle do Barramento de Dados Barramento de Dados de 8 bits

ALU
(Aritmetic Logic Unit)

Registrador da CPU

Controle de Endereos Barramento de Endereos de 16 bits

Figura 8 Arquitetura padro 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 responsvel por armazenar os resultados de adies, subtraes e outras operaes executadas pelo sistema. Controle da CPU tambm responsvel pelo Apontador de Pilha (Stack Pointer SP) Registrador que aponta para o endereo de retorno de sub-rotina, sendo este ultimo armazenado em uma pilha de memria. necessrio na inicializao carregar no apontador o endereo inicial da pilha. Controle de endereos ou Contador de Programa (Program Counter PC) Registrador que armazena o endereo de memria da prxima instruo a ser executada. O contedo do contador de programa incrementado aps a execuo da instruo ou trocado por outro valor se a instruo em curso for de desvio de seqncia. Decodificador de instruo Circuito combinacional utilizado para determinar qual a prxima instruo a ser executada. Isto feito a partir do cdigo de operao armazenado previamente no registrador de instruo. Registrador da CPU tambm responsvel pelas Flags Conjunto de flip-flops destinados a guardar as condies resultantes da execuo de instrues. Tais flags so fundamentais no sentido em que se constituem no nico mecanismo que o programador Assembly dispe para desvios de processamento e implementao de algoritmos. Registradores auxiliares Conjunto de registradores de rascunho que podem ser 24

usados em conjunto ou separadamente para operaes intermediarias, sem que seja necessrio o acesso sistemtico a memria. Registrador de instruo (RI) Registrador que armazena a instruo que esta sendo executada. Controle da CPU ou Unidade de Controle Circuito seqencial interno ao microprocessador que utilizado para gerar os sinais de controle, necessrios execuo das instrues previamente decodificadas. Unidade Lgica Aritmtica (ULA) Circuito combinacional utilizado para operaes lgicas e aritmticas envolvendo dois operando. importante salientar alguns aspectos referentes s condies dos Flags, que so clulas de 1 bit e que contem informaes sobre os resultados das operaes e indicam tambm a ocorrncia de condies especficas dessas operaes. As Flags so acionadas (setadas) pela ULA e a ela esto associadas. Cada microprocessador tem seus prprios bits de Flag. Abaixo temos mencionado as Flags mais comuns a serem encontradas na maioria dos microprocessadores.

3.4 - Flags condio


Um Flag considerado setado quando se fora o valor do bit para 1 e resetado, forandose o bit do Flag para 0. Uma instruo que afeta Flag o modifica da seguinte forma. Carry: Se o resultado da instruo provoca um carry na adio ou um borrow na subtrao ou comparao, ento a Flag de carry ser setada. Se C = 1 resultado da operao com carry ou borrow, se no C = 0 ento no ocorreu carry ou borrow. Carry auxiliar: Quando a instruo causou um carry do bit 3 para o bit 4. Se AC = 1 significa que foi 1 na operao realizada, se AC = 0 no houve o carry. Paridade: Se a soma dos bits do resultado da operao 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 operao tem valor 1 ento o sinal da operao negativo. Se S = 1 resultado negativo, se no S = 0 operao positiva. Zero: Se o resultado da instruo tem valor zero. Se Z = 1 resultado zero da operao, se no Z = 0 resultado da operao diferente de zero.

Condio
Flags C N P/V H Z S X Funo Bit de carry soma/subtrao paridade/over-flow half-carry zero sinal no usado setado C PE Z M ressetado NC PO NZ P setado se: vai um do bit 7 operao de subtrao paridade par/over-flow vai um do bit 3 resultado zero resultado negativo -

Observao: M = minus (menos) P = plus (mais) Os bits de flags esto posicionados 25

do seguinte modo dentro do registrador F:

Posio do bit Flags

7 S

6 Z

5 X

4 H

3 X

2 P/V

1 N

0 C

O nvel lgico de cada bit do registrador F indica a condio de cada uma das flags e forma uma palavra binria. Assim, por exemplo, se o byte do registrador F apresentar a combinao 0100 0001, ocorre a seguinte situao: 7 S 0 6 Z 1 5 X 0 4 H 0 3 X 0 2 P/V 0 1 N 0 0 C 1

ou seja: bit 0 est em nvel 1 informando que houve carry; bit 1 est em nvel 0 indicando que se trata de uma operao de soma; os bits 2 e 4 em zero indicam condio de no-paridade e no-half-carry; os bits 3 e 5 no so utilizados (nvel 0); bit 6 (flag de zero) em nvel 1 informa que a operao lgica ou aritmtica deu resultado zero; bit 7 (flag de sinal) em nvel 0 indica que o resultado da operao positivo. Nesse caso, a palavra armazenada no registrador F 41H porque 0100 = 4 e 0001 = 1. Sempre que o contedo do registrador F for verificado, o resultado mostrado no display de dados aparecer em cdigo hexadecimal. A traduo desse resultado para a linguagem binria fornece a condio das flags naquele momento.

26

3.5 Exerccios 1 Qual a funo dos dispositivos de entrada e sada (I/O)? __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 2 O microprocessador composto de trs barramentos independentes. Quais so? Comente sobre eles. __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 3 Com base na arquitetura padro de um microprocessador, explique a funo de cada bloco: Acumulador_________________________________________________ ___________________________________________________________ Apontador da pilha___________________________________________ ___________________________________________________________ Contador de programa_________________________________________ ___________________________________________________________ Decodificador de instruo_____________________________________ ___________________________________________________________ Flags______________________________________________________ ___________________________________________________________ Registradores auxiliares_______________________________________ ___________________________________________________________ Registrador de instruo _______________________________________ ___________________________________________________________ Unidade de controle__________________________________________ ___________________________________________________________ Unidade Lgica Aritmtica (ULA)_______________________________ ___________________________________________________________
27

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

28

Anotaes:
__________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________
29

CAPTULO 4

O Microcontrolador

A arquitetura do Microcontrolador Ciclos de mquina Introduo s interrupes O PIC 16F628 Registradores especiais

30

4 O MICROCONTROLADOR
O microcontrolador um dispositivo que tem a funo de controlar algum processo ou aspecto do ambiente. Componente de aplicao especfica e uma vez implementado permite poucos recursos para alterao do processo em que foi utilizado. Como exemplo podemos citar o Televisor, Forno microondas, videocassete, celulares, brinquedos etc. Os microcontroladores esto revolucionando o projeto de equipamento eletrnico, no somente os sistemas convencionais esto se tornando mais sofisticados e baratos, como novas funcionalidades esto sendo possveis de serem implementadas com um custo compatvel com o mercado. Os microprocessadores destinados ao mercado de computadores pessoais podiam e podem ser empregados como controladores, porm 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 nmero de lmpadas acessas simultaneamente em uma residncia. Em virtude deste mercado, os fabricantes de circuitos lanaram ento os microcontroladores, dispositivos que possuem integrados em uma nica pastilha a CPU, RAM, EPROM ou EEPROM, E/S e controladores de interrupo, PWMs etc. O surgimento destes dispositivos a um baixo custo provocou uma revoluo nos mtodos de projetos de sistemas de controle para o uso domstico ou industrial. Os sistemas puramente mecnicos esto sendo alterados por circuitos eletrnicos mais confiveis e baratos. O microcontrolador programvel, pois toda a lgica de operao estruturada na forma de um programa e gravada dentro do componente. Aps 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 sada, Memria de dados, Memria de programa. Os dados dentro de um microcontrolador so manipulados em unidades chamadas palavras. Os microcontroladores PICs apresentam estrutura de mquina interna do tipo Havard, enquanto grande parte dos microcontroladores tradicionais apresenta uma arquitetura do tipo Von-Newman.

Figura X Arquitetura do PIC 16F628 31

A diferena est na forma como os dados e os programas so processados pelo microcontrolador, onde na arquitetura Von-Newman existe apenas um barramento interno, geralmente de 8 bits, por onde passam as instrues e os dados. J na arquitetura do tipo Havard existem dois barramentos internos, sendo um de dados e outro de instrues.

Figura X+1 Arquitetura Harvard versus Von Neumann No caso do PIC, o barramento de dados sempre de 8 bits e o de instrues 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 instruo de 14 bits. Esse tipo de arquitetura permite que enquanto uma instruo executada outra seja buscada da memria, o que torna o processamento mais rpido. Alm disso, como o barramento de instruo maior que 8 bits, o OPCODE da instruo j inclui o dado e o local onde ela vai operar (quando necessrio), o que significa que apenas uma posio de memria utilizada por instruo, economizando assim muita memria de programa. A largura de memria de programa de 24 bits, alm de implementar diversas facilidades os coloca como dispositivos intermedirios aos DSP, de fato so chamados de DSC (Digital Signal Controller Controlador Digital de Sinais). Os PICs utilizam uma tecnologia chamada RISC (Reduced Instruction Set Computer Computador com Set de Instrues Reduzidas). Desta forma, os PICs possuem cerca de 35 instrues, muito menos que os microcontroladores convencionais CISC que chegam a possuir mais de 100 instrues. Os microcontroladores com a arquitetura Harvard, so tambm designados por "microcontroladores RISC". RISC provm de Computador com um Conjunto Reduzido de Instrues (Reduced Instruction Set Computer). Os microcontroladores com uma arquitetura von-Neumann so designados por 'microcontroladores CISC'. O nome CISC deriva de Computador com um Conjunto Complexo de Instrues (Complex Instruction Set Computer). Como o PIC16F84 um microcontrolador RISC, disso resulta que possui um nmero reduzido de instrues, mais precisamente 35 (por exemplo, os microcontroladores da Intel e da Motorola tm mais de cem instrues). Todas estas instrues so executadas num nico ciclo, exceto no caso de instrues de salto e de ramificao. De acordo com o que o seu fabricante refere, o PIC16F84 geralmente atinge resultados de 2 para 1 na compresso de cdigo e 4 para 1 na velocidade, em relao aos outros microcontroladores de 8 bits da sua classe. As linhas mais finas que partem do centro em direo periferia do microcontrolador correspondem aos fios que interligam os blocos interiores aos pinos do invlucro do microcontrolador. O grfico que se segue representa a parte principal de um microcontrolador.

32

Abaixo temos uma tabela com alguns exemplos da famlia PIC: 12 Bits 16C56 16C57 16C58 16C505 16HV540 14 Bits 16F62x 16C7x 16F7x 16F8x 16F87x 16 Bits 18F242 18F252 18F258 18F442 18F458

Analisando a estrutura abaixo podemos definir:

33

Entrada

Sada

CPU Memria de Dados Memria de Programas


Figura 9 O Microcontrolador Bsico Clock o responsvel pelo sincronismo entre todas as operaes de um microcontrolador. Todos eventos que ocorrem dentro de um microcontrolador obedecem a uma lgica preestabelecida pelo fabricante e so processados em tempos determinados pela freqncia do clock. Normalmente, quanto maior a freqncia de clock de um microcontrolador, mais rpida a execuo das instrues. No caso dos microcontroladores, o clock tambm utilizado como referncia de tempo para execuo 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 memria a um bloco especfico para que possamos ter as capacidades de multiplicar, dividir, subtrair e mover o seus contedos de um local de memria para outro. A parte que vamos acrescentar chamada "central processing unit" (CPU) ou Unidade Central de Processamento. Os locais de memria nela contidos chamam-se registros.

Clock

Os registros so, portanto, locais de memria cujo papel ajudar a executar vrias operaes matemticas ou quaisquer outras operaes com dados, quaisquer que sejam os locais em que estes se encontrem.

Vamos olhar para a situao atual. Ns temos duas entidades independentes (memria e 34

CPU) que esto interligadas, deste modo, qualquer troca de dados retardada bem como a funcionalidade do sistema diminuda. Se, por exemplo, ns desejarmos adicionar os contedos de dois locais de memria e tornar a guardar o resultado na memria, ns necessitamos de uma ligao entre a memria e o CPU. Dito mais simplesmente, ns precisamos de obter um "caminho" atravs 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 execuo das instrues e realiza as operaes lgicas e aritmticas sobre os dados e envia os resultados para os diversos registros ou portas de entrada e sada. Portas de entrada e sada Estas localizaes que acabamos de adicionar, chamam-se "portos". Existem vrios tipos de portos: de entrada, de sada e de entrada/sada. Quando trabalhamos com portos primeiro de tudo necessrio 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 memria. Qualquer coisa de que se est a ler ou em que se est a escrever e que possvel identificar facilmente nos pinos do microcontrolador. So os pontos atravs 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 sada. Alguns microcontroladores possuem uma ou mais portas de entrada especiais chamadas de Interrupts. Estas portas no exigem que a CPU fique vigiando a ocorrncia do evento na porta, porque interrompem o programa sendo executado cada vez que ocorre um dado evento. Os Interrupts so uma das caractersticas mais utilizadas nos projetos em que se necessite de uma rapidez de resposta a eventos assncronos, que podem ocorrer a qualquer instante. Memria de dados A memria a parte do microcontrolador cuja funo guardar dados. A maneira mais fcil de explicar descrev-la como uma grande prateleira cheia de gavetas. Se supusermos que marcamos as gavetas de modo a elas no se confundirem umas com as outras, ento o seu contedo ser facilmente acessvel. Basta saber a designao da gaveta e o seu contedo ser conhecido.

35

Os componentes de memria so exatamente a mesma coisa. Para um determinado endereo, ns obtemos o contedo desse endereo. Dois novos conceitos foram apresentados: endereamento e memria. A memria o conjunto de todos os locais de memria (gavetas) e endereamento nada mais que selecionar um deles. Isto significa que precisamos de selecionar o endereo desejado (gaveta) e esperar que o contedo desse endereo nos seja apresentado (abrir a gaveta). Alm de ler de um local da memria (ler o contedo da gaveta), tambm possvel escrever num endereo da memria (introduzir um contedo na gaveta). Isto feito utilizando uma linha adicional chamada linha de controle. Ns 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 operao de leitura, caso contrrio executada uma operao de escrita no endereo de memria. A memria 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 memria RAM no microcontrolador bem pequena, ela possui um barramento de 8bits, pois somente teremos o transito de dados entre a memria e a CPU. A memria RAM dividida em duas partes distintas, uma para abrigar os registradores de funes especiais (SFR) e outra para abrigar os registradores de propsitos gerais (GPR). Memria de programa onde residem as instrues 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 memria EEPROM ou FLASH, que pode ser apagada por meios eltricos. Existem quatro tecnologias tpicas de implementao: a ROM do tipo mascara, so identificados pelo sufixo CR; o OTP, identificado pelo sufixo C; a EPROM identificada pela janela caracterstica e que pode ser do tipo JW com encapsulamento DIP ou CL para encapsulamento do tipo PLCC. E a memria FLASH. Uma caracterstica importante da memria do microcontrolador PIC que ela pode ser acessada por software. Tambm devido a caractersticas da arquitetura RISC, a instruo de chamada e de desvio tem disponveis somente 11 bits para os endereos usados. Por esse motivo a memria de programa dividida em paginas. Usamos o PCLATH para direcionar os endereos. X X X 4 3 2 1 0 7 6 5 4 3 2 1 0

PC - Program Counter

36

4.2 - Ciclos de Mquina


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 conseqentemente, cada ciclo de mquina dura 1s. A diviso do clock por quatro, forma as fases Q1, Q2, Q3 e Q4. O PC (program counter) incrementado automaticamente na fase Q1 do ciclo de mquina e a instruo seguinte buscada da memria de programa e armazenada no registrador de instrues no ciclo Q4. Ela decodificada e executada no prximo ciclo, no intervalo de Q1 at Q4. Esta caracterstica de buscar informaes num ciclo de mquina e execut-la no prximo conhecida como PIPELINE. Ela permite que quase todas as instrues sejam executadas em apenas um ciclo, gastando assim 1 s (para um clock de 4 Mhz) e tornando o sistema muito mais rpido. As nicas excees referem-se s instrues que geram saltos no PC, como chamadas de rotinas e retorno. Ao executar essas instrues, o PIPELINE deve ser primeiramente limpo para depois poder ser carregado novamente com o endereo correto, consumindo para isso 2 ciclos de mquina. Esse PIPELINE facilmente implementado devido arquitetura de Havard. Vetor de reset Trata-se do primeiro endereo da memria de programa que ser executado quando o PIC comear a rodar, quando alimentado ou por reset. Na maioria dos modelos, o reset aponta para o endereo 0x00, mas em alguns modelos mais antigos ele pode apontar para o ltimo endereo disponvel. Vetor de interrupo As rotinas de interrupo sero armazenadas na rea de programao , juntamente com todo o resto do programa. No entanto, existe um endereo que reservado para o incio do tratamento de todas as interrupes, nos modelos de PIC que possuem este recurso, esse endereo de vetor de interrupo a posio 0x04. Pilha A pilha o local, totalmente separado da memria de programao, em que sero armazenados os endereos de retorno quando utilizarmos instrues de chamadas de rotinas. Quando o programa desviado para o comeo de uma rotina por meio da instruo correta, o endereo seguinte ao ponto que estava sendo rodado armazenado na pilha para que, ao fim da rotina, o programa possa retornar. O tamanho da pilha tambm 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 nmero de rotinas maior que o tamanho da pilha, o endereo de retorno mais antigo ser perdido. A estrutura para implementao da pilha chamada de memria LIFO (Last In First Out). Quando a CPU armazena uma nova informao na pilha o comando PUSH (empurrar), o desempilhamento feito atravs da instruo POP (Pull Operation Operao de puxar). Registradores especiais Nessa regio da memria encontram-se todos os registradores especiais, denominados SFRs (special function register), utilizados pelo microcontrolador para execuo do programa e processamento da ULA. Esses registradores ocupam espao na RAM e podem ser acessados da mesma maneira que as variveis do sistema, com mudana somente do endereo de acesso. A quantidade de SFRs depende do modelo de PIC, mas eles sempre so armazenados na parte baixa da memria (incio dos endereos) e s vezes podem estar espalhadas em mais de um banco de memria. Registradores de uso geral Trata-se de uma rea destinada ao armazenamento de variveis definidas pelo usurio para serem escritas e lidas pelo programa. O tamanho dessa memria varia de acordo com o modelo de PIC e tambm pode ocupar mais de um banco. EEPROM A maior parte dos modelos de PIC, possuem esta memria interna.

37

4.3 - Introduo s Interrupes


Como o prprio nome diz, uma interrupo serve para interromper o programa imediatamente e desta forma realizar uma outra atitude instantaneamente. As interrupes so aes tratadas diretamente pelo Hardware, o que as torna muito rpidas e disponveis em qualquer ponto do sistema. Quando uma interrupo acontece, o programa paralisado e uma funo especfica executada e depois o programa continua a ser executado no mesmo ponto em que estava. No PIC temos vrios tipos de interrupes que podem ser provocadas de modo diferentes e com diferentes atuaes. Nos modelos mais antigos, no possuam nem interrupo e nos modelos mais novos da famlia PIC, podemos encontrar at 18 tipos diferentes de interrupes, como estamos estudando o PIC 16F628, somente iremos estudar quatro tipos de interrupes. Interrupo de TIMER 0 - Essa interrupo 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 mquina, como tambm por um sinal externo, o que neste caso ele passa a ser um contador de pulsos, com outra finalidade. O flag sinalizador da interrupo E chamado de T0IF e o bit de controle chamado de T0IE. Ambos se encontram no registrador INTCON. Interrupo EXTERNA Essa interrupo gerada por um sinal externo ligado a uma porta especfica 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, necessrio que se defina se a identificao ser realizada na borda de subida ou descida do sinal, necessrio configurar a porta. A flag de sinalizao da interrupo externa chamada de INTF e o controle de habilitao chamado de INTE e ambos se encontram no registrador INTCON. Interrupo por MUDANA DE ESTADO A interrupo por mudana de estado ocorre se existe a mudana do sinal sem se importar se foi na borda de subida ou descida. Esta interrupo esta ligada as porta RB4, RB5, RB6 e RB7 simultaneamente. Por isso se essas portas forem configuradas como entradas, a mudana de estado em qualquer uma delas ir gerar uma interrupo. Esse tipo de interrupo 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 interrupo chamado de RBIF e o sinal de controle chamado de RBIE. Ambos se encontram sempre no registrador INTCON. Interrupo de FIM NA ESCRITA NA EEPROM Os PICs possuem uma memria EEPROM interna e essa interrupo serve para detectarmos o final de uma rotina de escrita nessa memria. A utilizao da interrupo no obrigatria para que a escrita funcione, mas como a EEPROM lenta na hora de escrever, em alguns sistemas a sua utilizao pode ser necessria para evitar uma parada durante a escrita na EEPROM. O flag sinalizador da interrupo o EEIF e o bit de controle chamado de EEIE. Interrupes - Sempre que uma interrupo acontece (qualquer uma), o programa guarda o endereo da prxima linha a ser executada na pilha, e desvia para um endereo fixo da memria de programao. Basta ento, nesse endereo (0x04), escrever a rotina que ir reconhecer e tratar a interrupo acontecida, sempre que o microcontrolador desvia para esse endereo, o bit GIE desligado, quando se executa uma instruo de retorno de interrupo RETFIE, faz com que o bit GIE seja habilitado permitindo uma nova ocorrncia de interrupo.

38

Quando a rotina de interrupo for terminada, o programa automaticamente voltar ao ponto em que estava antes de ocorrer interrupo. O atraso de tempo existente entre a ocorrncia de um evento de interrupo e o efetivo desvio para o vetor de interrupo chamado de latncia de interrupes. Existem outros modos de interrupo, mas no ser analisado.

4.4 O PIC 16F628


O microcontrolador PIC 16F628 verstil, compacto e possui como principais caractersticas: Microcontrolador de 18 pinos o que facilita a compatibilidade com outros em nvel de hardware e software (como o 16F84). Baixo custo 15 pinos de I/O (Entrada ou Sada). Memria de programao FLASH de 2048 x 14 bits. Memria SRAM de 224 x 8 bits disponveis. Memria EEPROM interna de 128 x 8 bits. 1 canal PWM com captura e amostragem (CCP). Facilidade de programao com 35 instrues. Capacidade de corrente de 25 mA por pino de I/O Oscilador 4 MHz. Tenso de operao entre 3.0 a 5.5 V (2.0 a 5.5 para verso LF).

1 RA2 2 RA3 3 RA4/TOCKI 4 MCLR 5 VSS 6 7 RB1 8 RB2 9 RB3 RB4 RB5 RB6 RB0/INT PIC OSC2 VDD OSC1 RA0 RA1

18 17 16 15 14 13 RB7 12 11 10

16F628A

Figura 10 Pinagem do PIC 16F62X

39

4.5 - Descrio dos pinos Pino 1 2 3 Funo RA2/AN2/Vref RA3/AN3/CMP1 RA4/T0CKI/CMP2 Tipo Entrada e sada Entrada e sada Entrada e sada Descrio Porta A bit 2 / Entrada do comparador analgico / Sada da referencia de tenso. Porta A bit3 / Entrada comparador analgico / Sada comparador 1. Porta A bit 4 / Entrada clock externo do timer 0 / Sada comparador 2. Sada em dreno aberto. Porta A bit 5 / Reset CPU / tenso de programao. Terra. Porta B bit 0 / Entrada de interrupo externa. Porta B bit 1 / Recepo USART (modo assncrono) / Dados (modo sncrono). Porta B bit 2 / Transmisso USART (modo assncrono) / Clock (modo sncrono) Porta B bit 3 / Entrada e sada do modulo CCP. Porta B bit 4 / E entrada de programao LVP. Porta B bit 5. Porta B bit 6 / Sada oscilador TMR1 / Entrada de clock TMR1. Porta B bit 7 / Entrada do oscilador de TMR1. Alimentao Positiva. Porta A bit 6 / Entrada para cristal oscilador / Sada de clock. Porta A bit 7 / Entrada para cristal oscilador / Entrada de clock externo. Porta A bit 0 / Entrada comparador analgico. Porta A bit 1 / Entrada comparador analgico.

4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

RA5/MCLR/THV Vss RB0/INT RB1/RX/DT RB2/TX/CK RB3/CCP1 RB4/PGM RB5 RB6/T1OSO/T1CKI RB7/T1OSI Vdd RA6/OSC2/CLKOUT RA7/OSC1/CLKIN RA0/AN0 RA1/AN1

Entrada Alimentao Entrada e sada Entrada e sada Entrada e sada Entrada e sada Entrada e sada Entrada e sada Entrada e sada Entrada e sada Alimentao Entrada e sada Entrada e sada Entrada e sada Entrada e sada

40

4.6 - Consideraes iniciais sobre o Hardware


Alimentao 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 no tenha grandes variaes de tenso (riplle) e rudos. O PIC 16F628, apesar de ter sua tenso nominal em 5 Vcc, pode ser alimentado de 2.0 a 6.0 V, mas essa tenso no deve ficar variando durante sua utilizao. Utilizar o capacitor com valor entre 100pF e 100nF em paralelo com os pinos de alimentao. Osciladores O oscilador do PIC 16F628 pode ser externo ou interno e sem ele o programa no 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 cermico (at 4MHz) 3.Cristal / Ressonador cermico de alta freqncia (at 20MHz) 4.Resistor externo sem sada de clock 5.Resistor externo com sada de clock 6.Oscilador RC interno sem sada de clock 7.Oscilador RC interno com sada de clock 8.Clock externo. Cristal / Ressonador Quando utilizamos um ressonador ou um cristal de quartzo mais dois capacitores, possvel implementar um oscilador de clock para o PIC. Devemos configurar o microcontrolador de acordo com o modo do oscilador em funo da freqncia do cristal ou ressonador utilizado. Onde quando utilizarmos uma freqncia menor que 200KHz (modo LP), uma freqncia entre 200KHz e 4MHz (modo XT) e uma freqncia maior que 4MHz (modo HS). Os capacitores entre 10 e 33 pF.

PIC16F628
1 2 3 4 5 6 7 8 9 18 17 16 15 14 13 12 11 10

C1

XTAL C2

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 freqncia desde 10KHz a 8MHz e o resistor deve estar entre 38K e 1M. Para definirmos esta operao o bit OSCF no registrador PCON, deve estar em 1. RA7 / OSC1 / CLKIN R RA6 / OSC2 / CLKOUT

Figura 12 Oscilador resistor

41

Oscilador Interno um oscilador de 4MHz derivado de um clock obtido a partir de um oscilador RC interno. Esse oscilador possui razovel preciso com um valor tpico de 4Mhz, com mnimo de 3,65 e mximo de 4,28Mhz. Permite uma maior disponibilidade dos pinos do PIC, pois RA6 e RA7 esto liberados. Para definirmos esta operao o bit OSCF no registrador PCON, deve estar em 0, se estiver em 1 estaremos com um clock de 37KHz. necessrio implementar no programa na etapa de configurao do microcontrolador a seguinte instruo _INTRC_OSC_NOCLKOUT e retira-se a instruo _XT_OSC. Clock Externo Quando utilizarmos um clock externo para o PIC necessrio configurar o modo do oscilador para EC.

10

RA7 / OSC1 / CLKIN RA6 / OSC2 / CLKOUT Figura 13 Clock externo

Detector baixa tenso um detector de baixa tenso, conhecido tambm como detector de Brown out, onde caso a tenso de alimentao diminuir abaixo do valor de Vz, um reset do MCU implementado fazendo com que a CPU reinicialize o programa. Caso seja utilizada uma tenso baixa de alimentao necessrio desabilitar o bit BODEN = 0 para que no seja detectado.

Figura 14 Detector baixa tenso Temporizador de Power-Up O temporizador de power-up (PWRT) pode ser utilizado para fazer com que o chip permanea em reset por aproximadamente 72ms aps o chip ter sido ligado. Deve ser utilizado sempre que possvel devido ao fato do tempo de demora de estabilizao da fonte de alimentao para todos os componentes envolvidos no circuito. Esse temporizador pode ser habilitado ou desabilitado somente durante a programao do chip. Mdulo Comparador Analgico O modula comparador analgico consiste em um conjunto de dois comparadores analgicos internos, que podem realizar comparaes entre si ou de tenses analgicas externas. O modulo possui apenas o um registrador CMCON, responsvel pela configurao e controle dos comparadores internos. 42

4.7 - Registradores especiais


Como vimos o microcontrolador PIC possui uma srie de registradores especiais que so denominados SFR (Special Function Registers) que servem exatamente para guardar a configurao e o estado de funcionamento atual da mquina. Para efeito de padronizao, cada bit dentro desses registradores receber um nome, sendo tambm 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 tambm para configurar a pagina de programao atual, quando necessrio. Registrador: STATUS Bit 7 R/W IRP Bit 6 R/W RP1 Bit 5 R/W RP0 Bit 4 R /TO R /PD Endereos: 03h, 83h, 103h e 183h Bit 3 Bit 2 R/W Z Bit 1 R/W DC Bit 0 R/W C

IRP Seletor de banco de memria usado para endereamento indireto. 0 = Banco 0 e 1 (00h FFh). * Manter sempre em 0 no 16F628 RP1 e RP0 Seletor de banco de memria usado para endereamento indireto. 00 = Banco 0 (00h 7Fh). 10 = Banco 2 (100h 17Fh). 01 = Banco 1 (80h FFh). 11 = Banco 3 (180h 1FFh). 1 = Banco 2 e 3 (100h 1FFh)

* Cada banco possui 128 bits. O PIC 16F628 s possui os bancos 0 e 1. RP1 deve ser 0. /TO Indicao de Time-out. 0 = Indica que ocorreu um estouro de WatchDog (WDT). 1 = Indica que ocorreu um power-up ou foi executada a instruo CLRWDT ou SLEEP. /PD Indicao de Power-down. 0 = Indica que a instruo SLEEP foi executada. 1 = Indica que ocorreu um Power-up ou foi executada a instruo CLRWDT. Z Indicao de zero. 0 = Indica que o resultado da ultima operao (lgica ou aritmtica) no foi zero. 1 = Indica que a ultima operao (lgica ou aritmtica) resultou em zero.

43

DC Digit Carry/borrow. 0 = A ultima operao da ULA no ocasionou um estouro de dgito. 1 = A ultima operao 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 operao da ULA no ocasionou um estouro (carry) 1 = A ultima operao da ULA ocasionou um estouro (carry) no bit mais significativo. Conhecendo o CMCON O modulo comparador permite implementar diversos circuitos atravs dos comparadores analgicos, inclusive conversores A/D, como o de rampa ou conversores. Cada implementao realizada atravs do registrador CMCON. Este registrador implementado no PIC 16F628. Registrador: CMCON Bit 7 R C2OUT Bit 6 R C1OUT Bit 5 R/W C2INV Bit 4 R/W C1INV Endereos: 1Fh Bit 3 R/W CIS Bit 2 R/W CM2 Bit 1 R/W CM1 Bit 0 R/W CM0

C2OUT Bit indicativo do estado da sada 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 sada 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 Seleo de inverso do sinal de sada do comparador 2. 0 Sada no invertida 1 Sada invertida.

C1INV Seleo de inverso do sinal de sada do comparador 1. 0 Sada no invertida 1 Sada invertida.

CIS Seleo de entrada dos comparadores nos modos 1 e 2. CM2, CM1 e CM0 Seleo do modo de operao dos comparadores:

44

CM2 0 0 0 0 1 1 1 1

CM1 0 0 1 1 0 0 1 1

CM0 0 1 0 1 0 1 0 1

Modo 0 1 2 3 4 5 6 7

Modo 0 Neste modo os comparadores se encontram em reset, o modo inicial de configurao dos comparadores. Neste modo, as sadas esto desligadas, mas os pinos RA0, RA1, RA2 e RA3 esto conectados s entradas dos comparadores, ou seja, como entradas analgicas. Modo 1 Dois comparadores com trs entradas Multiplexadas onde temos 2 entradas conectadas entrada inversora de C1 e ambos comparadores compartilham a mesma referncia externa conectada entrada inversora de RA2/AN2/Vref. Modo 2 Dois comparadores com quatro entradas multiplexadas onde temos os comparadores configurados com a entrada no inversora conectada ao mdulo de referncia de tenso interna (VREF). As entradas inversoras de cada comparador so multiplexadas. Modo 3 Dois comparadores com uma referncia externa comum onde temos uma configurao na qual os dois comparadores possuem uma referncia de tenso 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 utilizao como I/O digital. Modos 6 Neste modo tm os dois comparadores compartilhando a mesma referncia externa comum (RA2/AN2/Vref). As sadas C1OUT e C2OUT encontram-se disponveis 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.

45

Conhecendo o OPTION Esse registrador serve para configurar uma srie de opes para a operao 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 possuam uma instruo chamada OPTION. Registrador: OPTION Bit 6 Bit 5 R/W INTEDG R/W TOCS Endereos: 81h e 181h Bit 2 Bit 1 R/W PS2 R/W PS1

Bit 7 R/W /RBPU

Bit 4 R/W TOSE

Bit 3 R/W PSA

Bit 0 R/W PS0

/RBPU Habilitao dos pull-ups internos para o PORTB. 0 = Pull-ups habilitado para todo pino do PORTB configurado como entrada. 1 = Pull-ups desabilitado. INTEDG Configurao da borda que gerar a interrupo externa no RB0. 0 = A interrupo ir ocorrer na borda de descida. 1 = A interrupo ir ocorrer na borda de subida. TOCS Configurao do incremento para o TMR0. 0 = TMR0 ser incrementado internamente pelo clock da mquina. 1 = TMR0 ser incrementado externamente pela mudana no pino RA4/T0CKI. TOSE Configurao da borda que incrementar o TMR0 no pino RA4/T0CKI quando TOCS = 1. 0 = Incremento na borda de subida. PSA Configurao de aplicao 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 mquina necessrio que PSA = 1 PS2, PS1 e PS0 Configurao do valor de prescaler. Bits 2, 1, 0 000 001 010 011 100 TMR0 1:2 1:4 1:8 1:16 1:32 46 WDT 1:1 1:2 1:4 1:8 1:16 1 = Incremento na borda de descida.

101 110 111

1:64 1:128 1:256

1:32 1:64 1:128

Conhecendo o PCON Esse registrador serve para sinalizao de dois estados de reset. O reset por queda de tenso de alimentao (Brown-out) e o reset de inicializao (Power-on reset). Alm disso, o bit 3 desse registrador controla o clock do chip quando nos modos de oscilador interno ou resistor externo. Registrador: PCON Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 R/W OSCF Endereo: 8Eh Bit 2 Bit 1 R/W /POR Bit 0 R/W /BOD

OSCF Bit de controle do modo de operao 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 inicializao. 0 = Houve um reset do tipo POR reset de inicializao. 1 = No ocorreu o reset de inicializao. /BOD Sinalizador de reset por queda de tenso de alimentao (Brown-out). 0 = Houve reset por queda da tenso alimentao. 1 = No houve reset por queda de tenso de alimentao. Conhecendo o INTCON Esse registrador serve para configurar e identificar as interrupes. Registrador: INTCON Bit 7 R/W GIE Bit 6 R/W EEIE Bit 5 R/W T0IE Bit 4 R/W INTE Bit 3 R/W RBIE Endereos: 0Bh e 8Bh Bit 2 R/W T0IF Bit 1 R/W INTF Bit 0 R/W RBIF

GIE Habilitao geral das interrupes (chave geral). 0 = Nenhuma interrupo ser tratada. 1 = As interrupes habilitadas sero tratadas individualmente.

47

EEIE Habilitao da interrupo de final de escrita na EEPROM (chave individual). 0 = A interrupo no ser tratada. 1 = A interrupo ser tratada.

T0IE Habilitao da interrupo de estouro de TMR0 (chave individual). 0 = A interrupo no ser tratada. 1 = A interrupo ser tratada.

INTE Habilitao da interrupo externa no pino RB0 (chave individual). 0 = A interrupo no ser tratada. 1 = A interrupo ser tratada.

RBIE Habilitao da interrupo por mudana de estado nos pinos RB4 a RB7 (chave individual). 0 = A interrupo no ser tratada. 1 = A interrupo ser tratada.

T0IF Identificao da interrupo de estouro de TMR0. 0 = Esta interrupo no ocorreu. 1 = Esta interrupo ocorreu.

INTF Identificao da interrupo externa no pino RB0. 0 = Esta interrupo no ocorreu. 1 = Esta interrupo ocorreu.

RBIF Identificao da interrupo por mudana de estado nos pinos RB4 a RB7. 0 = Esta interrupo no ocorreu. 1 = Esta interrupo ocorreu.

Conhecendo o PIE1 Possui a funo de habilitao / desabilitao das chamadas interrupes perifricas. Registrador: PIE1 Bit 7 R/W EEIE Bit 6 R/W CMIE Bit 5 R/W RCIE Bit 4 R/W TXIE Bit 3 Endereos: 8Ch Bit 2 R/W CCP1IE Bit 1 R/W TMR2IE Bit 0 R/W TMR1IE

EEIE Habilitao de interrupo por trmino de escrita na EEPROM interna. 0 = Esta interrupo no ocorreu. 1 = Esta interrupo ocorreu.

CMIE Habilitao de interrupo de mudana de estados dos comparadores analgicos. 0 = Esta interrupo no ocorreu. 1 = Esta interrupo ocorreu.

48

RCIE Habilitao de interrupo de mudana de estado dos comparadores. 0 = Esta interrupo no ocorreu. 1 = Esta interrupo ocorreu.

TXIE Habilitao de interrupo de transmisso USART. 0 = Esta interrupo no ocorreu. CCP1IE Habilitao de interrupo do modulo CCP. 0 = Esta interrupo no ocorreu. 1 = Esta interrupo ocorreu. 1 = Esta interrupo ocorreu.

TMR2IE Habilitao de interrupo de transbordo do timer 2. 0 = Esta interrupo no ocorreu. 1 = Esta interrupo ocorreu.

TMR1IE Habilitao de interrupo de transbordo do timer 1. 0 = Esta interrupo no ocorreu. 1 = Esta interrupo ocorreu.

O bit 3 do registrador deve ser sempre mantido em 0. Para habilitar a CPU, utilizando uma das interrupes devemos setar o bit PEIE e o bit GIE no INTCON. Conhecendo o PIR1 Localizado no banco 0 e abriga os flags sinalizadores de interrupes perifricas. Registrador: PIR1 Bit 7 R/W EEIE Bit 6 R/W CMIF Bit 5 R/W RCIF Bit 4 R/W TXIF Bit 3 Endereos: 0Ch Bit 2 R/W CCP1IF Bit 1 R/W TMR2IF Bit 0 R/W TMR1IF

EEIF Sinalizador de trmino de escrita na EEPROM. 0 = A escrita ainda no terminou ou no foi iniciada. 1 = A escrita terminou. CMIF Sinalizador de mudana de estado na sada dos comparadores analgicos. 0 = No houve mudana de estado nos comparadores. 1 = Houve mudana na sada dos comparadores. RCIF Sinalizador de recepo de caractere na USART. 0 = No houve recepo de novos caracteres. 1 = Um novo caractere foi recebido. TXIF Sinalizador de transmisso na USART. 0 = No houve transmisso na USART ou o TSR esta ocupado. 1 = O caractere armazenado no TXREG foi repassado para o TSR.

49

CCPIF Sinalizador de comparao / captura no mdulo CCP. 0 = No houve comparao vlida / captura no mdulo CCP. 1 = Houve comparao / captura no mdulo CCP. TMR2IF Sinalizador de transbordo no timer 2. 0 No houve transbordo de contagem no TMR2. 1 Houve transbordo de contagem no TMR2. TMR1IF - Sinalizador de transbordo no timer 1. 0 No 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 prxima linha do programa que ser executado no momento. A cada ciclo de mquina o PC automaticamente alterado, para que o programa possa ser executado. Esse registrador tambm pode ser alterado pelo programa, mas isto deve ser feito com extremo cuidado para que o sistema no se perca e/ou trave. Registrador: PCL Bit 7 R/W Bit 6 R/W Bit 5 R/W Bit 4 R/W Bit 3 R/W Endereos: 02h e 82h Bit 2 R/W Bit 1 R/W Bit 0 R/W

Parte baixa do PC Conhecendo o PCLATH Como a rea de memria de programao do PIC 16F628 maior que 256 bytes, no possvel 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 no precisa ser acessado pelo programa. Registrador: PCLATH Bit 7 Bit 6 Bit 5 Bit 4 R/W Bit 3 R/W Endereos: 0Ah e 8Ah Bit 2 R/W Bit 1 R/W Bit 0 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 sada. Quando colocado 1 em um bit do TRIS, o pino relacionado a ele configurado como entrada. Para configurar o pino como sada, deve-se colocar 0 no bit relacionado. Basta relacionar 1 a palavra Imput (entrada) e 0 a palavra Output (sada). Para configurar o PORTA, deve ser utilizado o TRISA e para configurar o PORTB, deve ser utilizado o TRISB.

50

Registrador: TRISA Bit 7 R/W Ref. RA7 Bit 6 R/W Ref. RA6 Bit 5 R/W Ref. RA5 Bit 4 R/W Ref. RA4 Bit 3 R/W Ref. RA3

Endereos: 85h Bit 2 R/W Ref. RA2 Bit 1 R/W Ref. RA1 Bit 0 R/W Ref. RA0

Registrador: TRISB Bit 7 R/W Ref. RB7 Bit 6 R/W Ref. RB6 Bit 5 R/W Ref. RB5 Bit 4 R/W Ref. RB4 Bit 3 R/W Ref. RB3

Endereos: 86h e 186h Bit 2 R/W Ref. RB2 Bit 1 R/W Ref. RB1 Bit 0 R/W 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 posies distintas da memria. Quando um pino dessas portas configurado como entrada ao lermos o seu bit relacionado, encontraremos diretamente o nvel lgico aplicado a esse pino. Da mesma maneira, ao configurarmos um pino como sada, podemos alterar seu estado, escrevendo diretamente no bit relacionado. Registrador: PORTA Bit 7 R/W RA7 Bit 6 R/W RA6 Bit 5 R/W RA5 Bit 4 R/W RA4 Bit 3 R/W RA3 Endereos: 05h Bit 2 R/W RA2 Bit 1 R/W RA1 Bit 0 R/W RA0

Registrador: PORTB Bit 7 R/W RB7 Bit 6 R/W RB6 Bit 5 R/W RB5 Bit 4 R/W RB4 Bit 3 R/W RB3

Endereos: 06h e 106h Bit 2 R/W RB2 Bit 1 R/W RB1 Bit 0 R/W RB0

4.8.2 Contadores
O bloco de temporizao que nos interessa bastante porque pode dar-nos informaes acerca da hora, durao, protocolo, etc. A unidade bsica do temporizador um contador que na realidade um registro cujo contedo 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 diferena, ns ficamos a saber a quantidade de tempo decorrida. Esta uma parte muito importante do microcontrolador, cujo domnio vai requerer muita da nossa ateno.

51

Conhecendo o TMR0 O TMR0 um contador de 8 bits que pode ser acessado diretamente na memria, tanto par leitura quanto para a escrita. A diferena entre ele e os demais registradores que seu incremento automtico e pode ser feito pelo clock da mquina ou por um sinal externo. importante lembrar que o estouro desse contador pode gerar uma interrupo. acessado por trs registradores, o OPTION_REG, o TMR0 e o INTCON. Registrador: TMR0 Bit 7 R/W Bit 6 R/W Bit 5 R/W Bit 4 R/W Bit 3 R/W Endereos: 01h Bit 2 R/W Bit 1 R/W Bit 0 R/W

Contador automtico de 8 bits Conhecendo o TMR1 O TMR1 um mdulo de 16 bits capaz de operar em trs modos bsicos, como temporizador sncrono, contador sncrono e assncrono, com funes de prescaler interno, possibilidade de conexo de cristal externo e de reset gerado pelo mdulo CCP. Possui uma filosofia similar ao do timer 0, porm se destaca a presena de um registrador de controle destinado especificamente ao timer 1, o T1CON e os registradores especficos para o armazenamento de contagem, (TMR1L e TMR1H). Relacionado aos registradores INTCON, PIR, PIE e T1CON, alm dos j citados. Conhecendo o TMR2 O TMR2 um temporizador de 8 bits com princpio de funcionamento similar ao do timer 0 e com caractersticas de pr-divisor, ps-divisor, capacidade de ligar ou desligar a contagem do mdulo e o registrador de perodo (PR2). Tem o propsito bsico de fornecer a base de tempo para o mdulo CCP1. Relacionado aos registradores INTCON, PIR, PIE, TMR2, T2CON e PR2. Conhecendo o WDT O watchdog outra coisa que nos vai interessar a fluncia da execuo do programa pelo microcontrolador durante a sua utilizao. Suponha que como resultado de qualquer interferncia (que ocorre frequentemente num ambiente industrial), o nosso microcontrolador pra de executar o programa ou, ainda pior, desata a trabalhar incorretamente.

Claro que, quando isto acontece com um computador, ns simplesmente carregamos no boto de reset e continuamos a trabalhar. Contudo, no caso do microcontrolador ns no podemos resolver o nosso problema deste modo, porque no temos boto. Para ultrapassar este obstculo, precisamos de introduzir no nosso modelo um novo bloco chamado watchdog (co de guarda). Este bloco de fato outro contador que est continuamente a contar e que o nosso programa pe a zero sempre que executado corretamente. No caso de o programa "encravar", o zero no vai ser escrito e o contador, por si s, encarregar-se- de fazer o reset do microcontrolador quando alcanar o seu valor mximo. 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 interveno do ser humano.

52

O Watchdog Timer (WDT), popularmente conhecido como co de guarda, tambm um contador incrementado automaticamente, s que com um clock independente. O PIC possui um RC interno s para a operao WDT. Isto significa que seu tempo de incremento constante, independentemente do oscilador utilizado para gerar o clock da mquina. O tempo normal de estouro do WDT cerca de 18ms, mas pode variar de acordo com a tenso de alimentao e a temperatura. Uma outra caracterstica desse contador que ele no acessvel 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 utilizao do WDT muito importante para evitarmos que o sistema trave em determinadas situaes. importante saber tambm que o WDT pode ser desligado, como uma escolha de configurao na hora de gravar o microcontrolador, porm no permite que seja desligado durante a execuo do programa. Conhecendo o PRESCALER Acabamos de ver que o TMR0 pode ser incrementado pelo clock da mquina ou por um sinal externo, assim como o WDT incrementado automaticamente e estoura a cada 18 ms. Desta maneira, fcil efetuarmos clculos de tempo com esses contadores. S que ambos executam aes especficas no caso de estouro (interrupo ou reset). Como alterar ento o tempo de estouro de cada um desses contadores? Para o TMR0 fica mais fcil, pois alterando o oscilador, alteramos tambm os seus incrementos. Mas isso vivel? E para o WDT, como podemos alterar seu tempo? Esta a funo do Prescaler. Trata-se de um divisor configurvel que pode ser aplicado a um dos dois contadores. Temos aqui ento a maior limitao 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 mquina e conseqentemente, uma instruo sendo rodada a cada 1s. Sem o prescaler, o TMR0 tambm seria incrementado a cada 1s. estourando em 256 s. Se configurarmos o Prescaler em 1:4, o TMR0 s ser incrementado a cada 4 ciclos de mquina, neste caso correspondem a 4 s. O estouro aparecer ento 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, necessrio 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 endereo para escrita ou leitura da EEPROM interna do PIC 16F628, o qual possui uma memria de 128 bytes. Registrador: EEADR Bit 7 R/W Bit 6 R/W Bit 5 R/W Bit 4 R/W Bit 3 R/W Endereos: 9Bh Bit 2 R/W Bit 1 R/W Bit 0 R/W

Endereo de acesso a EEPROM

53

Conhecendo o EEDATA Esse registrador possui duas funes distintas: nas operaes de escrita da EEPROM, ele deve ser preenchido com o dado a ser armazenado, j nas operaes de leitura, ele armazena o dado lido. Registrador: EEDATA Bit 7 R/W Bit 6 R/W Bit 5 R/W Bit 4 R/W Bit 3 R/W Endereos: 9Ah Bit 2 R/W Bit 1 R/W Bit 0 R/W

Dado para escrita / leitura da EEPROM Conhecendo os EECONS Existem dois registradores de configurao da EEPROM: EECON1 e EECON2. Vejamos primeiramente o EECON1 que responsvel pelas operaes de escrita e leitura da EEPROM. Registrador: EECON1 Bit 6 Bit 5 R/W R/W Endereos: 9Ch Bit 2 Bit 1 R/W WREN R/W WR

Bit 7 R/W -

Bit 4 R/W EEIF

Bit 3 R/W WRERR

Bit 0 R/W RD

EEIF Identificao da interrupo de final da escrita na EEPROM. 0 = Esta interrupo no ocorreu 1 = Esta interrupo ocorreu * Esse bit se encontra neste registrador por no haver mais espao no registrador INTCOM. WRERR Identificao de erro durante a escrita na EEPROM. 0 = No ocorreu erro, a escrita foi completada 1 = Um erro ocorreu por uma escrita no terminada (um reset pode ter ocorrido). WREN Habilitao de escrita na EEPROM (bit de segurana). 0 = No 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. 54

Em relao ao EECON2, devemos comentar que no se trata de um registrador verdadeiramente implementado na memria. Ele s utilizado durante a inicializao do ciclo de escrita na EEPROM por uma questo de segurana, evitando assim que a memria seja alterada acidentalmente. Registrador: EECON2 Endereos: 9Dh Utilizado para inicializar corretamente a escrita na EEPROM

4.8.4 - Endereamento indireto


Conhecendo o FSR e o INDF O FSR um registrador em que pode ser escrito um outro endereo de memria que ser acessado indiretamente, como se ele fosse apenas um ponteiro. J o INDF no um registrador realmente verdadeiro, trata-se somente de um espelho do endereo apontado pelo FSR. Registrador: FSR Bit 7 R/W Bit 6 R/W Bit 5 R/W Bit 4 R/W Bit 3 R/W Endereos: 04h e 84h Bit 2 R/W Bit 1 R/W Bit 0 R/W

Ponteiro para endereamento indireto Registrador: INDF Endereos: 00h e 80h

Valor do endereamento indireto

55

4.9 Exerccios 1 Qual a funo do microcontrolador ? __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 2 Compare o microcontrolador com o microprocessador e indique suas principais diferenas. __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 3 Imaginando o microcontrolador como um dispositivo de seis partes, indique quais so e como defini-las. __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 4 Sabendo que o microcontrolador PIC utiliza uma tecnologia RISC, defina-a e indiquem quais as suas vantagens. __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________

56

5 Dentre os ciclos de mquina, a diviso do clock por quatro, forma as fases Q1, Q2, Q3, Q4. Explique a funo Pipeline, com base nas informaes anteriores. __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 6 Qual a funo do vetor de reset, vetor de interrupo e a pilha ? __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 7 Qual a diferena entre os registradores especiais e os registradores de uso geral ? __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 8 Para que serve a interrupo nos microcontroladores PIC ? __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 9 Dentre os tipos de interrupo para os microcontroladores PIC, selecionamos somente quatro. Quais so e explique-as. __________________________________________________________________ __________________________________________________________________ __________________________________________________________________
57

__________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 10 Explique o procedimento executado pelo microcontrolador, sempre que uma interrupo acontece. __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 11 Cite as principais caractersticas do microcontrolador 16F628. __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 12 Comente sobre os circuitos osciladores para o microcntrolador PIC. __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 13 - Explique o comportamento do detector de baixa tenso para o microcontrolador PIC. __________________________________________________________________ __________________________________________________________________ __________________________________________________________________

58

14 Indique qual a funo 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_________________________________________________ __________________________________________________________________ __________________________________________________________________
59

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

60

Anotaes:
__________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________
61

CAPTULO 5

Resumo e condies dos bancos de memria aps o reset

Programao e linguagem de mquina Noes de fluxograma de programao O resumo das instrues

62

5 RESUMOS E CONDICOES DOS BANCOS DE MEMORIA APS RESET


Hex 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 CCPR1L CCPR1H
SPEN

Nome INDF TMR0 PCL STATUS FSR PORTA PORTB

Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

Bit 2

Bit 1

Bit 0

Power-on

Outros Reset

BANK 0
Valor do endereo indireto (no um registrador verdadeiro)

---- ----

---- ----

Contador TMR0 de 8 bits Parte baixa (8 bits menos significativos) do PC IRP RP1 RP0 /TO /PD Z DC C

xxxx xxxx uuuu uuuu 0000 0000 0000 0000 0001 1xxx 000q quuu xxxx xxxx uuuu uuuu
RA0 RB0

Ponteiro para o endereamento indireto memria RA7 RB7 RA6 RB6 RA5 RB5 RA4 RB4 RA3 RB3 RA2 RB2 RA1 RB1

xxxx 0000 xxxx 0000 xxxx xxxx uuuu uuuu

No implementado no PIC 16f628. O valor lido sempre zero. No implementado no PIC 16f628. O valor lido sempre zero. No implementado no PIC 16f628. O valor lido sempre zero.

PCLATH INTCON PIR1 TMR1L TMR1H T1CON TMR2 T2CON

GIE EEIE

EEIE CMIF

TOIE RCIF INTE TXIF

Parte alta do PC RBIE TOIF


CCP1IF

---0 0000

---0 0000

INTF

RBIF 0000 000x 0000 000u

TMR2IF TMR1IF

0000 -000 0000 000 xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx

No implementado no PIC 16f628. O valor lido sempre zero.

Registrador de acesso ao LSB do timer 1 Registrador de acesso ao MSB do timer 1 T1CKPS TICKPS T10SCE T1SYN TMR1C TMR10

--00 0000

--uu uuuu

Registrador de acesso ao contedo do timer 2 TOU TPS3 TOU TPS2 TOU TPS1 TOU TPS0 TMR 20N T2CK PS0 T2CK PS0

0000 0000 0000 0000 -000 0000 -uuu uuuu

No implementado no PIC 16f628. O valor lido sempre zero. No implementado no PIC 16f628. O valor lido sempre zero.

Registrador de captura / comparao / PWM (LSB) Registrador de captura / comparao / PWM (LSB) RX9
CCP1X CCP1Y CCP1 M3 CCP1 M2 CCP1 M1 CCP1 M0

xxx xxxx xxxx xxxx xxx xxxx xxxx xxxx --00 0000 --00 0000

17 CCP1CON 18 19 1A 1B 1C 1D RCSTA TXREG RCREG

SREN

CREN ADEN

FERR

OERR RX9D

0000 00x 0000 00x 0000 0000 0000 0000 0000 0000 0000 0000

Registrador de transmisso de dados USART Registrador de recepo de dados USART


No implementado no PIC 16f628. O valor lido sempre zero. No implementado no PIC 16f628. O valor lido sempre zero. No implementado no PIC 16f628. O valor lido sempre zero.

63

1E 1F 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F VIRCON TXSTA SPBRG EEDATA EEADR EECON1 EECON2


-

No implementado no PIC 16f628. O valor lido sempre zero.

CMCON INDF OPTION PCL STATUS FSR TRISA TRISB

C2OUT C1OUT C2INV C1INV

CIS

CM2

CM1

CM0

0000 0000 0000 0000 ---- ------- ----

BANK 1
Valor do endereamento indireto /RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0

1111 1111 1111 1111 0000 0000 0000 0000 0001 1xxx 000q quuu xxxx xxxx uuuu uuuu 1111 1111 1111 1111 1111 1111 1111 1111 ---- ------- ------- ------0 0000 ---- ------- ------- ------0 0000

Parte baixa (8 bits menos significativos) do PC IRP RP1 RP0 /TO /PD Z DC C

Ponteiro para o endereamento indireto RA7 RB7 RA6 RB6 RB5 RA4 RB4 RA3 RB3 RA2 RB2 RA1 RB1 RA0 RB0

No implementado no PIC 16f628. O valor lido sempre zero. No implementado no PIC 16f628. O valor lido sempre zero. No implementado no PIC 16f628. O valor lido sempre zero.

PCLATH INTCON PIE1 PCON

GIE EEIE

EEIE CMIE

TOIE RCIE INTE TXIE

Parte alta do PC RBIE TOIF


CCP1IE

INTF

RBIF 0000 000x 0000 000u

TMR2IE TMR1IE

0000 -000 0000 000 ---- ------- 1-0x ---- ------- ------- ------- ------- ------- ------- ------- ------- ------- 1-uq ---- ------- ------- ------- ------- ------- ------- ------- ----

No implementado no PIC 16f628. O valor lido sempre zero.

OSCF

/POR /BOD

No implementado no PIC 16f628. O valor lido sempre zero. No implementado no PIC 16f628. O valor lido sempre zero. No implementado no PIC 16f628. O valor lido sempre zero.

PR2

Registrador de perodo do timer 2


No implementado no PIC 16f628. O valor lido sempre zero. No implementado no PIC 16f628. O valor lido sempre zero. No implementado no PIC 16f628. O valor lido sempre zero. No implementado no PIC 16f628. O valor lido sempre zero. No implementado no PIC 16f628. O valor lido sempre zero.

1111 1111 1111 1111

CSRC

TX9

TXEN SYNC

BRGH TRMT TX9D

0000 -010 0000 -010 0000 0000 0000 0000 xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx

Registrador do gerador de Baud Rate (BRG) Registrador de dados da EEPROM Registrador de endereamento da EEPROM WRERR

WREN

WR

RD

---- x000 ---- ------- ----

---- q000 ---- ------- ----

Registrador de controle auxiliar da EEPROM


No implementado no PIC 16f628. O valor lido sempre zero.

VRE

VROE

VRR

VR3

VR2

VR1

VR0

000- 0000 000- 0000

64

BANK 2 100 101 102 103 104 105 106 107 108 109 10A PCLATH 10B INTCON 11F 180 181 182 183 184 185 186 187 188 189 18A PCLATH 18B INTCON 19F
GIE GIE

INDF PCL STATUS FSR PORT B


RB7 IRP

Valor do endereamento indireto /RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0

---- ----

---- ----

1111 1111 1111 1111 0000 0000 0000 0000 0001 1xxx 000q quuu xxxx xxxx uuuu uuuu ---- ------- ------- ------- ------0 0000 ---- ------- ------- ------- ------- ------- ------0 0000 ---- ------- ----

Parte baixa (8 bits menos significativos) do PC RP1 RP0 /TO /PD Z DC C

Ponteiro para o endereamento indireto


No implementado no PIC 16f628. O valor lido sempre zero.

RB6

RB5

RB4

RB3

RB2

RB1

RB0

1111 1111 1111 1111

No implementado no PIC 16f628. O valor lido sempre zero. No implementado no PIC 16f628. O valor lido sempre zero. No implementado no PIC 16f628. O valor lido sempre zero.

EEIE

TOIE INTE

Parte alta do PC RBIE TOIF INTF

RBIF 0000 000x 0000 000u

No implementado no PIC 16f628. O valor lido sempre zero.

BANK 3 INDF PCL STATUS FSR PORT B


RB7 IRP Valor do endereamento indireto /RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0

1111 1111 1111 1111 0000 0000 0000 0000 0001 1xxx 000q quuu xxxx xxxx uuuu uuuu ---- ------- ------- ------- ------0 0000 ---- ------- ------- ------- ------- ------0 0000 ---- ----

Parte baixa (8 bits menos significativos) do PC RP1 RP0 /TO /PD Z DC C

Ponteiro para o endereamento indireto


No implementado no PIC 16f628. O valor lido sempre zero.

RB6

RB5

RB4

RB3

RB2

RB1

RB0

1111 1111 1111 1111

No implementado no PIC 16f628. O valor lido sempre zero. No implementado no PIC 16f628. O valor lido sempre zero. No implementado no PIC 16f628. O valor lido sempre zero.

EEIE

TOIE INTE

Parte alta do PC RBIE TOIF INTF

RBIF 0000 000x 0000 000u

No implementado no PIC 16f628. O valor lido sempre zero.

* u inalterado, x desconhecido, q depende de condio. Os endereos entre 10Ch at 11Fh no banco 2 e os endereos 18Ah at 19Fh no so implementados.

65

5.1 - Programao e linguagem de mquina


Para que um circuito microprocessado execute as tarefas para as quais foi projetado, necessrio que o programador informe ao sistema o que deseja que ele faa. Isso feito com o auxilio de instrues organizadas numa seqncia lgica e coerente. Essa seqncia de instrues recebe o nome de programa. Os microcontroladores somente executam programas cujas instrues estejam codificadas em linguagem binria, tambm conhecidas como cdigo de mquina. Quando se programa um circuito microprocessado, utilizamos uma linguagem que abrevia os cdigos (hexadecimal) em instrues mnemnicas. Os mnemnicos so mais fceis de memorizar e facilitam a identificao das instrues. A programao realizada em linguagem assembly e deve conter o cdigo de operao, o operando e o comentrio da instruo.

5.2 - Noes de fluxograma de programao


Um fluxograma constitui-se de um conjunto de smbolos interligados por setas que indicam o sentido do fluxo do programa. Cada smbolo do fluxograma tem uma forma prpria que define sua funo. Abaixo temos uma tabela que apresenta apenas os smbolos mais utilizados e suficientes para desenvolver as atividades de programao. Smbolo Descrio Processamento Uma instruo ou grupo de instruo que executam uma funo de processamento de programa Terminal O ponto de incio, trmino ou interrupo de um programa.

Deciso Smbolo utilizado para indicar a possibilidade de desvios para diversos outros pontos do programa de acordo com situaes variveis. Processamento Predefinido Um grupo de operaes no includas no diagrama de blocos. Ex: sub-rotinas.

Conexo de pgina Uma conexo utilizada para indicar uma entrada ou sada, ou para outra pgina do diagrama. Direo de Fluxo A direo do fluxo de dados ou de processamento.

66

Set de instrues, termos mais utilizados Antes de apresentar o set de instrues necessrio que alguns termos utilizados na construo dos nomes das instrues sejam apresentados. WORK Trata-se de um registrador temporrio para operaes na ULA. No Assembler do PIC, ele conhecido com W ou acumulador. FILE Referncia a um registrador (posio de memria) propriamente dito. Utilizaremos a letra F para sua representao nos nomes de instrues e f nos argumentos delas. LITERAL Um numero qualquer que pode ser escrito na forma decimal, hexadecimal ou binria. Utilizaremos a letra L para sua representao nos nomes de instrues e k nos argumentos delas. DESTINO O local onde deve ser armazenado o resultado da operao. Existem somente dois destinos possveis: F, que guardar o resultado no prprio registrador passado como argumento, ou W, que colocar o resultado em Work. Na verdade, a sintaxe das instrues, o destino deve ser expresso pelos nmeros 0 (W) e 1 (F). No entanto, como veremos mais adiante, as letras F e W so definidas no include para facilitar a programao. BIT Bit especifico dentro de um byte, utilizaremos a letra B para sua representao nos nomes de instrues 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 instrues. SKIP Significa pulo e utilizado para criar desvios, pulando a prxima linha. Utilizaremos a letra S para represent-lo nos nomes das instrues. 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 instrues. CLEAR Refere-se ao clear de um bit, significa lev-lo ao estado Zero. Utilizaremos a letra C para represent-lo nos nomes das instrues. ZERO Algumas instrues podem gerar desvios se o resultado da operao efetuada for zero. Neste caso, utilizaremos a letra Z para indicar tal condio. Outros termos utilizados so especficos das aes realizadas pelas instrues e so praticamente auto-explicativos. Citados abaixo. ADD Soma. CLR Limpar, zerar (Clear) DEC Decremento de uma unidade IOR Lgica OU RL Rotacionar 1 bit para esquerda (Left) SUB Subtrao AND Lgica E. COM - Complemento INC Incremento de uma unidade MOV Mover, transferir para algum lugar. RR Rotacionar 1 bit para direita (Right) XOR Lgica OU exclusivo.

SWAP Inverso entre as partes alta e baixa de um registrador. Para facilitar a compreenso das 35 instrues que compe o PIC 16F628, vamos organiz-los em quatro grupos conforme as suas aplicaes. Operaes com registradores. Operaes com bits - Operaes com literais. - Controles.

67

5.3 - O resumo das instrues


A linha de PICs de 14 bits compartilha o mesmo conjunto de instrues. Isto facilita em muito a migrao de um dispositivo para o outro, visto que poderemos reutilizar muito o software. O que diferencia so os registradores internos dos dispositivos. Operaes com registradores Instruo ADDWF ANDWF CLRF COMF DECF DECFSZ INCF INCFSZ IORWF MOVF MOVWF RLF RRF SUBWF SWAPF XORWF Instruo ADDLW ANDLW IORLW MOVLW SUBLW XORLW Instruo BCF Argumentos f,d f,d f f,d f,d f,d f,d f,d f,d f,d f f,d f,d f,d f,d f,d Argumentos k k k k k k Argumentos f,b Descrio Soma W e f guardando o resultado em d. Lgica E entre W e f, guardando o resultado em d. Limpa f. Calcula o complemento de f, guardando o resultado em d. Decrementa f, guardando o resultado em d. Decrementa f, guardando o resultado em d e pula a prxima linha se o resultado for zero. Incrementa f, guardando o resultado em d. Incrementa f, guardando o resultado em d e pula a prxima linha se o resultado for zero. Lgica OU entre W e f, guardando o resultado em d. Move o contedo de f para d (cpia). Move o contedo de W para f (cpia). Rotaciona o contedo de f um bit para esquerda. Rotaciona o contedo de f um bit para direita. Subtrai W d f (f - W), guardando o resultado em d. Executa uma inverso entre as partes alta e baixa de f, guardando o resultado em d. Lgica OU exclusivo entre W e f, guardando o resultado em d. Operaes com literais Descrio Soma k com W, guardando o resultado em W. Lgica E entre K e W, guardando o resultado em W. Lgica OU entre K e W, guardando o resultado em W. Move k para W. Subtrai W de k (k W), guardando o resultado em W. Lgica OU exclusivo entre K e W, guardando o resultado em W. Operaes com bits Descrio Impe 0 (zero) ao bit b do registrador f. 68

BSF BTFSC BTFSS

f,b f,b f,b

Impe 1 (um) ao bit b do registrador f. Testa o bit b do registrador f, e pula a prxima linha se ele for 0 (zero). Testa o bit b do registrador f, e pula a prxima linha se ele for 1 (um). Controle Descrio Limpa W. Gasta um ciclo de mquina sem fazer absolutamente nada. Executa a rotina R. Limpa o registrador WDT para no acontecer o reset. Desvia para o ponto R, mudando o PC. Retorna de uma interrupo. Retorna de uma rotina, com k em W. Retorna de uma rotina, sem afetar o W. Coloca o PIC em modo de sleep (dormindo) para economia de energia.

Instruo CLRW NOP CALL CLRWDT GOTO RETFIE RETLW RETURN SLEEP

Argumentos R R K -

69

Anotaes:
__________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________
_____________________________________________________________________________ 70

CAPTULO 6

Simulaes com microprocessador PIC16F628

O programador JDM O programa ICPROG transferncia de dados As instrues detalhadas do PIC

71

6 SIMULAES COM MICROPROCESSADOR PIC16F628 6.1 Programador JDM PIC


Para que possamos gravar e ler microcontroladores PIC, se faz necessrio utilizao de um programa com funo de programador e leitor de PIC. Sugerimos a utilizao do programador JDM. Abaixo temos o hardware necessrio para essa implementao e para a utilizao do programador, temos que instalar o programa ICPROG. Explicado em seguida. Lista de Material 1 Conector DB9 fmea 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 100f / 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 comunicao serial.

J1 R12
6 7 8 9 1 2 3 4 5

D13 16F628
RA2 RA1 RA3 RA0 RA4 OSC1 MCLR OSC2 VSS VDD RB0 RB7 RB1 RB6 RB2 RB5 RB3 RB4

R11

Q2

Q1 R10 D11 C2 100uF D16 8V2

C3 22uF

D18 LED11

D17 5V1 D12 D14

Figura 15 Esquema eltrico 72

6.2 O programa ICPROG de transferncia de dados para PIC


O gravador baseado no JDM (Jens Dyekjaer Madson) utiliza tambm as instrues da Microchip. Suporta a maioria dos microcontroladores PIC de 8, 18, 28 e 40 pinos com encapsulamento DIP que possuam o recurso de programao (gravao) serial. A gravao simples e rpida, ele conectado diretamente ao PC via interface serial RS-232 (conector DB-9) e no utiliza fonte de alimentao externa. Permite a gravao "ICSP" (in-circuit serial programming) ou seja, pode-se gravar o PIC j montado na placa de aplicao, reduzindo o tempo de desenvolvimento e permitindo a gravao de dispositivos com qualquer encapsulamento inclusive SMD. fornecido montado e testado com cabo para conexo ao PC. Os requisitos mnimos so: Hardware - 8Mb de memria RAM e um processador 386 Software - Sistema Operacional Windows 95, 89, ME, NT, 2000 ou XP. INSTALAO 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 tambm necessrio 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 aplicao, faa duplo clique no cone do icprog. Em sistemas baseados em NT, ser necessrio instalar o respectivo NT Driver (mais adiante ser explicado como o instalar). Ao abrir a aplicao pela 1 vez, ser apresentada uma janela de configurao de Hardware, esta janela pode ser mais tarde alterada conforme as necessidades, de inicio pode fechar a janela, clique no boto 'OK' para comear a utilizar a aplicao.

Figura 16 Hardware settings

73

Em Sistemas Operacionais NT e 2000 necessrio instalar um arquivo de Driver para que o Software consiga comunicar com as portas de interface do PC (porta srie e paralela), pois o Sistema Operacional (Windows) no permite o acesso direto das aplicaes ao Hardware do PC. Este Driver instalado dentro do IC-Prog, bastando para isso abrir a aplicao e acessar o menu : Settings : Options Misc

Figura 17 - Options Como citado acima necessrio ter instalado no computador o programa ICPROG. Para simulao tambm importante que voc tenha instalado no computador o programa MPLAB. Desenvolva o programa no editor preferido (Sugesto MPLAB 6.62) em seguida compile o programa para que possa ser gerado *.HEX. O programa de extenso *.HEX devera ser carregado atravs do compilador ICPROG e transferido para o microcontrolador 16f628. A tela de abertura se encontra na figura 18, onde muitas vezes se faz necessrio que seja alterada a linguagem que esta sendo utilizada para manipulao do ICPROG, nesta implementao necessrio entrar no item configurao, opes e linguagem. Utilizar portugus. J na tela abaixo vemos como carregar o programa de extenso HEX, onde j foi compilado utilizando-se o MPLAB ou do MPASM.

74

Figura 18 Tela de carregamento de arquivo no ICPROG Aps ter carregado o arquivo de extenso 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 no houve erro durante transferncia.

selecione o tipo de Programador antes de utilizar e as definies de programao.

selecione o IC a programar

75

selecione o Buffer de informao

Abra o arquivo de que contem a programao e o arquivo de dados (caso exista).

Ajuste a configurao do IC. ( tipo de oscilador, fusveis, etc. )

Transfira a programao para o hardware ( IC ).

Se no forem detectados erros o IC ficou corretamente programado

76

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

C. I.

Tipo

IC-Prog Fabricante ver: ver: ver: ver:


1.05A 1.05 1.04C 1.04A

Observaes

PIC12C508/A PIC12C509/A PIC 12CE518 PIC12CE519 PIC 12C671 PIC12C672 PIC12CE673 PIC12CE674 PIC12F629 PIC12F675 PIC16C433 PIC16C54 PIC16C56 PIC16C 58 PIC16C61 PIC16C62A/B PIC16C63/A 16C64A 16C65A/B PIC16C66 PIC16C67 PIC16C71 PIC16C72/A PIC16C/F73A/B PIC16C/F74A/B PIC16C/F76 PIC16C/F77 PIC16F83 PIC16C/F84/A PIC16C505 PIC16C605 PIC16C620 PIC16C621 PIC16C622 /A PIC16CE625 PIC16F627 PIC16F628

Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador

Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip

77

PIC16C711 PIC16C712 PIC16C715 PIC16C765 PIC16F870 PIC16F871 PIC16F872 PIC16F873 PIC16F873 A PIC16F874 PIC16F874A PIC 16F876 PIC16F876 PIC16F877 PIC16F877A PIC16C923 PIC16C924 PIC18F242 PIC18F248 PIC18F252 PIC18F258 PIC18F442 PIC18F448 PIC18F452 PIC18F458

Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador Microcontrolador

Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip

6 . 3 Display de Cristal Liquido


Display de Cristal Liquido Uma outra aplicao muito utilizada com microcontrolador o display de LCD, onde podemos escrever caracteres alfanumricos segundo cdigo ASCII, esses dispositivos j possuem internamente um microcontrolador dedicado, por isso chamamos de LCD inteligente, e j possui armazenado o cdigo ASCII, bastando via software enviar comandos de inicializao, de escrita ou at mesmo de leitura. Existe uma gama muito grande de LCD no mercado, mas a maioria tem o hardware compatvel. Nosso exemplo de aplicao vai utilizar o modo que utiliza o menor nmero de pinos possvel, 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.

78

Vejamos os pinos do LCD na tabela abaixo:

79

6.4 O Conjunto de instrues do microcontrolador PIC

ADDLW Sintaxe Operao Status Codificao Descrio

Ciclos

Efetua a soma de um literal no registrador W [label] ADDLW k (W) + k (W) C, DC, Z 0011 111x kkkk kkkk O contedo do registrador W somado com literal k e o resultado colocado no registrador W 1

ADDWF Sintaxe Operao Status Codificao Descrio

Ciclos

Efetua a soma do registrador W ao registro f [label] ADDWF f,d (W) + (f) (destino) C, DC, Z 0011 0111 dfff ffff Soma o contedo 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. 1

ANDLW Sintaxe Operao Status Codificao Descrio

Ciclos

Operao lgica <E entre o literal k e o registro W [label] ANDLW k (W) .AND. (k) (W) Z 0011 1001 kkkk kkkk Realiza a operao de lgica E (AND) entre o contedo do registrador W com literal o k e o resultado colocado no registrador W 1

80

ANDWF Sintaxe Operao Status Codificao Descrio

Ciclos

Operao lgica <E entre o registro W com o registro f. [label] ANDWF f,d (W) .AND. (f) (destino) Z 0000 0101 dfff ffff Realiza a operao de lgica <E (AND) entre o contedo 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. 1

BCF Sintaxe Operao Status Codificao Descrio Ciclos

Limpa um bit do registro f [label] BCF f.d 0 (f<b) Nenhum 0001 00bb bfff ffff Faz o bit <b do registro f ser igual a zero. 1

BSF Sintaxe Operao Status Codificao Descrio Ciclos

Seta o bit f [label] BSF f.d 1 (f<b) Nenhum 0001 01bb bfff ffff Faz o bit <b do registro f ser igual a um. 1

81

BTFSC Sintaxe Operao Status Codificao Descrio Ciclos

Teste bit f e pula se for zero [label] BTFSC f, d Desvia se f<b for igual zero. Nenhum 0001 10bb bfff ffff Se o bit <b no registro <f for igual zero, pula a prxima instruo. 1 se no houver o desvio, 2 se ocorrer o desvio.

BTFSS Sintaxe Operao Status Codificao Descrio Ciclos

Teste bit f e pula se for um [label] BTFSS f, d Desvia se f<b for igual a um. Nenhum 0001 11bb bfff ffff Se o bit <b no registro <f for igual a um, pula a prxima instruo. 1 se no houver o desvio, 2 se ocorrer o desvio.

CALL Sintaxe Operao

Status Codificao Descrio

Ciclos

Chama uma sub-rotina [label] Call k (PC) +1 TOS k (PC <10C0), (PCLATH <4 -3) (PC <12 11) Nenhum 0010 0kkk kkkk kkkk Chama uma sub-rotina. Primeiro, o endereo de retorno (PC +1) colocado no stack. O endereo de 11 bits armazenado nos bits <100 do PC. Os bits superiores do PC so carregados do registro PCLATH. 2

82

CLRF Sintaxe Operao Status Codificao Descrio Ciclos

Limpa o registro f [label] CLRF f 0 (f) 1Z Z 0001 0001 1fff ffff O contedo do registro <f feito igual a zero e o bit Z feito igual a um. 1

CLRW Sintaxe Operao Status Codificao Descrio Ciclos

Limpa o registro W [label] CLRFW 0 (W) 1Z Z 0001 0001 0000 0011 O contedo do registro <W feito igual a zero e o bit Z feito igual a um. 1

CLRWDT Sintaxe Operao

Status Codificao Descrio

Ciclos

Limpa o registro do watch dog [label] CLRWDT 0 (WDT) 0 WDT preescalador 1 TO (invertido) 1 PD (invertido) TO, PD 0000 0000 0110 0100 Faz o temporizador watch dog timer igual a zero. Tambm zera o preescalador do watch dog. Os bits de estado TO e PD so feitos igual a 1. 1

83

COMF Sintaxe Operao Status Codificao Descrio

Ciclos

Complementa o registro f [label] COMF f,d (naof) destino Z 0001 1001 dfff ffff O contedo 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. 1

DECF Sintaxe Operao Status Codificao Descrio

Ciclos

Decrementa f [label] DECF f,d (f) 1 (destino) Z 0000 0011 dfff ffff 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. 1

DECFSZ Sintaxe Operao Status Codificao Descrio

Ciclos

Decrementa f e pula se o resultado for zero [label] DECFSZ f,d (f) 1 (destino), desvia se resultado igual a zero. Nenhum 0000 1011 dfff ffff Decrementa o contedo 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 prxima instruo descartada. 1 se no ocorrer o desvio. 2 se ocorrer o desvio.
84

GOTO Sintaxe Operao Status Codificao Descrio

Ciclos

Desvia para o endereo especificado [label] GOTO k k (PC) < 100 PCLATH <4 3 (PC <12 11) Nenhum 0010 1kkk kkkk kkkk Desvia o programa pra o endereo k. Os onze bits k so carregados para o registro do PC <100. Os bits superiores do PC so carregados a partir do registro PCLATH. 2

INCF Sintaxe Operao Status Codificao Descrio

Ciclos

Incrementa f [label] INCF f,d (f) + 1 (destino) Z 0000 1010 dfff ffff Incrementa o contedo 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. 1

INCFSZ Sintaxe Operao Status Codificao Descrio

Ciclos

Incrementa f e pula se o resultado for zero [label] INCFSZ f,d (f) 1 (destino), desvia se resultado igual a zero. Nenhum 0000 1111 dfff ffff Incrementa o contedo 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 prxima instruo descartada. 1 se no ocorrer o desvio. 2 se ocorrer o desvio.
85

IORLW Sintaxe Operao Status Codificao Descrio

Ciclos

Ou inclusivo entre k e registrador W [label] IORLW k (W) .OR. (k) (W). Z 0011 1000 kkkk kkkk Realiza a operao lgica OU entre o registro k e o registro W. O resultado colocado no registro W. 1

IORWF Sintaxe Operao Status Codificao Descrio

Ciclos

Ou inclusivo entre f e registrador W [label] IORWF f,d (W) .OR. (f) (destino) Z 0011 0100 dfff ffff Realiza a operao lgica 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. 1

MOVLW Sintaxe Operao Status Codificao Descrio Ciclos

Move literal para o registro W [label] MOVLW k k (W) Nenhum 0011 00xx kkkk kkkk Carrega o valor do literal k para o registrador W. 1

86

MOVF Sintaxe Operao Status Codificao Descrio

Ciclos

Movimenta f [label] MOVF f,d (f) destino Z 0000 1000 dfff fffff O contedo 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 prprio registrador. Esta instruo pode ser utilizada para verificarmos se o contedo de um registrador zero, pois o flag Z alterado. 1

MOVWF Sintaxe Operao Status Codificao Descrio Ciclos

Movimenta o registro W para o f [label] MOVWF f (W) (f) Nenhum 0000 0000 1fff fffff Movimenta os dados do registrador W para o registro f. 1

NOP Sintaxe Operao Status Codificao Descrio

Ciclos

Nenhuma operao [label] NOP Nada Nenhum 0000 0000 0000 0000 No executa nenhuma instruo. til quando utilizado como ajuste fino de laos de temporizao. 1

87

RETFIE Sintaxe Operao Status Codificao Descrio

Ciclos

Retorno de uma interrupo. [label] RETFIE TOS - (PC) 1 GIE Nenhum 0000 0000 0000 1001 O topo do stack (TOS) carregado no PC. Os interrupts so habilitados de uma forma global pelo flag GIOE. O apontador do stack pointer diminudo de um (POP). 2

RETLW Sintaxe Operao Status Codificao Descrio

Ciclos

Retorna com um literal na W. [label] RETLW k k (W) TOS (PC) Nenhum 1100 01xx kkkk kkkk O registrador W carregado como valor de k. O contador de programa assume o valor do topo do stack. Equivale a uma instruo de retorno de sub-rotina sendo que o registro W retorna com o valor desejado. 2

RETURN Sintaxe Operao Status Codificao Descrio

Ciclos

Retorna da sub-rotina. [label] RETURN TOS (PC) Nenhum 0000 0000 0000 1000 O contador de programa assume o valor do topo do stack. O apontador do stack atualizado (POP). 2

88

RLF Sintaxe Operao Status Codificao Descrio

Ciclos

Desloca f para esquerda usando o carry. [label] RLF f,d Veja a descrio C 0000 1101 dfff ffff O contedo do registro <f deslocado de um bit para a esquerda, sendo que o bit 7 enviado para carry. O contedo 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. 1

RRF Sintaxe Operao Status Codificao Descrio

Ciclos

Desloca f para direita usando o carry. [label] RRF f,d Veja a descrio C 0000 1100 dfff ffff O contedo do registro <f deslocado de um bit para a direita, sendo que o bit 0 enviado para carry. O contedo 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. 1

89

SLEEP Sintaxe Operao

Status Codificao Descrio

Ciclos

Vai para o modo de repouso (stand by) [label] SLEEP 00 WDT 0 pr-escalador do WDT 1 TO barra 0 PD barra TO, PD barra 0000 0000 0110 0011 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 so zerados. O processador assume o modo SLEEP, com o oscilador parado. Para sair deste modo somente com reset ou interrupo. 1

SUBLW Sintaxe Operao Status Codificao Descrio Ciclos

Subtrai de um literal o valor do registrador W. [label] SUBLW k k (W) (W) C, DC, Z 0011 110x kkkk kkkk Subtrai do valor do literal <k o contedo do registrador W. O resultado colocado em W. 2

90

SUBWF Sintaxe Operao Status Codificao Descrio

Ciclos

Subtrai o registro <f do contedo do registro W [label] SUBWF f,d (f) (W) (dest) C, DC, Z 0000 0010 dfff ffff Subtrai do registrador f o contedo 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. 1

SWAPF Sintaxe Operao Status Codificao Descrio

Ciclos

Inverte bits em f [label] SWAPF f,d (f<3,0) (dest <7.4) (f<7,4) (dest <3,0) Nenhum 0000 1110 dfff ffff Troca de posio 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. 1

XORLW Sintaxe Operao Status Codificao Descrio

Ciclos

Ou exclusivo entre k e o registro W [label] XORLW k (W) . XOR. (k) (W) Z 0011 1010 kkkk kkkk Realiza a operao lgica OU EXCLUSIVO entre o registrador k e o registro W. O resultado colocado no registro W. 1

91

XORWF Sintaxe Operao Status Codificao Descrio

Ciclos

Ou exclusivo entre o registro W e f [label] XORWF f,d (W) . XOR. (f) (destino) Z 0011 0100 dfff ffff Realiza a operao lgica 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. 1

92

; * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * ;* ;* ; ;* ;* TRAB00 NOME DO PROJETO CLIENTE DATA: 10/10/XX DESCRIO DO ARQUIVO MODELO PARA PIC 16F628 OU 16F627 * * * * *

; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * ; *-----------------------------------------------------------------------------------------------------------* ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* ARQUIVOS DE DEFINIES * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * #INCLUDE <P16F628.INC> ;ARQUIVO PADRO MICROCHIP PARA 16F628 __CONFIG _BODEN_ON & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* PAGINAO DE MEMRIA * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;DEFINIO DE COMANDOS PARA ALTERAO DA PGINA DE MEMRIA #DEFINE #DEFINE BANK0 BANK1 BCF STATUS,RP0 BSF STATUS,RP0 ;SETA BANK 0 DE MEMRIA ;SETA BANK 1 DE MAMRIA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* VARIVEIS * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DOS NOMES E ENDEREOS DE TODAS AS VARIVEIS UTILIZADAS ; PELO SISTEMA CBLOCK 0x20 ;ENDEREO INICIAL DA MEMRIA DE ;USURIO W_TEMP STATUS_TEMP ENDC ;REGISTRADORES TEMPORRIOS PARA USO ;JUNTO S INTERRUPES NOVAS VARIVEIS ;FIM DO BLOCO DE MEMRIA

93

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* FLAGS INTERNOS * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DE TODOS OS FLAGS UTILIZADOS PELO SISTEMA ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* CONSTANTES * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DE TODAS AS CONSTANTES UTILIZADAS PELO SISTEMA ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* ENTRADAS * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DE TODOS OS PINOS QUE SERO UTILIZADOS COMO ENTRADA ; RECOMENDAMOS TAMBM COMENTAR O SIGNIFICADO DOS ESTADOS (0 E 1) ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* SADAS * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DE TODOS OS PINOS QUE SERO UTILIZADOS COMO SADA ; RECOMENDAMOS TAMBM COMENTAR O SIGNIFICADO DOS ESTADOS (0 E 1) ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* VETOR DE RESET * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ORG 0x00 GOTO INICIO ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* INCIO DA INTERRUPO * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; ENDEREO DE DESVIO DAS INTERRUPES. A PRIMEIRA TAREFA SALVAR ;OS VALORES DE "W" E "STATUS" PARA RECUPERAO FUTURA ORG 0x04 MOVWF SWAPF MOVWF W_TEMP STATUS,W STATUS_TEMP ;COPIA STATUS PARA STATUS_TEMP ;ENDEREO INICIAL DA INTERRUPO ;COPIA W PARA W_TEMP ;ENDEREO INICIAL DE PROCESSAMENTO

94

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* ROTINA DE INTERRUPO * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; AQUI SER ESCRITA AS ROTINAS DE RECONHECIMENTO E TRATAMENTO DAS ; INTERRUPES ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* ROTINA DE SADA DA INTERRUPO * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; OS VALORES DE "W" E "STATUS" DEVEM SER RECUPERADOS ANTES DE ; RETORNAR DA INTERRUPO SAI_INT SWAPF MOVWF SWAPF SWAPF RETFIE ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* ROTINAS E SUBROTINAS * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; CADA ROTINA OU SUBROTINA DEVE POSSUIR A DESCRIO DE ;FUNCIONAMENTO E UM NOME COERENTE S SUAS FUNES. SUBROTINA1 ;CORPO DA ROTINA RETURN ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* INICIO DO PROGRAMA * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * INICIO BANK0 MOVLW MOVWF BANK1 MOVLW B'00000000' B'00000111' CMCON ;ALTERA PARA O BANCO 0 ;DEFINE O MODO DE OPERAO ;DO COMPARADOR ANALGICO ;ALTERA PARA O BANCO 1 STATUS_TEMP,W STATUS W_TEMP,F W_TEMP,W ;MOVE W_TEMP PARA W ;MOVE STATUS_TEMP PARA STATUS

95

MOVWF MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF BANK0

TRISA B'00000000' TRISB B'10000100' OPTION_REG B'00000000' INTCON

;DEFINE ENTRADAS E SADAS DO PORTA ;DEFINE ENTRADAS E SADAS DO PORTB ;DEFINE OPES DE OPERAO ;DEFINE OPES DE INTERRUPES ;RETORNA PARA O BANCO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* INICIALIZAO DAS VARIVEIS * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* MAIN ;CORPO DA ROTINA PRINCIPAL GOTO MAIN ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* END FIM DO PROGRAMA * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ROTINA PRINCIPAL * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

96

; * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * ;* ;* ; ;* TRAB01 NOME DO PROJETO CLIENTE DATA: 10/10/XX DESCRIO DO ARQUIVO * * * * *

; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * ; *-----------------------------------------------------------------------------------------------------------* ;* SISTEMA MUITO SIMPLES PARA REPRESENTAR UM LED ACESO ;* ;* * ARQUIVOS DE DEFINIES * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * #INCLUDE <P16F628.INC> ;ARQUIVO PADRO MICROCHIP PARA 16F628 __CONFIG _BODEN_ON & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* PAGINAO DE MEMRIA * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;DEFINIO DE COMANDOS DE USURIO PARA ALTERAO DA PGINA DE MEMRIA #DEFINE #DEFINE BANK0 BANK1 BCF STATUS,RP0 BSF STATUS,RP0 ;SETA BANK 0 DE MEMRIA ;SETA BANK 1 DE MAMRIA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* VARIVEIS * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DOS NOMES E ENDEREOS DE TODAS AS VARIVEIS UTILIZADAS ; PELO SISTEMA CBLOCK 0x20 ;ENDEREO INICIAL DA MEMRIA DE ;USURIO W_TEMP STATUS_TEMP TEMPO01 TEMPO02 ENDC ;REGISTRADORES TEMPORRIOS PARA ;INTERRUPES ;ESTAS VARIVEIS CONTAM O TEMPO DE PISCAGEM ;DOS LEDS ;FIM DO BLOCO DE MEMRIA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* FLAGS INTERNOS * **** ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

97

; DEFINIO DE TODOS OS FLAGS UTILIZADOS PELO SISTEMA ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* CONSTANTES * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DE TODAS AS CONSTANTES UTILIZADAS PELO SISTEMA ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* ENTRADAS * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DE TODOS OS PINOS QUE SERO UTILIZADOS COMO ENTRADA ; RECOMENDAMOS TAMBM COMENTAR O SIGNIFICADO DE SEUS ESTADOS (0 E 1) ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* SADAS * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DE TODOS OS PINOS QUE SERO UTILIZADOS COMO SADA ; RECOMENDAMOS TAMBM COMENTAR O SIGNIFICADO DE SEUS ESTADOS (0 E 1) #DEFINE LED PORTB,0 ; 1 -> ACESO #DEFINE LED1 PORTB,1 ; 1 -> ACESO ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* VETOR DE RESET ORG 0x00 GOTO INICIO ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* INCIO DA INTERRUPO * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; AS INTERRUPES NO SERO UTILIZADAS, POR ISSO PODEMOS SUBSTITUIR ; TODO O SISTEMA EXISTENTE NO ARQUIVO MODELO PELO APRESENTADO ABAIXO ; ESTE SISTEMA NO OBRIGATRIO, MAS PODE EVITAR PROBLEMAS FUTUROS ORG 0x04 RETFIE ;ENDEREO INICIAL DA INTERRUPO ;RETORNA DA INTERRUPO * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;ENDEREO INICIAL DE PROCESSAMENTO ;PORTA DO LED1 ; 0 -> APAGADO ;PORTA DO LED

; 0 -> APAGADO

98

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; ROTINA DE DELAY * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * DELAY MOVLW MOVWF DL1 MOVLW MOVWF DL2 NOP NOP DECFSZ GOTO DL2 DECFSZ GOTO DL1 RETURN ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* INICIO BANK0 CLRF PORTA CLRF PORTB BANK1 MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF B'00000000' TRISA B'00000000' TRISB B'10000000' OPTION_REG ;PULL-UPS ;PRESCALER 1:2 NO TMR0 DESABILITADOS ;DEFINE TODO O PORTB COMO SADA ;DEFINE TODO O PORTA COMO SADA ;ALTERA PARA O BANCO 0 ;LIMPA O PORTA ;LIMPA O PORTB ;ALTERA PARA O BANCO 1 INICIO DO PROGRAMA * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * TEMPO02,F TEMPO01,F .200 TEMPO01 .1000 TEMPO02

99

;AS DEMAIS CONFG. SO IRRELEVANTES MOVLW MOVWF BANK0 B'00000000' INTCON ;TODAS AS INTERRUPES DESLIGADAS ;RETORNA PARA O BANCO 0

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* INICIALIZAO DAS VARIVEIS * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* MAIN BSF BSF LED LED1 ;ACENDE O LED0 ;ACENDE O LED1 ROTINA PRINCIPAL * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

CALL DELAY BCF BCF LED LED1

CALL DELAY GOTO MAIN ;RETORNA AO LOOP PRINCIPAL

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* FIM DO PROGRAMA * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * END ;OBRIGATRIO

100

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* ;* ;* ;* TRAB02 BOTO E LED - EX1 KIT PIC 16F628 DATA: 10/10/01 * * * * * *

;* * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * DESCRIO DO ARQUIVO ;*-------------------------------- ------------------------------------------------------------------------* ;* SISTEMA MUITO SIMPLES PARA REPRESENTAR O ESTADO DE ;* UM BOTO ATRAVS DE UM LED. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* ARQUIVOS DE DEFINIES * ;* * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * #INCLUDE <P16F628.INC> ;ARQUIVO PADRO MICROCHIP PARA 16F628

__CONFIG _BODEN_ON & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* PAGINAO DE MEMRIA * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;DEFINIO DE COMANDOS DE USURIO PARA ALTERAO DA PGINA DE MEMRIA #DEFINE #DEFINE BANK0 BANK1 BCF STATUS,RP0 BSF STATUS,RP0 ;SETA BANK 0 DE MEMRIA ;SETA BANK 1 DE MAMRIA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* VARIVEIS * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DOS NOMES E ENDEREOS DE TODAS AS VARIVEIS UTILIZADAS ; PELO SISTEMA CBLOCK 0x20 ;ENDEREO INICIAL DA MEMRIA DE USURIO ;REGISTRADORES TEMPORRIOS PARA ;INTERRUPES ;ESTAS VARIVEIS NEM SERO UTILIZADAS ENDC ;FIM DO BLOCO DE MEMRIA

W_TEMP STATUS_TEMP

101

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* FLAGS INTERNOS * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DE TODOS OS FLAGS UTILIZADOS PELO SISTEMA ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* CONSTANTES * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DE TODAS AS CONSTANTES UTILIZADAS PELO SISTEMA ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* ENTRADAS * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DE TODOS OS PINOS QUE SERO UTILIZADOS COMO ENTRADA ; RECOMENDAMOS TAMBM COMENTAR O SIGNIFICADO DE SEUS ESTADOS (0 E 1) #DEFINE BOTAO PORTA,2 ;PORTA DO BOTO

; 0 -> PRESSIONADO ; 1 -> LIBERADO ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* SADAS * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DE TODOS OS PINOS QUE SERO UTILIZADOS COMO SADA ; RECOMENDAMOS TAMBM COMENTAR O SIGNIFICADO DE SEUS ESTADOS (0 E 1) #DEFINE LED PORTB,0 ; 1 -> ACESO #DEFINE LED1 PORTB,1 ; 0 -> APAGADO ; 1 -> ACESO ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* VETOR DE RESET ORG 0x00 GOTO INICIO ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* INCIO DA INTERRUPO * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;ENDEREO INICIAL DE PROCESSAMENTO ;PORTA DO LED1 ;PORTA DO LED ; 0 -> APAGADO

102

; AS INTERRUPES NO SERO UTILIZADAS, POR ISSO PODEMOS SUBSTITUIR ; TODO O SISTEMA EXISTENTE NO ARQUIVO MODELO PELO APRESENTADO ABAIXO

; ESTE SISTEMA NO OBRIGATRIO, MAS PODE EVITAR PROBLEMAS FUTUROS ORG 0x04 RETFIE ;ENDEREO INICIAL DA INTERRUPO ;RETORNA DA INTERRUPO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* INICIO BANK0 MOVLW MOVWF B'00000111' CMCON ;ALTERA PARA O BANCO 0 ;DEFINE O MODO DE OPERAO ;DO COMPARADOR ANALGICO ;LIMPA O PORTA ;LIMPA O PORTB ;ALTERA PARA O BANCO 1 B'00000100' TRISA B'00000000' TRISB B'10000000' OPTION_REG ;PRESCALER 1:2 NO TMR0 ;PULL-UPS DESABILITADOS ;AS DEMAIS CONFG. SO IRRELEVANTES MOVLW MOVWF BANK0 B'00000000' INTCON ;TODAS AS INTERRUPES DESLIGADAS ;RETORNA PARA O BANCO 0 ;DEFINE TODO O PORTB COMO SADA ;DEFINE RA2 COMO ENTRADA E DEMAIS ;COMO SADAS INICIO DO PROGRAMA * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

CLRF PORTA CLRF PORTB BANK1 MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* INICIALIZAO DAS VARIVEIS * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* ROTINA PRINCIPAL * **** ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

103

MAIN BTFSC BOTAO ;O BOTO EST PRESSIONADO? ;NO, ENTO TRATA BOTO LIBERADO ;SIM, ENTO TRATA BOTO PRESSIONADO GOTO BOTAO_LIB GOTO BOTAO_PRES BOTAO_LIB BCF BCF GOTO BOTAO_PRES BSF BSF GOTO LED LED1 MAIN ;RETORNA AO LOOP PRINCIPAL ;ACENDE O LED LED LED1 MAIN ;RETORNA AO LOOP PRINCIPAL ;APAGA O LED

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* END FIM DO PROGRAMA * ;OBRIGATRIO ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

104

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* ;* ;* ;* TRAB03 DESCRIO DO ARQUIVO CONTADOR SIMPLIFICADO - EX2 KIT PIC 16F628 * * DATA: 30/10/01 * * * *

;* * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * ;*---------------- -------------------------------------------------------------------------* ;* SISTEMA MUITO SIMPLES PARA INCREMENTAR AT UM DETERMINADO ;* VALOR (MAX) DE DEPOIS DECREMENTAR AT OUTRO (MIN). ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* ARQUIVOS DE DEFINIES * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * #INCLUDE <P16F628.INC> ;ARQUIVO PADRO MICROCHIP PARA 16F628 __CONFIG _BODEN_ON & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* PAGINAO DE MEMRIA * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;DEFINIO DE COMANDOS DE USURIO PARA ALTERAO DA PGINA DE MEMRIA #DEFINE #DEFINE BANK0 BANK1 BCF STATUS,RP0 BSF STATUS,RP0 ;SETA BANK 0 DE MEMRIA ;SETA BANK 1 DE MAMRIA

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

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* VARIVEIS * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DOS NOMES E ENDEREOS DE TODAS AS VARIVEIS UTILIZADAS ; PELO SISTEMA CBLOCK 0x20 ;ENDEREO INICIAL DA MEMRIA DE USURIO ;REGISTRADORES TEMPORRIOS PARA ;INTERRUPES VARIVEIS NEM SERO UTILIZADAS ;ARMAZENA O VALOR DA CONTAGEM ;ARMAZENA OS FLAGS DE CONTROLE ;FILTRAGEM PARA O BOTO ;FIM DO BLOCO DE MEMRIA

W_TEMP STATUS_TEMP CONTADOR FLAGS FILTRO ENDC

105

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* FLAGS INTERNOS * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DE TODOS OS FLAGS UTILIZADOS PELO SISTEMA #DEFINE SENTIDO FLAGS,0 ;FLAG DE SENTIDO ; 0 -> SOMANDO ; 1 -> SUBTRAINDO ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* CONSTANTES * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DE TODAS AS CONSTANTES UTILIZADAS PELO SISTEMA MIN MAX T_FILTRO EQU EQU EQU .10 .30 .230 ;VALOR MNIMO PARA O CONTADOR ;VALOR MXIMO PARA O CONTADOR ;FILTRO PARA BOTO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* ENTRADAS * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DE TODOS OS PINOS QUE SERO UTILIZADOS COMO ENTRADA ; RECOMENDAMOS TAMBM COMENTAR O SIGNIFICADO DE SEUS ESTADOS (0 E 1) #DEFINE BOTAO PORTA,2 ;PORTA DO BOTO

; 0 -> PRESSIONADO ; 1 -> LIBERADO ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* SADAS * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DE TODOS OS PINOS QUE SERO UTILIZADOS COMO SADA ; RECOMENDAMOS TAMBM COMENTAR O SIGNIFICADO DE SEUS ESTADOS (0 E 1) ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* VETOR DE RESET ORG 0x00 GOTO INICIO * ;ENDEREO INICIAL DE PROCESSAMENTO ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

106

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* INCIO DA INTERRUPO * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; AS INTERRUPES NO SERO UTILIZADAS, POR ISSO PODEMOS SUBSTITUIR ; TODO O SISTEMA EXISTENTE NO ARQUIVO MODELO PELO APRESENTADO ABAIXO ; ESTE SISTEMA NO OBRIGATRIO, MAS PODE EVITAR PROBLEMAS FUTUROS ORG 0x04 RETFIE ;ENDEREO INICIAL DA INTERRUPO ;RETORNA DA INTERRUPO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* INICIO DO PROGRAMA * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * INICIO BANK1 MOVLW MOVWF SADAS MOVLW MOVWF MOVLW MOVWF B'00000100' TRISA B'00000000' TRISB B'10000000' OPTION_REG ;PRESCALER 1:2 NO TMR0 ;PULL-UPS DESABILITADOS ;AS DEMAIS CONFG. SO IRRELEVANTES MOVLW MOVWF BANK0 MOVLW MOVWF B'00000111' CMCON B'00000000' INTCON ;TODAS AS INTERRUPES DESLIGADAS ;RETORNA PARA O BANCO 0 ;DEFINE O MODO DE OPERAO ;DO COMPARADOR ANALGICO ;DEFINE TODO O PORTB COMO SADA ;DEFINE RA2 COMO ENTRADA E DEMAIS COMO ;ALTERA PARA O BANCO 1

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* INICIALIZAO DAS VARIVEIS CLRF PORTA CLRF PORTB MOVLW MOVWF MIN CONTADOR ;INICIA CONTADOR = V_INICIAL * ;LIMPA O PORTA ;LIMPA O PORTB ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

107

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* ROTINA PRINCIPAL * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * MAIN MOVLW MOVWF CHECA_BT BTFSC GOTO MAIN DECFSZ TRATA_BT BTFSS GOTO SOMA SUBTRAI DECF CONTADOR,F MOVLW SUBWF BTFSC MIN CONTADOR,W STATUS,C ;DECREMENTA O CONTADOR ;MOVE O VALOR MNIMO PARA W ;SUBTRAI O VALOR DE W (MIN) DE CONTADOR ;TESTA CARRY. RESULTADO NEGATIVO? ;NO, ENTO CONTA >= MIN ;SIM, ENTO CONTA < MIN INCF CONTADOR,F BCF SOMA INCF CONTADOR,F MOVLW SUBWF BTFSS MAX CONTADOR,W STATUS,C ;INCREMENTA O CONTADOR ;MOVE O VALOR MXIMO PARA W ;SUBTRAI O VALOR DE W (MIN) DE CONTADOR ;TESTA CARRY. RESULTADO NEGATIVO? ;SIM, ENTO CONTA < MAX ;NO, ENTO CONTA >= MAX BSF SENTIDO ;MUDA SENTIDO PARA SUBTRAO ;VOLTA AO LOOP PRINCIPAL GOTO MAIN SENTIDO ;INCREMENTA CONTADOR NOVAMENTE ;POIS PASSOU DO LIMITE ;MUDA SENTIDO PARA SOMA ;VOLTA AO LOOP PRINCIPAL GOTO MAIN SENTIDO ;DEVE SOMAR (SENTIDO=0)? ;SIM , ;NO FILTRO,F GOTO CHECA_BT BOTAO ;O BOTO EST PRESSIONADO? ;NO, ENTO CONTINUA ESPERANDO SIM ;DECREMENTA O FILTRO DO BOTO ;NO, CONTINUA ESPERANDO SIM T_FILTRO FILTRO ;INICIALIZA FILTRO = T_FILTRO

GOTO ATUALIZA

GOTO ATUALIZA

108

ATUALIZA MOVF CONTADOR,W MOVWF BTFSS GOTO $-1 GOTO MAIN ;* FIM DO PROGRAMA PORTB BOTAO ;COLOCA CONTADOR EM W ;ATUALIZA O PORTB PARA ;VISUALIZARMOS O VALOR DE CONTADOR ;O BOTO CONTINUA PRESSIONADO? ;SIM, ENTO ESPERA LIBERAO PARA ;QUE O CONTADOR NO DISPARE ;NO, VOLTA AO LOOP PRINCIPAL * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * END ;OBRIGATRIO

109

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* ;* ;* ;* TRAB04 PISCA-PISCA - EX3 KIT PIC 16F628 DATA: 30/10/XX * * * * *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * DESCRIO DO ARQUIVO ;*--------------------------- -----------------------------------------------------* ;* PISCA-PISCA VARIVEL PARA DEMONSTRAR A IMPLEMENTAO DE ;* DELAYS E A INVERSO DE PORTAS. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* ARQUIVOS DE DEFINIES * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * #INCLUDE <P16F628.INC> ;ARQUIVO PADRO MICROCHIP PARA 16F628 * ;* * * * * * * * * * * * * * * * ** * * * * * ** * * * ** * * * * * ** * * * ** * * * * * ** ** * * * * * * * *

__CONFIG _BODEN_ON & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* PAGINAO DE MEMRIA * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;DEFINIO DE COMANDOS DE USURIO PARA ALTERAO DA PGINA DE MEMRIA #DEFINE #DEFINE BANK0 BANK1 BCF STATUS,RP0 BSF STATUS,RP0 ;SETA BANK 0 DE MEMRIA ;SETA BANK 1 DE MAMRIA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* VARIVEIS * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DOS NOMES E ENDEREOS DE TODAS AS VARIVEIS UTILIZADAS ; PELO SISTEMA CBLOCK 0x20 ;ENDEREO INICIAL DA MEMRIA DE USURIO ;REGISTRADORES TEMPORRIOS PARA ;INTERRUPES ESTAS VARIVEIS NEM

W_TEMP STATUS_TEMP

110

CONTADOR FILTRO TEMPO1 TEMPO2 TEMPO3 ENDC

;BASE DE TEMPO PARA A PISCADA ;FILTRAGEM PARA O BOTO ;REGISTRADORES AUXILIARES DE TEMPO

;FIM DO BLOCO DE MEMRIA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* FLAGS INTERNOS * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DE TODOS OS FLAGS UTILIZADOS PELO SISTEMA ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* CONSTANTES * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DE TODAS AS CONSTANTES UTILIZADAS PELO SISTEMA MIN MAX STEP MULTIPLO EQU EQU EQU EQU .10 .240 .5 .5

;A CONSTANTE DISPLAY REPRESENTA O SMBOLO QUE APARECER PISCANDO NO ;DISPLAY. 1=LED LIGADO E 0=LED DESLIGADO. A RELAO ENTRE BITS E ;SEGMENTOS A SEGUINTE: 'EDC.BAFG' DISPLAY EQU B''11011010' ;(LETRA H)

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* ENTRADAS * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DE TODOS OS PINOS QUE SERO UTILIZADOS COMO ENTRADA ; RECOMENDAMOS TAMBM COMENTAR O SIGNIFICADO DE SEUS ESTADOS (0 E 1) #DEFINE BT1 PORTA,1 ;BOTO 1 - INCREMENTA ; 0 -> PRESSIONADO ; 1 -> LIBERADO

111

#DEFINE

BT2

PORTA,2

;BOTO 2 - DECREMENTA ; 0 -> PRESSIONADO ; 1 -> LIBERADO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* SADAS * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DE TODOS OS PINOS QUE SERO UTILIZADOS COMO SADA ; RECOMENDAMOS TAMBM COMENTAR O SIGNIFICADO DE SEUS ESTADOS (0 E 1) ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* VETOR DE RESET * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ORG 0x00 GOTO INICIO ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* INCIO DA INTERRUPO * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; AS INTERRUPES NO SERO UTILIZADAS, POR ISSO PODEMOS SUBSTITUIR ; TODO O SISTEMA EXISTENTE NO ARQUIVO MODELO PELO APRESENTADO ABAIXO ; ESTE SISTEMA NO OBRIGATRIO, MAS PODE EVITAR PROBLEMAS FUTUROS ORG 0x04 RETFIE ;ENDEREO INICIAL DA INTERRUPO ;RETORNA DA INTERRUPO ;ENDEREO INICIAL DE PROCESSAMENTO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* 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 INSTRUES (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.

112

DELAY MOVWF DL1 MOVLW MOVWF DL2 NOP NOP DECFSZ GOTO DL2 DECFSZ GOTO DL1 RETURN ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* INICIO DO PROGRAMA * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * INICIO BANK0 MOVLW MOVWF BANK1 MOVLW MOVWF SADAS MOVLW MOVWF MOVLW MOVWF B'00000110' TRISA B'00000000' TRISB B'10000000' OPTION_REG ;PRESCALER 1:2 TMR0 ;PULL-UPS DESABILITADOS ;AS DEMAIS CONFG. SO IRRELEVANTES MOVLW MOVWF BANK0 B'00000000' INTCON ;TODAS AS INTERRUPES DESLIGADAS ;RETORNA PARA O BANCO 0 ;DEFINE TODO O PORTB COMO SADA ;DEFINE RA1 E 2 COMO ENTRADA E DEMAIS B'00000111' CMCON ;DEFINE O MODO DE OPERAO DO ;COMPARADOR ANALGICO ;ALTERA PARA O BANCO 1 ;ALTERA PARA O BANCO 0 TEMPO2,F TEMPO1,F ;DECREMENTA TEMPO1. ACABOU? ;NO, CONTINUA AGUARDANDO SIM ;DECREMENTA TEMPO2. ACABOU? ;NO, CONTINUA AGUARDANDO SIM .200 TEMPO1 ;ESTE DELAY DURA 1ms (5*200) TEMPO2 ;INICIA TEMPO 2 COM VALOR EM W

113

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* INICIALIZAO DAS VARIVEIS * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * CLRF PORTA MOVLW MOVWF MOVLW MOVWF DISPLAY PORTB MIN CONTADOR ;INICIA CONTADOR COM VALOR MIN. ;ACENDE O VALOR CERTO NO DISPLAY ;LIMPA O PORTA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* ROTINA PRINCIPAL * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * MAIN MOVLW MOVWF MULTIPLO TEMPO3 ;INICIA COMTADOR DE MULTIPLICAO, ;POIS OS TEMPOS GERADOS POR DELAY ;SO MUITO PEQUENOS, GERANDO FREQ. ;MUITO ALTAS PARA A VISUALIZAO. MAIN1 MOVF CONTADOR,W CALL DELAY BTFSS BTFSS BT1 BT2 GOTO INCREMENTA GOTO DECREMENTA DECFSZ GOTO MAIN1 MOVLW DISPLAY TEMPO3,F ;COLOCA CONTADOR EM W ;PARA CHAMAR A ROTINA DE DELAY ;CHAMA ROTINA DE DELAY ;BOTO 1 PRESSIONADO? ;SIM, DEVE INCREMENTAR NO ;BOTO 2 PRESSIONADO? ;SIM, DEVE DECREMENTAR NO ;DECREMENTA CONTADOR MULT. ACABOU? ;NO, CONTINUA AGUARDANDO SIM ;APS TRANSCORRIDO O TEMPO, IR ;INVERTER OS LEDS CORRETOS ATRAVS ;DA MSCARA "DISPLAY" E DA OPERAO XOR XORWF GOTO MAIN PORTB,F ;INVERTE LEDS -> PISCA ;COMEA NOVAMENTE

114

DECREMENTA MOVLW SUBWF MOVLW SUBWF BTFSC GOTO MAIN MOVLW MOVWF BTFSS GOTO $-1 GOTO MAIN INCREMENTA MOVLW ADDWF MOVLW SUBWF BTFSS GOTO MAIN MOVLW MOVWF BTFSS GOTO $-1 GOTO MAIN ;* FIM DO PROGRAMA END ;OBRIGATRIO MAX CONTADOR BT1 ;ACERTA CONTADOR NO MXIMO, POIS ;PASSOU DO VALOR ;BOTO 1 CONTINUA PRESSIONADO? ;SIM, AGUARDA LIBERAO SE NO ;VOLTA AO LOOP PRINCIPAL * STEP CONTADOR,F MAX CONTADOR,W STATUS,C ;INCREMENTA O CONTADOR EM STEP ;MOVE O VALOR MXIMO PARA W ;SUBTRAI O VALOR DE W (MIN) DE CONTADOR ;TESTA CARRY. RESULTADO NEGATIVO? ;SIM, ENTO CONTA < MAX ;NO, ENTO CONTA >= MAX MIN CONTADOR BT2 ;ACERTA CONTADOR NO MNIMO, POIS ;PASSOU DO VALOR ;BOTO 2 CONTINUA PRESSIONADO? ;SIM, AGUARDA LIBERAO SE NO ;VOLTA AO LOOP PRINCIPAL STEP CONTADOR,F MIN CONTADOR,W STATUS,C ;DECREMENTA O CONTADOR EM STEP ;MOVE O VALOR MNIMO PARA W ;SUBTRAI O VALOR DE W (MIN) DE CONTADOR ;TESTA CARRY. RESULTADO NEGATIVO? ;NO, ENTO CONTA >= MIN ;SIM, ENTO CONTA < MIN

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

115

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* ;* ;* ;* TRAB05 CONTADOR MELHORADO - EX4 KIT PIC 16F628 DATA: 30/10/XX DESCRIO DO ARQUIVO * * * * * * * *

;* * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * ;*-------------- -------------------------------------------------------------------* ;* CONTADOR QUE UTILIZA DOIS BOTES PARA INCREMENTAR E DECRE;* MENTAR O VALOR CONTROLADO PELA VARIVEL "CONTADOR". ESTA ;* VARIVEL EST LIMITADA PELAS CONSTANTES "MIN" E "MAX". ;* O VALOR DO CONTADOR MOSTRADO NO DISPLAY. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* ARQUIVOS DE DEFINIES * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * #INCLUDE <P16F628.INC> ;ARQUIVO PADRO MICROCHIP PARA 16F628

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

__CONFIG _BODEN_ON & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* PAGINAO DE MEMRIA * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;DEFINIO DE COMANDOS DE USURIO PARA ALTERAO DA PGINA DE MEMRIA #DEFINE #DEFINE BANK0 BANK1 BCF STATUS,RP0 BSF STATUS,RP0 ;SETA BANK 0 DE MEMRIA ;SETA BANK 1 DE MAMRIA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* VARIVEIS * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DOS NOMES E ENDEREOS DE TODAS AS VARIVEIS UTILIZADAS ; PELO SISTEMA CBLOCK 0x20 W_TEMP STATUS_TEMP CONTADOR ;ENDEREO INICIAL DA MEMRIA DE USURIO ;REGISTRADORES TEMPORRIOS PARA ;INTERRUPES VARIVEIS NAO UTILIZADAS ;ARMAZENA O VALOR DA CONTAGEM

116

FLAGS FILTRO1 FILTRO2 ENDC ;* FLAGS INTERNOS

;ARMAZENA OS FLAGS DE CONTROLE ;FILTRAGEM PARA O BOTO 1 ;FILTRAGEM PARA O BOTO 2 ;FIM DO BLOCO DE MEMRIA *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DE TODOS OS FLAGS UTILIZADOS PELO SISTEMA #DEFINE #DEFINE ST_BT1 ST_BT2 FLAGS,0 FLAGS,1 ;STATUS DO BOTO 1 ;STATUS DO BOTO 2

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* CONSTANTES * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DE TODAS AS CONSTANTES UTILIZADAS PELO SISTEMA MIN MAX T_FILTRO EQU EQU EQU .0 .15 .255 ;VALOR MNIMO PARA O CONTADOR ;VALOR MXIMO PARA O CONTADOR ;FILTRO PARA BOTO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* ENTRADAS * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DE TODOS OS PINOS QUE SERO UTILIZADOS COMO ENTRADA ; RECOMENDAMOS TAMBM COMENTAR O SIGNIFICADO DE SEUS ESTADOS (0 E 1) #DEFINE BOTAO1 PORTA,1 ;PORTA DO BOTO ; 0 -> PRESSIONADO ; 1 -> LIBERADO #DEFINE BOTAO2 PORTA,2 ;PORTA DO BOTO ; 0 -> PRESSIONADO ; 1 -> LIBERADO ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* SADAS * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

117

; DEFINIO DE TODOS OS PINOS QUE SERO UTILIZADOS COMO SADA ; RECOMENDAMOS TAMBM COMENTAR O SIGNIFICADO DE SEUS ESTADOS (0 E 1) ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* VETOR DE RESET * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ORG GOTO 0x00 INICIO ;ENDEREO INICIAL DE PROCESSAMENTO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* INCIO DA INTERRUPO * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; AS INTERRUPES NO SERO UTILIZADAS, POR ISSO PODEMOS SUBSTITUIR ; TODO O SISTEMA EXISTENTE NO ARQUIVO MODELO PELO APRESENTADO ABAIXO ; ESTE SISTEMA NO OBRIGATRIO, MAS PODE EVITAR PROBLEMAS FUTUROS ORG RETFIE 0x04 ;ENDEREO INICIAL DA INTERRUPO ;RETORNA DA INTERRUPO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* ROTINA DE CONVERSO BINRIO -> 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 CONDIES DE LIGAO DO DISPLAY AO PORTB. CONVERTE MOVF ANDLW ADDWF ; RETLW RETLW RETLW RETLW RETLW RETLW CONTADOR,W B'00001111' PCL,F ; POSIO CORRETA DOS SEGUIMENTOS B'01111110' ; 00 - RETORNA SMBOLO CORRETO 0 B'00011000' ; 01 - RETORNA SMBOLO CORRETO 1 B'10110110' ; 02 - RETORNA SMBOLO CORRETO 2 B'10111100' ; 03 - RETORNA SMBOLO CORRETO 3 B'11011000' ; 04 - RETORNA SMBOLO CORRETO 4 B'11101100' ; 05 - RETORNA SMBOLO CORRETO 5 ;COLOCA CONTADOR EM W ;MASCARA VALOR DE CONTADOR ;CONSIDERAR SOMENTE AT 15 B'GFABCDE.'

118

RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW ;*

B'11101110' ;06 - RETORNA SMBOLO CORRETO 6 B'00111000' ; 07 - RETORNA SMBOLO CORRETO 7 B'11111110' ; 08 - RETORNA SMBOLO CORRETO 8 B'11111100' ; 09 - RETORNA SMBOLO CORRETO 9 B'11111010' ; 10 - RETORNA SMBOLO CORRETO A B'11001110' ; 11 - RETORNA SMBOLO CORRETO b B'01100110' ; 12 - RETORNA SMBOLO CORRETO C B'10011110' ; 13 - RETORNA SMBOLO CORRETO d B'11100110' ; 14 - RETORNA SMBOLO CORRETO E B'11100010' ; 15 - RETORNA SMBOLO CORRETO F *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * INICIO DO PROGRAMA ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * INICIO BANK0 MOVLW MOVWF BANK1 MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF B'00000110' TRISA B'00000000' TRISB B'10000000' OPTION_REG ;PRESCALER 1:2 NO TMR0 ;PULL-UPS DESABILITADOS ;AS IRRELEVANTES MOVLW MOVWF BANK0 B'00000000' INTCON ;TODAS INTERRUPES DESLIGADAS ;RETORNA PARA O BANCO 0 DEMAIS CONFG. SO ;DEFINE TODO O PORTB COMO SADA ;DEFINE RA1 E 2 COMO ENTRADA ;E DEMAIS COMO SADAS B'00000111' CMCON ;DEFINE O MODO DE OPERAO DO ;COMPARADOR ANALGICO ;ALTERA PARA O BANCO 1 ;ALTERA PARA O BANCO 0

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* INICIALIZAO DAS VARIVEIS * **** ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

119

CLRF CLRF CLRF MOVLW MOVWF GOTO

PORTA PORTB FLAGS MIN CONTADOR ATUALIZA

;LIMPA O PORTA ;LIMPA O PORTB ;LIMPA TODOS OS FLAGS ;INICIA CONTADOR = MIN ;ATUALIZA O DISPLAY INICIALMENTE

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* ROTINA PRINCIPAL * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * MAIN MOVLW MOVWF MOVWF CHECA_BT1 BTFSC GOTO DECFSZ GOTO BTFSS GOTO GOTO BT1_LIB BCF CHECA_BT2 BTFSC GOTO DECFSZ BOTAO2 BT2_LIB FILTRO2,F ;O BOTO 2 EST PRESSIONADO? ;NO, ENTO TRATA COMO LIBERADO SE SIM ;DECREMENTA O FILTRO BOTO TERMINOU? ST_BT1 ;MARCA BOTO 1 COMO LIBERADO BOTAO1 BT1_LIB FILTRO1,F CHECA_BT1 ST_BT1 DEC CHECA_BT2 ;O BOTO 1 EST PRESSIONADO? ;NO, ENTO TRATA COMO LIBERADO SE SIM ;DECREMENTA FILTRO DO BOTO TERMINOU? ;NO, CONTINUA ESPERANDO SE SIM ;BOTO J ESTAVA PRESSIONADO? ;NO, EXECUTA AO DO BOTO ;SIM, CHECA BOTO 2 T_FILTRO FILTRO1 FILTRO2 ;INICIALIZA FILTRO1 = T_FILTRO ;INICIALIZA FILTRO2 = T_FILTRO

GOTO BTFSS GOTO GOTO

CHECA_BT2 ST_BT2 INC MAIN

;NO, CONTINUA ESPERANDO SE SIM ;BOTO J ESTAVA PRESSIONADO? ;NO, EXECUTA AO DO BOTO ;SIM, VOLTA AO LOOPING

120

BT2_LIB BCF GOTO DEC BSF MOVF XORLW BTFSC GOTO DECF GOTO INC BSF MOVF XORLW BTFSC GOTO INCF GOTO ATUALIZA CALL MOVWF GOTO CONVERTE PORTB MAIN ;CONVERTE CONTADOR NO NMERO ;ATUALIZA O PORTB PARA ;NO, VOLTA AO LOOP PRINCIPAL ST_BT2 CONTADOR,W MAX STATUS,Z MAIN CONTADOR,F ATUALIZA ST_BT1 CONTADOR,W MIN STATUS,Z MAIN CONTADOR,F ATUALIZA ST_BT2 MAIN ;MARCA BOTO 2 COMO LIBERADO ;RETORNA AO LOOPING ;AO DE DECREMENTAR ;MARCA BOTO 1 COMO J PRESSIONADO ;COLOCA CONTADOR EM W ;APLICA XOR ENTRE CONTADOR E MIN ;RESULTOU EM ZERO? ;SIM, RETORNA SEM AFETAR CONT. SE NO ;DECREMENTA O CONTADOR ;ATUALIZA O DISPLAY ;AO DE INCREMENTAR ;MARCA BOTO 2 COMO J PRESSIONADO ;COLOCA CONTADOR EM W ;APLICA XOR ENTRE CONTADOR E MAX ;RESULTOU EM ZERO? ;SIM, RETORNA SEM AFETAR CONT. SE NO ;INCREMENTA O CONTADOR ;ATUALIZA O DISPLAY

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* FIM DO PROGRAMA * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * END ;OBRIGATRIO

121

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* ;* ;* ;* TRAB06 TIMER DE SEGUNDOS - EX5 KIT PIC 16F628 DATA: 30/10/XX DESCRIO DO ARQUIVO * * * *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;*------------------------------------------- --------------------------------------* ;* TIMER DECRESCENTE EM SEGUNDOS. O VALOR INICIAL DETERMINADO * ;* PELA CONSTANTE V_INICIO E PODE ESTAR ENTRE 1 E 9 SEGUNDOS. ;* O BOTO 1 DISPARA O TIMER, MOSTRANDO O TEMPO RESTANTE NO ;* DISPLAY. O BOTO 2 PARALIZA O TIMER. O LED UTILIZADO PARA ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* ARQUIVOS DE DEFINIES * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * #INCLUDE <P16F628.INC> ;ARQUIVO PADRO MICROCHIP PARA 16F628 * *

;* INDICAR O ESTADO ATUAL DO TIMER: ACESO=RODANDO E ;APAGADO=PARADO *

__CONFIG _BODEN_ON & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* PAGINAO DE MEMRIA * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;DEFINIO DE COMANDOS DE USURIO PARA ALTERAO DA PGINA DE MEMRIA #DEFINE #DEFINE BANK0 BANK1 BCF STATUS,RP0 BSF STATUS,RP0 ;SETA BANK 0 DE MEMRIA ;SETA BANK 1 DE MAMRIA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* VARIVEIS * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DOS NOMES E ENDEREOS DE TODAS AS VARIVEIS UTILIZADAS ; PELO SISTEMA CBLOCK 0x20 ;ENDEREO INICIAL DA MEMRIA DE USURIO ;REGISTRADORES TEMPORRIOS PARA ;INTERRUPES

W_TEMP STATUS_TEMP

122

TEMPO FLAGS TEMP1 TEMP2 FILTRO1 FILTRO2 ENDC

;ARMAZENA O VALOR DO TEMPO ;ARMAZENA OS FLAGS DE CONTROLE ;REGISTRADORES AUXILIARES ;FILTROS DOS BOTES ;FIM DO BLOCO DE MEMRIA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* FLAGS INTERNOS * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DE TODOS OS FLAGS UTILIZADOS PELO SISTEMA #DEFINE #DEFINE #DEFINE F_FIM FLAGS,0 ST_BT1 ST_BT2 FLAGS,1 FLAGS,2 ;FLAG DE FIM DE TEMPO ;STATUS DO BOTO 1 ;STATUS DO BOTO 2

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* CONSTANTES * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DE TODAS AS CONSTANTES UTILIZADAS PELO SISTEMA V_INICIO T_FILTRO EQU EQU .15 .255 ;VALOR INICIAL DO TIMER (1 A 15 SEG.) ;VALOR DO FILTRO DOS BOTES

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* ENTRADAS * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DE TODOS OS PINOS QUE SERO UTILIZADOS COMO ENTRADA ; RECOMENDAMOS TAMBM COMENTAR O SIGNIFICADO DE SEUS ESTADOS (0 E 1) #DEFINE BOTAO1 PORTA,1 ;PORTA DO BOTO ; 0 -> PRESSIONADO ; 1 -> LIBERADO #DEFINE BOTAO2 PORTA,2 ;PORTA DO BOTO ; 0 -> PRESSIONADO ; 1 -> LIBERADO

123

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* SADAS * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DE TODOS OS PINOS QUE SERO UTILIZADOS COMO SADA ; RECOMENDAMOS TAMBM COMENTAR O SIGNIFICADO DE SEUS ESTADOS (0 E 1) #DEFINE LED PORTA,3 ;LED ;0 -> DESLIGADO ;1 -> LIGADO ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* ORG GOTO VETOR DE RESET 0x00 INICIO * ;ENDEREO INICIAL DE PROCESSAMENTO ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* INCIO DA INTERRUPO * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; UTILIZAREMOS SOMENTE A INTERRUO DE TMR0, MAS EFETUAREMOS O TESTE ; PARA TERMOS CERTEZA DE QUE NENHUM PROBLEMA ACONTECEU. NECESSRIO ; SALVAR E RECUPERAR OS VALOR DE W E STATUS. ORG MOVWF SWAPF MOVWF BTFSS GOTO 0x04 W_TEMP STATUS,W STATUS_TEMP INTCON,T0IF SAI_INT ;SALVA STATUS EM STATUS_TEMP ; INTERRUPO DE TMR0? ;NO, SAI SE AO SE SIM ;ENDEREO INICIAL DA INTERRUPO ;SALVA W EM W_TEMP

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* TRATAMENTO DA INTERRUPO 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)

124

BCF MOVLW MOVWF DECFSZ GOTO MOVLW MOVWF BTFSC GOTO DECFSZ GOTO BSF GOTO

INTCON,T0IF .256-.125 TMR0 TEMP1,F SAI_INT .125 TEMP1 F_FIM SAI_INT TEMPO,F SAI_INT F_FIM SAI_INT

;LIMPA FLAG DA INT. ;REINICIA TMR0 ;DECREM. CONTADOR AUXILIAR SE FIM? ;NO, SAI SEM AO SE SIM ;REINICIALIZA TEMPO AUXILIAR ;J CHEGOU AO FIM? ;SIM, ENTO NO DECREMENTA O TEMPO ;NO ;DECREMENTA TEMPO. ACABOU? ;NO, SAI DA INTERRUPO SE SIM ;MARCA FIM DO TEMPO ;SAI DA INTERRUPO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* FIM DA INTERRUPO * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * SAI_INT SWAPF MOVWF SWAPF SWAPF RETFIE STATUS_TEMP,W STATUS W_TEMP,F W_TEMP,W ;RECUPERA W ;RETORNA DA INTERRUPO ;RECUPERA STATUS

;* * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * ;* ROTINA DE CONVERSO BINRIO -> 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 CONDIES DE LIGAO DO DISPLAY AO PORTB. CONVERTE MOVF ANDLW ADDWF TEMPO,W B'00001111' PCL,F ;COLOCA CONTADOR EM W ;MASCARA VALOR DE CONTADOR ;CONSIDERAR SOMENTE AT 15

125

; RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW

B'GFABCDE.' ; POSIO CORRETA DOS SEGUIMENTOS B'01111110' ; 00 - RETORNA SMBOLO CORRETO 0 B'00011000' ; 01 - RETORNA SMBOLO CORRETO 1 B'10110110' ; 02 - RETORNA SMBOLO CORRETO 2 B'10111100' ; 03 - RETORNA SMBOLO CORRETO 3 B'11011000' ; 04 - RETORNA SMBOLO CORRETO 4 B'11101100' ; 05 - RETORNA SMBOLO CORRETO 5 B'11101110' ; 06 - RETORNA SMBOLO CORRETO 6 B'00111000' ; 07 - RETORNA SMBOLO CORRETO 7 B'11111110' ; 08 - RETORNA SMBOLO CORRETO 8 B'11111100' ; 09 - RETORNA SMBOLO CORRETO 9 B'11111010' ; 10 - RETORNA SMBOLO CORRETO A B'11001110' ; 11 - RETORNA SMBOLO CORRETO b B'01100110' ; 12 - RETORNA SMBOLO CORRETO C B'10011110' ; 13 - RETORNA SMBOLO CORRETO d B'11100110' ; 14 - RETORNA SMBOLO CORRETO E B'11100010' ; 15 - RETORNA SMBOLO CORRETO F

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* ROTINA DE ATUALIZAO DO DISPLAY * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; ESTA ROTINA CONVERTE O VALOR DE TEMPO ATRAVS DA ROTINA CONVERTE ; E ATUALIZA O PORTB PARA ACENDER O DISPLAY CORRETAMENTE ATUALIZA CALL MOVWF CONVERTE PORTB ;CONVERTE CONTADOR NO NMERO DO ;DISPLAY ;ATUALIZA O PORTB PARA ;VISUALIZARMOS O VALOR DE CONTADOR ;NO DISPLAY RETURN ;NO, RETORNA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* ROTINA DE DESLIGAR O TIMER * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; EXECUTA AS AES NECESSRIAS PARA DESLIGAR O TIMER

DESL_TIMER

126

BCF BCF RETURN

INTCON,GIE LED

;DESLIGA CHAVE GERAL DE INT. ;APAGA O LED ;RETORNA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* ROTINA DE LIGAR O TIMER * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; ESTA ROTINA EXECUTA AS AES NECESSRIAS PARA LIGAR O TIMER LIGA_TIMER BTFSC RETURN BCF MOVLW MOVWF MOVLW MOVWF BSF BSF RETURN INTCON,T0IF .256-.125 TMR0 .125 TEMP1 INTCON,GIE LED ;INICIA TEMP1 CORRETAMENTE ;LIGA CHAVE GERAL DE INTERRUPES ;ACENDE O LED ;RETORNA ;INICIA TMR0 CORRETAMENTE INTCON,GIE ;TIMER J ESTA LIGADO? ;SIM, RETORNA DIRETO SE NO ;LIMPA FLAG DE INT. DE TMR0

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* INICIO BANK0 MOVLW MOVWF BANK1 MOVLW MOVWF MOVLW MOVWF B'00000110' TRISA B'00000000' TRISB ;DEFINE TODO O PORTB COMO SADA ;DEFINE RA1 E 2 COMO ENTRADA E DEMAIS ;COMO SADAS B'00000111' CMCON ;DEFINE O MODO DE OPERAO ;DO COMPARADOR ANALGICO ;ALTERA PARA O BANCO 1 ;ALTERA PARA O BANCO 0 INICIO DO PROGRAMA * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

MOVLW

B'10000101'

127

MOVWF

OPTION_REG

;PRESCALER 1:64 NO TMR0 ;PULL-UPS DESABILITADOS ;AS DEMAIS CONFG. SO IRRELEVANTES

MOVLW MOVWF BANK0

B'00100000' INTCON ;HABILITADA SOMENTE INTERRUPO TMR0 ;CHAVE GERAL INTERRUES DESLIGADAS ;RETORNA PARA O BANCO 0

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* INICIALIZAO DAS VARIVEIS * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * CLRF CLRF CLRF MOVLW MOVWF CALL PORTA PORTB FLAGS V_INICIO TEMPO ATUALIZA ;INICIA TEMPO = V_INICIO ;ATUALIZA O DISPLAY INICIALMENTE ;LIMPA O PORTA ;LIMPA O PORTB ;LIMPA TODOS OS FLAGS

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* ROTINA PRINCIPAL * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * MAIN BTFSC CALL CALL MOVLW MOVWF MOVWF CHECA_BT1 BTFSC GOTO BOTAO1 BT1_LIB ;O BOTO 1 EST PRESSIONADO? ;NO, ENTO TRATA COMO LIBERADO ;SIM F_FIM DESL_TIMER ATUALIZA T_FILTRO FILTRO1 FILTRO2 ;INICIALIZA FILTRO1 = T_FILTRO ;INICIALIZA FILTRO2 = T_FILTRO ;CHEGOU AO FIM? ;SIM, ENTO DESLIGA O TIMER SE NO ;ATUALIZA O DISPLAY

DECFSZ

FILTRO1,F

;DECREMENTA O FILTRO DO BOTO ;TERMINOU?

128

GOTO BTFSS GOTO GOTO BT1_LIB BCF CHECA_BT2 BTFSC GOTO DECFSZ GOTO BTFSS GOTO GOTO BT2_LIB BCF GOTO ACAO_BT1 BSF CALL GOTO ACAO_BT2 BSF CALL GOTO

CHECA_BT1 ST_BT1 ACAO_BT1 CHECA_BT2

;NO, CONTINUA ESPERANDO SE SIM ;BOTO J ESTAVA PRESSIONADO? ;NO, EXECUTA AO DO BOTO ;SIM, CHECA BOTO 2

ST_BT1 BOTAO2 BT2_LIB FILTRO2,F CHECA_BT2 ST_BT2 ACAO_BT2 MAIN ST_BT2 MAIN ST_BT1 LIGA_TIMER MAIN

;MARCA BOTO 1 COMO LIBERADO ;O BOTO 2 EST PRESSIONADO? ;NO, ENTO TRATA COMO LIBERADO SIM ;DECREMENTA O FILTRO DO BOTO ;TERMINOU? ;NO, CONTINUA ESPERANDO SE SIM ;BOTO J ESTAVA PRESSIONADO? ;NO, EXECUTA AO DO BOTO ;SIM, VOLTA AO LOOPING ;MARCA BOTO 2 COMO LIBERADO ;RETORNA AO LOOPING ;AO PARA O BOTO 1 ;MARCA BOTO 1 COMO J PRESSIONADO ;LIGA O TIMER ;AO PARA O BOTO 2

ST_BT2 DESL_TIMER MAIN

;MARCA BOTO 2 COMO J PRESSIONADO ;DESLIGA O TIMER ;NO, VOLTA AO LOOP PRINCIPAL

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* FIM DO PROGRAMA * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * END ;OBRIGATRIO

129

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* ;* ;* ;* TRAB07 DESCRIO DO ARQUIVO CONTADOR FINAL - EX6 KIT PIC 16F628 30/10/01 * * * * * * * * *

;* * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * ;*-----------------------------------------------------------------* ;* CONTADOR QUE UTILIZA DOIS BOTES PARA INCREMENTAR E DECRE;* MENTAR O VALOR CONTROLADO PELA VARIVEL "CONTADOR". ESTA ;* VARIVEL EST LIMITADA PELAS CONSTANTES "MIN" E "MAX". ;* O VALOR DO CONTADOR MOSTRADO NO DISPLAY E ARMAZENADO NA ;* EEPROM PARA NO SER PERDIDO MESMO NO CASO DE RESET. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* ARQUIVOS DE DEFINIES * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * #INCLUDE <P16F628.INC> ;ARQUIVO PADRO MICROCHIP PARA 16F628

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

__CONFIG _BODEN_ON & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* PAGINAO DE MEMRIA * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;DEFINIO DE COMANDOS DE USURIO PARA ALTERAO DA PGINA DE MEMRIA #DEFINE #DEFINE BANK0 BANK1 BCF STATUS,RP0 BSF STATUS,RP0 ;SETA BANK 0 DE MEMRIA ;SETA BANK 1 DE MAMRIA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* VARIVEIS * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DOS NOMES E ENDEREOS DE TODAS AS VARIVEIS UTILIZADAS ; PELO SISTEMA CBLOCK 0x20 ;ENDEREO INICIAL DA MEMRIA DE USURIO ;REGISTRADORES TEMPORRIOS PARA ;INTERRUPES VARIVEIS NO UTILIZADAS

W_TEMP STATUS_TEMP

130

CONTADOR FLAGS FILTRO1 FILTRO2 ENDC

;ARMAZENA O VALOR DA CONTAGEM ;ARMAZENA OS FLAGS DE CONTROLE ;FILTRAGEM PARA O BOTO 1 ;FILTRAGEM PARA O BOTO 2 ;FIM DO BLOCO DE MEMRIA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* FLAGS INTERNOS * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DE TODOS OS FLAGS UTILIZADOS PELO SISTEMA #DEFINE #DEFINE ST_BT1 ST_BT2 FLAGS,0 FLAGS,1 ;STATUS DO BOTO 1 ;STATUS DO BOTO 2

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* CONSTANTES * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DE TODAS AS CONSTANTES UTILIZADAS PELO SISTEMA MIN MAX T_FILTRO POS_MEM EQU EQU EQU EQU .0 .15 .255 .0 ;VALOR MINIMO PARA O CONTADOR ;VALOR MXIMO PARA O CONTADOR ;FILTRO PARA BOTO ;ENDEREO DA EEPROM ONDE SER ;ARMAZENADO O VALOR DO CONTADOR ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* ENTRADAS * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DE TODOS OS PINOS QUE SERO UTILIZADOS COMO ENTRADA ; RECOMENDAMOS TAMBM COMENTAR O SIGNIFICADO DE SEUS ESTADOS (0 E 1) #DEFINE BOTAO1 PORTA,1 ;PORTA DO BOTO ; 0 -> PRESSIONADO ; 1 -> LIBERADO #DEFINE BOTAO2 PORTA,2 ;PORTA DO BOTO ; 0 -> PRESSIONADO ; 1 -> LIBERADO

131

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* SADAS * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DE TODOS OS PINOS QUE SERO UTILIZADOS COMO SADA ; RECOMENDAMOS TAMBM COMENTAR O SIGNIFICADO DE SEUS ESTADOS (0 E 1) ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* INICIALIZAO DA EEPROM * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ORG H'2100'+POS_MEM DE .5 ;INCIO DA EEPROM ;VALOR INICIAL PARA CONTADOR = 5 ;VIDE DIRETRIZ "DE" NO APNDICE B ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* VETOR DE RESET * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ORG 0x00 GOTO INICIO ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* INCIO DA INTERRUPO * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; AS INTERRUPES NO SERO UTILIZADAS, POR ISSO PODEMOS SUBSTITUIR ; TODO O SISTEMA EXISTENTE NO ARQUIVO MODELO PELO APRESENTADO ABAIXO ; ESTE SISTEMA NO OBRIGATRIO, MAS PODE EVITAR PROBLEMAS FUTUROS ORG RETFIE 0x04 ;ENDEREO INICIAL DA INTERRUPO ;RETORNA DA INTERRUPO ;ENDEREO INICIAL DE PROCESSAMENTO

;* * * * * * * * * * * ** * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * ;* ROTINA DE CONVERSO BINRIO -> 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 CONDIES DE LIGAO DO DISPLAY AO PORTB.

132

CONVERTE MOVF ANDLW ADDWF ; RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW CONTADOR,W B'00001111' PCL,F B'GFABCDE.' ; POSIO CORRETA DOS SEGUIMENTOS B'01111110' ; 00 - RETORNA SMBOLO CORRETO 0 B'00011000' ; 01 - RETORNA SMBOLO CORRETO 1 B'10110110' ; 02 - RETORNA SMBOLO CORRETO 2 B'10111100' ; 03 - RETORNA SMBOLO CORRETO 3 B'11011000' ; 04 - RETORNA SMBOLO CORRETO 4 B'11101100' ; 05 - RETORNA SMBOLO CORRETO 5 B'11101110' ; 06 - RETORNA SMBOLO CORRETO 6 B'00111000' ; 07 - RETORNA SMBOLO CORRETO 7 B'11111110' ; 08 - RETORNA SMBOLO CORRETO 8 B'11111100' ; 09 - RETORNA SMBOLO CORRETO 9 B'11111010' ; 10 - RETORNA SMBOLO CORRETO A B'11001110' ; 11 - RETORNA SMBOLO CORRETO b B'01100110' ; 12 - RETORNA SMBOLO CORRETO C B'10011110' ; 13 - RETORNA SMBOLO CORRETO d B'11100110' ; 14 - RETORNA SMBOLO CORRETO E B'11100010' ; 15 - RETORNA SMBOLO CORRETO F ;COLOCA CONTADOR EM W ;MASCARA VALOR DE CONTADOR ;CONSIDERAR SOMENTE AT 15

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* ROTINA DE LEITURA NA E2PROM * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; ESTA ROTINA L O BYTE DO ENDEREO ACERTADO POR EEADR E COLOCA ; O VALOR EM W. LE_E2PROM BANK1 BSF MOVF BANK0 RETURN ;RETORNA EECON1,RD EEDATA,W ;BANCO 1 ;PREPARA LEITURA ;COLOCA DADO EM W

133

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* ROTINA DE ESCRITA NA E2PROM * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; ESTA ROTINA ESCREVE O DADO PASSSADO EM W NO ENDEREO ACERTADO ; ANTERIORMENTE EM EEADR ESCR_E2PROM BANK1 MOVWF BCF BSF MOVLW MOVWF MOVLW MOVWF BSF BCF BTFSC GOTO $-1 BANK0 BSF RETURN INTCON,GIE EEDATA INTCON,GIE EECON1,WREN 0X55 EECON2 0XAA EECON2 EECON1,WR EECON1,WREN EECON1,WR ;ACABOU ESCRITA? ;NO, AGUARDA ;SIM, BANCO 0 ;HABILITA INTERRUPES ;RETORNA ;INICIA ESCRITA ;BANCO 1 ;ACERTA DADO PASSADO EM W ;DESABILITA INTERRUPES ;HABILITA ESCRITA ;INICIALIZAO DA ESCRITA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* ROTINA DE LEITURA DO VALOR DO CONTADOR * ;* * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * ; ESTA ROTINA L O VALOR DA MEMRIA E COLOCA O RESULTADO NA ; VARIVEL "CONTADOR". LE_CONTA MOVLW BANK1 MOVWF CALL MOVWF RETURN EEADR LE_E2PROM CONTADOR ;ACERTA O ENDEREO PARA LEITURA ;EFETUA A LEITURA DA EEPROM ;ATUALIZA O CONTADOR ;RETORNA POS_MEM

134

;* * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* ROTINA DE ESCRITA DO VALOR DO CONTADOR * ;* * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; ESTA ROTINA ESCREVE O VALOR ATUAL DE CONTADOR NA MEMRIA EEPROM ESCR_CONTA MOVLW BANK1 MOVWF BANK0 MOVF CALL RETURN CONTADOR,W ESCR_E2PROM ;COLOCA CONTADOR EM W ;EFETUA A ESCRITA EEPROM ;RETORNA EEADR ;ACERTA O ENDEREO PARA LEITURA POS_MEM

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* INICIO BANK1 MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF B'00000110' TRISA B'00000000' TRISB B'10000000' OPTION_REG ;PRESCALER 1:2 NO TMR0 ;PULL-UPS DESABILITADOS ;AS DEMAIS CONFG. SO IRRELEVANTES MOVLW MOVWF BANK0 MOVLW MOVWF B'00000111' CMCON ;DEFINE O MODO DE OPERAO ;DO COMPARADOR ANALGICO B'00000000' INTCON ;TODAS AS INTERRUPES DESLIGADAS ;RETORNA PARA O BANCO 0 ;DEFINE TODO O PORTB COMO SADA ;DEFINE RA1 E 2 COMO ENTRADA E DEMAIS ;COMO SADAS ;ALTERA PARA O BANCO 1 INICIO DO PROGRAMA * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

135

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* INICIALIZAO DAS VARIVEIS * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * CLRF CLRF CLRF CALL GOTO PORTA PORTB FLAGS LE_CONTA ATUALIZA ;LIMPA O PORTA ;LIMPA O PORTB ;LIMPA TODOS OS FLAGS ;INICIALIZA CONTADOR COM VALOR ;DA EEPROM ;ATUALIZA O DISPLAY INICIALMENTE

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* MAIN MOVLW MOVWF MOVWF CHECA_BT1 BTFSC GOTO DECFSZ GOTO BTFSS GOTO GOTO BT1_LIB BCF CHECA_BT2 BTFSC GOTO BOTAO2 BT2_LIB ;O BOTO 2 EST PRESSIONADO? ;NO, ENTO TRATA COMO LIBERADO ;SIM ST_BT1 ;MARCA BOTO 1 COMO LIBERADO BOTAO1 BT1_LIB FILTRO1,F CHECA_BT1 ST_BT1 DEC CHECA_BT2 ;O BOTO 1 EST PRESSIONADO? ;NO, ENTO TRATA COMO LIBERADO ;SIM ;DECREMENTA O FILTRO DO BOTO ;TERMINOU? ;NO, CONTINUA ESPERANDO ;SIM ;BOTO J ESTAVA PRESSIONADO? ;NO, EXECUTA AO DO BOTO ;SIM, CHECA BOTO 2 T_FILTRO FILTRO1 FILTRO2 ;INICIALIZA FILTRO1 = T_FILTRO ;INICIALIZA FILTRO2 = T_FILTRO ROTINA PRINCIPAL * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

136

DECFSZ GOTO BTFSS GOTO GOTO BT2_LIB BCF GOTO DEC BSF MOVF XORLW

FILTRO2,F CHECA_BT2 ST_BT2 INC MAIN ST_BT2 MAIN ST_BT1 CONTADOR,W MIN

;DECREMENTA O FILTRO DO BOTO ;TERMINOU? ;NO, CONTINUA ESPERANDO ;SIM ;BOTO J ESTAVA PRESSIONADO? ;NO, EXECUTA AO DO BOTO ;SIM, VOLTA AO LOOPING ;MARCA BOTO 2 COMO LIBERADO ;RETORNA AO LOOPING ;AO DE DECREMENTAR ;MARCA BOTO 1 COMO J PRESSIONADO ;COLOCA CONTADOR EM W ;APLICA XOR ENTRE CONTADOR E MIN ;PARA TESTAR IGUALDADE. SE FOREM ;IGUAIS, O RESULTADO SER ZERO

BTFSC GOTO DECF CALL GOTO INC BSF MOVF XORLW

STATUS,Z MAIN CONTADOR,F ESCR_CONTA ATUALIZA ST_BT2 CONTADOR,W MAX

;RESULTOU EM ZERO? ;SIM, RETORNA SEM AFETAR CONT. ;NO ;DECREMENTA O CONTADOR ;ATUALIZA O VALOR DE CONTADOR NA ;EEPROM ;ATUALIZA O DISPLAY ;AO DE INCREMENTAR ;MARCA BOTO 2 COMO J PRESSIONADO ;COLOCA CONTADOR EM W ;APLICA XOR ENTRE CONTADOR E MAX ;PARA TESTAR IGUALDADE. SE FOREM ;IGUAIS, O RESULTADO SER ZERO

BTFSC GOTO INCF CALL

STATUS,Z MAIN CONTADOR,F ESCR_CONTA

;RESULTOU EM ZERO? ;SIM, RETORNA SEM AFETAR CONT. ;NO ;INCREMENTA O CONTADOR ;ATUALIZA O VALOR DE CONTADOR NA ;EEPROM

137

ATUALIZA CALL MOVWF CONVERTE PORTB

;ATUALIZAO DO DISPLAY ;CONVERTE CONTADOR NO NMERO DO ;DISPLAY ;ATUALIZA O PORTB PARA ;VISUALIZARMOS O VALOR DE CONTADOR ;NO DISPLAY

GOTO

MAIN

;NO, VOLTA AO LOOP PRINCIPAL

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* END FIM DO PROGRAMA * ;OBRIGATRIO ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

138

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* ;* ;* ;* DIMMER KIT PIC 16F628 DATA: 11/06/XX DESCRIO DO ARQUIVO * * * * * * * *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;*-----------------------------------------------------------------* ;* CONTADOR QUE UTILIZA DOIS BOTES PARA INCREMENTAR E DECRE;* MENTAR O VALOR CONTROLADO PELA VARIVEL "CONTADOR". ESTA ;* VARIVEL EST LIMITADA PELAS CONSTANTES "MIN" E "MAX". ;* O VALOR DO CONTADOR MOSTRADO NO DISPLAY. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* ARQUIVOS DE DEFINIES * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * #INCLUDE <P16F628.INC> ;ARQUIVO PADRO MICROCHIP PARA 16F628

__CONFIG _BODEN_ON & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* PAGINAO DE MEMRIA * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;DEFINIO DE COMANDOS DE USURIO PARA ALTERAO DA PGINA DE MEMRIA #DEFINE #DEFINE BANK0 BANK1 BCF STATUS,RP0 BSF STATUS,RP0 ;SETA BANK 0 DE MEMRIA ;SETA BANK 1 DE MAMRIA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* VARIVEIS * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DOS NOMES E ENDEREOS DE TODAS AS VARIVEIS UTILIZADAS ; PELO SISTEMA CBLOCK 0x20 ;ENDEREO INICIAL DA MEMRIA DE USURIO ;REGISTRADORES TEMPORRIOS PARA ;INTERRUPES

W_TEMP STATUS_TEMP

139

INTENSIDADE FLAGS FILTRO11 FILTRO12 FILTRO21 FILTRO22 TEMPO ENDC

;ARMAZENA O VALOR DA CONTAGEM ;ARMAZENA OS FLAGS DE CONTROLE ;FILTRAGEM 1 PARA O BOTO 1 ;FILTRAGEM 2 PARA O BOTO 1 ;FILTRAGEM 1 PARA O BOTO 2 ;FILTRAGEM 2 PARA O BOTO 2 ;INTERVALOS DE 1 MS ;FIM DO BLOCO DE MEMRIA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* FLAGS INTERNOS * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DE TODOS OS FLAGS UTILIZADOS PELO SISTEMA #DEFINE #DEFINE ST_BT1 ST_BT2 FLAGS,0 FLAGS,1 ;STATUS DO BOTO 1 ;STATUS DO BOTO 2

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* CONSTANTES * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DE TODAS AS CONSTANTES UTILIZADAS PELO SISTEMA MIN MAX T_FILTRO EQU EQU EQU .0 .15 .20 ;VALOR MNIMO PARA O INTENSIDADE ;VALOR MXIMO PARA O INTENSIDADE ;FILTRO PARA BOTO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* ENTRADAS * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DE TODOS OS PINOS QUE SERO UTILIZADOS COMO ENTRADA ; RECOMENDAMOS TAMBM COMENTAR O SIGNIFICADO DE SEUS ESTADOS (0 E 1) #DEFINE BOTAO1 PORTA,1 ;PORTA DO BOTO ; 0 -> PRESSIONADO ; 1 -> LIBERADO #DEFINE BOTAO2 PORTA,2 ;PORTA DO BOTO ; 0 -> PRESSIONADO ; 1 -> LIBERADO

140

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* SADAS * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; DEFINIO DE TODOS OS PINOS QUE SERO UTILIZADOS COMO SADA ; RECOMENDAMOS TAMBM 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 GOTO 0x00 INICIO ;ENDEREO INICIAL DE PROCESSAMENTO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* INCIO DA INTERRUPO * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; AS INTERRUPES NO SERO UTILIZADAS, POR ISSO PODEMOS SUBSTITUIR ; TODO O SISTEMA EXISTENTE NO ARQUIVO MODELO PELO APRESENTADO ABAIXO ; ESTE SISTEMA NO OBRIGATRIO, MAS PODE EVITAR PROBLEMAS FUTUROS ORG MOVWF SWAPF MOVWF BTFSS GOTO 0x04 W_TEMP STATUS,W STATUS_TEMP INTCON,T0IF SAI_INT ;SALVA STATUS EM STATUS_TEMP ; INTERRUPO DE TMR0? ;NO, SAI SE AO SE SIM ;ENDEREO INICIAL DA INTERRUPO ;SALVA W EM W_TEMP

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* TRATAMENTO DA INTERRUPO 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)

141

BCF MOVLW MOVWF INCF MOVLW XORWF BTFSC CLRF MOVLW XORWF BTFSC GOTO MOVF SUBWF BTFSS

INTCON,T0IF .256-.250 TMR0 TEMPO,F .16 TEMPO,W STATUS,Z TEMPO .15 INTENSIDADE,W STATUS,Z LIGA_LAMPADA INTENSIDADE,W TEMPO,W STATUS,C

;LIMPA FLAG DA INT. ;SETA TIMER P250MS ;REINICIA TMR0 ;INCREMENTA TEMPO ;COLOCA 16 EM WORK ;COMPARA TEMPO COM 16 ;TESTA BIT Z DO REG. STATUS ;ZERA TEMPO ;COLOCA 15 EM W ;COMPARA INTENSIDADE COM 15 ;TESTA BIT Z DO REG. STATUS ;MOVE INTENSIDADE PARA W ;SUBTRAI TEMPO DE INTENSIDADE ;TESTA BIC C DO REG. STATUS ;VERIFICA TEMPO MENOR QUE INTENSIDADE

GOTO BCF GOTO LIGA_LAMPADA BSF GOTO

LIGA_LAMPADA LAMPADA SAI_INT LAMPADA SAI_INT ;LIGA LAMPADA ;SAI DA INTERRUPO ;DESLIGA LAMPADA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* FIM DA INTERRUPO * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * SAI_INT SWAPF MOVWF SWAPF SWAPF RETFIE STATUS_TEMP,W STATUS W_TEMP,F W_TEMP,W ;RECUPERA W ;RETORNA DA INTERRUPO ;RECUPERA STATUS

142

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* ROTINA DE CONVERSO BINRIO -> 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 CONDIES DE LIGAO DO DISPLAY AO PORTB. CONVERTE MOVF ANDLW ADDWF ; RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW INTENSIDADE,W B'00001111' PCL,F B'GFABCDE.' ; POSIO CORRETA DOS SEGUIMENTOS B'01111110' ; 00 - RETORNA SMBOLO CORRETO 0 B'00011000' ; 01 - RETORNA SMBOLO CORRETO 1 B'10110110' ; 02 - RETORNA SMBOLO CORRETO 2 B'10111100' ; 03 - RETORNA SMBOLO CORRETO 3 B'11011000' ; 04 - RETORNA SMBOLO CORRETO 4 B'11101100' ; 05 - RETORNA SMBOLO CORRETO 5 B'11101110' ; 06 - RETORNA SMBOLO CORRETO 6 B'00111000' ; 07 - RETORNA SMBOLO CORRETO 7 B'11111110' ; 08 - RETORNA SMBOLO CORRETO 8 B'11111100' ; 09 - RETORNA SMBOLO CORRETO 9 B'11111010' ; 10 - RETORNA SMBOLO CORRETO A B'11001110' ; 11 - RETORNA SMBOLO CORRETO b B'01100110' ; 12 - RETORNA SMBOLO CORRETO C B'10011110' ; 13 - RETORNA SMBOLO CORRETO d B'11100110' ; 14 - RETORNA SMBOLO CORRETO E B'11100010' ; 15 - RETORNA SMBOLO CORRETO F ;COLOCA INTENSIDADE EM W ;MASCARA VALOR DE INTENSIDADE ;CONSIDERAR SOMENTE AT 15

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* INICIO BANK0 MOVLW MOVWF B'00000111' CMCON ;DEFINE O MODO DE OPERAO DO ;COMPARADOR ANALGICO ;ALTERA PARA O BANCO 0 INICIO DO PROGRAMA * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

143

BANK1 MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF B'00000110' TRISA B'00000000' TRISB B'10000001' OPTION_REG

;ALTERA PARA O BANCO 1 ;DEFINE RA1 E 2 COMO ENTRADA E DEMAIS ;COMO SADAS ;DEFINE TODO O PORTB COMO SADA ;PRESCALER 1:4 NO TMR0 ;PULL-UPS DESABILITADOS ;AS DEMAIS CONFG. SO IRRELEVANTES

MOVLW MOVWF BANK0

B'10100000' INTCON ;CHAVE GERAL E TMR0 ATIVADAS ;RETORNA PARA O BANCO 0

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* INICIALIZAO DAS VARIVEIS CLRF CLRF CLRF MOVLW MOVWF MOVLW MOVWF GOTO PORTA PORTB FLAGS MIN INTENSIDADE .256-.250 TMR0 ATUALIZA ;INICIA INTENSIDADE = MIN ;SETA TIMER P250MS ;REINICIA TMR0 ;ATUALIZA O DISPLAY INICIALMENTE * ;LIMPA O PORTA ;LIMPA O PORTB ;LIMPA TODOS OS FLAGS ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* MAIN CLRF CLRF MOVLW MOVWF MOVWF FILTRO11 FILTRO21 T_FILTRO FILTRO12 FILTRO22 ;INICIALIZA FILTRO1 = T_FILTRO ;INICIALIZA FILTRO2 = T_FILTRO ROTINA PRINCIPAL * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

144

CHECA_BT1 BTFSC GOTO DECFSZ GOTO DECFSZ GOTO BTFSS GOTO GOTO BT1_LIB BCF CHECA_BT2 BTFSC GOTO DECFSZ GOTO DECFSZ GOTO BTFSS GOTO GOTO BT2_LIB BCF LIBERADO GOTO MAIN ;RETORNA AO LOOPING ST_BT2 ;MARCA BOTO 2 COMO BOTAO2 BT2_LIB FILTRO21,F CHECA_BT2 FILTRO22,F CHECA_BT2 ST_BT2 INC MAIN ;O BOTO 2 EST PRESSIONADO? ;NO, ENTO TRATA COMO LIBERADO ;SIM ;DECREMENTA O FILTRO DO BOTO ;TERMINOU? ;NO, CONTINUA ESPERANDO ;SIM ;DECREMENTA O FILTRO DO BOTO ;TERMINOU? ;NO, CONTINUA ESPERANDO ;SIM ;BOTO J ESTAVA PRESSIONADO? ;NO, EXECUTA AO DO BOTO ;SIM, VOLTA AO LOOPING ST_BT1 ;MARCA BOTO 1 COMO LIBERADO BOTAO1 BT1_LIB FILTRO11,F CHECA_BT1 FILTRO12,F CHECA_BT1 ST_BT1 DEC CHECA_BT2 ;O BOTO 1 EST PRESSIONADO? ;NO, ENTO TRATA COMO LIBERADO ;SIM ;DECREMENTA O FILTRO DO BOTO ;TERMINOU? ;NO, CONTINUA ESPERANDO ;SIM ;DECREMENTA O FILTRO DO BOTO ;TERMINOU? ;NO, CONTINUA ESPERANDO ;SIM ;BOTO J ESTAVA PRESSIONADO? ;NO, EXECUTA AO DO BOTO ;SIM, CHECA BOTO 2

145

DEC BSF MOVF XORLW ST_BT1 INTENSIDADE,W MIN

;AO DE DECREMENTAR ;MARCA BOTO 1 COMO J PRESSIONADO ;COLOCA INTENSIDADE EM W ;APLICA XOR ENTRE INTENSIDADE E MIN ;PARA TESTAR IGUALDADE. SE FOREM ;IGUAIS, O RESULTADO SER ZERO BTFSC GOTO DECF GOTO STATUS,Z MAIN INTENSIDADE,F ATUALIZA ST_BT2 INTENSIDADE,W MAX ;RESULTOU EM ZERO? ;SIM, RETORNA SEM AFETAR CONT. ;NO ;DECREMENTA O INTENSIDADE ;ATUALIZA O DISPLAY ;AO DE INCREMENTAR BSF MOVF XORLW ;MARCA BOTO 2 COMO J PRESSIONADO ;COLOCA INTENSIDADE EM W ;APLICA XOR ENTRE INTENSIDADE E MAX ;PARA TESTAR IGUALDADE. SE FOREM ;IGUAIS, O RESULTADO SER ZERO BTFSC GOTO INCF GOTO STATUS,Z MAIN INTENSIDADE,F ATUALIZA ;RESULTOU EM ZERO? ;SIM, RETORNA SEM AFETAR CONT. ;NO ;INCREMENTA O INTENSIDADE ;ATUALIZA O DISPLAY

INC

ATUALIZA CALL MOVWF CONVERTE PORTB ;CONVERTE INTENSIDADE NO NMERO DO ;DISPLAY ;ATUALIZA O PORTB PARA ;VISUALIZARMOS O VALOR DE INTENSIDADE ;NO DISPLAY GOTO MAIN ;NO, VOLTA AO LOOP PRINCIPAL

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;* FIM DO PROGRAMA * ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * END ;OBRIGATRIO

146

Esquema eltrico
15V +V J1
6 7 8 9 1 2 3 4 5

R11 R12 Q2 J5 Q5 R28 L1 D12 D14 D11 D17 5V1


abcdefg. Gnd

Q6
Gnd

Q3
Gnd

Q4
Gnd

DISP4
abcdefg.

DISP3
abcdefg.

DISP2
abcdefg.

DISP1

Q1
+

D16 8V2
+

R10 D18 LED11 D21

D15 LED10

Q7

D13 C2 100uF LED13

C3

R16 LED12 R27 R30 R29 R18 R19 U7


RA0 RA1 RA2 RA3 RA4 RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 VDD VCC

R15

22uF

D19 D20 S4 S5 S3

LED14 2K2 S2 S1

R26 J3 LED8 LED7 R6 R5 R4 R3 R2 R1 LED6 LED5 LED4 LED3 LED2 16F628


RA2 RA1 RA3 RA0 RA4 OSC1 MCLR OSC2 VSS VDD RB0 RB7 RB1 RB6 RB2 RB5 RB3 RB4

R13 R8 R7 R14

R31

R20 R21 R17 R22 R23

R24

R25

XTAL

RA5 RA6 RA7

LigDesl

15V +V U6
+

Con. VE LigDesl VE

D9 C1

IN

OUT COM

LED1 R9 5V +V J4 J2

D10

LED9

Lista bsica de materiais necessrios montagem do Kit de microcontrolador PIC Modelo WM002 1 Microcontrolador PIC16F628 1 Conector DB9 fmea 90 para circuito impresso (necessrio) 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) Mdia 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 tenso LM 7805 (5V 1A) 1 Cabo de comunicao serial 1 Ressonador cermico de 4MHz 1 Capacitor de 1000 F 25V, eletroltico radial. C1 1 Capacitor de 100 F 25V, eletroltico radial. C2 WM003 1 Capacitor de 22 F 25V, eletroltico radial. C1 WM003 1 Ponte retificadora de 0,5 A 30 V redonda. 1 Chave 1 plo 2 posies para circuito impresso (ver amostra) 14 Leds 3 mm (5 verde, 2 amarelo, 2 verde e 5- outra cor) 2 Conectores fmea 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 fmea de 2,54 mm 1 Conector para ligar a alimentao 1 Fonte de 9,0 VCC 0,3A ou somente o trafo com cabo de ligao Barra de pinos com espaamento de 2,54 mm (30 pinos) 1 Soquete tipo rosca para lmpada de 12vcc 1 Lmpada de 12V com rosca

Você também pode gostar